@edvak99/voice-receptionist-widget 1.1.13 → 1.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2257) hide show
  1. package/README.md +15 -4
  2. package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-DDzSBb6x.mjs +485 -0
  3. package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-DDzSBb6x.mjs.map +1 -0
  4. package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-DPE4-h5L.mjs +346 -0
  5. package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-DPE4-h5L.mjs.map +1 -0
  6. package/fesm2022/{edvak99-voice-receptionist-widget-api-log.util-C0TOKF1q.mjs → edvak99-voice-receptionist-widget-api-log.util-CBVDx4jk.mjs} +2 -2
  7. package/fesm2022/edvak99-voice-receptionist-widget-api-log.util-CBVDx4jk.mjs.map +1 -0
  8. package/fesm2022/edvak99-voice-receptionist-widget-api-logs-page.component-C3QOPro9.mjs +225 -0
  9. package/fesm2022/edvak99-voice-receptionist-widget-api-logs-page.component-C3QOPro9.mjs.map +1 -0
  10. package/fesm2022/edvak99-voice-receptionist-widget-api-logs-table.component-Bl7gMi0P.mjs +109 -0
  11. package/fesm2022/edvak99-voice-receptionist-widget-api-logs-table.component-Bl7gMi0P.mjs.map +1 -0
  12. package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-dBl3Kj6s.mjs +67 -0
  13. package/fesm2022/edvak99-voice-receptionist-widget-audit-page.component-dBl3Kj6s.mjs.map +1 -0
  14. package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-estyUMH9.mjs +509 -0
  15. package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-estyUMH9.mjs.map +1 -0
  16. package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-mBig2itE.mjs +242 -0
  17. package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-mBig2itE.mjs.map +1 -0
  18. package/fesm2022/{edvak99-voice-receptionist-widget-call-recording-player.component-GVg1g-Vq.mjs → edvak99-voice-receptionist-widget-call-recording-player.component-BqgXwDNi.mjs} +4 -4
  19. package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-BqgXwDNi.mjs.map +1 -0
  20. package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-WG30w6Jl.mjs → edvak99-voice-receptionist-widget-call-review.service-ft4auA6j.mjs} +2 -2
  21. package/fesm2022/{edvak99-voice-receptionist-widget-call-review.service-WG30w6Jl.mjs.map → edvak99-voice-receptionist-widget-call-review.service-ft4auA6j.mjs.map} +1 -1
  22. package/fesm2022/{edvak99-voice-receptionist-widget-call-review.util-Deh3jPgo.mjs → edvak99-voice-receptionist-widget-call-review.util-rWIPxDtQ.mjs} +2 -2
  23. package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-rWIPxDtQ.mjs.map +1 -0
  24. package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-_9K7CA1i.mjs +317 -0
  25. package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-_9K7CA1i.mjs.map +1 -0
  26. package/fesm2022/{edvak99-voice-receptionist-widget-eds-search-field.component-OGRDvYBp.mjs → edvak99-voice-receptionist-widget-eds-search-field.component-BDGCmkoP.mjs} +2 -2
  27. package/fesm2022/edvak99-voice-receptionist-widget-eds-search-field.component-BDGCmkoP.mjs.map +1 -0
  28. package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-D5VJ5SkB.mjs +6120 -0
  29. package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-D5VJ5SkB.mjs.map +1 -0
  30. package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-B4Co4hwp.mjs +432 -0
  31. package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-B4Co4hwp.mjs.map +1 -0
  32. package/fesm2022/{edvak99-voice-receptionist-widget-live-monitor-page.component-ihwm1LNn.mjs → edvak99-voice-receptionist-widget-live-monitor-page.component-B23xn4Y_.mjs} +12 -13
  33. package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-B23xn4Y_.mjs.map +1 -0
  34. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-Bdh4QfFe.mjs +127 -0
  35. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purpose.util-Bdh4QfFe.mjs.map +1 -0
  36. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-_lPkAdFS.mjs +263 -0
  37. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-_lPkAdFS.mjs.map +1 -0
  38. package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-L5HY3Dxd.mjs +198 -0
  39. package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-L5HY3Dxd.mjs.map +1 -0
  40. package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-DzSVVAM2.mjs +144 -0
  41. package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-DzSVVAM2.mjs.map +1 -0
  42. package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-BO6xu0wx.mjs +45 -0
  43. package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-BO6xu0wx.mjs.map +1 -0
  44. package/fesm2022/edvak99-voice-receptionist-widget.mjs +1 -1
  45. package/lib/components/agent-settings-drawer/agent-settings-drawer.component.d.ts +10 -0
  46. package/lib/components/call-tasks-panel/call-tasks-panel.component.d.ts +2 -1
  47. package/lib/components/outbound-dial-modal/outbound-dial-modal.component.d.ts +63 -0
  48. package/lib/layout/eds-module-nav.component.d.ts +18 -0
  49. package/lib/layout/eds-topbar.component.d.ts +21 -0
  50. package/lib/pages/activities-page/activities-page.component.d.ts +5 -0
  51. package/lib/pages/analytics-page/analytics-page.component.d.ts +66 -34
  52. package/lib/pages/audit-page/audit-page.component.d.ts +21 -0
  53. package/lib/pages/call-history-page/call-history-page.component.d.ts +34 -12
  54. package/lib/pages/dashboard-page/dashboard-page.component.d.ts +81 -43
  55. package/lib/pages/live-calls-page/live-calls-page.component.d.ts +27 -6
  56. package/lib/pages/settings-page/settings-page.component.d.ts +36 -14
  57. package/lib/services/agent-settings-drawer.service.d.ts +9 -0
  58. package/lib/ui/ed-avatar.component.d.ts +18 -0
  59. package/lib/ui/ed-icon-button.component.d.ts +67 -0
  60. package/lib/ui/ed-icon.component.d.ts +101 -0
  61. package/lib/ui/eds-badge.component.d.ts +2 -1
  62. package/lib/ui/eds-button.component.d.ts +1 -1
  63. package/lib/utils/call-review.util.d.ts +2 -1
  64. package/package.json +8 -2
  65. package/public-api.d.ts +2 -1
  66. package/src/assets/CkBuilder/LICENSE.md +49 -0
  67. package/src/assets/CkBuilder/README.md +68 -0
  68. package/src/assets/CkBuilder/build/ckeditor.js +6 -0
  69. package/src/assets/CkBuilder/build/ckeditor.js.map +1 -0
  70. package/src/assets/CkBuilder/build/translations/af.js +1 -0
  71. package/src/assets/CkBuilder/build/translations/ar.js +1 -0
  72. package/src/assets/CkBuilder/build/translations/ast.js +1 -0
  73. package/src/assets/CkBuilder/build/translations/az.js +1 -0
  74. package/src/assets/CkBuilder/build/translations/bg.js +1 -0
  75. package/src/assets/CkBuilder/build/translations/bn.js +1 -0
  76. package/src/assets/CkBuilder/build/translations/bs.js +1 -0
  77. package/src/assets/CkBuilder/build/translations/ca.js +1 -0
  78. package/src/assets/CkBuilder/build/translations/cs.js +1 -0
  79. package/src/assets/CkBuilder/build/translations/da.js +1 -0
  80. package/src/assets/CkBuilder/build/translations/de-ch.js +1 -0
  81. package/src/assets/CkBuilder/build/translations/de.js +1 -0
  82. package/src/assets/CkBuilder/build/translations/el.js +1 -0
  83. package/src/assets/CkBuilder/build/translations/en-au.js +1 -0
  84. package/src/assets/CkBuilder/build/translations/en.js +1 -0
  85. package/src/assets/CkBuilder/build/translations/eo.js +1 -0
  86. package/src/assets/CkBuilder/build/translations/es-co.js +1 -0
  87. package/src/assets/CkBuilder/build/translations/es.js +1 -0
  88. package/src/assets/CkBuilder/build/translations/et.js +1 -0
  89. package/src/assets/CkBuilder/build/translations/eu.js +1 -0
  90. package/src/assets/CkBuilder/build/translations/fa.js +1 -0
  91. package/src/assets/CkBuilder/build/translations/fi.js +1 -0
  92. package/src/assets/CkBuilder/build/translations/fr.js +1 -0
  93. package/src/assets/CkBuilder/build/translations/gl.js +1 -0
  94. package/src/assets/CkBuilder/build/translations/gu.js +1 -0
  95. package/src/assets/CkBuilder/build/translations/he.js +1 -0
  96. package/src/assets/CkBuilder/build/translations/hi.js +1 -0
  97. package/src/assets/CkBuilder/build/translations/hr.js +1 -0
  98. package/src/assets/CkBuilder/build/translations/hu.js +1 -0
  99. package/src/assets/CkBuilder/build/translations/id.js +1 -0
  100. package/src/assets/CkBuilder/build/translations/it.js +1 -0
  101. package/src/assets/CkBuilder/build/translations/ja.js +1 -0
  102. package/src/assets/CkBuilder/build/translations/jv.js +1 -0
  103. package/src/assets/CkBuilder/build/translations/kk.js +1 -0
  104. package/src/assets/CkBuilder/build/translations/km.js +1 -0
  105. package/src/assets/CkBuilder/build/translations/kn.js +1 -0
  106. package/src/assets/CkBuilder/build/translations/ko.js +1 -0
  107. package/src/assets/CkBuilder/build/translations/ku.js +1 -0
  108. package/src/assets/CkBuilder/build/translations/lt.js +1 -0
  109. package/src/assets/CkBuilder/build/translations/lv.js +1 -0
  110. package/src/assets/CkBuilder/build/translations/ms.js +1 -0
  111. package/src/assets/CkBuilder/build/translations/nb.js +1 -0
  112. package/src/assets/CkBuilder/build/translations/ne.js +1 -0
  113. package/src/assets/CkBuilder/build/translations/nl.js +1 -0
  114. package/src/assets/CkBuilder/build/translations/no.js +1 -0
  115. package/src/assets/CkBuilder/build/translations/oc.js +1 -0
  116. package/src/assets/CkBuilder/build/translations/pl.js +1 -0
  117. package/src/assets/CkBuilder/build/translations/pt-br.js +1 -0
  118. package/src/assets/CkBuilder/build/translations/pt.js +1 -0
  119. package/src/assets/CkBuilder/build/translations/ro.js +1 -0
  120. package/src/assets/CkBuilder/build/translations/ru.js +1 -0
  121. package/src/assets/CkBuilder/build/translations/si.js +1 -0
  122. package/src/assets/CkBuilder/build/translations/sk.js +1 -0
  123. package/src/assets/CkBuilder/build/translations/sl.js +1 -0
  124. package/src/assets/CkBuilder/build/translations/sq.js +1 -0
  125. package/src/assets/CkBuilder/build/translations/sr-latn.js +1 -0
  126. package/src/assets/CkBuilder/build/translations/sr.js +1 -0
  127. package/src/assets/CkBuilder/build/translations/sv.js +1 -0
  128. package/src/assets/CkBuilder/build/translations/th.js +1 -0
  129. package/src/assets/CkBuilder/build/translations/tk.js +1 -0
  130. package/src/assets/CkBuilder/build/translations/tr.js +1 -0
  131. package/src/assets/CkBuilder/build/translations/tt.js +1 -0
  132. package/src/assets/CkBuilder/build/translations/ug.js +1 -0
  133. package/src/assets/CkBuilder/build/translations/uk.js +1 -0
  134. package/src/assets/CkBuilder/build/translations/ur.js +1 -0
  135. package/src/assets/CkBuilder/build/translations/uz.js +1 -0
  136. package/src/assets/CkBuilder/build/translations/vi.js +1 -0
  137. package/src/assets/CkBuilder/build/translations/zh-cn.js +1 -0
  138. package/src/assets/CkBuilder/build/translations/zh.js +1 -0
  139. package/src/assets/CkBuilder/webpack.config.js +97 -0
  140. package/src/assets/Mike/index.js +3 -0
  141. package/src/assets/annyang.js +725 -0
  142. package/src/assets/blue_icon_f.png +0 -0
  143. package/src/assets/client.js +186 -0
  144. package/src/assets/css/Ed_style.scss +1034 -0
  145. package/src/assets/css/_alerts.scss +66 -0
  146. package/src/assets/css/_animation.scss +88 -0
  147. package/src/assets/css/_api-log-chips.scss +30 -0
  148. package/src/assets/css/_avatar.scss +317 -0
  149. package/src/assets/css/_badge.scss +126 -0
  150. package/src/assets/css/_buttons.scss +110 -0
  151. package/src/assets/css/_checkbox_radio.scss +174 -0
  152. package/src/assets/css/_colors.scss +314 -0
  153. package/src/assets/css/_customfile_upload.scss +18 -0
  154. package/src/assets/css/_date_picker.scss +119 -0
  155. package/src/assets/css/_focus.scss +56 -0
  156. package/src/assets/css/_fontsize.scss +0 -0
  157. package/src/assets/css/_headings.scss +87 -0
  158. package/src/assets/css/_input.scss +153 -0
  159. package/src/assets/css/_list.scss +83 -0
  160. package/src/assets/css/_main-layout.scss +123 -0
  161. package/src/assets/css/_material_symbols.scss +31 -0
  162. package/src/assets/css/_ng-select.scss +124 -0
  163. package/src/assets/css/_resize-handler.directive.scss +46 -0
  164. package/src/assets/css/_root.scss +258 -0
  165. package/src/assets/css/_select.scss +72 -0
  166. package/src/assets/css/_smart-scroll.scss +93 -0
  167. package/src/assets/css/_smooth-scrollbar.scss +196 -0
  168. package/src/assets/css/_tables.css +1 -0
  169. package/src/assets/css/_tables.scss +815 -0
  170. package/src/assets/css/_tabs.css +1 -0
  171. package/src/assets/css/_tabs.scss +22 -0
  172. package/src/assets/css/_tag.scss +18 -0
  173. package/src/assets/css/_zindex.scss +3 -0
  174. package/src/assets/css/animations.css +17 -0
  175. package/src/assets/css/custom-elements.css +1 -0
  176. package/src/assets/css/custom-elements.scss +742 -0
  177. package/src/assets/css/font-awesome.css +4586 -0
  178. package/src/assets/css/foxit/contextMenu.css +298 -0
  179. package/src/assets/css/foxit/datepicker.css +31931 -0
  180. package/src/assets/css/foxit/foxit.css +8500 -0
  181. package/src/assets/css/icons.scss +57 -0
  182. package/src/assets/css/jstree.style.min.css +1 -0
  183. package/src/assets/css/masonrt.scss +36 -0
  184. package/src/assets/css/patient-portal-disclaimer-global.scss +68 -0
  185. package/src/assets/css/printstyle.css +839 -0
  186. package/src/assets/css/shoelace-edit.css +1 -0
  187. package/src/assets/css/shoelace-edit.scss +513 -0
  188. package/src/assets/css/styles.css +0 -0
  189. package/src/assets/css/task-description-tiptap-global.scss +84 -0
  190. package/src/assets/css/themes/default.css +484 -0
  191. package/src/assets/css/themes/green-bright.css +484 -0
  192. package/src/assets/css/themes/light.css +472 -0
  193. package/src/assets/css/tour-guide.scss +238 -0
  194. package/src/assets/data/growth-chart/GROWTH_CHART_LMS.json +27202 -0
  195. package/src/assets/favicon.png +0 -0
  196. package/src/assets/fonts/call-hover.svg +6 -0
  197. package/src/assets/fonts/edvak-fonts.eot +0 -0
  198. package/src/assets/fonts/edvak-fonts.svg +50 -0
  199. package/src/assets/fonts/edvak-fonts.ttf +0 -0
  200. package/src/assets/fonts/edvak-fonts.woff +0 -0
  201. package/src/assets/fonts/flaticon_mycollection.css +23 -0
  202. package/src/assets/fonts/flaticon_mycollection.eot +0 -0
  203. package/src/assets/fonts/flaticon_mycollection.html +463 -0
  204. package/src/assets/fonts/flaticon_mycollection.scss +29 -0
  205. package/src/assets/fonts/flaticon_mycollection.svg +15 -0
  206. package/src/assets/fonts/flaticon_mycollection.ttf +0 -0
  207. package/src/assets/fonts/flaticon_mycollection.woff +0 -0
  208. package/src/assets/fonts/flaticon_mycollection.woff2 +0 -0
  209. package/src/assets/fonts/font_face.txt +234 -0
  210. package/src/assets/fonts/inter.css +567 -0
  211. package/src/assets/fonts/lato.css +72 -0
  212. package/src/assets/fonts/message-hover.svg +7 -0
  213. package/src/assets/fonts/notes-hover.svg +8 -0
  214. package/src/assets/fonts/poppins-v20-latin-100.eot +0 -0
  215. package/src/assets/fonts/poppins-v20-latin-100.svg +320 -0
  216. package/src/assets/fonts/poppins-v20-latin-100.ttf +0 -0
  217. package/src/assets/fonts/poppins-v20-latin-100.woff +0 -0
  218. package/src/assets/fonts/poppins-v20-latin-100.woff2 +0 -0
  219. package/src/assets/fonts/poppins-v20-latin-100italic.eot +0 -0
  220. package/src/assets/fonts/poppins-v20-latin-100italic.svg +341 -0
  221. package/src/assets/fonts/poppins-v20-latin-100italic.ttf +0 -0
  222. package/src/assets/fonts/poppins-v20-latin-100italic.woff +0 -0
  223. package/src/assets/fonts/poppins-v20-latin-100italic.woff2 +0 -0
  224. package/src/assets/fonts/poppins-v20-latin-200.eot +0 -0
  225. package/src/assets/fonts/poppins-v20-latin-200.svg +319 -0
  226. package/src/assets/fonts/poppins-v20-latin-200.ttf +0 -0
  227. package/src/assets/fonts/poppins-v20-latin-200.woff +0 -0
  228. package/src/assets/fonts/poppins-v20-latin-200.woff2 +0 -0
  229. package/src/assets/fonts/poppins-v20-latin-200italic.eot +0 -0
  230. package/src/assets/fonts/poppins-v20-latin-200italic.svg +336 -0
  231. package/src/assets/fonts/poppins-v20-latin-200italic.ttf +0 -0
  232. package/src/assets/fonts/poppins-v20-latin-200italic.woff +0 -0
  233. package/src/assets/fonts/poppins-v20-latin-200italic.woff2 +0 -0
  234. package/src/assets/fonts/poppins-v20-latin-300.eot +0 -0
  235. package/src/assets/fonts/poppins-v20-latin-300.svg +321 -0
  236. package/src/assets/fonts/poppins-v20-latin-300.ttf +0 -0
  237. package/src/assets/fonts/poppins-v20-latin-300.woff +0 -0
  238. package/src/assets/fonts/poppins-v20-latin-300.woff2 +0 -0
  239. package/src/assets/fonts/poppins-v20-latin-300italic.eot +0 -0
  240. package/src/assets/fonts/poppins-v20-latin-300italic.svg +336 -0
  241. package/src/assets/fonts/poppins-v20-latin-300italic.ttf +0 -0
  242. package/src/assets/fonts/poppins-v20-latin-300italic.woff +0 -0
  243. package/src/assets/fonts/poppins-v20-latin-300italic.woff2 +0 -0
  244. package/src/assets/fonts/poppins-v20-latin-500.eot +0 -0
  245. package/src/assets/fonts/poppins-v20-latin-500.svg +323 -0
  246. package/src/assets/fonts/poppins-v20-latin-500.ttf +0 -0
  247. package/src/assets/fonts/poppins-v20-latin-500.woff +0 -0
  248. package/src/assets/fonts/poppins-v20-latin-500.woff2 +0 -0
  249. package/src/assets/fonts/poppins-v20-latin-500italic.eot +0 -0
  250. package/src/assets/fonts/poppins-v20-latin-500italic.svg +338 -0
  251. package/src/assets/fonts/poppins-v20-latin-500italic.ttf +0 -0
  252. package/src/assets/fonts/poppins-v20-latin-500italic.woff +0 -0
  253. package/src/assets/fonts/poppins-v20-latin-500italic.woff2 +0 -0
  254. package/src/assets/fonts/poppins-v20-latin-600.eot +0 -0
  255. package/src/assets/fonts/poppins-v20-latin-600.svg +322 -0
  256. package/src/assets/fonts/poppins-v20-latin-600.ttf +0 -0
  257. package/src/assets/fonts/poppins-v20-latin-600.woff +0 -0
  258. package/src/assets/fonts/poppins-v20-latin-600.woff2 +0 -0
  259. package/src/assets/fonts/poppins-v20-latin-600italic.eot +0 -0
  260. package/src/assets/fonts/poppins-v20-latin-600italic.svg +338 -0
  261. package/src/assets/fonts/poppins-v20-latin-600italic.ttf +0 -0
  262. package/src/assets/fonts/poppins-v20-latin-600italic.woff +0 -0
  263. package/src/assets/fonts/poppins-v20-latin-600italic.woff2 +0 -0
  264. package/src/assets/fonts/poppins-v20-latin-700.eot +0 -0
  265. package/src/assets/fonts/poppins-v20-latin-700.svg +322 -0
  266. package/src/assets/fonts/poppins-v20-latin-700.ttf +0 -0
  267. package/src/assets/fonts/poppins-v20-latin-700.woff +0 -0
  268. package/src/assets/fonts/poppins-v20-latin-700.woff2 +0 -0
  269. package/src/assets/fonts/poppins-v20-latin-700italic.eot +0 -0
  270. package/src/assets/fonts/poppins-v20-latin-700italic.svg +336 -0
  271. package/src/assets/fonts/poppins-v20-latin-700italic.ttf +0 -0
  272. package/src/assets/fonts/poppins-v20-latin-700italic.woff +0 -0
  273. package/src/assets/fonts/poppins-v20-latin-700italic.woff2 +0 -0
  274. package/src/assets/fonts/poppins-v20-latin-800.eot +0 -0
  275. package/src/assets/fonts/poppins-v20-latin-800.svg +320 -0
  276. package/src/assets/fonts/poppins-v20-latin-800.ttf +0 -0
  277. package/src/assets/fonts/poppins-v20-latin-800.woff +0 -0
  278. package/src/assets/fonts/poppins-v20-latin-800.woff2 +0 -0
  279. package/src/assets/fonts/poppins-v20-latin-800italic.eot +0 -0
  280. package/src/assets/fonts/poppins-v20-latin-800italic.svg +335 -0
  281. package/src/assets/fonts/poppins-v20-latin-800italic.ttf +0 -0
  282. package/src/assets/fonts/poppins-v20-latin-800italic.woff +0 -0
  283. package/src/assets/fonts/poppins-v20-latin-800italic.woff2 +0 -0
  284. package/src/assets/fonts/poppins-v20-latin-900.eot +0 -0
  285. package/src/assets/fonts/poppins-v20-latin-900.svg +321 -0
  286. package/src/assets/fonts/poppins-v20-latin-900.ttf +0 -0
  287. package/src/assets/fonts/poppins-v20-latin-900.woff +0 -0
  288. package/src/assets/fonts/poppins-v20-latin-900.woff2 +0 -0
  289. package/src/assets/fonts/poppins-v20-latin-900italic.eot +0 -0
  290. package/src/assets/fonts/poppins-v20-latin-900italic.svg +335 -0
  291. package/src/assets/fonts/poppins-v20-latin-900italic.ttf +0 -0
  292. package/src/assets/fonts/poppins-v20-latin-900italic.woff +0 -0
  293. package/src/assets/fonts/poppins-v20-latin-900italic.woff2 +0 -0
  294. package/src/assets/fonts/poppins-v20-latin-italic.eot +0 -0
  295. package/src/assets/fonts/poppins-v20-latin-italic.svg +336 -0
  296. package/src/assets/fonts/poppins-v20-latin-italic.ttf +0 -0
  297. package/src/assets/fonts/poppins-v20-latin-italic.woff +0 -0
  298. package/src/assets/fonts/poppins-v20-latin-italic.woff2 +0 -0
  299. package/src/assets/fonts/poppins-v20-latin-regular.eot +0 -0
  300. package/src/assets/fonts/poppins-v20-latin-regular.svg +323 -0
  301. package/src/assets/fonts/poppins-v20-latin-regular.ttf +0 -0
  302. package/src/assets/fonts/poppins-v20-latin-regular.woff +0 -0
  303. package/src/assets/fonts/poppins-v20-latin-regular.woff2 +0 -0
  304. package/src/assets/fonts/schedule-hover.svg +13 -0
  305. package/src/assets/fonts/video-call-hover.svg +6 -0
  306. package/src/assets/home.css +152 -0
  307. package/src/assets/icons/AI.svg +15 -0
  308. package/src/assets/icons/AddressBook.svg +3 -0
  309. package/src/assets/icons/ArrowArcLeft.svg +3 -0
  310. package/src/assets/icons/ArrowCircleDownLeft.png +0 -0
  311. package/src/assets/icons/ArrowCircleDownLeft.svg +3 -0
  312. package/src/assets/icons/ArrowClockwise.svg +3 -0
  313. package/src/assets/icons/ArrowLeft.svg +3 -0
  314. package/src/assets/icons/ArrowUpRight.svg +3 -0
  315. package/src/assets/icons/ArrowsCounterClockwise.svg +3 -0
  316. package/src/assets/icons/ArrowsLeftRight.svg +3 -0
  317. package/src/assets/icons/Avatar.svg +4 -0
  318. package/src/assets/icons/Baby.svg +3 -0
  319. package/src/assets/icons/BookOpenText.svg +3 -0
  320. package/src/assets/icons/CalendarCheck.svg +3 -0
  321. package/src/assets/icons/CalendarDot.svg +3 -0
  322. package/src/assets/icons/CalendarDots.svg +3 -0
  323. package/src/assets/icons/CalendarX.svg +3 -0
  324. package/src/assets/icons/Camera.svg +3 -0
  325. package/src/assets/icons/CameraDisable.svg +3 -0
  326. package/src/assets/icons/ChatText.svg +3 -0
  327. package/src/assets/icons/ClockCountdown.svg +3 -0
  328. package/src/assets/icons/ClockCounterClockwise.svg +3 -0
  329. package/src/assets/icons/ClockUser.svg +3 -0
  330. package/src/assets/icons/CloudCheck.svg +3 -0
  331. package/src/assets/icons/CrownSimple.svg +3 -0
  332. package/src/assets/icons/CurrencyDollar.svg +3 -0
  333. package/src/assets/icons/Desktop.svg +3 -0
  334. package/src/assets/icons/Encounter.svg +4 -0
  335. package/src/assets/icons/EnvelopeSimple.svg +3 -0
  336. package/src/assets/icons/FileDoc.svg +3 -0
  337. package/src/assets/icons/FilePdf.svg +3 -0
  338. package/src/assets/icons/FileText.png +0 -0
  339. package/src/assets/icons/FileText.svg +3 -0
  340. package/src/assets/icons/FileTextNew.svg +3 -0
  341. package/src/assets/icons/FileXml.svg +4 -0
  342. package/src/assets/icons/FirstAid.svg +3 -0
  343. package/src/assets/icons/Gif.svg +3 -0
  344. package/src/assets/icons/Globe.svg +3 -0
  345. package/src/assets/icons/HandPointing.svg +3 -0
  346. package/src/assets/icons/Heart.svg +3 -0
  347. package/src/assets/icons/Image-ic.svg +3 -0
  348. package/src/assets/icons/Labs_Imaging.svg +8 -0
  349. package/src/assets/icons/Link.svg +3 -0
  350. package/src/assets/icons/LockSimple.svg +3 -0
  351. package/src/assets/icons/MapPin.svg +3 -0
  352. package/src/assets/icons/MapPin_new.svg +3 -0
  353. package/src/assets/icons/Microscope.svg +3 -0
  354. package/src/assets/icons/MinusCircle.svg +3 -0
  355. package/src/assets/icons/NoFile.svg +4 -0
  356. package/src/assets/icons/NotePencil.png +0 -0
  357. package/src/assets/icons/NotePencil.svg +3 -0
  358. package/src/assets/icons/Notepad.svg +3 -0
  359. package/src/assets/icons/OfficeChair.svg +3 -0
  360. package/src/assets/icons/Other Files.svg +3 -0
  361. package/src/assets/icons/PaperPlaneTilt.svg +3 -0
  362. package/src/assets/icons/Paperclip.svg +3 -0
  363. package/src/assets/icons/Password.svg +3 -0
  364. package/src/assets/icons/Phone.svg +3 -0
  365. package/src/assets/icons/Pulse.svg +3 -0
  366. package/src/assets/icons/Refund_Icon.svg +5 -0
  367. package/src/assets/icons/Refund_new.svg +5 -0
  368. package/src/assets/icons/Robot.svg +3 -0
  369. package/src/assets/icons/ShieldCheck.svg +3 -0
  370. package/src/assets/icons/Suitcase.svg +3 -0
  371. package/src/assets/icons/Table-ic.svg +3 -0
  372. package/src/assets/icons/TagSimple.svg +3 -0
  373. package/src/assets/icons/TextAlignLeft.svg +3 -0
  374. package/src/assets/icons/Translate.svg +3 -0
  375. package/src/assets/icons/Trash.svg +3 -0
  376. package/src/assets/icons/User.svg +3 -0
  377. package/src/assets/icons/UserCheck.svg +3 -0
  378. package/src/assets/icons/User_new.svg +10 -0
  379. package/src/assets/icons/Users.svg +3 -0
  380. package/src/assets/icons/WarningCircle.svg +3 -0
  381. package/src/assets/icons/accessibility.svg +8 -0
  382. package/src/assets/icons/account_tree.svg +8 -0
  383. package/src/assets/icons/add.svg +8 -0
  384. package/src/assets/icons/add_box.svg +1 -0
  385. package/src/assets/icons/add_call-fill.svg +1 -0
  386. package/src/assets/icons/add_call.svg +1 -0
  387. package/src/assets/icons/add_circle.svg +8 -0
  388. package/src/assets/icons/add_link.svg +8 -0
  389. package/src/assets/icons/add_reaction.svg +8 -0
  390. package/src/assets/icons/add_text.svg +3 -0
  391. package/src/assets/icons/admin_panel_settings.svg +8 -0
  392. package/src/assets/icons/ai_1.svg +4 -0
  393. package/src/assets/icons/ai_new.svg +8 -0
  394. package/src/assets/icons/alarm.svg +8 -0
  395. package/src/assets/icons/alternate_email.svg +8 -0
  396. package/src/assets/icons/ambulance.svg +15 -0
  397. package/src/assets/icons/ambulance_2.svg +17 -0
  398. package/src/assets/icons/android.svg +6 -0
  399. package/src/assets/icons/appointments.svg +3 -0
  400. package/src/assets/icons/archive.svg +8 -0
  401. package/src/assets/icons/archive_new.svg +3 -0
  402. package/src/assets/icons/arrow-bar-right.svg +3 -0
  403. package/src/assets/icons/arrow-repeat.svg +4 -0
  404. package/src/assets/icons/arrow_back.svg +8 -0
  405. package/src/assets/icons/arrow_downward_alt.svg +8 -0
  406. package/src/assets/icons/arrow_drop_down.svg +8 -0
  407. package/src/assets/icons/arrow_fat_up.svg +3 -0
  408. package/src/assets/icons/arrow_left.svg +1 -0
  409. package/src/assets/icons/arrow_left_alt.svg +8 -0
  410. package/src/assets/icons/arrow_right.svg +3 -0
  411. package/src/assets/icons/arrow_right_alt.svg +8 -0
  412. package/src/assets/icons/arrow_top_left.svg +8 -0
  413. package/src/assets/icons/arrow_upward.svg +8 -0
  414. package/src/assets/icons/arrow_upward_alt.svg +8 -0
  415. package/src/assets/icons/arrows_merge.svg +3 -0
  416. package/src/assets/icons/article-fill.svg +1 -0
  417. package/src/assets/icons/article-off.svg +9 -0
  418. package/src/assets/icons/article.svg +8 -0
  419. package/src/assets/icons/at.svg +3 -0
  420. package/src/assets/icons/atr.svg +8 -0
  421. package/src/assets/icons/attach_file.svg +8 -0
  422. package/src/assets/icons/attach_file_45.svg +8 -0
  423. package/src/assets/icons/attach_money.svg +8 -0
  424. package/src/assets/icons/attachment.svg +8 -0
  425. package/src/assets/icons/auto_awesome_mosaic.svg +8 -0
  426. package/src/assets/icons/auto_pay.xml +11 -0
  427. package/src/assets/icons/auto_pay_new.svg +8 -0
  428. package/src/assets/icons/backspace_fill.svg +8 -0
  429. package/src/assets/icons/bandaids.svg +3 -0
  430. package/src/assets/icons/bell_simple_ringing.svg +3 -0
  431. package/src/assets/icons/bell_simple_z.svg +3 -0
  432. package/src/assets/icons/block.svg +8 -0
  433. package/src/assets/icons/bolt.svg +8 -0
  434. package/src/assets/icons/bolt_ai.svg +3 -0
  435. package/src/assets/icons/bolt_new.svg +11 -0
  436. package/src/assets/icons/book_open.svg +3 -0
  437. package/src/assets/icons/border_color.svg +8 -0
  438. package/src/assets/icons/box_edit.svg +8 -0
  439. package/src/assets/icons/brightness_1.svg +8 -0
  440. package/src/assets/icons/bubble.svg +8 -0
  441. package/src/assets/icons/building_apartment.svg +3 -0
  442. package/src/assets/icons/cached.svg +8 -0
  443. package/src/assets/icons/calculate.svg +8 -0
  444. package/src/assets/icons/calendar-star.svg +3 -0
  445. package/src/assets/icons/calendar-x.svg +4 -0
  446. package/src/assets/icons/calendar_clock.svg +8 -0
  447. package/src/assets/icons/calendar_dot.svg +3 -0
  448. package/src/assets/icons/calendar_down.svg +9 -0
  449. package/src/assets/icons/calendar_month.svg +8 -0
  450. package/src/assets/icons/calendar_plus.svg +3 -0
  451. package/src/assets/icons/calendar_today.svg +8 -0
  452. package/src/assets/icons/calendar_up.svg +9 -0
  453. package/src/assets/icons/call-fill.svg +8 -0
  454. package/src/assets/icons/call.svg +8 -0
  455. package/src/assets/icons/call_end-fill.svg +1 -0
  456. package/src/assets/icons/call_end.svg +1 -0
  457. package/src/assets/icons/call_fill.svg +8 -0
  458. package/src/assets/icons/call_log-fill.svg +1 -0
  459. package/src/assets/icons/call_log.svg +1 -0
  460. package/src/assets/icons/call_made.svg +8 -0
  461. package/src/assets/icons/call_merge.svg +1 -0
  462. package/src/assets/icons/call_missed.svg +1 -0
  463. package/src/assets/icons/call_missed_outgoing.svg +1 -0
  464. package/src/assets/icons/call_quality-fill.svg +1 -0
  465. package/src/assets/icons/call_quality.svg +1 -0
  466. package/src/assets/icons/call_received.svg +1 -0
  467. package/src/assets/icons/call_split.svg +1 -0
  468. package/src/assets/icons/call_to_action-fill.svg +1 -0
  469. package/src/assets/icons/call_to_action.svg +1 -0
  470. package/src/assets/icons/campaign.svg +8 -0
  471. package/src/assets/icons/cancel.svg +8 -0
  472. package/src/assets/icons/card-list.svg +4 -0
  473. package/src/assets/icons/caret_down.svg +3 -0
  474. package/src/assets/icons/caret_left.svg +3 -0
  475. package/src/assets/icons/caret_right.svg +3 -0
  476. package/src/assets/icons/caret_up.svg +3 -0
  477. package/src/assets/icons/cash.svg +16 -0
  478. package/src/assets/icons/changelog.svg +3 -0
  479. package/src/assets/icons/chart_data.svg +8 -0
  480. package/src/assets/icons/chartline.svg +3 -0
  481. package/src/assets/icons/chat-fill.svg +1 -0
  482. package/src/assets/icons/chat.svg +8 -0
  483. package/src/assets/icons/chat_bubble.svg +8 -0
  484. package/src/assets/icons/chat_new.svg +3 -0
  485. package/src/assets/icons/chat_text.svg +3 -0
  486. package/src/assets/icons/check-circle-fill.svg +3 -0
  487. package/src/assets/icons/check-tooltip-success.svg +8 -0
  488. package/src/assets/icons/check.svg +15 -0
  489. package/src/assets/icons/check2-all.svg +4 -0
  490. package/src/assets/icons/check_circle.svg +8 -0
  491. package/src/assets/icons/check_circle_fill.svg +8 -0
  492. package/src/assets/icons/check_square.svg +3 -0
  493. package/src/assets/icons/chevron_left.svg +15 -0
  494. package/src/assets/icons/chevron_right.svg +8 -0
  495. package/src/assets/icons/chronic-fill.svg +1 -0
  496. package/src/assets/icons/chronic.svg +1 -0
  497. package/src/assets/icons/circle-fill.svg +3 -0
  498. package/src/assets/icons/circle_notifications-fill.svg +1 -0
  499. package/src/assets/icons/circle_notifications.svg +1 -0
  500. package/src/assets/icons/clear-all.svg +1 -0
  501. package/src/assets/icons/clinic.svg +3 -0
  502. package/src/assets/icons/clinic_settings.svg +3 -0
  503. package/src/assets/icons/clinical_notes.svg +8 -0
  504. package/src/assets/icons/clipboard-check.svg +5 -0
  505. package/src/assets/icons/clipboard_text.svg +3 -0
  506. package/src/assets/icons/clock-history.svg +5 -0
  507. package/src/assets/icons/clock.svg +3 -0
  508. package/src/assets/icons/clock_countdown.svg +3 -0
  509. package/src/assets/icons/clock_loader_40.svg +8 -0
  510. package/src/assets/icons/close.svg +1 -0
  511. package/src/assets/icons/close_circle_fill.svg +4 -0
  512. package/src/assets/icons/collapse_all.svg +1 -0
  513. package/src/assets/icons/collapse_content.svg +8 -0
  514. package/src/assets/icons/collections_bookmark-fill.svg +1 -0
  515. package/src/assets/icons/collections_bookmark.svg +1 -0
  516. package/src/assets/icons/columns.svg +3 -0
  517. package/src/assets/icons/comment.svg +15 -0
  518. package/src/assets/icons/compare_arrows.svg +8 -0
  519. package/src/assets/icons/contact_page.svg +8 -0
  520. package/src/assets/icons/content_copy-fill.svg +1 -0
  521. package/src/assets/icons/content_copy.svg +8 -0
  522. package/src/assets/icons/copy.svg +3 -0
  523. package/src/assets/icons/copy_all.svg +8 -0
  524. package/src/assets/icons/copy_simple.svg +3 -0
  525. package/src/assets/icons/create_new_folder.svg +8 -0
  526. package/src/assets/icons/credit_card-fill.svg +1 -0
  527. package/src/assets/icons/credit_card.svg +8 -0
  528. package/src/assets/icons/credit_card_off-fill.svg +1 -0
  529. package/src/assets/icons/credit_card_off.svg +1 -0
  530. package/src/assets/icons/cube.svg +3 -0
  531. package/src/assets/icons/currency_circle_dollar.svg +3 -0
  532. package/src/assets/icons/cursor_click.svg +3 -0
  533. package/src/assets/icons/custom_dropdown.svg +8 -0
  534. package/src/assets/icons/dangerous.svg +8 -0
  535. package/src/assets/icons/darwinIcon.svg +4 -0
  536. package/src/assets/icons/dash-circle.svg +4 -0
  537. package/src/assets/icons/dashboard_customize.svg +8 -0
  538. package/src/assets/icons/data_object.svg +8 -0
  539. package/src/assets/icons/data_object_bold.svg +8 -0
  540. package/src/assets/icons/delete-fill.svg +1 -0
  541. package/src/assets/icons/delete.svg +8 -0
  542. package/src/assets/icons/demography.svg +8 -0
  543. package/src/assets/icons/derm-lesion.svg +4 -0
  544. package/src/assets/icons/derm-site.svg +3 -0
  545. package/src/assets/icons/description.svg +15 -0
  546. package/src/assets/icons/desktop_windows.svg +8 -0
  547. package/src/assets/icons/dialpad.svg +1 -0
  548. package/src/assets/icons/discover_tune.svg +1 -0
  549. package/src/assets/icons/do_not_disturb_off.svg +8 -0
  550. package/src/assets/icons/do_not_disturb_on.svg +8 -0
  551. package/src/assets/icons/document_scanner.svg +8 -0
  552. package/src/assets/icons/dollar_note.svg +8 -0
  553. package/src/assets/icons/domain.svg +8 -0
  554. package/src/assets/icons/done.svg +1 -0
  555. package/src/assets/icons/done_all.svg +8 -0
  556. package/src/assets/icons/dot.svg +3 -0
  557. package/src/assets/icons/dots_three.svg +3 -0
  558. package/src/assets/icons/double_arrow.svg +1 -0
  559. package/src/assets/icons/download.svg +8 -0
  560. package/src/assets/icons/draft.svg +8 -0
  561. package/src/assets/icons/drag_indicator.svg +1 -0
  562. package/src/assets/icons/draw.svg +3 -0
  563. package/src/assets/icons/drive_file_move.svg +1 -0
  564. package/src/assets/icons/eFax.svg +17 -0
  565. package/src/assets/icons/east.svg +8 -0
  566. package/src/assets/icons/ecg.svg +8 -0
  567. package/src/assets/icons/ecg_heart.svg +8 -0
  568. package/src/assets/icons/ed-doctor.svg +15 -0
  569. package/src/assets/icons/ed-event_history.svg +8 -0
  570. package/src/assets/icons/ed-form-disable.svg +9 -0
  571. package/src/assets/icons/ed-past_history.svg +9 -0
  572. package/src/assets/icons/ed-payment_history.svg +9 -0
  573. package/src/assets/icons/ed-receive.svg +9 -0
  574. package/src/assets/icons/ed-refund.svg +9 -0
  575. package/src/assets/icons/ed-regular-notes.svg +6 -0
  576. package/src/assets/icons/ed_transaction_download.svg +6 -0
  577. package/src/assets/icons/edit-fill.svg +1 -0
  578. package/src/assets/icons/edit.svg +15 -0
  579. package/src/assets/icons/edit_calendar.svg +8 -0
  580. package/src/assets/icons/edit_document.svg +8 -0
  581. package/src/assets/icons/edit_note.svg +1 -0
  582. package/src/assets/icons/edit_notifications-fill.svg +1 -0
  583. package/src/assets/icons/edit_notifications.svg +1 -0
  584. package/src/assets/icons/edit_square-fill.svg +1 -0
  585. package/src/assets/icons/edit_square.svg +1 -0
  586. package/src/assets/icons/edvak_icon.svg +12 -0
  587. package/src/assets/icons/email.svg +8 -0
  588. package/src/assets/icons/encounters_h.svg +3 -0
  589. package/src/assets/icons/endocrinology.svg +8 -0
  590. package/src/assets/icons/ent.svg +8 -0
  591. package/src/assets/icons/error.svg +8 -0
  592. package/src/assets/icons/erx.svg +8 -0
  593. package/src/assets/icons/event.svg +8 -0
  594. package/src/assets/icons/event_available-fill.svg +1 -0
  595. package/src/assets/icons/event_available.svg +1 -0
  596. package/src/assets/icons/event_busy.svg +8 -0
  597. package/src/assets/icons/event_upcoming.svg +1 -0
  598. package/src/assets/icons/expand_content.svg +8 -0
  599. package/src/assets/icons/expand_less.svg +8 -0
  600. package/src/assets/icons/expand_more.svg +8 -0
  601. package/src/assets/icons/expansion_panels.svg +3 -0
  602. package/src/assets/icons/export_notes.svg +8 -0
  603. package/src/assets/icons/favorite.svg +8 -0
  604. package/src/assets/icons/fax.svg +1 -0
  605. package/src/assets/icons/feedback.svg +3 -0
  606. package/src/assets/icons/fiber_manual_record.svg +15 -0
  607. package/src/assets/icons/fiber_smart_record.svg +8 -0
  608. package/src/assets/icons/file-arrow-up.svg +4 -0
  609. package/src/assets/icons/file_csv.svg +3 -0
  610. package/src/assets/icons/file_docx.svg +3 -0
  611. package/src/assets/icons/file_image.svg +3 -0
  612. package/src/assets/icons/file_jpg.svg +3 -0
  613. package/src/assets/icons/file_pdf.svg +3 -0
  614. package/src/assets/icons/file_png.svg +3 -0
  615. package/src/assets/icons/file_text_new.svg +3 -0
  616. package/src/assets/icons/file_xls.svg +3 -0
  617. package/src/assets/icons/files.svg +3 -0
  618. package/src/assets/icons/files_new.svg +3 -0
  619. package/src/assets/icons/filetype-pdf.svg +3 -0
  620. package/src/assets/icons/filter_alt.svg +8 -0
  621. package/src/assets/icons/flag.svg +3 -0
  622. package/src/assets/icons/flash_on.svg +22 -0
  623. package/src/assets/icons/flask.svg +3 -0
  624. package/src/assets/icons/floppy_disk_back.svg +3 -0
  625. package/src/assets/icons/folder.svg +8 -0
  626. package/src/assets/icons/folder_open.svg +8 -0
  627. package/src/assets/icons/folder_plus.svg +3 -0
  628. package/src/assets/icons/folder_simple.svg +4 -0
  629. package/src/assets/icons/folders.svg +3 -0
  630. package/src/assets/icons/format_align_center.svg +8 -0
  631. package/src/assets/icons/format_align_justify.svg +8 -0
  632. package/src/assets/icons/format_align_left.svg +8 -0
  633. package/src/assets/icons/format_align_right.svg +8 -0
  634. package/src/assets/icons/format_bold.svg +8 -0
  635. package/src/assets/icons/format_clear.svg +8 -0
  636. package/src/assets/icons/format_color_text.svg +8 -0
  637. package/src/assets/icons/format_ink_highlighter.svg +8 -0
  638. package/src/assets/icons/format_italic.svg +8 -0
  639. package/src/assets/icons/format_list_bulleted.svg +8 -0
  640. package/src/assets/icons/format_list_numbered.svg +8 -0
  641. package/src/assets/icons/format_underlined.svg +8 -0
  642. package/src/assets/icons/full_coverage.svg +1 -0
  643. package/src/assets/icons/funnel.svg +3 -0
  644. package/src/assets/icons/gastroenterology.svg +8 -0
  645. package/src/assets/icons/gavel.svg +3 -0
  646. package/src/assets/icons/gesture.svg +8 -0
  647. package/src/assets/icons/gift.svg +3 -0
  648. package/src/assets/icons/git_merge.svg +3 -0
  649. package/src/assets/icons/googleSync.svg +6 -0
  650. package/src/assets/icons/google_icon.svg +7 -0
  651. package/src/assets/icons/gpp_bad.svg +8 -0
  652. package/src/assets/icons/gpp_bad_fill.svg +8 -0
  653. package/src/assets/icons/gpp_maybe.svg +8 -0
  654. package/src/assets/icons/gpp_maybe_fill.svg +8 -0
  655. package/src/assets/icons/grab.svg +4 -0
  656. package/src/assets/icons/grabbing.svg +17 -0
  657. package/src/assets/icons/graph.svg +8 -0
  658. package/src/assets/icons/graph_new.svg +3 -0
  659. package/src/assets/icons/grid_view.svg +8 -0
  660. package/src/assets/icons/group.svg +8 -0
  661. package/src/assets/icons/group_n.svg +3 -0
  662. package/src/assets/icons/groups.svg +1 -0
  663. package/src/assets/icons/growth_chart_trend_down.svg +3 -0
  664. package/src/assets/icons/growth_chart_trend_grey_down.svg +3 -0
  665. package/src/assets/icons/growth_chart_trend_grey_up.svg +3 -0
  666. package/src/assets/icons/growth_chart_trend_up.svg +3 -0
  667. package/src/assets/icons/health_and_safety.svg +8 -0
  668. package/src/assets/icons/health_and_safety_fill.svg +8 -0
  669. package/src/assets/icons/heartbeat.svg +3 -0
  670. package/src/assets/icons/help.svg +8 -0
  671. package/src/assets/icons/hide_source.svg +1 -0
  672. package/src/assets/icons/history.svg +8 -0
  673. package/src/assets/icons/history_toggle_off.svg +8 -0
  674. package/src/assets/icons/home.svg +8 -0
  675. package/src/assets/icons/home_pin.svg +8 -0
  676. package/src/assets/icons/horizontal_rule.svg +8 -0
  677. package/src/assets/icons/hospital.svg +3 -0
  678. package/src/assets/icons/how_to_reg.svg +8 -0
  679. package/src/assets/icons/icon-128x128.png +0 -0
  680. package/src/assets/icons/icon-144x144.png +0 -0
  681. package/src/assets/icons/icon-152x152.png +0 -0
  682. package/src/assets/icons/icon-192x192.png +0 -0
  683. package/src/assets/icons/icon-384x384.png +0 -0
  684. package/src/assets/icons/icon-512x512.png +0 -0
  685. package/src/assets/icons/icon-72x72.png +0 -0
  686. package/src/assets/icons/icon-96x96.png +0 -0
  687. package/src/assets/icons/id_card.svg +8 -0
  688. package/src/assets/icons/identification_card.svg +3 -0
  689. package/src/assets/icons/imagesmode.svg +8 -0
  690. package/src/assets/icons/import.svg +4 -0
  691. package/src/assets/icons/inactive_user.svg +9 -0
  692. package/src/assets/icons/info-fill.svg +1 -0
  693. package/src/assets/icons/info-square.svg +4 -0
  694. package/src/assets/icons/info.svg +8 -0
  695. package/src/assets/icons/info_i.svg +1 -0
  696. package/src/assets/icons/inprogress.svg +3 -0
  697. package/src/assets/icons/insights.svg +1 -0
  698. package/src/assets/icons/inventory_2.svg +8 -0
  699. package/src/assets/icons/ios.svg +4 -0
  700. package/src/assets/icons/journal-plus.svg +5 -0
  701. package/src/assets/icons/journal-plus1.svg +5 -0
  702. package/src/assets/icons/keep.svg +8 -0
  703. package/src/assets/icons/key-person.svg +3 -0
  704. package/src/assets/icons/key.svg +1 -0
  705. package/src/assets/icons/keyboard_arrow_down-fill.svg +1 -0
  706. package/src/assets/icons/keyboard_arrow_down.svg +8 -0
  707. package/src/assets/icons/keyboard_arrow_left-fill.svg +1 -0
  708. package/src/assets/icons/keyboard_arrow_left.svg +15 -0
  709. package/src/assets/icons/keyboard_arrow_right-fill.svg +1 -0
  710. package/src/assets/icons/keyboard_arrow_right.svg +8 -0
  711. package/src/assets/icons/keyboard_arrow_up-fill.svg +1 -0
  712. package/src/assets/icons/keyboard_arrow_up.svg +8 -0
  713. package/src/assets/icons/keyboard_backspace.svg +1 -0
  714. package/src/assets/icons/keyboard_double_arrow_left.svg +8 -0
  715. package/src/assets/icons/keyboard_double_arrow_right.svg +8 -0
  716. package/src/assets/icons/keyboard_voice-fill.svg +1 -0
  717. package/src/assets/icons/keyboard_voice.svg +1 -0
  718. package/src/assets/icons/lab_profile-fill.svg +1 -0
  719. package/src/assets/icons/lab_profile.svg +8 -0
  720. package/src/assets/icons/label-tag.svg +9 -0
  721. package/src/assets/icons/label.svg +8 -0
  722. package/src/assets/icons/label_important.svg +8 -0
  723. package/src/assets/icons/labs.svg +15 -0
  724. package/src/assets/icons/language.svg +8 -0
  725. package/src/assets/icons/library.svg +8 -0
  726. package/src/assets/icons/lightning-charge-fill.svg +3 -0
  727. package/src/assets/icons/lightning.svg +3 -0
  728. package/src/assets/icons/link-45deg.svg +4 -0
  729. package/src/assets/icons/link-break.svg +3 -0
  730. package/src/assets/icons/link-simple-horizontal.svg +3 -0
  731. package/src/assets/icons/link_new.svg +3 -0
  732. package/src/assets/icons/list_checks.svg +3 -0
  733. package/src/assets/icons/list_magnifying_glass.svg +3 -0
  734. package/src/assets/icons/list_star.svg +3 -0
  735. package/src/assets/icons/local_activity.svg +8 -0
  736. package/src/assets/icons/local_atm.svg +8 -0
  737. package/src/assets/icons/local_pharmacy.svg +8 -0
  738. package/src/assets/icons/local_police.svg +1 -0
  739. package/src/assets/icons/local_post_office.svg +8 -0
  740. package/src/assets/icons/location_home.svg +8 -0
  741. package/src/assets/icons/location_off.svg +1 -0
  742. package/src/assets/icons/location_on-fill.svg +8 -0
  743. package/src/assets/icons/location_on.svg +8 -0
  744. package/src/assets/icons/lock-new.svg +25 -0
  745. package/src/assets/icons/lock.svg +8 -0
  746. package/src/assets/icons/lock_open_right.svg +1 -0
  747. package/src/assets/icons/lock_person.svg +8 -0
  748. package/src/assets/icons/logos_google-calendar.svg +17 -0
  749. package/src/assets/icons/logout.svg +1 -0
  750. package/src/assets/icons/magnifying_glass.svg +3 -0
  751. package/src/assets/icons/mail.svg +8 -0
  752. package/src/assets/icons/manage_accounts.svg +1 -0
  753. package/src/assets/icons/mark_chat_unread.svg +10 -0
  754. package/src/assets/icons/mask_group.svg +8 -0
  755. package/src/assets/icons/material-symbol-1.svg +5 -0
  756. package/src/assets/icons/material-symbol.svg +22 -0
  757. package/src/assets/icons/medication.svg +8 -0
  758. package/src/assets/icons/medication_liquid.svg +8 -0
  759. package/src/assets/icons/mic-300.svg +1 -0
  760. package/src/assets/icons/mic-fill.svg +1 -0
  761. package/src/assets/icons/mic.svg +8 -0
  762. package/src/assets/icons/mic_off-fill.svg +1 -0
  763. package/src/assets/icons/mic_off.svg +8 -0
  764. package/src/assets/icons/microscope_purple.svg +3 -0
  765. package/src/assets/icons/mingcute_user-3-fill.svg +4 -0
  766. package/src/assets/icons/minus.svg +8 -0
  767. package/src/assets/icons/missed_video_call-fill.svg +1 -0
  768. package/src/assets/icons/missed_video_call.svg +1 -0
  769. package/src/assets/icons/mode_comment.svg +8 -0
  770. package/src/assets/icons/monetization_on.svg +3 -0
  771. package/src/assets/icons/money-wavy.svg +3 -0
  772. package/src/assets/icons/monitor.svg +3 -0
  773. package/src/assets/icons/monitor_heart.svg +8 -0
  774. package/src/assets/icons/monitoring.svg +8 -0
  775. package/src/assets/icons/mood.svg +8 -0
  776. package/src/assets/icons/more_horiz.svg +8 -0
  777. package/src/assets/icons/more_vert.svg +8 -0
  778. package/src/assets/icons/morphology-icon.svg +19 -0
  779. package/src/assets/icons/motion_photos_paused.svg +8 -0
  780. package/src/assets/icons/move.svg +13 -0
  781. package/src/assets/icons/musculoskeletal.svg +11 -0
  782. package/src/assets/icons/neurology.svg +8 -0
  783. package/src/assets/icons/no_encryption.svg +1 -0
  784. package/src/assets/icons/no_insurance.svg +8 -0
  785. package/src/assets/icons/no_insurance_fill.svg +8 -0
  786. package/src/assets/icons/non_administered.svg +39 -0
  787. package/src/assets/icons/non_administered_new.svg +4 -0
  788. package/src/assets/icons/non_administered_v1.svg +7 -0
  789. package/src/assets/icons/not_allow.svg +8 -0
  790. package/src/assets/icons/not_allow_fill.svg +8 -0
  791. package/src/assets/icons/not_verified.svg +8 -0
  792. package/src/assets/icons/not_verified_fill.svg +8 -0
  793. package/src/assets/icons/note.svg +3 -0
  794. package/src/assets/icons/note_add.svg +8 -0
  795. package/src/assets/icons/note_pad.svg +3 -0
  796. package/src/assets/icons/note_pad_new.svg +3 -0
  797. package/src/assets/icons/note_stack.svg +8 -0
  798. package/src/assets/icons/notifications-fill.svg +1 -0
  799. package/src/assets/icons/notifications.svg +8 -0
  800. package/src/assets/icons/notifications_active-fill.svg +1 -0
  801. package/src/assets/icons/notifications_active.svg +8 -0
  802. package/src/assets/icons/notifications_off-fill.svg +1 -0
  803. package/src/assets/icons/notifications_off.svg +1 -0
  804. package/src/assets/icons/notifications_paused-fill.svg +1 -0
  805. package/src/assets/icons/notifications_paused.svg +1 -0
  806. package/src/assets/icons/offline_bolt.svg +8 -0
  807. package/src/assets/icons/open_in_full.svg +1 -0
  808. package/src/assets/icons/open_in_new.svg +8 -0
  809. package/src/assets/icons/order_approve.svg +8 -0
  810. package/src/assets/icons/overview.svg +8 -0
  811. package/src/assets/icons/paid.svg +8 -0
  812. package/src/assets/icons/paper-plane-right.svg +3 -0
  813. package/src/assets/icons/paper_claim.svg +8 -0
  814. package/src/assets/icons/paper_plane_tilt.svg +3 -0
  815. package/src/assets/icons/party_mode.svg +8 -0
  816. package/src/assets/icons/password_2.svg +8 -0
  817. package/src/assets/icons/patient-chart.svg +8 -0
  818. package/src/assets/icons/patient_list.svg +8 -0
  819. package/src/assets/icons/pause.svg +3 -0
  820. package/src/assets/icons/pause_circle.svg +8 -0
  821. package/src/assets/icons/payments.svg +1 -0
  822. package/src/assets/icons/pen_edit.svg +8 -0
  823. package/src/assets/icons/pencil-square.svg +4 -0
  824. package/src/assets/icons/pencil_simple.svg +3 -0
  825. package/src/assets/icons/pending.svg +3 -0
  826. package/src/assets/icons/people.svg +3 -0
  827. package/src/assets/icons/percent.svg +3 -0
  828. package/src/assets/icons/perm_phone_msg.svg +1 -0
  829. package/src/assets/icons/permissions.svg +18 -0
  830. package/src/assets/icons/person-bounding-box.svg +4 -0
  831. package/src/assets/icons/person-circle.svg +4 -0
  832. package/src/assets/icons/person-fill.svg +1 -0
  833. package/src/assets/icons/person-plus.svg +4 -0
  834. package/src/assets/icons/person-rolodex.svg +4 -0
  835. package/src/assets/icons/person-up.svg +4 -0
  836. package/src/assets/icons/person-vcard.svg +4 -0
  837. package/src/assets/icons/person.svg +3 -0
  838. package/src/assets/icons/person_2-fill.svg +1 -0
  839. package/src/assets/icons/person_2.svg +1 -0
  840. package/src/assets/icons/person_24dp_5F6368_FILL1_wght400_GRAD0_opsz24.svg +1 -0
  841. package/src/assets/icons/person_3-fill.svg +1 -0
  842. package/src/assets/icons/person_3.svg +1 -0
  843. package/src/assets/icons/person_4-fill.svg +1 -0
  844. package/src/assets/icons/person_4.svg +1 -0
  845. package/src/assets/icons/person_add-fill.svg +8 -0
  846. package/src/assets/icons/person_add.svg +8 -0
  847. package/src/assets/icons/person_remove.svg +8 -0
  848. package/src/assets/icons/personal_injury.svg +15 -0
  849. package/src/assets/icons/phone_call.svg +3 -0
  850. package/src/assets/icons/phone_callback-fill.svg +1 -0
  851. package/src/assets/icons/phone_callback.svg +1 -0
  852. package/src/assets/icons/phone_forwarded.svg +8 -0
  853. package/src/assets/icons/photo_camera.svg +8 -0
  854. package/src/assets/icons/photo_camera_fill.svg +8 -0
  855. package/src/assets/icons/pill.svg +3 -0
  856. package/src/assets/icons/pill_green.svg +3 -0
  857. package/src/assets/icons/pin.svg +8 -0
  858. package/src/assets/icons/pin_drop-fill.svg +1 -0
  859. package/src/assets/icons/pin_drop.svg +1 -0
  860. package/src/assets/icons/play_arrow.svg +8 -0
  861. package/src/assets/icons/play_circle.svg +3 -0
  862. package/src/assets/icons/plug-connection.svg +10 -0
  863. package/src/assets/icons/prescriptions.svg +8 -0
  864. package/src/assets/icons/preventive.svg +5 -0
  865. package/src/assets/icons/preview-fill.svg +1 -0
  866. package/src/assets/icons/preview.svg +1 -0
  867. package/src/assets/icons/price_change.svg +8 -0
  868. package/src/assets/icons/print.svg +8 -0
  869. package/src/assets/icons/printer.svg +4 -0
  870. package/src/assets/icons/priorAuth.svg +4 -0
  871. package/src/assets/icons/prior_auth.svg +4 -0
  872. package/src/assets/icons/priority.svg +3 -0
  873. package/src/assets/icons/problemsicon.svg +3 -0
  874. package/src/assets/icons/prohibit.svg +3 -0
  875. package/src/assets/icons/prompt_suggestion.svg +8 -0
  876. package/src/assets/icons/psychology.svg +8 -0
  877. package/src/assets/icons/pulmonology.svg +8 -0
  878. package/src/assets/icons/push_pin.svg +8 -0
  879. package/src/assets/icons/question_fill.svg +9 -0
  880. package/src/assets/icons/question_mark.svg +8 -0
  881. package/src/assets/icons/question_mark_fill.svg +9 -0
  882. package/src/assets/icons/quickreply.svg +8 -0
  883. package/src/assets/icons/radio_button_checked.svg +8 -0
  884. package/src/assets/icons/radio_button_unchecked.svg +8 -0
  885. package/src/assets/icons/radiology.svg +8 -0
  886. package/src/assets/icons/radiology_new.svg +8 -0
  887. package/src/assets/icons/receipt.svg +3 -0
  888. package/src/assets/icons/receipt_long.svg +15 -0
  889. package/src/assets/icons/receipt_x.svg +3 -0
  890. package/src/assets/icons/record-circle.svg +4 -0
  891. package/src/assets/icons/redo.svg +8 -0
  892. package/src/assets/icons/referral.svg +8 -0
  893. package/src/assets/icons/refresh.svg +8 -0
  894. package/src/assets/icons/refund.svg +10 -0
  895. package/src/assets/icons/reg-note.svg +8 -0
  896. package/src/assets/icons/reg-notes.svg +8 -0
  897. package/src/assets/icons/remove.svg +8 -0
  898. package/src/assets/icons/remove_moderator.svg +8 -0
  899. package/src/assets/icons/remove_moderator_fill.svg +8 -0
  900. package/src/assets/icons/reorder.svg +8 -0
  901. package/src/assets/icons/repeat.svg +8 -0
  902. package/src/assets/icons/replay.svg +8 -0
  903. package/src/assets/icons/request_quote.svg +8 -0
  904. package/src/assets/icons/roadmap.svg +3 -0
  905. package/src/assets/icons/rocket_launch.svg +8 -0
  906. package/src/assets/icons/rotate_left.svg +8 -0
  907. package/src/assets/icons/rotate_right.svg +1 -0
  908. package/src/assets/icons/rule_settings.svg +8 -0
  909. package/src/assets/icons/save.svg +1 -0
  910. package/src/assets/icons/scan.svg +3 -0
  911. package/src/assets/icons/scanner.svg +8 -0
  912. package/src/assets/icons/schedule.svg +8 -0
  913. package/src/assets/icons/search.svg +8 -0
  914. package/src/assets/icons/selection_all.svg +3 -0
  915. package/src/assets/icons/self_pay.svg +8 -0
  916. package/src/assets/icons/self_pay_fill.svg +8 -0
  917. package/src/assets/icons/send-fill.svg +1 -0
  918. package/src/assets/icons/send.svg +8 -0
  919. package/src/assets/icons/settings.svg +8 -0
  920. package/src/assets/icons/settings_applications.svg +8 -0
  921. package/src/assets/icons/shapes.svg +3 -0
  922. package/src/assets/icons/share.svg +1 -0
  923. package/src/assets/icons/shield.svg +3 -0
  924. package/src/assets/icons/shield_person.svg +8 -0
  925. package/src/assets/icons/shield_person_fill.svg +8 -0
  926. package/src/assets/icons/shield_plus.svg +3 -0
  927. package/src/assets/icons/shift_timing_activate.svg +5 -0
  928. package/src/assets/icons/shift_timing_deactivate.svg +5 -0
  929. package/src/assets/icons/sign.svg +3 -0
  930. package/src/assets/icons/signal_cellular_alt.svg +8 -0
  931. package/src/assets/icons/simple-notes.svg +8 -0
  932. package/src/assets/icons/skin.svg +11 -0
  933. package/src/assets/icons/smartphone.svg +8 -0
  934. package/src/assets/icons/sort.svg +8 -0
  935. package/src/assets/icons/sort_ascending.svg +12 -0
  936. package/src/assets/icons/sort_by_alpha.svg +8 -0
  937. package/src/assets/icons/sort_descending.svg +12 -0
  938. package/src/assets/icons/source_notes.svg +8 -0
  939. package/src/assets/icons/sparkle.svg +3 -0
  940. package/src/assets/icons/sparkle_gradient.svg +9 -0
  941. package/src/assets/icons/splitscreen_bottom.svg +8 -0
  942. package/src/assets/icons/sprint.svg +1 -0
  943. package/src/assets/icons/stack.svg +3 -0
  944. package/src/assets/icons/star-fill.svg +3 -0
  945. package/src/assets/icons/star.svg +3 -0
  946. package/src/assets/icons/stethoscope.svg +3 -0
  947. package/src/assets/icons/stethoscope_check.svg +8 -0
  948. package/src/assets/icons/stickies.svg +4 -0
  949. package/src/assets/icons/sticky_note_2.svg +8 -0
  950. package/src/assets/icons/stop_circle.svg +8 -0
  951. package/src/assets/icons/store.svg +8 -0
  952. package/src/assets/icons/straight.svg +3 -0
  953. package/src/assets/icons/strikethrough_s.svg +8 -0
  954. package/src/assets/icons/sub-task.svg +9 -0
  955. package/src/assets/icons/subdirectory_arrow_left.svg +8 -0
  956. package/src/assets/icons/subscript.svg +8 -0
  957. package/src/assets/icons/summarize.svg +8 -0
  958. package/src/assets/icons/superscript.svg +8 -0
  959. package/src/assets/icons/swap_calls.svg +1 -0
  960. package/src/assets/icons/swap_vert.svg +8 -0
  961. package/src/assets/icons/swipe_left_alt.svg +8 -0
  962. package/src/assets/icons/syringe.svg +3 -0
  963. package/src/assets/icons/table.svg +8 -0
  964. package/src/assets/icons/tag.svg +3 -0
  965. package/src/assets/icons/task.svg +8 -0
  966. package/src/assets/icons/telemedicine.svg +15 -0
  967. package/src/assets/icons/text_field.svg +4 -0
  968. package/src/assets/icons/thumbs_down.svg +3 -0
  969. package/src/assets/icons/thumbs_up.svg +3 -0
  970. package/src/assets/icons/thunder-big.svg +12 -0
  971. package/src/assets/icons/thunder.svg +12 -0
  972. package/src/assets/icons/tips_and_updates.svg +1 -0
  973. package/src/assets/icons/treatment.svg +5 -0
  974. package/src/assets/icons/trend_down.svg +3 -0
  975. package/src/assets/icons/tune.svg +8 -0
  976. package/src/assets/icons/turn_left.svg +1 -0
  977. package/src/assets/icons/turn_right.svg +8 -0
  978. package/src/assets/icons/u_turn_left.svg +1 -0
  979. package/src/assets/icons/u_turn_right.svg +1 -0
  980. package/src/assets/icons/unarchive.svg +8 -0
  981. package/src/assets/icons/undo.svg +8 -0
  982. package/src/assets/icons/unfold_more.svg +8 -0
  983. package/src/assets/icons/universal-access.svg +3 -0
  984. package/src/assets/icons/universal_currency_alt.svg +8 -0
  985. package/src/assets/icons/up-arrow.svg +10 -0
  986. package/src/assets/icons/update_disabled.svg +8 -0
  987. package/src/assets/icons/upload.svg +8 -0
  988. package/src/assets/icons/upload_file.svg +8 -0
  989. package/src/assets/icons/upload_simple.svg +3 -0
  990. package/src/assets/icons/urology.svg +8 -0
  991. package/src/assets/icons/user_check.svg +3 -0
  992. package/src/assets/icons/user_circle.svg +3 -0
  993. package/src/assets/icons/user_minus.svg +3 -0
  994. package/src/assets/icons/user_plus.svg +3 -0
  995. package/src/assets/icons/users_three.svg +3 -0
  996. package/src/assets/icons/vaccines.svg +8 -0
  997. package/src/assets/icons/verified_user.svg +8 -0
  998. package/src/assets/icons/verified_user_fill.svg +8 -0
  999. package/src/assets/icons/video-camera.svg +3 -0
  1000. package/src/assets/icons/video_call-fill.svg +1 -0
  1001. package/src/assets/icons/video_call.svg +1 -0
  1002. package/src/assets/icons/videocam-fill.svg +1 -0
  1003. package/src/assets/icons/videocam.svg +8 -0
  1004. package/src/assets/icons/videocam_off-fill.svg +1 -0
  1005. package/src/assets/icons/videocam_off.svg +8 -0
  1006. package/src/assets/icons/view_week.svg +8 -0
  1007. package/src/assets/icons/virus.svg +3 -0
  1008. package/src/assets/icons/visibility-fill.svg +8 -0
  1009. package/src/assets/icons/visibility.svg +8 -0
  1010. package/src/assets/icons/visibility_off-fill.svg +8 -0
  1011. package/src/assets/icons/visibility_off.svg +8 -0
  1012. package/src/assets/icons/vpn_key.svg +10 -0
  1013. package/src/assets/icons/warning-fill.svg +1 -0
  1014. package/src/assets/icons/warning.svg +8 -0
  1015. package/src/assets/icons/warning_fill.svg +8 -0
  1016. package/src/assets/icons/water_drop.svg +8 -0
  1017. package/src/assets/icons/west.svg +8 -0
  1018. package/src/assets/icons/where_to_vote.svg +8 -0
  1019. package/src/assets/icons/widgets.svg +8 -0
  1020. package/src/assets/icons/writeOff.svg +4 -0
  1021. package/src/assets/icons/x-circle.svg +3 -0
  1022. package/src/assets/icons/x-square.svg +4 -0
  1023. package/src/assets/icons/zift.svg +19 -0
  1024. package/src/assets/image.jpg +0 -0
  1025. package/src/assets/images/AIUsage.png +0 -0
  1026. package/src/assets/images/Ai-S.svg +55 -0
  1027. package/src/assets/images/Ai.png +0 -0
  1028. package/src/assets/images/Aiusersbg.png +0 -0
  1029. package/src/assets/images/Android-Banner.png +0 -0
  1030. package/src/assets/images/Android.png +0 -0
  1031. package/src/assets/images/Animation.gif +0 -0
  1032. package/src/assets/images/Checkbox.png +0 -0
  1033. package/src/assets/images/Cytology_Findings.png +0 -0
  1034. package/src/assets/images/DTProjectPlan.pdf +0 -0
  1035. package/src/assets/images/Ed_New_sprite.svg +14 -0
  1036. package/src/assets/images/Ed_spriteuse.svg +979 -0
  1037. package/src/assets/images/Histopathology_Report.png +0 -0
  1038. package/src/assets/images/IOS.png +0 -0
  1039. package/src/assets/images/Im-logo.png +0 -0
  1040. package/src/assets/images/Immunohistochemistry_Results.png +0 -0
  1041. package/src/assets/images/Institutional_Billing.png +0 -0
  1042. package/src/assets/images/No collections.svg +62 -0
  1043. package/src/assets/images/PNG.png +0 -0
  1044. package/src/assets/images/Slovenian.jpg +0 -0
  1045. package/src/assets/images/Upload-file.svg +16 -0
  1046. package/src/assets/images/UserCircle.svg +3 -0
  1047. package/src/assets/images/access-granted.svg +1 -0
  1048. package/src/assets/images/activeAI.png +0 -0
  1049. package/src/assets/images/activeuserswitch.png +0 -0
  1050. package/src/assets/images/add_icon.png +0 -0
  1051. package/src/assets/images/allergy.svg +16 -0
  1052. package/src/assets/images/amex-card.svg +2 -0
  1053. package/src/assets/images/amex-new.svg +5 -0
  1054. package/src/assets/images/amex.svg +5 -0
  1055. package/src/assets/images/anatomy/Chin, neck front.png +0 -0
  1056. package/src/assets/images/anatomy/Female full body 1.jpg +0 -0
  1057. package/src/assets/images/anatomy/Head Back side.png +0 -0
  1058. package/src/assets/images/anatomy/Head Side Views.png +0 -0
  1059. package/src/assets/images/anatomy/Head Top View.png +0 -0
  1060. package/src/assets/images/anatomy/Male full body.png +0 -0
  1061. package/src/assets/images/android-kiosk.svg +2 -0
  1062. package/src/assets/images/app-banner.png +0 -0
  1063. package/src/assets/images/app-store.png +0 -0
  1064. package/src/assets/images/app-store.svg +8 -0
  1065. package/src/assets/images/banner/banner-1.jpg +0 -0
  1066. package/src/assets/images/banner/banner-2.jpg +0 -0
  1067. package/src/assets/images/banner/banner-3.jpg +0 -0
  1068. package/src/assets/images/banner/banner-4.jpg +0 -0
  1069. package/src/assets/images/banner/banner-5.jpg +0 -0
  1070. package/src/assets/images/banner/banner-bg.png +0 -0
  1071. package/src/assets/images/banner/banner_23-04-2026/Sparkle.svg +3 -0
  1072. package/src/assets/images/banner/banner_23-04-2026/icon1.svg +21 -0
  1073. package/src/assets/images/banner/banner_23-04-2026/icon2.svg +5 -0
  1074. package/src/assets/images/banner/banner_23-04-2026/icon3.svg +3 -0
  1075. package/src/assets/images/banner/banner_23-04-2026/image1.png +0 -0
  1076. package/src/assets/images/banner/banner_23-04-2026/image2.png +0 -0
  1077. package/src/assets/images/banner/banner_23-04-2026/image3.png +0 -0
  1078. package/src/assets/images/banner/banner_23-04-2026/image4.png +0 -0
  1079. package/src/assets/images/banner/banner_23-04-2026/image5.png +0 -0
  1080. package/src/assets/images/banner/banner_new/banner-bg.png +0 -0
  1081. package/src/assets/images/banner/banner_new/chart-simple.png +0 -0
  1082. package/src/assets/images/banner/banner_new/v2_img1.png +0 -0
  1083. package/src/assets/images/banner/banner_new/v2_img10.svg +10 -0
  1084. package/src/assets/images/banner/banner_new/v2_img11.svg +10 -0
  1085. package/src/assets/images/banner/banner_new/v2_img12.svg +10 -0
  1086. package/src/assets/images/banner/banner_new/v2_img13.svg +10 -0
  1087. package/src/assets/images/banner/banner_new/v2_img14.svg +3 -0
  1088. package/src/assets/images/banner/banner_new/v2_img15.svg +4 -0
  1089. package/src/assets/images/banner/banner_new/v2_img16.svg +10 -0
  1090. package/src/assets/images/banner/banner_new/v2_img17.svg +10 -0
  1091. package/src/assets/images/banner/banner_new/v2_img18.svg +10 -0
  1092. package/src/assets/images/banner/banner_new/v2_img19.svg +10 -0
  1093. package/src/assets/images/banner/banner_new/v2_img2.png +0 -0
  1094. package/src/assets/images/banner/banner_new/v2_img20.svg +3 -0
  1095. package/src/assets/images/banner/banner_new/v2_img3.png +0 -0
  1096. package/src/assets/images/banner/banner_new/v2_img4.png +0 -0
  1097. package/src/assets/images/banner/banner_new/v2_img5.svg +10 -0
  1098. package/src/assets/images/banner/banner_new/v2_img6.svg +13 -0
  1099. package/src/assets/images/banner/banner_new/v2_img7.svg +4 -0
  1100. package/src/assets/images/banner/banner_new/v2_img8.svg +3 -0
  1101. package/src/assets/images/banner/banner_new/v2_img9.svg +10 -0
  1102. package/src/assets/images/banner/banner_new10/app_store.png +0 -0
  1103. package/src/assets/images/banner/banner_new10/img_1.png +0 -0
  1104. package/src/assets/images/banner/banner_new10/img_2.png +0 -0
  1105. package/src/assets/images/banner/banner_new10/img_3.png +0 -0
  1106. package/src/assets/images/banner/banner_new10/img_4.png +0 -0
  1107. package/src/assets/images/banner/banner_new10/img_5.png +0 -0
  1108. package/src/assets/images/banner/banner_new10/img_6.png +0 -0
  1109. package/src/assets/images/banner/banner_new10/img_7.png +0 -0
  1110. package/src/assets/images/banner/banner_new10/play_store.png +0 -0
  1111. package/src/assets/images/banner/banner_new10/svg_1.svg +10 -0
  1112. package/src/assets/images/banner/banner_new10/svg_10.svg +10 -0
  1113. package/src/assets/images/banner/banner_new10/svg_2.svg +10 -0
  1114. package/src/assets/images/banner/banner_new10/svg_3.svg +10 -0
  1115. package/src/assets/images/banner/banner_new10/svg_4.svg +12 -0
  1116. package/src/assets/images/banner/banner_new10/svg_5.svg +10 -0
  1117. package/src/assets/images/banner/banner_new10/svg_6.svg +10 -0
  1118. package/src/assets/images/banner/banner_new10/svg_7.svg +10 -0
  1119. package/src/assets/images/banner/banner_new10/svg_8.svg +10 -0
  1120. package/src/assets/images/banner/banner_new10/svg_9.svg +10 -0
  1121. package/src/assets/images/banner/banner_new3/CurrencyDollarSimple.svg +3 -0
  1122. package/src/assets/images/banner/banner_new3/IdentificationCard.svg +3 -0
  1123. package/src/assets/images/banner/banner_new3/ListNumbers.svg +3 -0
  1124. package/src/assets/images/banner/banner_new3/Wrench.svg +3 -0
  1125. package/src/assets/images/banner/banner_new3/assessment 1.svg +10 -0
  1126. package/src/assets/images/banner/banner_new3/calendar-check 1.svg +10 -0
  1127. package/src/assets/images/banner/banner_new3/fax (2) 1.svg +10 -0
  1128. package/src/assets/images/banner/banner_new3/v3_img1.png +0 -0
  1129. package/src/assets/images/banner/banner_new3/v3_img10.png +0 -0
  1130. package/src/assets/images/banner/banner_new3/v3_img11.png +0 -0
  1131. package/src/assets/images/banner/banner_new3/v3_img2.png +0 -0
  1132. package/src/assets/images/banner/banner_new3/v3_img3.png +0 -0
  1133. package/src/assets/images/banner/banner_new3/v3_img4.png +0 -0
  1134. package/src/assets/images/banner/banner_new3/v3_img5.png +0 -0
  1135. package/src/assets/images/banner/banner_new3/v3_img6.png +0 -0
  1136. package/src/assets/images/banner/banner_new3/v3_img7.png +0 -0
  1137. package/src/assets/images/banner/banner_new3/v3_img8.png +0 -0
  1138. package/src/assets/images/banner/banner_new3/v3_img9.png +0 -0
  1139. package/src/assets/images/banner/banner_new4/v4_img1.png +0 -0
  1140. package/src/assets/images/banner/banner_new4/v4_img2.png +0 -0
  1141. package/src/assets/images/banner/banner_new4/v4_img3.png +0 -0
  1142. package/src/assets/images/banner/banner_new4/v4_img4.png +0 -0
  1143. package/src/assets/images/banner/banner_new4/v4_img5.png +0 -0
  1144. package/src/assets/images/banner/banner_new4/v4_svg1.svg +3 -0
  1145. package/src/assets/images/banner/banner_new4/v4_svg2.svg +3 -0
  1146. package/src/assets/images/banner/banner_new4/v4_svg3.svg +10 -0
  1147. package/src/assets/images/banner/banner_new4/v4_svg4.svg +3 -0
  1148. package/src/assets/images/banner/banner_new4/v4_svg5.svg +3 -0
  1149. package/src/assets/images/banner/banner_new4/v4_svg6.svg +3 -0
  1150. package/src/assets/images/banner/banner_new5/Wrench.svg +3 -0
  1151. package/src/assets/images/banner/banner_new5/img_1.png +0 -0
  1152. package/src/assets/images/banner/banner_new5/img_2.png +0 -0
  1153. package/src/assets/images/banner/banner_new5/img_3.png +0 -0
  1154. package/src/assets/images/banner/banner_new5/img_4.png +0 -0
  1155. package/src/assets/images/banner/banner_new5/img_5.png +0 -0
  1156. package/src/assets/images/banner/banner_new6/app_store.png +0 -0
  1157. package/src/assets/images/banner/banner_new6/img_1.png +0 -0
  1158. package/src/assets/images/banner/banner_new6/img_2.png +0 -0
  1159. package/src/assets/images/banner/banner_new6/img_3.png +0 -0
  1160. package/src/assets/images/banner/banner_new6/img_4.png +0 -0
  1161. package/src/assets/images/banner/banner_new6/img_5.png +0 -0
  1162. package/src/assets/images/banner/banner_new6/img_6.png +0 -0
  1163. package/src/assets/images/banner/banner_new6/improvements/add-document.svg +10 -0
  1164. package/src/assets/images/banner/banner_new6/improvements/attribution-pencil.svg +10 -0
  1165. package/src/assets/images/banner/banner_new6/improvements/bell-notification.svg +10 -0
  1166. package/src/assets/images/banner/banner_new6/improvements/billing-header.svg +10 -0
  1167. package/src/assets/images/banner/banner_new6/improvements/binary.svg +10 -0
  1168. package/src/assets/images/banner/banner_new6/improvements/box-dollar.svg +10 -0
  1169. package/src/assets/images/banner/banner_new6/improvements/check-circle.svg +10 -0
  1170. package/src/assets/images/banner/banner_new6/improvements/clinical-header.svg +10 -0
  1171. package/src/assets/images/banner/banner_new6/improvements/credit-security.svg +10 -0
  1172. package/src/assets/images/banner/banner_new6/improvements/document-circle-wrong.svg +10 -0
  1173. package/src/assets/images/banner/banner_new6/improvements/fax.svg +10 -0
  1174. package/src/assets/images/banner/banner_new6/improvements/file-prescription.svg +10 -0
  1175. package/src/assets/images/banner/banner_new6/improvements/map-marker-check.svg +10 -0
  1176. package/src/assets/images/banner/banner_new6/improvements/marker.svg +10 -0
  1177. package/src/assets/images/banner/banner_new6/improvements/member-search.svg +10 -0
  1178. package/src/assets/images/banner/banner_new6/improvements/memo-circle-check-2.svg +10 -0
  1179. package/src/assets/images/banner/banner_new6/improvements/memo-circle-check.svg +10 -0
  1180. package/src/assets/images/banner/banner_new6/improvements/others-header.svg +10 -0
  1181. package/src/assets/images/banner/banner_new6/improvements/paper-plane.svg +6 -0
  1182. package/src/assets/images/banner/banner_new6/improvements/payroll-calendar.svg +10 -0
  1183. package/src/assets/images/banner/banner_new6/improvements/payroll-check.svg +5 -0
  1184. package/src/assets/images/banner/banner_new6/improvements/receipt.svg +10 -0
  1185. package/src/assets/images/banner/banner_new6/improvements/referrals-header.svg +10 -0
  1186. package/src/assets/images/banner/banner_new6/improvements/reminder-appointment.svg +10 -0
  1187. package/src/assets/images/banner/banner_new6/improvements/scheduling-header.svg +10 -0
  1188. package/src/assets/images/banner/banner_new6/improvements/settings.svg +5 -0
  1189. package/src/assets/images/banner/banner_new6/improvements/subscription-alt.svg +10 -0
  1190. package/src/assets/images/banner/banner_new6/improvements/tasks.svg +10 -0
  1191. package/src/assets/images/banner/banner_new6/improvements/time-check.svg +11 -0
  1192. package/src/assets/images/banner/banner_new6/play_store.png +0 -0
  1193. package/src/assets/images/banner/banner_new7/img_1.png +0 -0
  1194. package/src/assets/images/banner/banner_new7/img_2.png +0 -0
  1195. package/src/assets/images/banner/banner_new7/img_3.png +0 -0
  1196. package/src/assets/images/banner/banner_new7/img_4.png +0 -0
  1197. package/src/assets/images/banner/banner_new7/img_5.png +0 -0
  1198. package/src/assets/images/banner/banner_new7/img_6.png +0 -0
  1199. package/src/assets/images/banner/banner_new8/img_1.png +0 -0
  1200. package/src/assets/images/banner/banner_new8/img_2.png +0 -0
  1201. package/src/assets/images/banner/banner_new8/img_3.png +0 -0
  1202. package/src/assets/images/banner/banner_new8/img_4.png +0 -0
  1203. package/src/assets/images/banner/banner_new8/improvements/compliance-document.svg +10 -0
  1204. package/src/assets/images/banner/banner_new8/improvements/envelope-open-text.svg +10 -0
  1205. package/src/assets/images/banner/banner_new8/improvements/fax.svg +10 -0
  1206. package/src/assets/images/banner/banner_new8/improvements/file-invoice-dollar.svg +10 -0
  1207. package/src/assets/images/banner/banner_new8/improvements/file-signature.svg +10 -0
  1208. package/src/assets/images/banner/banner_new8/improvements/settings.svg +10 -0
  1209. package/src/assets/images/banner/banner_new8/improvements/social-media-notification.svg +10 -0
  1210. package/src/assets/images/banner/banner_new8/svg_1.svg +10 -0
  1211. package/src/assets/images/banner/banner_new8/svg_2.svg +10 -0
  1212. package/src/assets/images/banner/banner_new8/svg_3.svg +3 -0
  1213. package/src/assets/images/banner/banner_new8/svg_4.svg +10 -0
  1214. package/src/assets/images/banner/banner_new8/svg_5.svg +10 -0
  1215. package/src/assets/images/banner/banner_new8/svg_6.svg +12 -0
  1216. package/src/assets/images/banner/banner_new9/img_1.png +0 -0
  1217. package/src/assets/images/banner/banner_new9/img_2.png +0 -0
  1218. package/src/assets/images/banner/banner_new9/img_3.png +0 -0
  1219. package/src/assets/images/banner/banner_new9/img_4.png +0 -0
  1220. package/src/assets/images/banner/banner_new9/img_5.full.png +0 -0
  1221. package/src/assets/images/banner/banner_new9/img_5.png +0 -0
  1222. package/src/assets/images/banner/banner_new9/svg_10.svg +10 -0
  1223. package/src/assets/images/banner/banner_new9/svg_11.svg +10 -0
  1224. package/src/assets/images/banner/banner_new9/svg_12.svg +10 -0
  1225. package/src/assets/images/banner/banner_new9/svg_13.svg +10 -0
  1226. package/src/assets/images/banner/banner_new9/svg_3.svg +3 -0
  1227. package/src/assets/images/banner/banner_new9/svg_5.svg +10 -0
  1228. package/src/assets/images/banner/banner_new9/svg_6.svg +12 -0
  1229. package/src/assets/images/banner/banner_new9/svg_7.svg +10 -0
  1230. package/src/assets/images/banner/banner_new9/svg_8.svg +15 -0
  1231. package/src/assets/images/banner/banner_new9/svg_9.svg +10 -0
  1232. package/src/assets/images/banner/confetti.gif +0 -0
  1233. package/src/assets/images/banner/v2_img1.png +0 -0
  1234. package/src/assets/images/banner/v2_img10.svg +11 -0
  1235. package/src/assets/images/banner/v2_img11.png +0 -0
  1236. package/src/assets/images/banner/v2_img12.png +0 -0
  1237. package/src/assets/images/banner/v2_img2.png +0 -0
  1238. package/src/assets/images/banner/v2_img3.png +0 -0
  1239. package/src/assets/images/banner/v2_img4.png +0 -0
  1240. package/src/assets/images/banner/v2_img5.svg +11 -0
  1241. package/src/assets/images/banner/v2_img6.svg +11 -0
  1242. package/src/assets/images/banner/v2_img7.svg +13 -0
  1243. package/src/assets/images/banner/v2_img8.svg +11 -0
  1244. package/src/assets/images/banner/v2_img9.svg +11 -0
  1245. package/src/assets/images/barcode-1.png +0 -0
  1246. package/src/assets/images/barcode.png +0 -0
  1247. package/src/assets/images/bgstrips -1.svg +30 -0
  1248. package/src/assets/images/bgstrips.svg +40 -0
  1249. package/src/assets/images/big-blob.webm +0 -0
  1250. package/src/assets/images/blood-test.svg +13 -0
  1251. package/src/assets/images/blue-stripes.svg +12 -0
  1252. package/src/assets/images/body-map-back.png +0 -0
  1253. package/src/assets/images/body-map-front.png +0 -0
  1254. package/src/assets/images/bolt_ai.svg +3 -0
  1255. package/src/assets/images/box_edit.svg +8 -0
  1256. package/src/assets/images/broken-link-new.png +0 -0
  1257. package/src/assets/images/broken-link.svg +1 -0
  1258. package/src/assets/images/bubble_chart.png +0 -0
  1259. package/src/assets/images/cam.svg +3 -0
  1260. package/src/assets/images/camera-icon.png +0 -0
  1261. package/src/assets/images/camera_1.jpg +0 -0
  1262. package/src/assets/images/card-1.svg +9 -0
  1263. package/src/assets/images/card-2.svg +9 -0
  1264. package/src/assets/images/card-3.svg +9 -0
  1265. package/src/assets/images/card-4.svg +9 -0
  1266. package/src/assets/images/card-5.svg +9 -0
  1267. package/src/assets/images/card-6.svg +9 -0
  1268. package/src/assets/images/cards.png +0 -0
  1269. package/src/assets/images/carelink-carequality.png +0 -0
  1270. package/src/assets/images/carelink-halftone-bg.jpg +0 -0
  1271. package/src/assets/images/carelink-img.png +0 -0
  1272. package/src/assets/images/carelink-logo.svg +9 -0
  1273. package/src/assets/images/carelink-tefca.png +0 -0
  1274. package/src/assets/images/cash-Cancelled.svg +20 -0
  1275. package/src/assets/images/cash.svg +1 -0
  1276. package/src/assets/images/celebrations.png +0 -0
  1277. package/src/assets/images/chatClose.png +0 -0
  1278. package/src/assets/images/check_fill2.svg +4 -0
  1279. package/src/assets/images/cirrus-card.svg +51 -0
  1280. package/src/assets/images/clearing-1.png +0 -0
  1281. package/src/assets/images/clearing-2.png +0 -0
  1282. package/src/assets/images/compare_arrows.svg +8 -0
  1283. package/src/assets/images/darwinAskIcon.png +0 -0
  1284. package/src/assets/images/data_object_content.svg +9 -0
  1285. package/src/assets/images/deadline.svg +1 -0
  1286. package/src/assets/images/del-1.png +0 -0
  1287. package/src/assets/images/del-2.png +0 -0
  1288. package/src/assets/images/del-3.png +0 -0
  1289. package/src/assets/images/desktop-view.svg +78 -0
  1290. package/src/assets/images/detecting.svg +28 -0
  1291. package/src/assets/images/discover-card.svg +9 -0
  1292. package/src/assets/images/discover-new.svg +9 -0
  1293. package/src/assets/images/discover.svg +9 -0
  1294. package/src/assets/images/dollar-symbol.svg +1 -0
  1295. package/src/assets/images/dots-loader.svg +1 -0
  1296. package/src/assets/images/down_arrow.png +0 -0
  1297. package/src/assets/images/drag.png +0 -0
  1298. package/src/assets/images/dribbble.webp +0 -0
  1299. package/src/assets/images/drop-bg.svg +3 -0
  1300. package/src/assets/images/dummy-image.png +0 -0
  1301. package/src/assets/images/duration.svg +3 -0
  1302. package/src/assets/images/e-img.png +0 -0
  1303. package/src/assets/images/eCareHub.svg +10 -0
  1304. package/src/assets/images/ecarehub_logo.svg +9 -0
  1305. package/src/assets/images/edvak_logo.svg +11 -0
  1306. package/src/assets/images/edvak_logo_temp.svg +9 -0
  1307. package/src/assets/images/edvak_logo_temp1.svg +9 -0
  1308. package/src/assets/images/edvaklogo-old.svg +9 -0
  1309. package/src/assets/images/edvaklogo.svg +5 -0
  1310. package/src/assets/images/emptry-list.svg +59 -0
  1311. package/src/assets/images/empty-list.svg +59 -0
  1312. package/src/assets/images/empty-list2.svg +52 -0
  1313. package/src/assets/images/failed.png +0 -0
  1314. package/src/assets/images/fax-1.svg +8 -0
  1315. package/src/assets/images/fax-2.svg +8 -0
  1316. package/src/assets/images/fax_restore.png +0 -0
  1317. package/src/assets/images/file-pdf.png +0 -0
  1318. package/src/assets/images/file.svg +1 -0
  1319. package/src/assets/images/file_csv.svg +14 -0
  1320. package/src/assets/images/file_xlsx.svg +15 -0
  1321. package/src/assets/images/flash.svg +3 -0
  1322. package/src/assets/images/folder.png +0 -0
  1323. package/src/assets/images/folder.svg +1 -0
  1324. package/src/assets/images/footer-line.jpg +0 -0
  1325. package/src/assets/images/formNoteIcon.svg +15 -0
  1326. package/src/assets/images/gettingstarted.svg +9 -0
  1327. package/src/assets/images/google-store.png +0 -0
  1328. package/src/assets/images/google-store.svg +10 -0
  1329. package/src/assets/images/graph-chart.png +0 -0
  1330. package/src/assets/images/graph-dec.svg +9 -0
  1331. package/src/assets/images/graph-inc.svg +9 -0
  1332. package/src/assets/images/graphic.svg +8 -0
  1333. package/src/assets/images/handheld-connected.svg +9 -0
  1334. package/src/assets/images/handheld-not-connected.svg +9 -0
  1335. package/src/assets/images/health-care-logo.svg +13 -0
  1336. package/src/assets/images/healthcare-bg.png +0 -0
  1337. package/src/assets/images/healthcare-logo.svg +27 -0
  1338. package/src/assets/images/heart-attack.svg +1 -0
  1339. package/src/assets/images/hover_add_icon.png +0 -0
  1340. package/src/assets/images/iOS-Banner.png +0 -0
  1341. package/src/assets/images/icons/material-symbols/300/rounded/add.svg +1 -0
  1342. package/src/assets/images/icons/material-symbols/300/rounded/add_box-fill.svg +1 -0
  1343. package/src/assets/images/icons/material-symbols/300/rounded/add_box.svg +1 -0
  1344. package/src/assets/images/icons/material-symbols/300/rounded/add_call-fill.svg +1 -0
  1345. package/src/assets/images/icons/material-symbols/300/rounded/add_call.svg +1 -0
  1346. package/src/assets/images/icons/material-symbols/300/rounded/add_reaction.svg +8 -0
  1347. package/src/assets/images/icons/material-symbols/300/rounded/alternate_email.svg +8 -0
  1348. package/src/assets/images/icons/material-symbols/300/rounded/arrow_left.svg +1 -0
  1349. package/src/assets/images/icons/material-symbols/300/rounded/arrow_left_alt.svg +1 -0
  1350. package/src/assets/images/icons/material-symbols/300/rounded/attach_file-fill.svg +1 -0
  1351. package/src/assets/images/icons/material-symbols/300/rounded/attach_file.svg +1 -0
  1352. package/src/assets/images/icons/material-symbols/300/rounded/attach_file_add-fill.svg +1 -0
  1353. package/src/assets/images/icons/material-symbols/300/rounded/attach_file_add.svg +1 -0
  1354. package/src/assets/images/icons/material-symbols/300/rounded/attach_money-fill.svg +1 -0
  1355. package/src/assets/images/icons/material-symbols/300/rounded/attach_money.svg +1 -0
  1356. package/src/assets/images/icons/material-symbols/300/rounded/auto_awesome_mosaic-fill.svg +1 -0
  1357. package/src/assets/images/icons/material-symbols/300/rounded/auto_awesome_mosaic.svg +1 -0
  1358. package/src/assets/images/icons/material-symbols/300/rounded/border_color-fill.svg +1 -0
  1359. package/src/assets/images/icons/material-symbols/300/rounded/border_color.svg +1 -0
  1360. package/src/assets/images/icons/material-symbols/300/rounded/cac.svg +1 -0
  1361. package/src/assets/images/icons/material-symbols/300/rounded/cached.svg +8 -0
  1362. package/src/assets/images/icons/material-symbols/300/rounded/calculate-fill.svg +1 -0
  1363. package/src/assets/images/icons/material-symbols/300/rounded/calculate.svg +1 -0
  1364. package/src/assets/images/icons/material-symbols/300/rounded/calendar_add_on-fill.svg +1 -0
  1365. package/src/assets/images/icons/material-symbols/300/rounded/calendar_add_on.svg +1 -0
  1366. package/src/assets/images/icons/material-symbols/300/rounded/calendar_month.svg +1 -0
  1367. package/src/assets/images/icons/material-symbols/300/rounded/calendar_today-fill.svg +1 -0
  1368. package/src/assets/images/icons/material-symbols/300/rounded/calendar_today.svg +1 -0
  1369. package/src/assets/images/icons/material-symbols/300/rounded/call-fill.svg +1 -0
  1370. package/src/assets/images/icons/material-symbols/300/rounded/call.svg +1 -0
  1371. package/src/assets/images/icons/material-symbols/300/rounded/call_received-fill.svg +1 -0
  1372. package/src/assets/images/icons/material-symbols/300/rounded/call_received.svg +1 -0
  1373. package/src/assets/images/icons/material-symbols/300/rounded/chart_data-fill.svg +1 -0
  1374. package/src/assets/images/icons/material-symbols/300/rounded/chart_data.svg +1 -0
  1375. package/src/assets/images/icons/material-symbols/300/rounded/chat.svg +1 -0
  1376. package/src/assets/images/icons/material-symbols/300/rounded/chat_bubble.svg +8 -0
  1377. package/src/assets/images/icons/material-symbols/300/rounded/check-fill.svg +1 -0
  1378. package/src/assets/images/icons/material-symbols/300/rounded/check.svg +1 -0
  1379. package/src/assets/images/icons/material-symbols/300/rounded/check_circle-fill.svg +1 -0
  1380. package/src/assets/images/icons/material-symbols/300/rounded/check_circle.svg +1 -0
  1381. package/src/assets/images/icons/material-symbols/300/rounded/chevron_left-fill.svg +1 -0
  1382. package/src/assets/images/icons/material-symbols/300/rounded/chevron_left.svg +1 -0
  1383. package/src/assets/images/icons/material-symbols/300/rounded/chevron_right-fill.svg +1 -0
  1384. package/src/assets/images/icons/material-symbols/300/rounded/chevron_right.svg +1 -0
  1385. package/src/assets/images/icons/material-symbols/300/rounded/close-fill.svg +1 -0
  1386. package/src/assets/images/icons/material-symbols/300/rounded/close.svg +1 -0
  1387. package/src/assets/images/icons/material-symbols/300/rounded/collections_bookmark-fill.svg +1 -0
  1388. package/src/assets/images/icons/material-symbols/300/rounded/collections_bookmark.svg +1 -0
  1389. package/src/assets/images/icons/material-symbols/300/rounded/contact_page-fill.svg +1 -0
  1390. package/src/assets/images/icons/material-symbols/300/rounded/contact_page.svg +1 -0
  1391. package/src/assets/images/icons/material-symbols/300/rounded/create_new_folder-fill.svg +1 -0
  1392. package/src/assets/images/icons/material-symbols/300/rounded/create_new_folder.svg +1 -0
  1393. package/src/assets/images/icons/material-symbols/300/rounded/credit_card-fill.svg +1 -0
  1394. package/src/assets/images/icons/material-symbols/300/rounded/credit_card.svg +1 -0
  1395. package/src/assets/images/icons/material-symbols/300/rounded/credit_card_off-fill.svg +1 -0
  1396. package/src/assets/images/icons/material-symbols/300/rounded/credit_card_off.svg +1 -0
  1397. package/src/assets/images/icons/material-symbols/300/rounded/data_object-fill.svg +1 -0
  1398. package/src/assets/images/icons/material-symbols/300/rounded/data_object.svg +1 -0
  1399. package/src/assets/images/icons/material-symbols/300/rounded/delete-fill.svg +1 -0
  1400. package/src/assets/images/icons/material-symbols/300/rounded/delete.svg +1 -0
  1401. package/src/assets/images/icons/material-symbols/300/rounded/description-fill.svg +1 -0
  1402. package/src/assets/images/icons/material-symbols/300/rounded/description.svg +1 -0
  1403. package/src/assets/images/icons/material-symbols/300/rounded/dialpad-fill.svg +1 -0
  1404. package/src/assets/images/icons/material-symbols/300/rounded/dialpad.svg +1 -0
  1405. package/src/assets/images/icons/material-symbols/300/rounded/do_not_disturb_off-fill.svg +1 -0
  1406. package/src/assets/images/icons/material-symbols/300/rounded/do_not_disturb_off.svg +1 -0
  1407. package/src/assets/images/icons/material-symbols/300/rounded/do_not_disturb_on-fill.svg +1 -0
  1408. package/src/assets/images/icons/material-symbols/300/rounded/do_not_disturb_on.svg +1 -0
  1409. package/src/assets/images/icons/material-symbols/300/rounded/do_not_disturb_on_total_silence-fill.svg +1 -0
  1410. package/src/assets/images/icons/material-symbols/300/rounded/do_not_disturb_on_total_silence.svg +1 -0
  1411. package/src/assets/images/icons/material-symbols/300/rounded/done-fill.svg +1 -0
  1412. package/src/assets/images/icons/material-symbols/300/rounded/done.svg +1 -0
  1413. package/src/assets/images/icons/material-symbols/300/rounded/door_open-fill.svg +1 -0
  1414. package/src/assets/images/icons/material-symbols/300/rounded/door_open.svg +1 -0
  1415. package/src/assets/images/icons/material-symbols/300/rounded/download-fill.svg +1 -0
  1416. package/src/assets/images/icons/material-symbols/300/rounded/download.svg +1 -0
  1417. package/src/assets/images/icons/material-symbols/300/rounded/draft-fill.svg +1 -0
  1418. package/src/assets/images/icons/material-symbols/300/rounded/draft.svg +1 -0
  1419. package/src/assets/images/icons/material-symbols/300/rounded/drag_indicator-fill.svg +1 -0
  1420. package/src/assets/images/icons/material-symbols/300/rounded/drag_indicator.svg +1 -0
  1421. package/src/assets/images/icons/material-symbols/300/rounded/drag_pan-fill.svg +1 -0
  1422. package/src/assets/images/icons/material-symbols/300/rounded/drag_pan.svg +1 -0
  1423. package/src/assets/images/icons/material-symbols/300/rounded/east-fill.svg +1 -0
  1424. package/src/assets/images/icons/material-symbols/300/rounded/east.svg +1 -0
  1425. package/src/assets/images/icons/material-symbols/300/rounded/edit-fill.svg +1 -0
  1426. package/src/assets/images/icons/material-symbols/300/rounded/edit.svg +1 -0
  1427. package/src/assets/images/icons/material-symbols/300/rounded/edit_note-fill.svg +1 -0
  1428. package/src/assets/images/icons/material-symbols/300/rounded/edit_note.svg +1 -0
  1429. package/src/assets/images/icons/material-symbols/300/rounded/edit_square-fill.svg +1 -0
  1430. package/src/assets/images/icons/material-symbols/300/rounded/edit_square.svg +1 -0
  1431. package/src/assets/images/icons/material-symbols/300/rounded/error-fill.svg +1 -0
  1432. package/src/assets/images/icons/material-symbols/300/rounded/error.svg +1 -0
  1433. package/src/assets/images/icons/material-symbols/300/rounded/expand_more-fill.svg +1 -0
  1434. package/src/assets/images/icons/material-symbols/300/rounded/expand_more.svg +1 -0
  1435. package/src/assets/images/icons/material-symbols/300/rounded/folder-fill.svg +1 -0
  1436. package/src/assets/images/icons/material-symbols/300/rounded/folder.svg +1 -0
  1437. package/src/assets/images/icons/material-symbols/300/rounded/graphic_eq-fill.svg +1 -0
  1438. package/src/assets/images/icons/material-symbols/300/rounded/graphic_eq.svg +1 -0
  1439. package/src/assets/images/icons/material-symbols/300/rounded/handyman-fill.svg +1 -0
  1440. package/src/assets/images/icons/material-symbols/300/rounded/handyman.svg +1 -0
  1441. package/src/assets/images/icons/material-symbols/300/rounded/help-fill.svg +1 -0
  1442. package/src/assets/images/icons/material-symbols/300/rounded/help.svg +1 -0
  1443. package/src/assets/images/icons/material-symbols/300/rounded/history-fill.svg +1 -0
  1444. package/src/assets/images/icons/material-symbols/300/rounded/history.svg +1 -0
  1445. package/src/assets/images/icons/material-symbols/300/rounded/history_toggle_off-fill.svg +1 -0
  1446. package/src/assets/images/icons/material-symbols/300/rounded/history_toggle_off.svg +1 -0
  1447. package/src/assets/images/icons/material-symbols/300/rounded/house_with_shield-fill.svg +1 -0
  1448. package/src/assets/images/icons/material-symbols/300/rounded/house_with_shield.svg +1 -0
  1449. package/src/assets/images/icons/material-symbols/300/rounded/info-fill.svg +1 -0
  1450. package/src/assets/images/icons/material-symbols/300/rounded/info.svg +1 -0
  1451. package/src/assets/images/icons/material-symbols/300/rounded/info_i-fill.svg +1 -0
  1452. package/src/assets/images/icons/material-symbols/300/rounded/info_i.svg +1 -0
  1453. package/src/assets/images/icons/material-symbols/300/rounded/keep.svg +8 -0
  1454. package/src/assets/images/icons/material-symbols/300/rounded/key-fill.svg +1 -0
  1455. package/src/assets/images/icons/material-symbols/300/rounded/key.svg +1 -0
  1456. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_arrow_right-fill.svg +1 -0
  1457. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_arrow_right.svg +1 -0
  1458. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_backspace-fill.svg +1 -0
  1459. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_backspace.svg +1 -0
  1460. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_double_arrow_left-fill.svg +1 -0
  1461. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_double_arrow_left.svg +1 -0
  1462. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_double_arrow_right-fill.svg +1 -0
  1463. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_double_arrow_right.svg +1 -0
  1464. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_voice-fill.svg +1 -0
  1465. package/src/assets/images/icons/material-symbols/300/rounded/keyboard_voice.svg +1 -0
  1466. package/src/assets/images/icons/material-symbols/300/rounded/lab_profile-fill.svg +1 -0
  1467. package/src/assets/images/icons/material-symbols/300/rounded/lab_profile.svg +1 -0
  1468. package/src/assets/images/icons/material-symbols/300/rounded/label_important.svg +8 -0
  1469. package/src/assets/images/icons/material-symbols/300/rounded/link-fill.svg +1 -0
  1470. package/src/assets/images/icons/material-symbols/300/rounded/link.svg +1 -0
  1471. package/src/assets/images/icons/material-symbols/300/rounded/location_on-fill.svg +1 -0
  1472. package/src/assets/images/icons/material-symbols/300/rounded/location_on.svg +1 -0
  1473. package/src/assets/images/icons/material-symbols/300/rounded/lock-fill.svg +1 -0
  1474. package/src/assets/images/icons/material-symbols/300/rounded/lock.svg +1 -0
  1475. package/src/assets/images/icons/material-symbols/300/rounded/lock_open-fill.svg +1 -0
  1476. package/src/assets/images/icons/material-symbols/300/rounded/lock_open.svg +1 -0
  1477. package/src/assets/images/icons/material-symbols/300/rounded/lock_open_right.svg +1 -0
  1478. package/src/assets/images/icons/material-symbols/300/rounded/lock_person-fill.svg +1 -0
  1479. package/src/assets/images/icons/material-symbols/300/rounded/lock_person.svg +1 -0
  1480. package/src/assets/images/icons/material-symbols/300/rounded/menu.svg +1 -0
  1481. package/src/assets/images/icons/material-symbols/300/rounded/mic.svg +1 -0
  1482. package/src/assets/images/icons/material-symbols/300/rounded/mood.svg +8 -0
  1483. package/src/assets/images/icons/material-symbols/300/rounded/more_vert-fill.svg +1 -0
  1484. package/src/assets/images/icons/material-symbols/300/rounded/more_vert.svg +1 -0
  1485. package/src/assets/images/icons/material-symbols/300/rounded/move_up-fill.svg +1 -0
  1486. package/src/assets/images/icons/material-symbols/300/rounded/move_up.svg +1 -0
  1487. package/src/assets/images/icons/material-symbols/300/rounded/navigate_next-fill.svg +1 -0
  1488. package/src/assets/images/icons/material-symbols/300/rounded/navigate_next.svg +1 -0
  1489. package/src/assets/images/icons/material-symbols/300/rounded/neurology-fill.svg +1 -0
  1490. package/src/assets/images/icons/material-symbols/300/rounded/neurology.svg +1 -0
  1491. package/src/assets/images/icons/material-symbols/300/rounded/note-fill.svg +1 -0
  1492. package/src/assets/images/icons/material-symbols/300/rounded/note.svg +1 -0
  1493. package/src/assets/images/icons/material-symbols/300/rounded/note_add-fill.svg +1 -0
  1494. package/src/assets/images/icons/material-symbols/300/rounded/note_add.svg +1 -0
  1495. package/src/assets/images/icons/material-symbols/300/rounded/notifications-fill.svg +1 -0
  1496. package/src/assets/images/icons/material-symbols/300/rounded/notifications.svg +1 -0
  1497. package/src/assets/images/icons/material-symbols/300/rounded/patient_list.svg +1 -0
  1498. package/src/assets/images/icons/material-symbols/300/rounded/pause-fill.svg +1 -0
  1499. package/src/assets/images/icons/material-symbols/300/rounded/pause.svg +1 -0
  1500. package/src/assets/images/icons/material-symbols/300/rounded/person.svg +1 -0
  1501. package/src/assets/images/icons/material-symbols/300/rounded/person_2-fill.svg +1 -0
  1502. package/src/assets/images/icons/material-symbols/300/rounded/person_2.svg +1 -0
  1503. package/src/assets/images/icons/material-symbols/300/rounded/person_3-fill.svg +1 -0
  1504. package/src/assets/images/icons/material-symbols/300/rounded/person_3.svg +1 -0
  1505. package/src/assets/images/icons/material-symbols/300/rounded/person_4-fill.svg +1 -0
  1506. package/src/assets/images/icons/material-symbols/300/rounded/person_4.svg +1 -0
  1507. package/src/assets/images/icons/material-symbols/300/rounded/person_add-fill.svg +1 -0
  1508. package/src/assets/images/icons/material-symbols/300/rounded/person_add.svg +1 -0
  1509. package/src/assets/images/icons/material-symbols/300/rounded/person_add_disabled-fill.svg +1 -0
  1510. package/src/assets/images/icons/material-symbols/300/rounded/person_add_disabled.svg +1 -0
  1511. package/src/assets/images/icons/material-symbols/300/rounded/play_arrow-fill.svg +1 -0
  1512. package/src/assets/images/icons/material-symbols/300/rounded/play_arrow.svg +1 -0
  1513. package/src/assets/images/icons/material-symbols/300/rounded/prescriptions-fill.svg +1 -0
  1514. package/src/assets/images/icons/material-symbols/300/rounded/prescriptions.svg +1 -0
  1515. package/src/assets/images/icons/material-symbols/300/rounded/preview-fill.svg +1 -0
  1516. package/src/assets/images/icons/material-symbols/300/rounded/preview.svg +1 -0
  1517. package/src/assets/images/icons/material-symbols/300/rounded/preview_off-fill.svg +1 -0
  1518. package/src/assets/images/icons/material-symbols/300/rounded/preview_off.svg +1 -0
  1519. package/src/assets/images/icons/material-symbols/300/rounded/price_change-fill.svg +1 -0
  1520. package/src/assets/images/icons/material-symbols/300/rounded/price_change.svg +1 -0
  1521. package/src/assets/images/icons/material-symbols/300/rounded/print-fill.svg +1 -0
  1522. package/src/assets/images/icons/material-symbols/300/rounded/print.svg +1 -0
  1523. package/src/assets/images/icons/material-symbols/300/rounded/prompt_suggestion.svg +8 -0
  1524. package/src/assets/images/icons/material-symbols/300/rounded/push_pin-fill.svg +1 -0
  1525. package/src/assets/images/icons/material-symbols/300/rounded/push_pin.svg +1 -0
  1526. package/src/assets/images/icons/material-symbols/300/rounded/radio_button_checked-fill.svg +1 -0
  1527. package/src/assets/images/icons/material-symbols/300/rounded/radio_button_checked.svg +1 -0
  1528. package/src/assets/images/icons/material-symbols/300/rounded/refresh-fill.svg +1 -0
  1529. package/src/assets/images/icons/material-symbols/300/rounded/refresh.svg +1 -0
  1530. package/src/assets/images/icons/material-symbols/300/rounded/remove-fill.svg +1 -0
  1531. package/src/assets/images/icons/material-symbols/300/rounded/remove.svg +1 -0
  1532. package/src/assets/images/icons/material-symbols/300/rounded/repeat-fill.svg +1 -0
  1533. package/src/assets/images/icons/material-symbols/300/rounded/repeat.svg +1 -0
  1534. package/src/assets/images/icons/material-symbols/300/rounded/report-fill.svg +1 -0
  1535. package/src/assets/images/icons/material-symbols/300/rounded/report.svg +1 -0
  1536. package/src/assets/images/icons/material-symbols/300/rounded/rotate_left-fill.svg +1 -0
  1537. package/src/assets/images/icons/material-symbols/300/rounded/rotate_left.svg +1 -0
  1538. package/src/assets/images/icons/material-symbols/300/rounded/safety_check-fill.svg +1 -0
  1539. package/src/assets/images/icons/material-symbols/300/rounded/safety_check.svg +1 -0
  1540. package/src/assets/images/icons/material-symbols/300/rounded/safety_check_off-fill.svg +1 -0
  1541. package/src/assets/images/icons/material-symbols/300/rounded/safety_check_off.svg +1 -0
  1542. package/src/assets/images/icons/material-symbols/300/rounded/scanner-fill.svg +1 -0
  1543. package/src/assets/images/icons/material-symbols/300/rounded/scanner.svg +1 -0
  1544. package/src/assets/images/icons/material-symbols/300/rounded/search-fill.svg +1 -0
  1545. package/src/assets/images/icons/material-symbols/300/rounded/search.svg +1 -0
  1546. package/src/assets/images/icons/material-symbols/300/rounded/send-fill.svg +1 -0
  1547. package/src/assets/images/icons/material-symbols/300/rounded/send.svg +1 -0
  1548. package/src/assets/images/icons/material-symbols/300/rounded/settings-fill.svg +1 -0
  1549. package/src/assets/images/icons/material-symbols/300/rounded/settings.svg +1 -0
  1550. package/src/assets/images/icons/material-symbols/300/rounded/settings_applications-fill.svg +1 -0
  1551. package/src/assets/images/icons/material-symbols/300/rounded/settings_applications.svg +1 -0
  1552. package/src/assets/images/icons/material-symbols/300/rounded/share-fill.svg +1 -0
  1553. package/src/assets/images/icons/material-symbols/300/rounded/share.svg +1 -0
  1554. package/src/assets/images/icons/material-symbols/300/rounded/signpost-fill.svg +1 -0
  1555. package/src/assets/images/icons/material-symbols/300/rounded/signpost.svg +1 -0
  1556. package/src/assets/images/icons/material-symbols/300/rounded/sort-fill.svg +1 -0
  1557. package/src/assets/images/icons/material-symbols/300/rounded/sort.svg +1 -0
  1558. package/src/assets/images/icons/material-symbols/300/rounded/sprint-fill.svg +1 -0
  1559. package/src/assets/images/icons/material-symbols/300/rounded/sprint.svg +1 -0
  1560. package/src/assets/images/icons/material-symbols/300/rounded/star-fill.svg +1 -0
  1561. package/src/assets/images/icons/material-symbols/300/rounded/star.svg +1 -0
  1562. package/src/assets/images/icons/material-symbols/300/rounded/star_half-fill.svg +1 -0
  1563. package/src/assets/images/icons/material-symbols/300/rounded/star_half.svg +1 -0
  1564. package/src/assets/images/icons/material-symbols/300/rounded/supervisor_account-fill.svg +1 -0
  1565. package/src/assets/images/icons/material-symbols/300/rounded/supervisor_account.svg +1 -0
  1566. package/src/assets/images/icons/material-symbols/300/rounded/swipe_left_alt-fill.svg +1 -0
  1567. package/src/assets/images/icons/material-symbols/300/rounded/swipe_left_alt.svg +1 -0
  1568. package/src/assets/images/icons/material-symbols/300/rounded/syringe-fill.svg +1 -0
  1569. package/src/assets/images/icons/material-symbols/300/rounded/syringe.svg +1 -0
  1570. package/src/assets/images/icons/material-symbols/300/rounded/task_alt-fill.svg +1 -0
  1571. package/src/assets/images/icons/material-symbols/300/rounded/task_alt.svg +1 -0
  1572. package/src/assets/images/icons/material-symbols/300/rounded/turn_left-fill.svg +1 -0
  1573. package/src/assets/images/icons/material-symbols/300/rounded/turn_left.svg +1 -0
  1574. package/src/assets/images/icons/material-symbols/300/rounded/turn_right-fill.svg +1 -0
  1575. package/src/assets/images/icons/material-symbols/300/rounded/turn_right.svg +1 -0
  1576. package/src/assets/images/icons/material-symbols/300/rounded/u_turn_left-fill.svg +1 -0
  1577. package/src/assets/images/icons/material-symbols/300/rounded/u_turn_left.svg +1 -0
  1578. package/src/assets/images/icons/material-symbols/300/rounded/upload_file-fill.svg +1 -0
  1579. package/src/assets/images/icons/material-symbols/300/rounded/upload_file.svg +1 -0
  1580. package/src/assets/images/icons/material-symbols/300/rounded/videocam-fill.svg +1 -0
  1581. package/src/assets/images/icons/material-symbols/300/rounded/videocam.svg +1 -0
  1582. package/src/assets/images/icons/material-symbols/300/rounded/warning-fill.svg +1 -0
  1583. package/src/assets/images/icons/material-symbols/300/rounded/warning.svg +1 -0
  1584. package/src/assets/images/icons/material-symbols/300/rounded/where_to_vote-fill.svg +1 -0
  1585. package/src/assets/images/icons/material-symbols/300/rounded/where_to_vote.svg +1 -0
  1586. package/src/assets/images/icons/material-symbols/300/rounded/widgets.svg +1 -0
  1587. package/src/assets/images/icons/material-symbols/400/rounded/accessibility.svg +8 -0
  1588. package/src/assets/images/icons/material-symbols/400/rounded/account_tree.svg +8 -0
  1589. package/src/assets/images/icons/material-symbols/400/rounded/add.svg +8 -0
  1590. package/src/assets/images/icons/material-symbols/400/rounded/add_box.svg +1 -0
  1591. package/src/assets/images/icons/material-symbols/400/rounded/add_call-fill.svg +1 -0
  1592. package/src/assets/images/icons/material-symbols/400/rounded/add_call.svg +1 -0
  1593. package/src/assets/images/icons/material-symbols/400/rounded/add_circle.svg +8 -0
  1594. package/src/assets/images/icons/material-symbols/400/rounded/add_link.svg +8 -0
  1595. package/src/assets/images/icons/material-symbols/400/rounded/add_reaction.svg +8 -0
  1596. package/src/assets/images/icons/material-symbols/400/rounded/alarm.svg +8 -0
  1597. package/src/assets/images/icons/material-symbols/400/rounded/alternate_email.svg +8 -0
  1598. package/src/assets/images/icons/material-symbols/400/rounded/ambulance.svg +15 -0
  1599. package/src/assets/images/icons/material-symbols/400/rounded/ambulance_2.svg +17 -0
  1600. package/src/assets/images/icons/material-symbols/400/rounded/arrow-bar-right.svg +3 -0
  1601. package/src/assets/images/icons/material-symbols/400/rounded/arrow-repeat.svg +4 -0
  1602. package/src/assets/images/icons/material-symbols/400/rounded/arrow_downward_alt.svg +8 -0
  1603. package/src/assets/images/icons/material-symbols/400/rounded/arrow_left.svg +1 -0
  1604. package/src/assets/images/icons/material-symbols/400/rounded/arrow_left_alt.svg +1 -0
  1605. package/src/assets/images/icons/material-symbols/400/rounded/arrow_right_alt.svg +8 -0
  1606. package/src/assets/images/icons/material-symbols/400/rounded/arrow_top_left.svg +8 -0
  1607. package/src/assets/images/icons/material-symbols/400/rounded/arrow_upward_alt.svg +8 -0
  1608. package/src/assets/images/icons/material-symbols/400/rounded/article-fill.svg +1 -0
  1609. package/src/assets/images/icons/material-symbols/400/rounded/article.svg +1 -0
  1610. package/src/assets/images/icons/material-symbols/400/rounded/at.svg +3 -0
  1611. package/src/assets/images/icons/material-symbols/400/rounded/atr.svg +8 -0
  1612. package/src/assets/images/icons/material-symbols/400/rounded/attach_file.svg +1 -0
  1613. package/src/assets/images/icons/material-symbols/400/rounded/attach_money.svg +8 -0
  1614. package/src/assets/images/icons/material-symbols/400/rounded/attachment.svg +1 -0
  1615. package/src/assets/images/icons/material-symbols/400/rounded/auto_awesome_mosaic.svg +8 -0
  1616. package/src/assets/images/icons/material-symbols/400/rounded/auto_pay.svg +8 -0
  1617. package/src/assets/images/icons/material-symbols/400/rounded/backspace_fill.svg +8 -0
  1618. package/src/assets/images/icons/material-symbols/400/rounded/block.svg +8 -0
  1619. package/src/assets/images/icons/material-symbols/400/rounded/bolt.svg +1 -0
  1620. package/src/assets/images/icons/material-symbols/400/rounded/border_color.svg +8 -0
  1621. package/src/assets/images/icons/material-symbols/400/rounded/brightness_1.svg +8 -0
  1622. package/src/assets/images/icons/material-symbols/400/rounded/bubble.svg +8 -0
  1623. package/src/assets/images/icons/material-symbols/400/rounded/cached.svg +8 -0
  1624. package/src/assets/images/icons/material-symbols/400/rounded/calculate.svg +8 -0
  1625. package/src/assets/images/icons/material-symbols/400/rounded/calendar-x.svg +4 -0
  1626. package/src/assets/images/icons/material-symbols/400/rounded/calendar_down.svg +9 -0
  1627. package/src/assets/images/icons/material-symbols/400/rounded/calendar_month.svg +8 -0
  1628. package/src/assets/images/icons/material-symbols/400/rounded/calendar_today.svg +8 -0
  1629. package/src/assets/images/icons/material-symbols/400/rounded/calendar_up.svg +9 -0
  1630. package/src/assets/images/icons/material-symbols/400/rounded/call-fill.svg +1 -0
  1631. package/src/assets/images/icons/material-symbols/400/rounded/call.svg +1 -0
  1632. package/src/assets/images/icons/material-symbols/400/rounded/call_end-fill.svg +1 -0
  1633. package/src/assets/images/icons/material-symbols/400/rounded/call_end.svg +1 -0
  1634. package/src/assets/images/icons/material-symbols/400/rounded/call_fill.svg +8 -0
  1635. package/src/assets/images/icons/material-symbols/400/rounded/call_log-fill.svg +1 -0
  1636. package/src/assets/images/icons/material-symbols/400/rounded/call_log.svg +1 -0
  1637. package/src/assets/images/icons/material-symbols/400/rounded/call_made.svg +1 -0
  1638. package/src/assets/images/icons/material-symbols/400/rounded/call_merge.svg +1 -0
  1639. package/src/assets/images/icons/material-symbols/400/rounded/call_missed.svg +1 -0
  1640. package/src/assets/images/icons/material-symbols/400/rounded/call_missed_outgoing.svg +1 -0
  1641. package/src/assets/images/icons/material-symbols/400/rounded/call_quality-fill.svg +1 -0
  1642. package/src/assets/images/icons/material-symbols/400/rounded/call_quality.svg +1 -0
  1643. package/src/assets/images/icons/material-symbols/400/rounded/call_received.svg +1 -0
  1644. package/src/assets/images/icons/material-symbols/400/rounded/call_split.svg +1 -0
  1645. package/src/assets/images/icons/material-symbols/400/rounded/call_to_action-fill.svg +1 -0
  1646. package/src/assets/images/icons/material-symbols/400/rounded/call_to_action.svg +1 -0
  1647. package/src/assets/images/icons/material-symbols/400/rounded/campaign.svg +8 -0
  1648. package/src/assets/images/icons/material-symbols/400/rounded/cancel.svg +8 -0
  1649. package/src/assets/images/icons/material-symbols/400/rounded/card-list.svg +4 -0
  1650. package/src/assets/images/icons/material-symbols/400/rounded/cash.svg +4 -0
  1651. package/src/assets/images/icons/material-symbols/400/rounded/chart_data.svg +8 -0
  1652. package/src/assets/images/icons/material-symbols/400/rounded/chat-fill.svg +1 -0
  1653. package/src/assets/images/icons/material-symbols/400/rounded/chat.svg +8 -0
  1654. package/src/assets/images/icons/material-symbols/400/rounded/chat_bubble.svg +8 -0
  1655. package/src/assets/images/icons/material-symbols/400/rounded/check-circle-fill.svg +3 -0
  1656. package/src/assets/images/icons/material-symbols/400/rounded/check.svg +1 -0
  1657. package/src/assets/images/icons/material-symbols/400/rounded/check2-all.svg +4 -0
  1658. package/src/assets/images/icons/material-symbols/400/rounded/check_circle-fill.svg +8 -0
  1659. package/src/assets/images/icons/material-symbols/400/rounded/check_circle.svg +8 -0
  1660. package/src/assets/images/icons/material-symbols/400/rounded/check_circle_fill.svg +8 -0
  1661. package/src/assets/images/icons/material-symbols/400/rounded/chevron_left.svg +15 -0
  1662. package/src/assets/images/icons/material-symbols/400/rounded/chevron_right.svg +8 -0
  1663. package/src/assets/images/icons/material-symbols/400/rounded/chronic-fill.svg +1 -0
  1664. package/src/assets/images/icons/material-symbols/400/rounded/chronic.svg +1 -0
  1665. package/src/assets/images/icons/material-symbols/400/rounded/circle-fill.svg +3 -0
  1666. package/src/assets/images/icons/material-symbols/400/rounded/circle_notifications-fill.svg +1 -0
  1667. package/src/assets/images/icons/material-symbols/400/rounded/circle_notifications.svg +1 -0
  1668. package/src/assets/images/icons/material-symbols/400/rounded/clear-all.svg +1 -0
  1669. package/src/assets/images/icons/material-symbols/400/rounded/clinic.svg +3 -0
  1670. package/src/assets/images/icons/material-symbols/400/rounded/clinic_settings.svg +3 -0
  1671. package/src/assets/images/icons/material-symbols/400/rounded/clipboard-check.svg +5 -0
  1672. package/src/assets/images/icons/material-symbols/400/rounded/clock-history.svg +5 -0
  1673. package/src/assets/images/icons/material-symbols/400/rounded/clock_loader_40.svg +8 -0
  1674. package/src/assets/images/icons/material-symbols/400/rounded/close.svg +1 -0
  1675. package/src/assets/images/icons/material-symbols/400/rounded/collapse_all.svg +1 -0
  1676. package/src/assets/images/icons/material-symbols/400/rounded/collapse_content.svg +8 -0
  1677. package/src/assets/images/icons/material-symbols/400/rounded/collections_bookmark-fill.svg +1 -0
  1678. package/src/assets/images/icons/material-symbols/400/rounded/collections_bookmark.svg +1 -0
  1679. package/src/assets/images/icons/material-symbols/400/rounded/comment.svg +1 -0
  1680. package/src/assets/images/icons/material-symbols/400/rounded/contact_page.svg +8 -0
  1681. package/src/assets/images/icons/material-symbols/400/rounded/content_copy-fill.svg +1 -0
  1682. package/src/assets/images/icons/material-symbols/400/rounded/content_copy.svg +8 -0
  1683. package/src/assets/images/icons/material-symbols/400/rounded/copy_all.svg +8 -0
  1684. package/src/assets/images/icons/material-symbols/400/rounded/create_new_folder.svg +8 -0
  1685. package/src/assets/images/icons/material-symbols/400/rounded/credit_card-fill.svg +1 -0
  1686. package/src/assets/images/icons/material-symbols/400/rounded/credit_card.svg +1 -0
  1687. package/src/assets/images/icons/material-symbols/400/rounded/credit_card_off-fill.svg +1 -0
  1688. package/src/assets/images/icons/material-symbols/400/rounded/credit_card_off.svg +1 -0
  1689. package/src/assets/images/icons/material-symbols/400/rounded/dangerous.svg +8 -0
  1690. package/src/assets/images/icons/material-symbols/400/rounded/dash-circle.svg +4 -0
  1691. package/src/assets/images/icons/material-symbols/400/rounded/dashboard_customize.svg +8 -0
  1692. package/src/assets/images/icons/material-symbols/400/rounded/data_object.svg +8 -0
  1693. package/src/assets/images/icons/material-symbols/400/rounded/data_object_bold.svg +8 -0
  1694. package/src/assets/images/icons/material-symbols/400/rounded/delete-fill.svg +1 -0
  1695. package/src/assets/images/icons/material-symbols/400/rounded/delete.svg +1 -0
  1696. package/src/assets/images/icons/material-symbols/400/rounded/demography.svg +8 -0
  1697. package/src/assets/images/icons/material-symbols/400/rounded/description.svg +8 -0
  1698. package/src/assets/images/icons/material-symbols/400/rounded/desktop_windows.svg +8 -0
  1699. package/src/assets/images/icons/material-symbols/400/rounded/dialpad.svg +1 -0
  1700. package/src/assets/images/icons/material-symbols/400/rounded/discover_tune.svg +1 -0
  1701. package/src/assets/images/icons/material-symbols/400/rounded/do_not_disturb_off.svg +8 -0
  1702. package/src/assets/images/icons/material-symbols/400/rounded/do_not_disturb_on.svg +8 -0
  1703. package/src/assets/images/icons/material-symbols/400/rounded/document_scanner.svg +8 -0
  1704. package/src/assets/images/icons/material-symbols/400/rounded/done.svg +1 -0
  1705. package/src/assets/images/icons/material-symbols/400/rounded/done_all.svg +8 -0
  1706. package/src/assets/images/icons/material-symbols/400/rounded/dot.svg +3 -0
  1707. package/src/assets/images/icons/material-symbols/400/rounded/double_arrow.svg +1 -0
  1708. package/src/assets/images/icons/material-symbols/400/rounded/download.svg +8 -0
  1709. package/src/assets/images/icons/material-symbols/400/rounded/draft.svg +8 -0
  1710. package/src/assets/images/icons/material-symbols/400/rounded/drag_indicator.svg +1 -0
  1711. package/src/assets/images/icons/material-symbols/400/rounded/drive_file_move.svg +1 -0
  1712. package/src/assets/images/icons/material-symbols/400/rounded/eFax.svg +17 -0
  1713. package/src/assets/images/icons/material-symbols/400/rounded/east.svg +8 -0
  1714. package/src/assets/images/icons/material-symbols/400/rounded/ecg_heart.svg +8 -0
  1715. package/src/assets/images/icons/material-symbols/400/rounded/ed-doctor.svg +15 -0
  1716. package/src/assets/images/icons/material-symbols/400/rounded/ed-form-disable.svg +9 -0
  1717. package/src/assets/images/icons/material-symbols/400/rounded/ed-invoice download.svg +13 -0
  1718. package/src/assets/images/icons/material-symbols/400/rounded/ed-payment_history.svg +9 -0
  1719. package/src/assets/images/icons/material-symbols/400/rounded/ed-receive.svg +9 -0
  1720. package/src/assets/images/icons/material-symbols/400/rounded/ed-refund.svg +9 -0
  1721. package/src/assets/images/icons/material-symbols/400/rounded/ed-regular-notes.svg +6 -0
  1722. package/src/assets/images/icons/material-symbols/400/rounded/ed-transaction download.svg +11 -0
  1723. package/src/assets/images/icons/material-symbols/400/rounded/edit-fill.svg +1 -0
  1724. package/src/assets/images/icons/material-symbols/400/rounded/edit.svg +1 -0
  1725. package/src/assets/images/icons/material-symbols/400/rounded/edit_calendar.svg +8 -0
  1726. package/src/assets/images/icons/material-symbols/400/rounded/edit_document.svg +8 -0
  1727. package/src/assets/images/icons/material-symbols/400/rounded/edit_note.svg +1 -0
  1728. package/src/assets/images/icons/material-symbols/400/rounded/edit_notifications-fill.svg +1 -0
  1729. package/src/assets/images/icons/material-symbols/400/rounded/edit_notifications.svg +1 -0
  1730. package/src/assets/images/icons/material-symbols/400/rounded/edit_square-fill.svg +1 -0
  1731. package/src/assets/images/icons/material-symbols/400/rounded/edit_square.svg +1 -0
  1732. package/src/assets/images/icons/material-symbols/400/rounded/email.svg +8 -0
  1733. package/src/assets/images/icons/material-symbols/400/rounded/encounters_h.svg +3 -0
  1734. package/src/assets/images/icons/material-symbols/400/rounded/endocrinology.svg +8 -0
  1735. package/src/assets/images/icons/material-symbols/400/rounded/ent.svg +8 -0
  1736. package/src/assets/images/icons/material-symbols/400/rounded/error.svg +1 -0
  1737. package/src/assets/images/icons/material-symbols/400/rounded/event.svg +8 -0
  1738. package/src/assets/images/icons/material-symbols/400/rounded/event_available-fill.svg +1 -0
  1739. package/src/assets/images/icons/material-symbols/400/rounded/event_available.svg +1 -0
  1740. package/src/assets/images/icons/material-symbols/400/rounded/event_busy.svg +8 -0
  1741. package/src/assets/images/icons/material-symbols/400/rounded/event_upcoming.svg +1 -0
  1742. package/src/assets/images/icons/material-symbols/400/rounded/expand_content.svg +8 -0
  1743. package/src/assets/images/icons/material-symbols/400/rounded/expand_less.svg +8 -0
  1744. package/src/assets/images/icons/material-symbols/400/rounded/expand_more.svg +8 -0
  1745. package/src/assets/images/icons/material-symbols/400/rounded/export_notes.svg +8 -0
  1746. package/src/assets/images/icons/material-symbols/400/rounded/favorite.svg +8 -0
  1747. package/src/assets/images/icons/material-symbols/400/rounded/fax.svg +1 -0
  1748. package/src/assets/images/icons/material-symbols/400/rounded/fiber_manual_record.svg +8 -0
  1749. package/src/assets/images/icons/material-symbols/400/rounded/fiber_smart_record.svg +8 -0
  1750. package/src/assets/images/icons/material-symbols/400/rounded/file-arrow-up.svg +4 -0
  1751. package/src/assets/images/icons/material-symbols/400/rounded/files.svg +3 -0
  1752. package/src/assets/images/icons/material-symbols/400/rounded/filetype-pdf.svg +3 -0
  1753. package/src/assets/images/icons/material-symbols/400/rounded/filter_alt.svg +8 -0
  1754. package/src/assets/images/icons/material-symbols/400/rounded/folder.svg +8 -0
  1755. package/src/assets/images/icons/material-symbols/400/rounded/folder_open.svg +8 -0
  1756. package/src/assets/images/icons/material-symbols/400/rounded/format_bold.svg +1 -0
  1757. package/src/assets/images/icons/material-symbols/400/rounded/format_italic.svg +1 -0
  1758. package/src/assets/images/icons/material-symbols/400/rounded/format_list_bulleted.svg +8 -0
  1759. package/src/assets/images/icons/material-symbols/400/rounded/format_underlined.svg +1 -0
  1760. package/src/assets/images/icons/material-symbols/400/rounded/full_coverage.svg +1 -0
  1761. package/src/assets/images/icons/material-symbols/400/rounded/gastroenterology.svg +8 -0
  1762. package/src/assets/images/icons/material-symbols/400/rounded/gpp_bad.svg +8 -0
  1763. package/src/assets/images/icons/material-symbols/400/rounded/gpp_bad_fill.svg +8 -0
  1764. package/src/assets/images/icons/material-symbols/400/rounded/gpp_maybe.svg +8 -0
  1765. package/src/assets/images/icons/material-symbols/400/rounded/gpp_maybe_fill.svg +8 -0
  1766. package/src/assets/images/icons/material-symbols/400/rounded/grid_view.svg +8 -0
  1767. package/src/assets/images/icons/material-symbols/400/rounded/group.svg +1 -0
  1768. package/src/assets/images/icons/material-symbols/400/rounded/groups.svg +1 -0
  1769. package/src/assets/images/icons/material-symbols/400/rounded/health_and_safety.svg +8 -0
  1770. package/src/assets/images/icons/material-symbols/400/rounded/health_and_safety_fill.svg +8 -0
  1771. package/src/assets/images/icons/material-symbols/400/rounded/hide_source.svg +1 -0
  1772. package/src/assets/images/icons/material-symbols/400/rounded/history.svg +1 -0
  1773. package/src/assets/images/icons/material-symbols/400/rounded/history_toggle_off.svg +8 -0
  1774. package/src/assets/images/icons/material-symbols/400/rounded/how_to_reg.svg +8 -0
  1775. package/src/assets/images/icons/material-symbols/400/rounded/id_card.svg +8 -0
  1776. package/src/assets/images/icons/material-symbols/400/rounded/info-fill.svg +1 -0
  1777. package/src/assets/images/icons/material-symbols/400/rounded/info-square.svg +4 -0
  1778. package/src/assets/images/icons/material-symbols/400/rounded/info.svg +1 -0
  1779. package/src/assets/images/icons/material-symbols/400/rounded/info_i.svg +1 -0
  1780. package/src/assets/images/icons/material-symbols/400/rounded/insights.svg +1 -0
  1781. package/src/assets/images/icons/material-symbols/400/rounded/inventory_2.svg +8 -0
  1782. package/src/assets/images/icons/material-symbols/400/rounded/journal-plus.svg +5 -0
  1783. package/src/assets/images/icons/material-symbols/400/rounded/journal-plus1.svg +5 -0
  1784. package/src/assets/images/icons/material-symbols/400/rounded/keep.svg +8 -0
  1785. package/src/assets/images/icons/material-symbols/400/rounded/key-person.svg +3 -0
  1786. package/src/assets/images/icons/material-symbols/400/rounded/key.svg +1 -0
  1787. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_arrow_down-fill.svg +1 -0
  1788. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_arrow_down.svg +8 -0
  1789. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_arrow_left-fill.svg +1 -0
  1790. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_arrow_left.svg +1 -0
  1791. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_arrow_right-fill.svg +1 -0
  1792. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_arrow_right.svg +1 -0
  1793. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_arrow_up-fill.svg +1 -0
  1794. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_arrow_up.svg +1 -0
  1795. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_backspace.svg +1 -0
  1796. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_double_arrow_left.svg +8 -0
  1797. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_double_arrow_right.svg +8 -0
  1798. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_voice-fill.svg +1 -0
  1799. package/src/assets/images/icons/material-symbols/400/rounded/keyboard_voice.svg +1 -0
  1800. package/src/assets/images/icons/material-symbols/400/rounded/lab_profile-fill.svg +1 -0
  1801. package/src/assets/images/icons/material-symbols/400/rounded/lab_profile.svg +8 -0
  1802. package/src/assets/images/icons/material-symbols/400/rounded/label.svg +8 -0
  1803. package/src/assets/images/icons/material-symbols/400/rounded/label_important.svg +8 -0
  1804. package/src/assets/images/icons/material-symbols/400/rounded/labs.svg +15 -0
  1805. package/src/assets/images/icons/material-symbols/400/rounded/language.svg +8 -0
  1806. package/src/assets/images/icons/material-symbols/400/rounded/library.svg +8 -0
  1807. package/src/assets/images/icons/material-symbols/400/rounded/lightning-charge-fill.svg +3 -0
  1808. package/src/assets/images/icons/material-symbols/400/rounded/link-45deg.svg +4 -0
  1809. package/src/assets/images/icons/material-symbols/400/rounded/local_activity.svg +8 -0
  1810. package/src/assets/images/icons/material-symbols/400/rounded/local_atm.svg +8 -0
  1811. package/src/assets/images/icons/material-symbols/400/rounded/local_pharmacy.svg +8 -0
  1812. package/src/assets/images/icons/material-symbols/400/rounded/local_police.svg +1 -0
  1813. package/src/assets/images/icons/material-symbols/400/rounded/local_post_office.svg +8 -0
  1814. package/src/assets/images/icons/material-symbols/400/rounded/location_home.svg +8 -0
  1815. package/src/assets/images/icons/material-symbols/400/rounded/location_off.svg +1 -0
  1816. package/src/assets/images/icons/material-symbols/400/rounded/location_on-fill.svg +1 -0
  1817. package/src/assets/images/icons/material-symbols/400/rounded/location_on.svg +1 -0
  1818. package/src/assets/images/icons/material-symbols/400/rounded/lock.svg +1 -0
  1819. package/src/assets/images/icons/material-symbols/400/rounded/lock_open_right.svg +1 -0
  1820. package/src/assets/images/icons/material-symbols/400/rounded/lock_person.svg +8 -0
  1821. package/src/assets/images/icons/material-symbols/400/rounded/logout.svg +1 -0
  1822. package/src/assets/images/icons/material-symbols/400/rounded/mail.svg +1 -0
  1823. package/src/assets/images/icons/material-symbols/400/rounded/manage_accounts.svg +1 -0
  1824. package/src/assets/images/icons/material-symbols/400/rounded/medication.svg +1 -0
  1825. package/src/assets/images/icons/material-symbols/400/rounded/mic-300.svg +1 -0
  1826. package/src/assets/images/icons/material-symbols/400/rounded/mic-fill.svg +1 -0
  1827. package/src/assets/images/icons/material-symbols/400/rounded/mic.svg +1 -0
  1828. package/src/assets/images/icons/material-symbols/400/rounded/mic_off-fill.svg +1 -0
  1829. package/src/assets/images/icons/material-symbols/400/rounded/mic_off.svg +8 -0
  1830. package/src/assets/images/icons/material-symbols/400/rounded/missed_video_call-fill.svg +1 -0
  1831. package/src/assets/images/icons/material-symbols/400/rounded/missed_video_call.svg +1 -0
  1832. package/src/assets/images/icons/material-symbols/400/rounded/mode_comment.svg +1 -0
  1833. package/src/assets/images/icons/material-symbols/400/rounded/monitor_heart.svg +8 -0
  1834. package/src/assets/images/icons/material-symbols/400/rounded/monitoring.svg +8 -0
  1835. package/src/assets/images/icons/material-symbols/400/rounded/mood.svg +8 -0
  1836. package/src/assets/images/icons/material-symbols/400/rounded/more_horiz.svg +8 -0
  1837. package/src/assets/images/icons/material-symbols/400/rounded/more_vert.svg +1 -0
  1838. package/src/assets/images/icons/material-symbols/400/rounded/motion_photos_paused.svg +8 -0
  1839. package/src/assets/images/icons/material-symbols/400/rounded/move.svg +13 -0
  1840. package/src/assets/images/icons/material-symbols/400/rounded/musculoskeletal.svg +11 -0
  1841. package/src/assets/images/icons/material-symbols/400/rounded/neurology.svg +8 -0
  1842. package/src/assets/images/icons/material-symbols/400/rounded/no_encryption.svg +1 -0
  1843. package/src/assets/images/icons/material-symbols/400/rounded/no_insurance.svg +8 -0
  1844. package/src/assets/images/icons/material-symbols/400/rounded/no_insurance_fill.svg +8 -0
  1845. package/src/assets/images/icons/material-symbols/400/rounded/not_allow.svg +8 -0
  1846. package/src/assets/images/icons/material-symbols/400/rounded/not_allow_fill.svg +8 -0
  1847. package/src/assets/images/icons/material-symbols/400/rounded/not_verified.svg +8 -0
  1848. package/src/assets/images/icons/material-symbols/400/rounded/not_verified_fill.svg +8 -0
  1849. package/src/assets/images/icons/material-symbols/400/rounded/note_add.svg +8 -0
  1850. package/src/assets/images/icons/material-symbols/400/rounded/note_stack.svg +8 -0
  1851. package/src/assets/images/icons/material-symbols/400/rounded/notifications-fill.svg +1 -0
  1852. package/src/assets/images/icons/material-symbols/400/rounded/notifications.svg +1 -0
  1853. package/src/assets/images/icons/material-symbols/400/rounded/notifications_active-fill.svg +1 -0
  1854. package/src/assets/images/icons/material-symbols/400/rounded/notifications_active.svg +1 -0
  1855. package/src/assets/images/icons/material-symbols/400/rounded/notifications_off-fill.svg +1 -0
  1856. package/src/assets/images/icons/material-symbols/400/rounded/notifications_off.svg +1 -0
  1857. package/src/assets/images/icons/material-symbols/400/rounded/notifications_paused-fill.svg +1 -0
  1858. package/src/assets/images/icons/material-symbols/400/rounded/notifications_paused.svg +1 -0
  1859. package/src/assets/images/icons/material-symbols/400/rounded/offline_bolt.svg +8 -0
  1860. package/src/assets/images/icons/material-symbols/400/rounded/open_in_full.svg +1 -0
  1861. package/src/assets/images/icons/material-symbols/400/rounded/open_in_new.svg +8 -0
  1862. package/src/assets/images/icons/material-symbols/400/rounded/order_approve.svg +1 -0
  1863. package/src/assets/images/icons/material-symbols/400/rounded/overview.svg +8 -0
  1864. package/src/assets/images/icons/material-symbols/400/rounded/paid.svg +8 -0
  1865. package/src/assets/images/icons/material-symbols/400/rounded/patient_list.svg +8 -0
  1866. package/src/assets/images/icons/material-symbols/400/rounded/pause.svg +8 -0
  1867. package/src/assets/images/icons/material-symbols/400/rounded/pause_circle.svg +8 -0
  1868. package/src/assets/images/icons/material-symbols/400/rounded/payments.svg +1 -0
  1869. package/src/assets/images/icons/material-symbols/400/rounded/pen_edit.svg +8 -0
  1870. package/src/assets/images/icons/material-symbols/400/rounded/pencil-square.svg +4 -0
  1871. package/src/assets/images/icons/material-symbols/400/rounded/people.svg +3 -0
  1872. package/src/assets/images/icons/material-symbols/400/rounded/perm_phone_msg.svg +1 -0
  1873. package/src/assets/images/icons/material-symbols/400/rounded/person-bounding-box.svg +4 -0
  1874. package/src/assets/images/icons/material-symbols/400/rounded/person-circle.svg +4 -0
  1875. package/src/assets/images/icons/material-symbols/400/rounded/person-fill.svg +1 -0
  1876. package/src/assets/images/icons/material-symbols/400/rounded/person-plus.svg +4 -0
  1877. package/src/assets/images/icons/material-symbols/400/rounded/person-rolodex.svg +4 -0
  1878. package/src/assets/images/icons/material-symbols/400/rounded/person-up.svg +4 -0
  1879. package/src/assets/images/icons/material-symbols/400/rounded/person-vcard.svg +4 -0
  1880. package/src/assets/images/icons/material-symbols/400/rounded/person.svg +3 -0
  1881. package/src/assets/images/icons/material-symbols/400/rounded/person_2-fill.svg +1 -0
  1882. package/src/assets/images/icons/material-symbols/400/rounded/person_2.svg +1 -0
  1883. package/src/assets/images/icons/material-symbols/400/rounded/person_24dp_5F6368_FILL1_wght400_GRAD0_opsz24.svg +1 -0
  1884. package/src/assets/images/icons/material-symbols/400/rounded/person_3-fill.svg +1 -0
  1885. package/src/assets/images/icons/material-symbols/400/rounded/person_3.svg +1 -0
  1886. package/src/assets/images/icons/material-symbols/400/rounded/person_4-fill.svg +1 -0
  1887. package/src/assets/images/icons/material-symbols/400/rounded/person_4.svg +1 -0
  1888. package/src/assets/images/icons/material-symbols/400/rounded/person_add-fill.svg +1 -0
  1889. package/src/assets/images/icons/material-symbols/400/rounded/person_add.svg +1 -0
  1890. package/src/assets/images/icons/material-symbols/400/rounded/person_remove.svg +8 -0
  1891. package/src/assets/images/icons/material-symbols/400/rounded/personal_injury.svg +15 -0
  1892. package/src/assets/images/icons/material-symbols/400/rounded/phone_callback-fill.svg +1 -0
  1893. package/src/assets/images/icons/material-symbols/400/rounded/phone_callback.svg +1 -0
  1894. package/src/assets/images/icons/material-symbols/400/rounded/phone_forwarded.svg +8 -0
  1895. package/src/assets/images/icons/material-symbols/400/rounded/photo_camera.svg +8 -0
  1896. package/src/assets/images/icons/material-symbols/400/rounded/pin_drop-fill.svg +1 -0
  1897. package/src/assets/images/icons/material-symbols/400/rounded/pin_drop.svg +1 -0
  1898. package/src/assets/images/icons/material-symbols/400/rounded/play_arrow.svg +8 -0
  1899. package/src/assets/images/icons/material-symbols/400/rounded/play_circle.svg +1 -0
  1900. package/src/assets/images/icons/material-symbols/400/rounded/prescriptions.svg +8 -0
  1901. package/src/assets/images/icons/material-symbols/400/rounded/preview-fill.svg +1 -0
  1902. package/src/assets/images/icons/material-symbols/400/rounded/preview.svg +1 -0
  1903. package/src/assets/images/icons/material-symbols/400/rounded/price_change.svg +8 -0
  1904. package/src/assets/images/icons/material-symbols/400/rounded/print.svg +8 -0
  1905. package/src/assets/images/icons/material-symbols/400/rounded/printer.svg +4 -0
  1906. package/src/assets/images/icons/material-symbols/400/rounded/prompt_suggestion.svg +8 -0
  1907. package/src/assets/images/icons/material-symbols/400/rounded/psychology.svg +8 -0
  1908. package/src/assets/images/icons/material-symbols/400/rounded/published_with_changes.svg +8 -0
  1909. package/src/assets/images/icons/material-symbols/400/rounded/pulmonology.svg +8 -0
  1910. package/src/assets/images/icons/material-symbols/400/rounded/push_pin.svg +8 -0
  1911. package/src/assets/images/icons/material-symbols/400/rounded/question_mark.svg +8 -0
  1912. package/src/assets/images/icons/material-symbols/400/rounded/quickreply.svg +8 -0
  1913. package/src/assets/images/icons/material-symbols/400/rounded/radio_button_checked.svg +8 -0
  1914. package/src/assets/images/icons/material-symbols/400/rounded/radio_button_unchecked.svg +8 -0
  1915. package/src/assets/images/icons/material-symbols/400/rounded/receipt_long.svg +15 -0
  1916. package/src/assets/images/icons/material-symbols/400/rounded/record-circle.svg +4 -0
  1917. package/src/assets/images/icons/material-symbols/400/rounded/redo.svg +8 -0
  1918. package/src/assets/images/icons/material-symbols/400/rounded/refresh.svg +8 -0
  1919. package/src/assets/images/icons/material-symbols/400/rounded/refund.svg +10 -0
  1920. package/src/assets/images/icons/material-symbols/400/rounded/reg-notes.svg +8 -0
  1921. package/src/assets/images/icons/material-symbols/400/rounded/remove.svg +8 -0
  1922. package/src/assets/images/icons/material-symbols/400/rounded/remove_moderator.svg +8 -0
  1923. package/src/assets/images/icons/material-symbols/400/rounded/remove_moderator_fill.svg +8 -0
  1924. package/src/assets/images/icons/material-symbols/400/rounded/repeat.svg +8 -0
  1925. package/src/assets/images/icons/material-symbols/400/rounded/replay.svg +8 -0
  1926. package/src/assets/images/icons/material-symbols/400/rounded/request_quote.svg +8 -0
  1927. package/src/assets/images/icons/material-symbols/400/rounded/rocket_launch.svg +8 -0
  1928. package/src/assets/images/icons/material-symbols/400/rounded/rotate_right.svg +1 -0
  1929. package/src/assets/images/icons/material-symbols/400/rounded/rule_settings.svg +8 -0
  1930. package/src/assets/images/icons/material-symbols/400/rounded/save.svg +1 -0
  1931. package/src/assets/images/icons/material-symbols/400/rounded/scanner.svg +1 -0
  1932. package/src/assets/images/icons/material-symbols/400/rounded/schedule.svg +8 -0
  1933. package/src/assets/images/icons/material-symbols/400/rounded/search.svg +8 -0
  1934. package/src/assets/images/icons/material-symbols/400/rounded/self_pay.svg +8 -0
  1935. package/src/assets/images/icons/material-symbols/400/rounded/self_pay_fill.svg +8 -0
  1936. package/src/assets/images/icons/material-symbols/400/rounded/send-fill.svg +1 -0
  1937. package/src/assets/images/icons/material-symbols/400/rounded/send.svg +1 -0
  1938. package/src/assets/images/icons/material-symbols/400/rounded/settings.svg +8 -0
  1939. package/src/assets/images/icons/material-symbols/400/rounded/settings_applications.svg +8 -0
  1940. package/src/assets/images/icons/material-symbols/400/rounded/share.svg +1 -0
  1941. package/src/assets/images/icons/material-symbols/400/rounded/shield_person.svg +8 -0
  1942. package/src/assets/images/icons/material-symbols/400/rounded/shield_person_fill.svg +8 -0
  1943. package/src/assets/images/icons/material-symbols/400/rounded/signal_cellular_alt.svg +8 -0
  1944. package/src/assets/images/icons/material-symbols/400/rounded/simple-notes.svg +8 -0
  1945. package/src/assets/images/icons/material-symbols/400/rounded/skin.svg +11 -0
  1946. package/src/assets/images/icons/material-symbols/400/rounded/smartphone.svg +8 -0
  1947. package/src/assets/images/icons/material-symbols/400/rounded/sort.svg +8 -0
  1948. package/src/assets/images/icons/material-symbols/400/rounded/sort_by_alpha.svg +8 -0
  1949. package/src/assets/images/icons/material-symbols/400/rounded/sprint.svg +1 -0
  1950. package/src/assets/images/icons/material-symbols/400/rounded/star-fill.svg +3 -0
  1951. package/src/assets/images/icons/material-symbols/400/rounded/stickies.svg +4 -0
  1952. package/src/assets/images/icons/material-symbols/400/rounded/stop_circle.svg +8 -0
  1953. package/src/assets/images/icons/material-symbols/400/rounded/straight.svg +3 -0
  1954. package/src/assets/images/icons/material-symbols/400/rounded/sub-task.svg +9 -0
  1955. package/src/assets/images/icons/material-symbols/400/rounded/subdirectory_arrow_left.svg +8 -0
  1956. package/src/assets/images/icons/material-symbols/400/rounded/summarize.svg +8 -0
  1957. package/src/assets/images/icons/material-symbols/400/rounded/swap_calls.svg +1 -0
  1958. package/src/assets/images/icons/material-symbols/400/rounded/swap_vert.svg +8 -0
  1959. package/src/assets/images/icons/material-symbols/400/rounded/swipe_left_alt.svg +8 -0
  1960. package/src/assets/images/icons/material-symbols/400/rounded/syringe.svg +8 -0
  1961. package/src/assets/images/icons/material-symbols/400/rounded/table.svg +8 -0
  1962. package/src/assets/images/icons/material-symbols/400/rounded/task.svg +8 -0
  1963. package/src/assets/images/icons/material-symbols/400/rounded/telemedicine.svg +15 -0
  1964. package/src/assets/images/icons/material-symbols/400/rounded/tips_and_updates.svg +1 -0
  1965. package/src/assets/images/icons/material-symbols/400/rounded/tune.svg +8 -0
  1966. package/src/assets/images/icons/material-symbols/400/rounded/turn_left.svg +1 -0
  1967. package/src/assets/images/icons/material-symbols/400/rounded/turn_right.svg +1 -0
  1968. package/src/assets/images/icons/material-symbols/400/rounded/u_turn_left.svg +1 -0
  1969. package/src/assets/images/icons/material-symbols/400/rounded/u_turn_right.svg +1 -0
  1970. package/src/assets/images/icons/material-symbols/400/rounded/unarchive.svg +8 -0
  1971. package/src/assets/images/icons/material-symbols/400/rounded/undo.svg +8 -0
  1972. package/src/assets/images/icons/material-symbols/400/rounded/unfold_more.svg +8 -0
  1973. package/src/assets/images/icons/material-symbols/400/rounded/universal-access.svg +3 -0
  1974. package/src/assets/images/icons/material-symbols/400/rounded/universal_currency_alt.svg +8 -0
  1975. package/src/assets/images/icons/material-symbols/400/rounded/update_disabled.svg +8 -0
  1976. package/src/assets/images/icons/material-symbols/400/rounded/upload.svg +8 -0
  1977. package/src/assets/images/icons/material-symbols/400/rounded/upload_file.svg +8 -0
  1978. package/src/assets/images/icons/material-symbols/400/rounded/urology.svg +8 -0
  1979. package/src/assets/images/icons/material-symbols/400/rounded/verified_user.svg +8 -0
  1980. package/src/assets/images/icons/material-symbols/400/rounded/verified_user_fill.svg +8 -0
  1981. package/src/assets/images/icons/material-symbols/400/rounded/video_call-fill.svg +1 -0
  1982. package/src/assets/images/icons/material-symbols/400/rounded/video_call.svg +1 -0
  1983. package/src/assets/images/icons/material-symbols/400/rounded/videocam-fill.svg +1 -0
  1984. package/src/assets/images/icons/material-symbols/400/rounded/videocam.svg +8 -0
  1985. package/src/assets/images/icons/material-symbols/400/rounded/videocam_off-fill.svg +1 -0
  1986. package/src/assets/images/icons/material-symbols/400/rounded/videocam_off.svg +8 -0
  1987. package/src/assets/images/icons/material-symbols/400/rounded/view_week.svg +8 -0
  1988. package/src/assets/images/icons/material-symbols/400/rounded/visibility-fill.svg +8 -0
  1989. package/src/assets/images/icons/material-symbols/400/rounded/visibility.svg +8 -0
  1990. package/src/assets/images/icons/material-symbols/400/rounded/visibility_off-fill.svg +8 -0
  1991. package/src/assets/images/icons/material-symbols/400/rounded/visibility_off.svg +8 -0
  1992. package/src/assets/images/icons/material-symbols/400/rounded/vpn_key.svg +10 -0
  1993. package/src/assets/images/icons/material-symbols/400/rounded/warning-fill.svg +1 -0
  1994. package/src/assets/images/icons/material-symbols/400/rounded/warning.svg +8 -0
  1995. package/src/assets/images/icons/material-symbols/400/rounded/water_drop.svg +8 -0
  1996. package/src/assets/images/icons/material-symbols/400/rounded/west.svg +8 -0
  1997. package/src/assets/images/icons/material-symbols/400/rounded/where_to_vote.svg +8 -0
  1998. package/src/assets/images/icons/material-symbols/400/rounded/widgets.svg +8 -0
  1999. package/src/assets/images/icons/material-symbols/400/rounded/x-square.svg +4 -0
  2000. package/src/assets/images/icons.svg +723 -0
  2001. package/src/assets/images/icons8-unpin-24.png +0 -0
  2002. package/src/assets/images/iconsnew.svg +120 -0
  2003. package/src/assets/images/id.jfif +0 -0
  2004. package/src/assets/images/identity-f.png +0 -0
  2005. package/src/assets/images/identity.png +0 -0
  2006. package/src/assets/images/idme.png +0 -0
  2007. package/src/assets/images/image.png +0 -0
  2008. package/src/assets/images/image.svg +1 -0
  2009. package/src/assets/images/image_14.jpg +0 -0
  2010. package/src/assets/images/image_15.jpg +0 -0
  2011. package/src/assets/images/inbox-img.png +0 -0
  2012. package/src/assets/images/inbox.svg +1 -0
  2013. package/src/assets/images/insurance-covers-outline.svg +7 -0
  2014. package/src/assets/images/insurance-covers.svg +3 -0
  2015. package/src/assets/images/ios-kiosk.svg +2 -0
  2016. package/src/assets/images/jpg.svg +67 -0
  2017. package/src/assets/images/kiosk-banner.png +0 -0
  2018. package/src/assets/images/link-new.svg +11 -0
  2019. package/src/assets/images/list-check.svg +8 -0
  2020. package/src/assets/images/loader.svg +56 -0
  2021. package/src/assets/images/loading.gif +0 -0
  2022. package/src/assets/images/loading.svg +18 -0
  2023. package/src/assets/images/location_on.svg +1 -0
  2024. package/src/assets/images/locked.jpg +0 -0
  2025. package/src/assets/images/log.svg +6 -0
  2026. package/src/assets/images/login-slide1.png +0 -0
  2027. package/src/assets/images/login-slide2.png +0 -0
  2028. package/src/assets/images/login-slide3.png +0 -0
  2029. package/src/assets/images/logo-1.png +0 -0
  2030. package/src/assets/images/logo-old.svg +11 -0
  2031. package/src/assets/images/logo.svg +10 -0
  2032. package/src/assets/images/logos/blob-fotor-bg-remover-2023091884651.png +0 -0
  2033. package/src/assets/images/logos/texas_logo.png +0 -0
  2034. package/src/assets/images/master-card.svg +2 -0
  2035. package/src/assets/images/master-new.svg +11 -0
  2036. package/src/assets/images/master.svg +13 -0
  2037. package/src/assets/images/medicare.jpg +0 -0
  2038. package/src/assets/images/medication.png +0 -0
  2039. package/src/assets/images/medications.svg +1 -0
  2040. package/src/assets/images/medicine.svg +16 -0
  2041. package/src/assets/images/message-icon.svg +24 -0
  2042. package/src/assets/images/mic-bg.svg +10 -0
  2043. package/src/assets/images/middleware-mobile/Android1.svg +10 -0
  2044. package/src/assets/images/middleware-mobile/IOS.svg +8 -0
  2045. package/src/assets/images/middleware-mobile/android.svg +9 -0
  2046. package/src/assets/images/middleware-mobile/apple 1.svg +9 -0
  2047. package/src/assets/images/middleware-mobile/ecare.svg +9 -0
  2048. package/src/assets/images/middleware-mobile/f-icon.svg +5 -0
  2049. package/src/assets/images/middleware-mobile/folder.svg +8 -0
  2050. package/src/assets/images/middleware-mobile/logo.svg +10 -0
  2051. package/src/assets/images/middleware-mobile/payment.svg +8 -0
  2052. package/src/assets/images/middleware-mobile/telemedicine.svg +16 -0
  2053. package/src/assets/images/middleware-mobile/web.svg +9 -0
  2054. package/src/assets/images/mobile-view-new.svg +53 -0
  2055. package/src/assets/images/mobile-view.svg +26 -0
  2056. package/src/assets/images/mobileapp.svg +13 -0
  2057. package/src/assets/images/more_option.png +0 -0
  2058. package/src/assets/images/nail-map/left-foot.svg +9 -0
  2059. package/src/assets/images/nail-map/left-hand.svg +9 -0
  2060. package/src/assets/images/nail-map/right-foot.svg +9 -0
  2061. package/src/assets/images/nail-map/right-hand.svg +9 -0
  2062. package/src/assets/images/new-19/Labs_Imaging.svg +8 -0
  2063. package/src/assets/images/new-19/attach_file.svg +8 -0
  2064. package/src/assets/images/new-19/box_edit.svg +8 -0
  2065. package/src/assets/images/new-19/clinical_notes.svg +8 -0
  2066. package/src/assets/images/new-19/close.svg +8 -0
  2067. package/src/assets/images/new-19/delete.svg +8 -0
  2068. package/src/assets/images/new-19/folder_open.svg +8 -0
  2069. package/src/assets/images/new-19/format_list_bulleted.svg +8 -0
  2070. package/src/assets/images/new-19/photo_camera.svg +8 -0
  2071. package/src/assets/images/new-19/source_notes.svg +8 -0
  2072. package/src/assets/images/new-19/splitscreen_bottom.svg +8 -0
  2073. package/src/assets/images/new-19/stack.svg +8 -0
  2074. package/src/assets/images/new-19/sticky_note_2.svg +8 -0
  2075. package/src/assets/images/new-19/thunder.svg +12 -0
  2076. package/src/assets/images/no-graphs.svg +29 -0
  2077. package/src/assets/images/no-insurance-covers-outline.svg +8 -0
  2078. package/src/assets/images/no-insurance-covers.svg +3 -0
  2079. package/src/assets/images/no-messges.svg +80 -0
  2080. package/src/assets/images/no_action_items.svg +54 -0
  2081. package/src/assets/images/no_clinical_decision_support_found.svg +25 -0
  2082. package/src/assets/images/no_documents_founds.svg +40 -0
  2083. package/src/assets/images/no_encounter_notes_found.svg +16 -0
  2084. package/src/assets/images/no_internet.svg +8 -0
  2085. package/src/assets/images/no_referrals_found.svg +30 -0
  2086. package/src/assets/images/no_templates_found.svg +43 -0
  2087. package/src/assets/images/nodata-appointments.png +0 -0
  2088. package/src/assets/images/nodata-calls.png +0 -0
  2089. package/src/assets/images/nodata-labs.png +0 -0
  2090. package/src/assets/images/nodata-medication.png +0 -0
  2091. package/src/assets/images/nodata-patient.png +0 -0
  2092. package/src/assets/images/nodata-referrals.png +0 -0
  2093. package/src/assets/images/nodata-vitals.png +0 -0
  2094. package/src/assets/images/nodata.png +0 -0
  2095. package/src/assets/images/not_found.svg +10 -0
  2096. package/src/assets/images/note-arrow.svg +4 -0
  2097. package/src/assets/images/onboarding_loader.svg +24 -0
  2098. package/src/assets/images/p-1.svg +15 -0
  2099. package/src/assets/images/p-2.svg +15 -0
  2100. package/src/assets/images/p-3.svg +15 -0
  2101. package/src/assets/images/p-4.svg +15 -0
  2102. package/src/assets/images/p-5.svg +15 -0
  2103. package/src/assets/images/p-6.svg +15 -0
  2104. package/src/assets/images/p-7.svg +10 -0
  2105. package/src/assets/images/p-8.svg +15 -0
  2106. package/src/assets/images/p-lab.svg +8 -0
  2107. package/src/assets/images/padlock.svg +7 -0
  2108. package/src/assets/images/paper.svg +1 -0
  2109. package/src/assets/images/paper_claim.svg +8 -0
  2110. package/src/assets/images/patient.png +0 -0
  2111. package/src/assets/images/pause-active.png +0 -0
  2112. package/src/assets/images/pause.png +0 -0
  2113. package/src/assets/images/pdf-1.svg +1 -0
  2114. package/src/assets/images/pdf.svg +51 -0
  2115. package/src/assets/images/person.svg +18 -0
  2116. package/src/assets/images/play-active.png +0 -0
  2117. package/src/assets/images/play.png +0 -0
  2118. package/src/assets/images/plus-button.svg +10 -0
  2119. package/src/assets/images/print_location.svg +3 -0
  2120. package/src/assets/images/profile_1.jpg +0 -0
  2121. package/src/assets/images/profile_img.jpg +0 -0
  2122. package/src/assets/images/qrcode.svg +446 -0
  2123. package/src/assets/images/reg-encounter.png +0 -0
  2124. package/src/assets/images/remove.png +0 -0
  2125. package/src/assets/images/reports.svg +9 -0
  2126. package/src/assets/images/schedule.svg +5 -0
  2127. package/src/assets/images/send.svg +8 -0
  2128. package/src/assets/images/simple-encounter.png +0 -0
  2129. package/src/assets/images/sort_ascending.svg +12 -0
  2130. package/src/assets/images/sort_descending.svg +12 -0
  2131. package/src/assets/images/sort_none.svg +13 -0
  2132. package/src/assets/images/stop-active.png +0 -0
  2133. package/src/assets/images/stop.png +0 -0
  2134. package/src/assets/images/stop_circle.svg +8 -0
  2135. package/src/assets/images/success.svg +1 -0
  2136. package/src/assets/images/successfull.png +0 -0
  2137. package/src/assets/images/summarize.svg +13 -0
  2138. package/src/assets/images/supportChat.png +0 -0
  2139. package/src/assets/images/supportChat1.png +0 -0
  2140. package/src/assets/images/tele-medicine.png +0 -0
  2141. package/src/assets/images/tele-user.png +0 -0
  2142. package/src/assets/images/temp-list.png +0 -0
  2143. package/src/assets/images/theme-1.png +0 -0
  2144. package/src/assets/images/theme-2.png +0 -0
  2145. package/src/assets/images/theme-3.png +0 -0
  2146. package/src/assets/images/thumb_down.png +0 -0
  2147. package/src/assets/images/thumb_up.png +0 -0
  2148. package/src/assets/images/time.svg +3 -0
  2149. package/src/assets/images/to-do-list.svg +1 -0
  2150. package/src/assets/images/tour_guide_1.svg +31 -0
  2151. package/src/assets/images/tour_guide_2.svg +34 -0
  2152. package/src/assets/images/tour_guide_3.svg +29 -0
  2153. package/src/assets/images/tour_guide_4.svg +23 -0
  2154. package/src/assets/images/tour_guide_5.svg +37 -0
  2155. package/src/assets/images/tour_guide_6.svg +35 -0
  2156. package/src/assets/images/tour_guide_7.svg +58 -0
  2157. package/src/assets/images/tour_guide_8.svg +73 -0
  2158. package/src/assets/images/upload-new.svg +6 -0
  2159. package/src/assets/images/upload.svg +1 -0
  2160. package/src/assets/images/user-avatar.png +0 -0
  2161. package/src/assets/images/user-blocked.png +0 -0
  2162. package/src/assets/images/user1.png +0 -0
  2163. package/src/assets/images/user1_lg.png +0 -0
  2164. package/src/assets/images/visa-card.svg +2 -0
  2165. package/src/assets/images/visa-new.svg +8 -0
  2166. package/src/assets/images/visa.png +0 -0
  2167. package/src/assets/images/visa.svg +10 -0
  2168. package/src/assets/images/vitals.svg +3 -0
  2169. package/src/assets/images/voice1.svg +9 -0
  2170. package/src/assets/images/wave.svg +1 -0
  2171. package/src/assets/images/welcome-header.png +0 -0
  2172. package/src/assets/images/welcome-intro.svg +19 -0
  2173. package/src/assets/images/welcome-intro1.svg +84 -0
  2174. package/src/assets/images/work-queues/landing-page/ai.png +0 -0
  2175. package/src/assets/images/work-queues/landing-page/claims-1.png +0 -0
  2176. package/src/assets/images/work-queues/landing-page/claims.png +0 -0
  2177. package/src/assets/images/work-queues/landing-page/conditions.png +0 -0
  2178. package/src/assets/images/xl-icon.png +0 -0
  2179. package/src/assets/logo.png +0 -0
  2180. package/src/assets/lottie/green-check.lottie +0 -0
  2181. package/src/assets/lottie/smallBlob.json +1 -0
  2182. package/src/assets/pdfs/AnesthesiaGuidelines.pdf +0 -0
  2183. package/src/assets/pdfs/AppendixB.pdf +0 -0
  2184. package/src/assets/pdfs/AppendixO.pdf +0 -0
  2185. package/src/assets/pdfs/AppendixQ.pdf +0 -0
  2186. package/src/assets/pdfs/AppendixR.pdf +0 -0
  2187. package/src/assets/pdfs/AppendixS.pdf +0 -0
  2188. package/src/assets/pdfs/AppendixT.pdf +0 -0
  2189. package/src/assets/pdfs/BSS-CMS-1500-Fillable-2022.pdf +0 -0
  2190. package/src/assets/pdfs/Category2.pdf +0 -0
  2191. package/src/assets/pdfs/Category3.pdf +0 -0
  2192. package/src/assets/pdfs/EvalManagementGuidelines.pdf +0 -0
  2193. package/src/assets/pdfs/MedicineGuidelines.pdf +0 -0
  2194. package/src/assets/pdfs/PathLabGuidelines.pdf +0 -0
  2195. package/src/assets/pdfs/RadiologyGuidelines.pdf +0 -0
  2196. package/src/assets/pdfs/SurgeryGuidelines.pdf +0 -0
  2197. package/src/assets/pdfs/UB04_form.pdf +14346 -0
  2198. package/src/assets/pdfs/form-cms1500.pdf +0 -0
  2199. package/src/assets/pdfs/guidelinesICD.pdf +0 -0
  2200. package/src/assets/phoneRing/PhoneRingingSound.mp3 +0 -0
  2201. package/src/assets/scripts/SIPml-api.js +33514 -0
  2202. package/src/assets/scripts/annyang.min.js +7 -0
  2203. package/src/assets/scripts/api.proxynization.js +1 -0
  2204. package/src/assets/scripts/call.js +386 -0
  2205. package/src/assets/scripts/jquery-3.3.1.min.js +2 -0
  2206. package/src/assets/scripts/jquery.inputmask.min.js +8 -0
  2207. package/src/assets/scripts/jstree.min.js +6 -0
  2208. package/src/assets/scripts/scannerDocument.html +131 -0
  2209. package/src/assets/scripts/shoelace.js +321 -0
  2210. package/src/assets/scripts/tailwindcss.js +65 -0
  2211. package/src/assets/scripts/wave.js +6095 -0
  2212. package/src/assets/svg/call-fill.svg +1 -0
  2213. package/src/assets/svg/telemedicine.svg +16 -0
  2214. package/src/styles.scss +3651 -0
  2215. package/styles/_index.scss +7 -17
  2216. package/tailwind.config.js +190 -0
  2217. package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-Br2Vi1Im.mjs +0 -454
  2218. package/fesm2022/edvak99-voice-receptionist-widget-activities-page.component-Br2Vi1Im.mjs.map +0 -1
  2219. package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-CglgGV6H.mjs +0 -276
  2220. package/fesm2022/edvak99-voice-receptionist-widget-analytics-page.component-CglgGV6H.mjs.map +0 -1
  2221. package/fesm2022/edvak99-voice-receptionist-widget-api-log.util-C0TOKF1q.mjs.map +0 -1
  2222. package/fesm2022/edvak99-voice-receptionist-widget-api-logs-page.component-DPJiuNjk.mjs +0 -226
  2223. package/fesm2022/edvak99-voice-receptionist-widget-api-logs-page.component-DPJiuNjk.mjs.map +0 -1
  2224. package/fesm2022/edvak99-voice-receptionist-widget-api-logs-table.component-CiNc65dO.mjs +0 -109
  2225. package/fesm2022/edvak99-voice-receptionist-widget-api-logs-table.component-CiNc65dO.mjs.map +0 -1
  2226. package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-ENq2c-sm.mjs +0 -513
  2227. package/fesm2022/edvak99-voice-receptionist-widget-call-history-detail-page.component-ENq2c-sm.mjs.map +0 -1
  2228. package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-DoYJFpSa.mjs +0 -200
  2229. package/fesm2022/edvak99-voice-receptionist-widget-call-history-page.component-DoYJFpSa.mjs.map +0 -1
  2230. package/fesm2022/edvak99-voice-receptionist-widget-call-recording-player.component-GVg1g-Vq.mjs.map +0 -1
  2231. package/fesm2022/edvak99-voice-receptionist-widget-call-review.util-Deh3jPgo.mjs.map +0 -1
  2232. package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-B_EYljRs.mjs +0 -147
  2233. package/fesm2022/edvak99-voice-receptionist-widget-dashboard-page.component-B_EYljRs.mjs.map +0 -1
  2234. package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-BJs_TH8X.mjs +0 -38
  2235. package/fesm2022/edvak99-voice-receptionist-widget-eds-avatar.component-BJs_TH8X.mjs.map +0 -1
  2236. package/fesm2022/edvak99-voice-receptionist-widget-eds-search-field.component-OGRDvYBp.mjs.map +0 -1
  2237. package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-pS2jeB4x.mjs +0 -4089
  2238. package/fesm2022/edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-pS2jeB4x.mjs.map +0 -1
  2239. package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-1woGuh0J.mjs +0 -74
  2240. package/fesm2022/edvak99-voice-receptionist-widget-live-calls-page.component-1woGuh0J.mjs.map +0 -1
  2241. package/fesm2022/edvak99-voice-receptionist-widget-live-monitor-page.component-ihwm1LNn.mjs.map +0 -1
  2242. package/fesm2022/edvak99-voice-receptionist-widget-modal.component-uYApl1KF.mjs +0 -48
  2243. package/fesm2022/edvak99-voice-receptionist-widget-modal.component-uYApl1KF.mjs.map +0 -1
  2244. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-B2koBFU3.mjs +0 -390
  2245. package/fesm2022/edvak99-voice-receptionist-widget-outbound-purposes-page.component-B2koBFU3.mjs.map +0 -1
  2246. package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-C6F-Hgmk.mjs +0 -1056
  2247. package/fesm2022/edvak99-voice-receptionist-widget-settings-page.component-C6F-Hgmk.mjs.map +0 -1
  2248. package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-BojdiNNx.mjs +0 -194
  2249. package/fesm2022/edvak99-voice-receptionist-widget-task-detail-drawer.component-BojdiNNx.mjs.map +0 -1
  2250. package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-Cf76XyCz.mjs +0 -146
  2251. package/fesm2022/edvak99-voice-receptionist-widget-tasks-page.component-Cf76XyCz.mjs.map +0 -1
  2252. package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-BQTlz2F5.mjs +0 -45
  2253. package/fesm2022/edvak99-voice-receptionist-widget-wizard-page.component-BQTlz2F5.mjs.map +0 -1
  2254. package/lib/ui/eds-avatar.component.d.ts +0 -11
  2255. package/lib/ui/eds-icon.component.d.ts +0 -10
  2256. package/styles/chat-ui.scss +0 -132
  2257. package/styles/eds.scss +0 -387
@@ -1,4089 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, inject, signal, Injectable, ChangeDetectionStrategy, Component, input, computed, DestroyRef } from '@angular/core';
3
- import { Router, RouterLink, RouterLinkActive, NavigationStart, NavigationEnd, NavigationCancel, NavigationError, RouterOutlet } from '@angular/router';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { filter } from 'rxjs/operators';
6
- import { of, delay, throwError, map, catchError, forkJoin, switchMap, interval, filter as filter$1 } from 'rxjs';
7
- import { HttpClient, HttpParams } from '@angular/common/http';
8
- import { io } from 'socket.io-client';
9
-
10
- const VOICE_RECEPTIONIST_CONFIG = new InjectionToken('VOICE_RECEPTIONIST_CONFIG');
11
- const VOICE_RECEPTIONIST_SESSION = new InjectionToken('VOICE_RECEPTIONIST_SESSION', { factory: () => null });
12
-
13
- function provideVoiceReceptionist(options) {
14
- const { session, ...config } = options;
15
- const providers = [
16
- { provide: VOICE_RECEPTIONIST_CONFIG, useValue: config },
17
- ];
18
- // Only set SESSION when the host passes one — otherwise leave the token
19
- // unset so a separate host factory (or the token default) can provide it.
20
- if (session !== undefined) {
21
- providers.push({ provide: VOICE_RECEPTIONIST_SESSION, useValue: session });
22
- }
23
- return makeEnvironmentProviders(providers);
24
- }
25
-
26
- /**
27
- * API Logs is standalone-dashboard only.
28
- * EHR embeds leave `showModuleNav` unset/false — redirect to dashboard.
29
- */
30
- const apiLogsStandaloneGuard = () => {
31
- const config = inject(VOICE_RECEPTIONIST_CONFIG);
32
- const router = inject(Router);
33
- if (config.showModuleNav)
34
- return true;
35
- const url = router.url.split('?')[0];
36
- const base = url.replace(/\/api-logs(?:\/.*)?$/, '') || '';
37
- const target = `${base.replace(/\/$/, '')}/dashboard` || '/dashboard';
38
- return router.parseUrl(target);
39
- };
40
-
41
- class ToastService {
42
- constructor() {
43
- this.nextId = 1;
44
- this.timers = new Map();
45
- this._toasts = signal([]);
46
- this.toasts = this._toasts.asReadonly();
47
- }
48
- show(text, variant = 'info', durationMs = 3500) {
49
- const id = this.nextId++;
50
- this._toasts.update((list) => [...list, { id, text, variant }]);
51
- const timer = setTimeout(() => this.dismiss(id), durationMs);
52
- this.timers.set(id, timer);
53
- }
54
- dismiss(id) {
55
- const timer = this.timers.get(id);
56
- if (timer) {
57
- clearTimeout(timer);
58
- this.timers.delete(id);
59
- }
60
- this._toasts.update((list) => list.filter((t) => t.id !== id));
61
- }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
63
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastService, providedIn: 'root' }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastService, decorators: [{
66
- type: Injectable,
67
- args: [{ providedIn: 'root' }]
68
- }] });
69
-
70
- class ToastContainerComponent {
71
- constructor() {
72
- this.toastService = inject(ToastService);
73
- }
74
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
75
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: ToastContainerComponent, isStandalone: true, selector: "app-toast-container", ngImport: i0, template: "<div class=\"fixed bottom-6 right-6 z-[1100] flex max-w-[380px] flex-col gap-3 pointer-events-none\" aria-live=\"polite\" aria-atomic=\"false\">\n @for (toast of toastService.toasts(); track toast.id) {\n <div\n class=\"toast pointer-events-auto flex items-start gap-3 rounded-[var(--eds-radius-md)] border border-[var(--eds-color-border)] bg-[var(--eds-color-surface)] px-4 py-3 text-[13px] text-[var(--eds-color-text)] shadow-[0_6px_24px_rgba(20,30,50,0.12)]\"\n role=\"status\"\n >\n <span\n class=\"inline-flex h-[22px] w-[22px] shrink-0 items-center justify-center rounded-full\"\n [class]=\"toast.variant === 'success' ? 'bg-[var(--eds-color-success-soft)] text-[var(--eds-color-success)]' : toast.variant === 'error' ? 'bg-[var(--eds-color-danger-soft)] text-[var(--eds-color-danger)]' : 'bg-[var(--eds-color-primary-soft)] text-[var(--eds-color-primary)]'\"\n aria-hidden=\"true\"\n >\n @switch (toast.variant) {\n @case ('success') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n }\n @case ('error') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n }\n @default {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n }\n }\n </span>\n <span class=\"flex-1 leading-snug\">{{ toast.text }}</span>\n <button\n type=\"button\"\n class=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded border-none bg-transparent text-[var(--eds-color-text-soft)] transition-colors duration-150 hover:bg-[var(--eds-color-surface-alt)] hover:text-[var(--eds-color-text)]\"\n (click)=\"toastService.dismiss(toast.id)\"\n aria-label=\"Dismiss notification\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n }\n</div>\n", styles: [".toast{animation:slide-in .16s ease}@keyframes slide-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
76
- }
77
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: ToastContainerComponent, decorators: [{
78
- type: Component,
79
- args: [{ selector: 'app-toast-container', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"fixed bottom-6 right-6 z-[1100] flex max-w-[380px] flex-col gap-3 pointer-events-none\" aria-live=\"polite\" aria-atomic=\"false\">\n @for (toast of toastService.toasts(); track toast.id) {\n <div\n class=\"toast pointer-events-auto flex items-start gap-3 rounded-[var(--eds-radius-md)] border border-[var(--eds-color-border)] bg-[var(--eds-color-surface)] px-4 py-3 text-[13px] text-[var(--eds-color-text)] shadow-[0_6px_24px_rgba(20,30,50,0.12)]\"\n role=\"status\"\n >\n <span\n class=\"inline-flex h-[22px] w-[22px] shrink-0 items-center justify-center rounded-full\"\n [class]=\"toast.variant === 'success' ? 'bg-[var(--eds-color-success-soft)] text-[var(--eds-color-success)]' : toast.variant === 'error' ? 'bg-[var(--eds-color-danger-soft)] text-[var(--eds-color-danger)]' : 'bg-[var(--eds-color-primary-soft)] text-[var(--eds-color-primary)]'\"\n aria-hidden=\"true\"\n >\n @switch (toast.variant) {\n @case ('success') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n }\n @case ('error') {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n }\n @default {\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n }\n }\n </span>\n <span class=\"flex-1 leading-snug\">{{ toast.text }}</span>\n <button\n type=\"button\"\n class=\"inline-flex h-6 w-6 shrink-0 items-center justify-center rounded border-none bg-transparent text-[var(--eds-color-text-soft)] transition-colors duration-150 hover:bg-[var(--eds-color-surface-alt)] hover:text-[var(--eds-color-text)]\"\n (click)=\"toastService.dismiss(toast.id)\"\n aria-label=\"Dismiss notification\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n }\n</div>\n", styles: [".toast{animation:slide-in .16s ease}@keyframes slide-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}\n"] }]
80
- }] });
81
-
82
- class EdsIconComponent {
83
- constructor() {
84
- this.name = input.required();
85
- this.size = input(20);
86
- this.fill = input(0);
87
- this.weight = input(400);
88
- this.variation = computed(() => `'FILL' ${this.fill()}, 'wght' ${this.weight()}, 'GRAD' 0, 'opsz' ${this.size()}`);
89
- }
90
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
91
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.17", type: EdsIconComponent, isStandalone: true, selector: "eds-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fill: { classPropertyName: "fill", publicName: "fill", isSignal: true, isRequired: false, transformFunction: null }, weight: { classPropertyName: "weight", publicName: "weight", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `<span class="eds-icon" [style.font-size.px]="size()" [style.font-variation-settings]="variation()">{{ name() }}</span>`, isInline: true, styles: [":host{display:inline-flex;line-height:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
92
- }
93
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsIconComponent, decorators: [{
94
- type: Component,
95
- args: [{ selector: 'eds-icon', standalone: true, template: `<span class="eds-icon" [style.font-size.px]="size()" [style.font-variation-settings]="variation()">{{ name() }}</span>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-flex;line-height:0}\n"] }]
96
- }] });
97
-
98
- class EdsModuleNavComponent {
99
- constructor() {
100
- this.config = inject(VOICE_RECEPTIONIST_CONFIG);
101
- this.session = inject(VOICE_RECEPTIONIST_SESSION);
102
- this.includePracticeNav = !!this.config.includePracticeNav;
103
- /** Standalone Voice Hub only — never show logout in EHR embed (no module nav there). */
104
- this.showLogout = computed(() => !!this.session);
105
- this.userEmail = computed(() => this.session?.email() ?? null);
106
- this.receptionistNav = [
107
- { id: 'dashboard', label: 'Home', icon: 'home', route: 'dashboard' },
108
- { id: 'live', label: 'Live Calls', icon: 'phone_in_talk', route: 'live' },
109
- { id: 'history', label: 'Call History', icon: 'history', route: 'history' },
110
- { id: 'activities', label: 'Activities', icon: 'format_list_bulleted', route: 'activities' },
111
- { id: 'analytics', label: 'Analytics', icon: 'show_chart', route: 'analytics' },
112
- { id: 'api-logs', label: 'API Logs', icon: 'terminal', route: 'api-logs' },
113
- { id: 'settings', label: 'Agent Setting', icon: 'settings', route: 'settings' },
114
- ];
115
- this.practiceNav = [
116
- { id: 'patients', label: 'Patients', icon: 'groups', route: 'patients' },
117
- { id: 'providers', label: 'Providers', icon: 'medical_services', route: 'providers' },
118
- { id: 'appointments', label: 'Appointments', icon: 'calendar_month', route: 'appointments' },
119
- { id: 'admin', label: 'Admin', icon: 'admin_panel_settings', route: 'admin', adminOnly: true },
120
- ];
121
- }
122
- showNavItem(item) {
123
- if (!item.adminOnly)
124
- return true;
125
- return !!this.session?.isAdmin() || !!this.session?.isSuperAdmin?.();
126
- }
127
- logout() {
128
- this.session?.logout();
129
- }
130
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsModuleNavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
131
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: EdsModuleNavComponent, isStandalone: true, selector: "eds-module-nav", host: { classAttribute: "block shrink-0" }, ngImport: i0, template: "<nav\n class=\"flex h-screen min-h-screen w-[var(--eds-nav-width)] flex-col overflow-y-auto sticky top-0 border-r border-[var(--eds-border-default)] bg-white py-5 px-4\"\n aria-label=\"AI Receptionist\"\n>\n <div class=\"mb-4 flex items-center gap-3 border-b border-[var(--eds-border-default)] px-1 pb-4 pt-1\">\n <span class=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-[10px] bg-violet-500/15 text-[var(--eds-violet-500)]\" aria-hidden=\"true\">\n <eds-icon name=\"auto_awesome\" [size]=\"20\" [fill]=\"1\" />\n </span>\n <div class=\"flex min-w-0 flex-col gap-1\">\n <span class=\"text-[15px] font-semibold leading-tight tracking-tight text-[var(--eds-text-primary)]\">AI Receptionist</span>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-1\">\n @for (item of receptionistNav; track item.id) {\n <a\n class=\"group/link relative flex items-center gap-3 rounded-[10px] px-3 py-3 text-sm font-medium leading-tight text-slate-700 no-underline transition-colors duration-150 hover:bg-slate-50 hover:text-slate-900 [&.active]:bg-slate-100 [&.active]:font-semibold [&.active]:text-slate-900\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: item.route === 'dashboard' }\"\n >\n <eds-icon class=\"shrink-0 text-slate-600 group-hover/link:text-slate-900 group-[.active]/link:text-slate-900\" [name]=\"item.icon\" [size]=\"24\" />\n <span class=\"min-w-0 flex-1\">{{ item.label }}</span>\n </a>\n }\n </div>\n\n @if (includePracticeNav) {\n <p class=\"mx-3 mb-2 mt-4 text-sm font-semibold text-[var(--eds-text-table-header,#4d5573)]\">Practice</p>\n <div class=\"mb-3 flex flex-col gap-1\">\n @for (item of practiceNav; track item.id) {\n @if (showNavItem(item)) {\n <a\n class=\"group/link relative flex items-center gap-3 rounded-[10px] px-3 py-3 text-sm font-medium leading-tight text-slate-700 no-underline transition-colors duration-150 hover:bg-slate-50 hover:text-slate-900 [&.active]:bg-slate-100 [&.active]:font-semibold [&.active]:text-slate-900\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"active\"\n >\n <eds-icon class=\"shrink-0 text-slate-600 group-hover/link:text-slate-900 group-[.active]/link:text-slate-900\" [name]=\"item.icon\" [size]=\"24\" />\n <span class=\"min-w-0 flex-1\">{{ item.label }}</span>\n </a>\n }\n }\n </div>\n }\n\n @if (showLogout()) {\n <div class=\"mt-auto border-t border-[var(--eds-border-default)] pt-3\">\n @if (userEmail(); as email) {\n <p class=\"mb-2 truncate px-3 text-xs text-slate-500\" [title]=\"email\">{{ email }}</p>\n }\n <button\n type=\"button\"\n class=\"group/link relative flex w-full cursor-pointer items-center gap-3 rounded-[10px] border-0 bg-transparent px-3 py-3 text-left text-sm font-medium leading-tight text-slate-700 transition-colors duration-150 hover:bg-slate-50 hover:text-slate-900\"\n (click)=\"logout()\"\n aria-label=\"Log out\"\n title=\"Log out\"\n >\n <eds-icon class=\"shrink-0 text-slate-600 group-hover/link:text-slate-900\" name=\"logout\" [size]=\"24\" />\n <span class=\"min-w-0 flex-1\">Log out</span>\n </button>\n </div>\n }\n</nav>\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: EdsIconComponent, selector: "eds-icon", inputs: ["name", "size", "fill", "weight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
132
- }
133
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsModuleNavComponent, decorators: [{
134
- type: Component,
135
- args: [{ selector: 'eds-module-nav', imports: [RouterLink, RouterLinkActive, EdsIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'block shrink-0' }, template: "<nav\n class=\"flex h-screen min-h-screen w-[var(--eds-nav-width)] flex-col overflow-y-auto sticky top-0 border-r border-[var(--eds-border-default)] bg-white py-5 px-4\"\n aria-label=\"AI Receptionist\"\n>\n <div class=\"mb-4 flex items-center gap-3 border-b border-[var(--eds-border-default)] px-1 pb-4 pt-1\">\n <span class=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-[10px] bg-violet-500/15 text-[var(--eds-violet-500)]\" aria-hidden=\"true\">\n <eds-icon name=\"auto_awesome\" [size]=\"20\" [fill]=\"1\" />\n </span>\n <div class=\"flex min-w-0 flex-col gap-1\">\n <span class=\"text-[15px] font-semibold leading-tight tracking-tight text-[var(--eds-text-primary)]\">AI Receptionist</span>\n </div>\n </div>\n\n <div class=\"flex flex-col gap-1\">\n @for (item of receptionistNav; track item.id) {\n <a\n class=\"group/link relative flex items-center gap-3 rounded-[10px] px-3 py-3 text-sm font-medium leading-tight text-slate-700 no-underline transition-colors duration-150 hover:bg-slate-50 hover:text-slate-900 [&.active]:bg-slate-100 [&.active]:font-semibold [&.active]:text-slate-900\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"active\"\n [routerLinkActiveOptions]=\"{ exact: item.route === 'dashboard' }\"\n >\n <eds-icon class=\"shrink-0 text-slate-600 group-hover/link:text-slate-900 group-[.active]/link:text-slate-900\" [name]=\"item.icon\" [size]=\"24\" />\n <span class=\"min-w-0 flex-1\">{{ item.label }}</span>\n </a>\n }\n </div>\n\n @if (includePracticeNav) {\n <p class=\"mx-3 mb-2 mt-4 text-sm font-semibold text-[var(--eds-text-table-header,#4d5573)]\">Practice</p>\n <div class=\"mb-3 flex flex-col gap-1\">\n @for (item of practiceNav; track item.id) {\n @if (showNavItem(item)) {\n <a\n class=\"group/link relative flex items-center gap-3 rounded-[10px] px-3 py-3 text-sm font-medium leading-tight text-slate-700 no-underline transition-colors duration-150 hover:bg-slate-50 hover:text-slate-900 [&.active]:bg-slate-100 [&.active]:font-semibold [&.active]:text-slate-900\"\n [routerLink]=\"item.route\"\n routerLinkActive=\"active\"\n >\n <eds-icon class=\"shrink-0 text-slate-600 group-hover/link:text-slate-900 group-[.active]/link:text-slate-900\" [name]=\"item.icon\" [size]=\"24\" />\n <span class=\"min-w-0 flex-1\">{{ item.label }}</span>\n </a>\n }\n }\n </div>\n }\n\n @if (showLogout()) {\n <div class=\"mt-auto border-t border-[var(--eds-border-default)] pt-3\">\n @if (userEmail(); as email) {\n <p class=\"mb-2 truncate px-3 text-xs text-slate-500\" [title]=\"email\">{{ email }}</p>\n }\n <button\n type=\"button\"\n class=\"group/link relative flex w-full cursor-pointer items-center gap-3 rounded-[10px] border-0 bg-transparent px-3 py-3 text-left text-sm font-medium leading-tight text-slate-700 transition-colors duration-150 hover:bg-slate-50 hover:text-slate-900\"\n (click)=\"logout()\"\n aria-label=\"Log out\"\n title=\"Log out\"\n >\n <eds-icon class=\"shrink-0 text-slate-600 group-hover/link:text-slate-900\" name=\"logout\" [size]=\"24\" />\n <span class=\"min-w-0 flex-1\">Log out</span>\n </button>\n </div>\n }\n</nav>\n" }]
136
- }] });
137
-
138
- /**
139
- * Thin top progress bar + soft content veil while Angular navigates
140
- * (lazy chunks, guards). Use once at the host root or app shell.
141
- */
142
- class EdsRouteProgressComponent {
143
- constructor() {
144
- this.router = inject(Router);
145
- this.destroyRef = inject(DestroyRef);
146
- this.hideTimer = null;
147
- this.active = signal(false);
148
- this.router.events
149
- .pipe(filter((e) => e instanceof NavigationStart ||
150
- e instanceof NavigationEnd ||
151
- e instanceof NavigationCancel ||
152
- e instanceof NavigationError), takeUntilDestroyed(this.destroyRef))
153
- .subscribe((e) => {
154
- if (e instanceof NavigationStart) {
155
- this.clearHideTimer();
156
- this.active.set(true);
157
- return;
158
- }
159
- // Keep visible briefly so fast navigations still feel intentional.
160
- this.clearHideTimer();
161
- this.hideTimer = setTimeout(() => this.active.set(false), 180);
162
- });
163
- this.destroyRef.onDestroy(() => this.clearHideTimer());
164
- }
165
- clearHideTimer() {
166
- if (this.hideTimer) {
167
- clearTimeout(this.hideTimer);
168
- this.hideTimer = null;
169
- }
170
- }
171
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsRouteProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
172
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: EdsRouteProgressComponent, isStandalone: true, selector: "eds-route-progress", ngImport: i0, template: `
173
- @if (active()) {
174
- <div class="eds-route-progress" role="progressbar" aria-busy="true" aria-label="Loading page">
175
- <div class="eds-route-progress__bar"></div>
176
- </div>
177
- <div class="eds-route-progress__veil" aria-hidden="true">
178
- <div class="eds-route-progress__panel">
179
- <span class="eds-route-progress__spinner"></span>
180
- <span class="eds-route-progress__label">Loading…</span>
181
- </div>
182
- </div>
183
- }
184
- `, isInline: true, styles: [":host{display:contents}.eds-route-progress{position:fixed;inset:0 0 auto;z-index:9999;height:3px;overflow:hidden;pointer-events:none;background:transparent}.eds-route-progress__bar{height:100%;width:40%;border-radius:0 2px 2px 0;background:linear-gradient(90deg,#2162f0,#8e51ff);animation:eds-route-progress-slide 1.05s ease-in-out infinite}.eds-route-progress__veil{position:fixed;inset:0;z-index:9998;display:flex;align-items:center;justify-content:center;pointer-events:all;background:#f7faff8c;backdrop-filter:blur(1px)}.eds-route-progress__panel{display:inline-flex;align-items:center;gap:.75rem;padding:.75rem 1.1rem;border:1px solid #e2e8f0;border-radius:.75rem;background:#fff;box-shadow:0 8px 24px #0f172a14;color:#334155;font-family:Inter,system-ui,sans-serif;font-size:.875rem;font-weight:500}.eds-route-progress__spinner{width:1.1rem;height:1.1rem;border:2px solid #dbeafe;border-top-color:#2162f0;border-radius:999px;animation:eds-route-progress-spin .7s linear infinite}.eds-route-progress__label{letter-spacing:-.01em}@keyframes eds-route-progress-slide{0%{transform:translate(-120%)}to{transform:translate(320%)}}@keyframes eds-route-progress-spin{to{transform:rotate(360deg)}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
185
- }
186
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsRouteProgressComponent, decorators: [{
187
- type: Component,
188
- args: [{ selector: 'eds-route-progress', standalone: true, template: `
189
- @if (active()) {
190
- <div class="eds-route-progress" role="progressbar" aria-busy="true" aria-label="Loading page">
191
- <div class="eds-route-progress__bar"></div>
192
- </div>
193
- <div class="eds-route-progress__veil" aria-hidden="true">
194
- <div class="eds-route-progress__panel">
195
- <span class="eds-route-progress__spinner"></span>
196
- <span class="eds-route-progress__label">Loading…</span>
197
- </div>
198
- </div>
199
- }
200
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:contents}.eds-route-progress{position:fixed;inset:0 0 auto;z-index:9999;height:3px;overflow:hidden;pointer-events:none;background:transparent}.eds-route-progress__bar{height:100%;width:40%;border-radius:0 2px 2px 0;background:linear-gradient(90deg,#2162f0,#8e51ff);animation:eds-route-progress-slide 1.05s ease-in-out infinite}.eds-route-progress__veil{position:fixed;inset:0;z-index:9998;display:flex;align-items:center;justify-content:center;pointer-events:all;background:#f7faff8c;backdrop-filter:blur(1px)}.eds-route-progress__panel{display:inline-flex;align-items:center;gap:.75rem;padding:.75rem 1.1rem;border:1px solid #e2e8f0;border-radius:.75rem;background:#fff;box-shadow:0 8px 24px #0f172a14;color:#334155;font-family:Inter,system-ui,sans-serif;font-size:.875rem;font-weight:500}.eds-route-progress__spinner{width:1.1rem;height:1.1rem;border:2px solid #dbeafe;border-top-color:#2162f0;border-radius:999px;animation:eds-route-progress-spin .7s linear infinite}.eds-route-progress__label{letter-spacing:-.01em}@keyframes eds-route-progress-slide{0%{transform:translate(-120%)}to{transform:translate(320%)}}@keyframes eds-route-progress-spin{to{transform:rotate(360deg)}}\n"] }]
201
- }], ctorParameters: () => [] });
202
-
203
- class EdsAppShellComponent {
204
- constructor() {
205
- /** EHR embed: false (default). Standalone Voice Hub: set showModuleNav: true. */
206
- this.showModuleNav = !!inject(VOICE_RECEPTIONIST_CONFIG).showModuleNav;
207
- /**
208
- * Standalone Voice Hub mounts progress on app-root. EHR embeds that only use
209
- * this shell still need a nav loader — enable when host nav is hidden.
210
- */
211
- this.showRouteProgress = !this.showModuleNav;
212
- }
213
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsAppShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
214
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: EdsAppShellComponent, isStandalone: true, selector: "eds-app-shell", ngImport: i0, template: "<div class=\"eds-layout flex min-h-screen\">\n @if (showRouteProgress) {\n <eds-route-progress />\n }\n @if (showModuleNav) {\n <eds-module-nav />\n }\n <div class=\"eds-main flex min-w-0 flex-1 flex-col\">\n <div class=\"eds-content flex-1 overflow-auto\">\n <router-outlet />\n </div>\n </div>\n <app-toast-container />\n</div>\n", styles: [":host{display:block}.eds-layout{background:var(--eds-surface-l1);font-family:var(--eds-font-inter, \"Inter\", sans-serif);font-size:var(--eds-font-size-base, 13px);font-weight:var(--eds-font-weight-regular, 400);color:var(--eds-text-primary, #41464c)}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "component", type: EdsModuleNavComponent, selector: "eds-module-nav" }, { kind: "component", type: ToastContainerComponent, selector: "app-toast-container" }, { kind: "component", type: EdsRouteProgressComponent, selector: "eds-route-progress" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
215
- }
216
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsAppShellComponent, decorators: [{
217
- type: Component,
218
- args: [{ selector: 'eds-app-shell', imports: [
219
- RouterOutlet,
220
- EdsModuleNavComponent,
221
- ToastContainerComponent,
222
- EdsRouteProgressComponent,
223
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"eds-layout flex min-h-screen\">\n @if (showRouteProgress) {\n <eds-route-progress />\n }\n @if (showModuleNav) {\n <eds-module-nav />\n }\n <div class=\"eds-main flex min-w-0 flex-1 flex-col\">\n <div class=\"eds-content flex-1 overflow-auto\">\n <router-outlet />\n </div>\n </div>\n <app-toast-container />\n</div>\n", styles: [":host{display:block}.eds-layout{background:var(--eds-surface-l1);font-family:var(--eds-font-inter, \"Inter\", sans-serif);font-size:var(--eds-font-size-base, 13px);font-weight:var(--eds-font-weight-regular, 400);color:var(--eds-text-primary, #41464c)}\n"] }]
224
- }] });
225
-
226
- /** Build URL helpers from a config (or raw base URL). Safe outside injection context. */
227
- function createVoiceReceptionistPaths(configOrBase) {
228
- const base = typeof configOrBase === 'string' ? configOrBase : configOrBase.apiBaseUrl;
229
- const root = base.replace(/\/$/, '');
230
- return {
231
- apiRoot: () => root,
232
- authPath: (suffix = '') => `${root}/api/auth${suffix}`,
233
- v1Path: (suffix = '') => `${root}/api/v1${suffix}`,
234
- apiPath: (suffix = '') => `${root}/api${suffix}`,
235
- aiReceptionistPath: (suffix = '') => `${root}/api/ai-receptionist${suffix}`,
236
- healthPath: (suffix = '') => `${root}/health${suffix}`,
237
- };
238
- }
239
-
240
- /** Normalize list/detail API payloads into a row array. */
241
- function extractApiRows(body) {
242
- if (Array.isArray(body))
243
- return body;
244
- if (!body || typeof body !== 'object')
245
- return [];
246
- const o = body;
247
- const list = o['items'] ?? o['patients'] ?? o['appointments'] ?? o['providers'] ?? o['data'];
248
- if (Array.isArray(list))
249
- return list;
250
- if (o['patientId'] || o['patient_id'] || o['appointmentId'] || o['appointment_id']) {
251
- return [body];
252
- }
253
- return [];
254
- }
255
-
256
- function mapOutboundPatientHit(raw) {
257
- if (!raw || typeof raw !== 'object')
258
- return null;
259
- const r = raw;
260
- const patientId = String(r['patientId'] ?? r['patient_id'] ?? r['id'] ?? '').trim();
261
- if (!patientId)
262
- return null;
263
- const firstName = String(r['firstName'] ?? r['first_name'] ?? '').trim();
264
- const lastName = String(r['lastName'] ?? r['last_name'] ?? '').trim();
265
- const full = String(r['fullName'] ?? r['full_name'] ?? r['name'] ?? '').trim() ||
266
- [firstName, lastName].filter(Boolean).join(' ');
267
- const phone = String(r['mobilePhone'] ?? r['phone'] ?? r['mobile_phone'] ?? '').trim() || null;
268
- const dobRaw = String(r['dateOfBirth'] ?? r['dob'] ?? '').trim();
269
- return {
270
- patientId,
271
- firstName,
272
- lastName,
273
- fullName: full || 'Unknown patient',
274
- phone,
275
- dob: dobRaw ? dobRaw.slice(0, 10) : null,
276
- };
277
- }
278
- function mapOutboundAppointmentHit(raw) {
279
- if (!raw || typeof raw !== 'object')
280
- return null;
281
- const r = raw;
282
- const appointmentId = String(r['appointmentId'] ?? r['appointment_id'] ?? r['id'] ?? '').trim();
283
- if (!appointmentId)
284
- return null;
285
- const providerObj = r['provider'] && typeof r['provider'] === 'object'
286
- ? r['provider']
287
- : null;
288
- const locationObj = r['location'] && typeof r['location'] === 'object'
289
- ? r['location']
290
- : null;
291
- const visitObj = r['visitType'] && typeof r['visitType'] === 'object'
292
- ? r['visitType']
293
- : null;
294
- const providerName = String(r['providerName'] ??
295
- r['provider_name'] ??
296
- providerObj?.['fullName'] ??
297
- [providerObj?.['firstName'], providerObj?.['lastName']].filter(Boolean).join(' ') ??
298
- '').trim() || null;
299
- const locationName = String(r['locationName'] ?? r['location_name'] ?? locationObj?.['locationName'] ?? '').trim() || null;
300
- const visitTypeRaw = r['visitType'];
301
- const visitType = (typeof visitTypeRaw === 'string' ? visitTypeRaw.trim() : '') ||
302
- String(r['visitTypeName'] ??
303
- r['visit_type'] ??
304
- visitObj?.['visitTypeName'] ??
305
- visitObj?.['name'] ??
306
- '').trim() ||
307
- null;
308
- return {
309
- appointmentId,
310
- startTime: String(r['startTime'] ?? r['start_time'] ?? '').trim() || null,
311
- endTime: String(r['endTime'] ?? r['end_time'] ?? '').trim() || null,
312
- providerName,
313
- locationName,
314
- status: String(r['appointmentStatus'] ?? r['status'] ?? r['visitStatus'] ?? '').trim() || null,
315
- visitType,
316
- };
317
- }
318
- /** Best-effort E.164 for US/local numbers used in dialer. */
319
- function toE164Phone(raw) {
320
- const digits = String(raw ?? '').replace(/\D/g, '');
321
- if (!digits)
322
- return '';
323
- if (String(raw ?? '').trim().startsWith('+') && /^\+[1-9]\d{6,14}$/.test(String(raw).trim())) {
324
- return String(raw).trim();
325
- }
326
- if (digits.length === 10)
327
- return `+1${digits}`;
328
- if (digits.length === 11 && digits.startsWith('1'))
329
- return `+${digits}`;
330
- if (digits.length >= 8)
331
- return `+${digits}`;
332
- return String(raw ?? '').trim();
333
- }
334
-
335
- function mapStaffMediaJoinResult(raw) {
336
- if (!raw || typeof raw !== 'object')
337
- return null;
338
- const r = raw;
339
- const data = r['data'] && typeof r['data'] === 'object'
340
- ? r['data']
341
- : r;
342
- const livekitUrl = String(data['livekitUrl'] ?? data['livekit_url'] ?? data['url'] ?? '').trim();
343
- const clientToken = String(data['clientToken'] ?? data['client_token'] ?? data['token'] ?? '').trim();
344
- const modeRaw = String(data['mode'] ?? 'takeover').toLowerCase();
345
- const mode = modeRaw === 'listen' ? 'listen' : 'takeover';
346
- if (!livekitUrl || !clientToken)
347
- return null;
348
- return {
349
- ok: data['ok'] !== false,
350
- callId: String(data['callId'] ?? data['call_id'] ?? ''),
351
- mode,
352
- provider: String(data['provider'] ?? 'livekit'),
353
- livekitUrl,
354
- clientToken,
355
- tokenExpiresAt: strOrNull$1(data['tokenExpiresAt'] ?? data['token_expires_at']),
356
- conversationId: strOrNull$1(data['conversationId'] ?? data['conversation_id']),
357
- memberId: strOrNull$1(data['memberId'] ?? data['member_id']),
358
- roomName: strOrNull$1(data['roomName'] ?? data['room_name']),
359
- iceServers: Array.isArray(data['iceServers']) ? data['iceServers'] : undefined,
360
- controlMode: strOrNull$1(data['controlMode'] ?? data['control_mode']),
361
- aiPaused: typeof data['aiPaused'] === 'boolean'
362
- ? data['aiPaused']
363
- : typeof data['ai_paused'] === 'boolean'
364
- ? data['ai_paused']
365
- : mode === 'takeover',
366
- aiHandedOff: typeof data['aiHandedOff'] === 'boolean'
367
- ? data['aiHandedOff']
368
- : mode === 'takeover',
369
- assigned: strOrNull$1(data['assigned']),
370
- };
371
- }
372
- function strOrNull$1(value) {
373
- const s = String(value ?? '').trim();
374
- return s || null;
375
- }
376
-
377
- function mapAgentActivity(raw, index = 0) {
378
- if (!raw || typeof raw !== 'object') {
379
- return {
380
- id: `activity-${index}`,
381
- type: 'unknown',
382
- occurredAt: new Date().toISOString(),
383
- title: 'Activity',
384
- detail: '',
385
- };
386
- }
387
- const r = raw;
388
- const nestedPatient = asRecord(r['patient']);
389
- const nestedProvider = asRecord(r['provider'] ?? r['practitioner'] ?? r['doctor']);
390
- const type = String(r['type'] ?? r['activityType'] ?? 'unknown');
391
- const patientName = strOrNull(r['patientName'] ?? r['patient_name']) ?? strOrNull(nestedPatient?.['name']);
392
- const providerName = strOrNull(r['providerName'] ??
393
- r['provider_name'] ??
394
- r['practitionerName'] ??
395
- r['practitioner_name'] ??
396
- r['doctorName'] ??
397
- r['doctor_name']) ?? strOrNull(nestedProvider?.['name']);
398
- const detail = String(r['detail'] ?? r['description'] ?? '').trim();
399
- const parsed = parseActivityDetail(detail);
400
- const insurance = resolveInsurance(r, nestedPatient);
401
- const visitType = strOrNull(r['visitType'] ?? r['visit_type'] ?? r['category'] ?? r['reason']) ??
402
- parsed.visitType;
403
- const startAt = strOrNull(r['startAt'] ?? r['start_at'] ?? r['appointmentStart'] ?? r['appointment_start']) ??
404
- parsed.startAt;
405
- const endAt = strOrNull(r['endAt'] ?? r['end_at'] ?? r['appointmentEnd'] ?? r['appointment_end']);
406
- const practiceName = strOrNull(r['practiceName'] ?? r['practice_name'] ?? r['location'] ?? r['clinic']) ??
407
- parsed.practiceName;
408
- return {
409
- id: String(r['id'] ?? r['activityId'] ?? `activity-${index}`),
410
- type,
411
- occurredAt: String(r['occurredAt'] ?? r['occurred_at'] ?? r['createdAt'] ?? ''),
412
- title: String(r['title'] ?? r['summary'] ?? '').trim() || activityTypeLabel(type),
413
- detail,
414
- patientId: strOrNull(r['patientId'] ?? r['patient_id'] ?? nestedPatient?.['id']),
415
- patientName,
416
- appointmentId: strOrNull(r['appointmentId'] ?? r['appointment_id']),
417
- taskId: strOrNull(r['taskId'] ?? r['task_id']),
418
- callId: strOrNull(r['callId'] ?? r['call_id']),
419
- startAt,
420
- endAt,
421
- durationMinutes: numOrNull(r['durationMinutes'] ?? r['duration_minutes'] ?? r['duration']),
422
- visitType,
423
- practiceName,
424
- patientDob: strOrNull(r['patientDob'] ?? r['patient_dob'] ?? r['dob'] ?? nestedPatient?.['dob']),
425
- patientAge: numOrNull(r['patientAge'] ?? r['patient_age'] ?? r['age'] ?? nestedPatient?.['age']),
426
- patientGender: normalizeGender(r['patientGender'] ?? r['patient_gender'] ?? r['gender'] ?? nestedPatient?.['gender']),
427
- patientInitials: strOrNull(r['patientInitials'] ??
428
- r['patient_initials'] ??
429
- r['initials'] ??
430
- nestedPatient?.['initials']) ?? initialsFromName(patientName),
431
- patientMrn: strOrNull(r['patientMrn'] ??
432
- r['patient_mrn'] ??
433
- r['mrn'] ??
434
- r['MRN'] ??
435
- nestedPatient?.['mrn'] ??
436
- nestedPatient?.['MRN']),
437
- hasInsurance: insurance.hasInsurance,
438
- insuranceName: insurance.name,
439
- providerId: strOrNull(r['providerId'] ?? r['provider_id'] ?? nestedProvider?.['id']),
440
- providerName,
441
- providerInitials: strOrNull(r['providerInitials'] ??
442
- r['provider_initials'] ??
443
- nestedProvider?.['initials']) ?? initialsFromName(providerName),
444
- providerSpecialty: strOrNull(r['providerSpecialty'] ??
445
- r['provider_specialty'] ??
446
- r['specialty'] ??
447
- nestedProvider?.['specialty'] ??
448
- nestedProvider?.['speciality']),
449
- priority: normalizePriority(r['priority'] ?? r['taskPriority'] ?? r['task_priority']),
450
- };
451
- }
452
- const INSURED_WORDS = ['active', 'verified', 'covered', 'insured', 'yes', 'true', 'eligible'];
453
- const UNINSURED_WORDS = [
454
- 'none',
455
- 'no',
456
- 'false',
457
- 'uninsured',
458
- 'self_pay',
459
- 'self-pay',
460
- 'selfpay',
461
- 'inactive',
462
- 'expired',
463
- 'missing',
464
- ];
465
- /**
466
- * Coverage can arrive as a boolean, a status string, a payer name or a nested object.
467
- * Unknown stays null so the UI can distinguish "no coverage" from "never told us".
468
- */
469
- function resolveInsurance(r, patient) {
470
- const nested = asRecord(r['insurance'] ?? patient?.['insurance']);
471
- const name = strOrNull(r['insuranceName'] ??
472
- r['insurance_name'] ??
473
- r['payerName'] ??
474
- r['payer_name'] ??
475
- r['payer'] ??
476
- patient?.['insuranceName'] ??
477
- patient?.['insurance_name'] ??
478
- nested?.['name'] ??
479
- nested?.['payer'] ??
480
- nested?.['planName']) ?? (typeof r['insurance'] === 'string' ? strOrNull(r['insurance']) : null);
481
- const flag = firstBoolean([
482
- r['hasInsurance'],
483
- r['has_insurance'],
484
- r['insured'],
485
- r['isInsured'],
486
- patient?.['hasInsurance'],
487
- patient?.['has_insurance'],
488
- patient?.['insured'],
489
- nested?.['active'],
490
- nested?.['isActive'],
491
- ]);
492
- if (flag !== null)
493
- return { hasInsurance: flag, name };
494
- const status = String(r['insuranceStatus'] ??
495
- r['insurance_status'] ??
496
- patient?.['insuranceStatus'] ??
497
- patient?.['insurance_status'] ??
498
- nested?.['status'] ??
499
- (typeof r['insurance'] === 'string' ? r['insurance'] : '') ??
500
- '')
501
- .trim()
502
- .toLowerCase();
503
- if (status) {
504
- if (INSURED_WORDS.includes(status))
505
- return { hasInsurance: true, name };
506
- if (UNINSURED_WORDS.includes(status))
507
- return { hasInsurance: false, name };
508
- }
509
- // A payer name on its own implies coverage.
510
- return { hasInsurance: name ? true : null, name };
511
- }
512
- function firstBoolean(values) {
513
- for (const value of values) {
514
- if (typeof value === 'boolean')
515
- return value;
516
- }
517
- return null;
518
- }
519
- /** Pull visit type / slot / practice out of a messy free-text detail blob. */
520
- function parseActivityDetail(detail) {
521
- if (!detail)
522
- return { visitType: null, startAt: null, practiceName: null };
523
- const visitMatch = /\(([^)]+)\)\s*$/.exec(detail);
524
- const visitType = visitMatch?.[1]?.trim() || null;
525
- const dateMatch = /\bfor\s+(\d{4}-\d{2}-\d{2})(?:\s+(\d{1,2}:\d{2}(?::\d{2})?))?/i.exec(detail) ??
526
- /\b(\d{4}-\d{2}-\d{2})[ T](\d{1,2}:\d{2}(?::\d{2})?)/.exec(detail);
527
- let startAt = null;
528
- if (dateMatch) {
529
- const date = dateMatch[1];
530
- const time = dateMatch[2] ? dateMatch[2].padStart(5, '0') : '00:00';
531
- startAt = `${date}T${time.length === 5 ? `${time}:00` : time}`;
532
- }
533
- const practiceMatch = /\bAT\s+([A-Z0-9][A-Z0-9 ,.'&-]{2,}?)(?:\s*\(|$)/.exec(detail);
534
- const practiceName = practiceMatch?.[1]?.trim().replace(/,\s*$/, '') || null;
535
- return { visitType, startAt, practiceName };
536
- }
537
- function activityTypeLabel(type) {
538
- switch (type) {
539
- case 'patient_created':
540
- return 'Patient created';
541
- case 'appointment_booked':
542
- return 'Appointment booked';
543
- case 'task_created':
544
- return 'Task created';
545
- default:
546
- return type.replace(/_/g, ' ') || 'Activity';
547
- }
548
- }
549
- function initialsFromName(name) {
550
- if (!name?.trim())
551
- return null;
552
- const cleaned = name.replace(/^dr\.?\s+/i, '').trim();
553
- const parts = cleaned.split(/\s+/).filter(Boolean);
554
- if (!parts.length)
555
- return null;
556
- if (parts.length === 1)
557
- return parts[0].slice(0, 2).toUpperCase();
558
- return `${parts[0][0] ?? ''}${parts[parts.length - 1][0] ?? ''}`.toUpperCase();
559
- }
560
- function normalizeGender(value) {
561
- const s = String(value ?? '').trim();
562
- if (!s)
563
- return null;
564
- const key = s.toLowerCase();
565
- if (key === 'm' || key === 'male')
566
- return 'M';
567
- if (key === 'f' || key === 'female')
568
- return 'F';
569
- if (key === 'o' || key === 'other' || key === 'non-binary' || key === 'nonbinary')
570
- return 'O';
571
- return s.length <= 3 ? s.toUpperCase() : s;
572
- }
573
- function normalizePriority(value) {
574
- const key = String(value ?? '')
575
- .trim()
576
- .toLowerCase()
577
- .replace(/[\s-]+/g, '_');
578
- if (!key)
579
- return null;
580
- if (key === 'urgent' || key === 'critical')
581
- return 'urgent';
582
- if (key === 'high')
583
- return 'high';
584
- if (key === 'medium' || key === 'med' || key === 'normal')
585
- return 'medium';
586
- if (key === 'low')
587
- return 'low';
588
- return null;
589
- }
590
- function asRecord(value) {
591
- return value && typeof value === 'object' && !Array.isArray(value)
592
- ? value
593
- : null;
594
- }
595
- function strOrNull(value) {
596
- const s = String(value ?? '').trim();
597
- return s || null;
598
- }
599
- function numOrNull(value) {
600
- if (value == null || value === '')
601
- return null;
602
- const n = Number(value);
603
- return Number.isFinite(n) ? n : null;
604
- }
605
-
606
- const DEFAULT_PAGE_SIZE = 50;
607
- /** Parse `{ items, total, page, limit }` or a bare array (legacy). */
608
- function asPaginatedResult(body, fallbackPage = 1, fallbackLimit = DEFAULT_PAGE_SIZE) {
609
- if (Array.isArray(body)) {
610
- return {
611
- items: body,
612
- total: body.length,
613
- page: fallbackPage,
614
- limit: fallbackLimit,
615
- };
616
- }
617
- if (!body || typeof body !== 'object') {
618
- return { items: [], total: 0, page: fallbackPage, limit: fallbackLimit };
619
- }
620
- const o = body;
621
- const rawItems = o['items'] ?? o['data'];
622
- const items = Array.isArray(rawItems) ? rawItems : [];
623
- const total = typeof o['total'] === 'number' ? o['total'] : items.length;
624
- const page = typeof o['page'] === 'number' ? o['page'] : fallbackPage;
625
- const limit = typeof o['limit'] === 'number' ? o['limit'] : fallbackLimit;
626
- return { items, total, page, limit };
627
- }
628
- function totalPages(total, pageSize) {
629
- return Math.max(1, Math.ceil(total / pageSize));
630
- }
631
-
632
- const WELCOME_MESSAGE_MAX = 1000;
633
- function buildAutoWelcomeTemplate(practiceName, agentName) {
634
- const practice = practiceName.trim() || 'our office';
635
- const agent = agentName.trim() || 'your AI receptionist';
636
- return `Hi, thanks for calling ${practice}. This is ${agent}. How can I help you today?`;
637
- }
638
- function resolveWelcomePreview(welcomeMessage, practiceName, agentName) {
639
- const custom = welcomeMessage?.trim();
640
- if (custom)
641
- return custom;
642
- return buildAutoWelcomeTemplate(practiceName, agentName);
643
- }
644
- function computeEffectiveWelcomeMessage(settings) {
645
- const general = settings.general;
646
- const custom = String(general['welcomeMessage'] ?? '').trim();
647
- if (custom)
648
- return custom;
649
- return buildAutoWelcomeTemplate(String(general['practiceName'] ?? ''), String(general['agentName'] ?? ''));
650
- }
651
-
652
- /** Call history table helpers — resolution badges + result chips. */
653
- function historyResolution(input) {
654
- if (input.risk === 'urgent' || input.risk === 'review')
655
- return 'needs_attention';
656
- const r = String(input.resolution ?? '').trim().toLowerCase();
657
- if (r === 'resolved')
658
- return 'resolved';
659
- if (r === 'unresolved' || r.includes('needs') || r.includes('attention')) {
660
- return 'needs_attention';
661
- }
662
- const o = String(input.outcome ?? '').toLowerCase();
663
- if (o.includes('unresolved') ||
664
- o.includes('fail') ||
665
- o.includes('escalat') ||
666
- o.includes('abandon') ||
667
- o.includes('attention') ||
668
- o.includes('voicemail') ||
669
- o === 'transferred') {
670
- return 'needs_attention';
671
- }
672
- if (o === 'completed' || o.includes('completed'))
673
- return 'resolved';
674
- return 'resolved';
675
- }
676
- function historyResolutionLabel(resolution) {
677
- return resolution === 'resolved' ? 'RESOLVED' : 'NEEDS ATTENTION';
678
- }
679
- function resultChipIcon(label) {
680
- const key = label.toLowerCase();
681
- if (key.includes('appointment') || key.includes('book'))
682
- return 'calendar_month';
683
- if (key.includes('task'))
684
- return 'check_circle';
685
- if (key.includes('register') || key.includes('patient'))
686
- return 'person_add';
687
- if (key.includes('info'))
688
- return 'info';
689
- if (key.includes('transfer'))
690
- return 'phone_forwarded';
691
- if (key.includes('refill'))
692
- return 'medication';
693
- return 'label';
694
- }
695
- function callerMetaLine(input) {
696
- if (isUnknownCaller(input.name, input.matched)) {
697
- return String(input.phone ?? '').trim() || '—';
698
- }
699
- const age = input.age ?? ageFromDob(input.dob);
700
- if (!input.dob && age == null && !input.gender) {
701
- return String(input.phone ?? '').trim() || '—';
702
- }
703
- const parts = [];
704
- if (input.dob) {
705
- parts.push(`DOB: ${formatDobDisplay(input.dob)}`);
706
- }
707
- const ageGender = [];
708
- if (age != null)
709
- ageGender.push(`${age}Y`);
710
- if (input.gender)
711
- ageGender.push(String(input.gender).charAt(0).toUpperCase());
712
- if (ageGender.length) {
713
- parts.push(parts.length ? `• ${ageGender.join(' | ')}` : ageGender.join(' | '));
714
- }
715
- return parts.join(' ') || String(input.phone ?? '').trim() || '—';
716
- }
717
- function formatDobDisplay(dob) {
718
- const m = /^(\d{4})-(\d{2})-(\d{2})/.exec(dob.trim());
719
- if (m)
720
- return `${m[2]}-${m[3]}-${m[1]}`;
721
- return dob;
722
- }
723
- /** Age in whole years from YYYY-MM-DD (or partial ISO). */
724
- function ageFromDob(dob, at = new Date()) {
725
- const m = /^(\d{4})-(\d{2})-(\d{2})/.exec(String(dob ?? '').trim());
726
- if (!m)
727
- return null;
728
- const y = Number(m[1]);
729
- const mo = Number(m[2]);
730
- const d = Number(m[3]);
731
- if (!y || !mo || !d)
732
- return null;
733
- let age = at.getFullYear() - y;
734
- const hadBirthday = at.getMonth() + 1 > mo || (at.getMonth() + 1 === mo && at.getDate() >= d);
735
- if (!hadBirthday)
736
- age -= 1;
737
- return age >= 0 && age < 130 ? age : null;
738
- }
739
- function isUnknownCaller(name, matched) {
740
- if (matched === false)
741
- return true;
742
- const n = String(name ?? '').trim();
743
- return !n || /^unknown/i.test(n) || n === '?';
744
- }
745
- /** Derive result chips from explicit actions, else from outcome text. */
746
- function historyResultChips(results, outcome) {
747
- if (results?.length)
748
- return results;
749
- const o = outcome.trim();
750
- if (!o)
751
- return [];
752
- const lower = o.toLowerCase();
753
- if (lower.includes('appointment') || lower.includes('book'))
754
- return ['Appointment Booked'];
755
- if (lower.includes('task'))
756
- return ['Task Created'];
757
- if (lower.includes('register'))
758
- return ['Patient Registered'];
759
- if (lower.includes('info') || lower.includes('hours') || lower.includes('direction')) {
760
- return ['Information Provided'];
761
- }
762
- if (lower === 'completed')
763
- return ['Information Provided'];
764
- return [o];
765
- }
766
-
767
- /** V3 agent tool labels — mirrors GET /api/agent-tools/catalog */
768
- const AGENT_TOOL_LABELS = {
769
- find_doctors: 'Found Doctors',
770
- check_doctor_availability: 'Checked Doctor Availability',
771
- list_visit_types: 'Listed Visit Types',
772
- search_patients: 'Searched Patients',
773
- search_practice_faq: 'Searched Practice FAQ',
774
- book_existing_appointment: 'Booked Appointment',
775
- register_and_book_appointment: 'Registered & Booked Appointment',
776
- submit_medication_refill: 'Submitted Medication Refill',
777
- };
778
- function looksLikeToolKey(value) {
779
- return /^[a-z][a-z0-9_]*$/.test(value.trim());
780
- }
781
- function humanizeToolKey(key) {
782
- return key
783
- .replace(/^tool_/, '')
784
- .split('_')
785
- .filter(Boolean)
786
- .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
787
- .join(' ');
788
- }
789
- /** Prefer API `name`; fall back to catalog label or a readable key. */
790
- function resolveToolDisplayName(key, name) {
791
- const trimmed = name?.trim() ?? '';
792
- if (trimmed && !looksLikeToolKey(trimmed))
793
- return trimmed;
794
- const lookupKey = key?.trim() || (looksLikeToolKey(trimmed) ? trimmed : '');
795
- if (lookupKey && AGENT_TOOL_LABELS[lookupKey])
796
- return AGENT_TOOL_LABELS[lookupKey];
797
- if (lookupKey)
798
- return humanizeToolKey(lookupKey);
799
- return trimmed || 'Tool activity';
800
- }
801
- /** Derive tool key from legacy `tech` values like `tool_check_doctor_availability`. */
802
- function inferToolKeyFromTech(tech) {
803
- const trimmed = tech?.trim();
804
- if (!trimmed)
805
- return undefined;
806
- if (trimmed.startsWith('tool_'))
807
- return trimmed.slice(5);
808
- if (looksLikeToolKey(trimmed))
809
- return trimmed;
810
- return undefined;
811
- }
812
- function resolveToolKey(key, name, tech) {
813
- const explicit = key?.trim();
814
- if (explicit)
815
- return explicit;
816
- if (looksLikeToolKey(name))
817
- return name.trim();
818
- return inferToolKeyFromTech(tech);
819
- }
820
- /** Stable @for track key — avoid ?? in template track expressions (Angular compiler bug). */
821
- function toolEventTrackKey(tool, index) {
822
- return `${tool.key ?? ''}|${tool.t}|${tool.tech}|${tool.name}|${index}`;
823
- }
824
-
825
- const TONE_COLORS = {
826
- brand: '#3681F4',
827
- pos: '#0ABF52',
828
- notice: '#FFB900',
829
- neg: '#F03740',
830
- violet: '#8E51FF',
831
- gray: '#71717A',
832
- };
833
- const DAY_LABELS = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];
834
- function parseDurToSeconds(dur) {
835
- if (!dur)
836
- return 0;
837
- const parts = dur.split(':').map((p) => Number(p.trim()));
838
- if (parts.some((n) => !Number.isFinite(n)))
839
- return 0;
840
- if (parts.length === 2)
841
- return parts[0] * 60 + parts[1];
842
- if (parts.length === 3)
843
- return parts[0] * 3600 + parts[1] * 60 + parts[2];
844
- return 0;
845
- }
846
- function parsePercent(value) {
847
- const n = Number(String(value).replace('%', '').trim());
848
- return Number.isFinite(n) ? n : 0;
849
- }
850
- function normalizeConfidence(value) {
851
- if (value <= 1)
852
- return Math.round(value * 100);
853
- return Math.round(value);
854
- }
855
- function mapVerification(raw) {
856
- const v = raw?.toLowerCase();
857
- if (v === 'verified' || v === 'partial' || v === 'failed' || v === 'unknown')
858
- return v;
859
- return 'unknown';
860
- }
861
- function mapCallStatus(raw) {
862
- const s = String(raw ?? 'ai').toLowerCase().replace(/_/g, '-');
863
- const allowed = [
864
- 'ai',
865
- 'needs-help',
866
- 'human-requested',
867
- 'urgent',
868
- 'takeover',
869
- 'transferring',
870
- ];
871
- return allowed.includes(s) ? s : 'ai';
872
- }
873
- function mapControlMode(raw, status, aiPaused) {
874
- const mode = String(raw ?? '').toLowerCase().replace(/_/g, '-');
875
- if (mode === 'ai' || mode === 'takeover' || mode === 'listen' || mode === 'paused') {
876
- return mode;
877
- }
878
- if (aiPaused === true)
879
- return 'paused';
880
- const st = String(status ?? '').toLowerCase().replace(/_/g, '-');
881
- if (st === 'takeover')
882
- return 'takeover';
883
- if (st === 'paused' || st === 'pause')
884
- return 'paused';
885
- if (st === 'listen' || st === 'listening')
886
- return 'listen';
887
- return 'ai';
888
- }
889
- function mapSentiment(raw) {
890
- const s = String(raw ?? 'neutral').toLowerCase();
891
- if (s === 'calm' || s === 'neutral' || s === 'frustrated' || s === 'urgent')
892
- return s;
893
- return 'neutral';
894
- }
895
- function mapTranscriptLine(line) {
896
- return {
897
- who: line.who,
898
- text: line.text,
899
- flag: line.flag,
900
- at: line.at ?? line.offsetSeconds ?? line.startTime,
901
- };
902
- }
903
- function mapToolEvent(tool) {
904
- const state = tool.state;
905
- const key = resolveToolKey(tool.key, tool.name, tool.tech);
906
- return {
907
- t: tool.t,
908
- key,
909
- name: resolveToolDisplayName(key, tool.name),
910
- tech: tool.tech,
911
- result: tool.result,
912
- state: ['ok', 'warn', 'error', 'active'].includes(state) ? state : 'ok',
913
- };
914
- }
915
- function normalizeRecordingStatus(status, url) {
916
- const known = ['ready', 'pending', 'unavailable', 'failed'];
917
- if (status && known.includes(status)) {
918
- return status;
919
- }
920
- return url ? 'ready' : 'unavailable';
921
- }
922
- function mapRecordingMeta(dto) {
923
- return {
924
- callId: dto.callId,
925
- status: normalizeRecordingStatus(dto.status, dto.url),
926
- url: dto.url ?? null,
927
- contentType: dto.contentType,
928
- durationSeconds: dto.durationSeconds,
929
- message: dto.message,
930
- };
931
- }
932
- function mapLiveCallDto(dto) {
933
- const dobRaw = String(dto.dob ?? dto.dateOfBirth ?? '').trim();
934
- const dob = dobRaw ? dobRaw.slice(0, 10) : undefined;
935
- const ageNum = typeof dto.age === 'number'
936
- ? dto.age
937
- : dto.age != null && String(dto.age).trim()
938
- ? Number(dto.age)
939
- : null;
940
- const age = ageNum != null && Number.isFinite(ageNum) ? ageNum : ageFromDob(dob);
941
- const gender = String(dto.gender ?? dto.sex ?? '').trim() || null;
942
- return {
943
- id: dto.id,
944
- name: dto.name,
945
- initials: dto.initials || (dto.matched ? '' : '?'),
946
- avatar: dto.avatar,
947
- phone: dto.phone,
948
- verification: mapVerification(dto.verification),
949
- direction: dto.direction,
950
- reason: dto.reason,
951
- status: mapCallStatus(dto.status),
952
- started: dto.started,
953
- sentiment: mapSentiment(dto.sentiment),
954
- confidence: normalizeConfidence(dto.confidence),
955
- goal: dto.goal,
956
- dob,
957
- age,
958
- gender,
959
- location: dto.location ?? '',
960
- provider: dto.provider,
961
- language: dto.language,
962
- matched: dto.matched,
963
- assigned: dto.assigned,
964
- controlMode: mapControlMode(dto.controlMode, dto.status, dto.aiPaused),
965
- tools: (dto.tools ?? []).map(mapToolEvent),
966
- transcript: (dto.transcript ?? []).map(mapTranscriptLine),
967
- aiPaused: dto.aiPaused === true || String(dto.controlMode ?? '').toLowerCase() === 'paused',
968
- aiHandedOff: dto.aiHandedOff === true,
969
- };
970
- }
971
- function mapHistoryCallDto(dto) {
972
- const parsedStarted = Date.parse(dto.startedAt ?? dto.when);
973
- const dobRaw = String(dto.dob ?? dto.dateOfBirth ?? '').trim();
974
- const ageNum = typeof dto.age === 'number'
975
- ? dto.age
976
- : dto.age != null && String(dto.age).trim()
977
- ? Number(dto.age)
978
- : null;
979
- const gender = String(dto.gender ?? dto.sex ?? '').trim() || null;
980
- const handledRaw = String(dto.handledBy ?? dto.handler ?? '').trim().toLowerCase();
981
- let handledBy;
982
- if (handledRaw === 'staff' || handledRaw === 'human' || handledRaw === 'user') {
983
- handledBy = 'staff';
984
- }
985
- else if (handledRaw === 'ai' || handledRaw === 'agent' || handledRaw === 'ava') {
986
- handledBy = 'ai';
987
- }
988
- else if (String(dto.outcome ?? '').toLowerCase().includes('transfer')) {
989
- handledBy = 'staff';
990
- }
991
- else {
992
- handledBy = 'ai';
993
- }
994
- return {
995
- id: dto.id,
996
- name: dto.name,
997
- initials: dto.initials || '?',
998
- phone: dto.phone,
999
- direction: dto.dir,
1000
- outcome: dto.outcome,
1001
- resolution: dto.resolution ?? null,
1002
- reason: dto.reason,
1003
- duration: parseDurToSeconds(dto.dur),
1004
- durationLabel: dto.dur,
1005
- started: Number.isFinite(parsedStarted) ? parsedStarted : 0,
1006
- whenLabel: Number.isFinite(parsedStarted) ? undefined : dto.when,
1007
- location: dto.location,
1008
- verification: mapVerification(dto.verify),
1009
- review: dto.review === 'reviewed' ? 'reviewed' : 'needs',
1010
- handledBy,
1011
- dob: dobRaw ? dobRaw.slice(0, 10) : null,
1012
- age: ageNum != null && Number.isFinite(ageNum) ? ageNum : null,
1013
- gender,
1014
- results: Array.isArray(dto.actions)
1015
- ? dto.actions.map((a) => String(a).trim()).filter(Boolean)
1016
- : [],
1017
- risk: dto.risk ?? null,
1018
- };
1019
- }
1020
- function mapHistoryDetailDto(call, detail, recordingUrl) {
1021
- const base = mapHistoryCallDto(call);
1022
- return {
1023
- ...base,
1024
- summary: detail.summary,
1025
- transcript: (detail.transcript ?? []).map(mapTranscriptLine),
1026
- tools: (detail.tools ?? []).map(mapToolEvent),
1027
- recordingUrl: recordingUrl ?? undefined,
1028
- };
1029
- }
1030
- function mapAttentionItemDto(dto) {
1031
- return {
1032
- id: dto.id,
1033
- callId: dto.id,
1034
- title: dto.name,
1035
- detail: dto.why || dto.reason,
1036
- severity: dto.sev === 'urgent' ? 'urgent' : 'warn',
1037
- time: Date.now(),
1038
- timeLabel: dto.time,
1039
- };
1040
- }
1041
- function mapDashboardSummaryDto(dto) {
1042
- return {
1043
- activeCalls: dto.liveCalls,
1044
- answeredToday: dto.callsToday,
1045
- appointmentsBooked: dto.appointmentsBooked ?? 0,
1046
- tasksCreated: dto.openTasks,
1047
- completionRate: parsePercent(dto.aiHandledRate),
1048
- };
1049
- }
1050
- function mapAiCreatedAppointmentDto(dto) {
1051
- return {
1052
- id: dto.id,
1053
- appointmentId: dto.appointmentId ?? dto.id,
1054
- patientName: dto.patientName || 'Unknown patient',
1055
- providerName: dto.providerName ?? null,
1056
- startTime: Date.parse(dto.startTime) || 0,
1057
- createdAt: Date.parse(dto.createdAt) || 0,
1058
- callId: dto.callId ?? null,
1059
- status: dto.status ?? null,
1060
- };
1061
- }
1062
- function mapTaskDto(dto) {
1063
- let status = 'open';
1064
- if (dto.status === 'done')
1065
- status = 'done';
1066
- else if (dto.status === 'in-progress')
1067
- status = 'in_progress';
1068
- return {
1069
- id: dto.id,
1070
- created: dto.created ? Date.parse(dto.created) || Date.now() : Date.now(),
1071
- title: dto.title || dto.type || 'Task',
1072
- type: dto.type || 'Other',
1073
- description: dto.summary ?? '',
1074
- patient: dto.patient || '—',
1075
- priority: dto.priority ?? 'normal',
1076
- status,
1077
- source: dto.source ?? 'voice',
1078
- assignee: dto.assignee || '—',
1079
- callId: dto.call || undefined,
1080
- edvakTaskId: dto.edvakTaskId,
1081
- edvakStatus: dto.edvakStatus,
1082
- medicationName: dto.medicationName,
1083
- medicationId: dto.medicationId,
1084
- };
1085
- }
1086
- function toApiTaskStatus(status) {
1087
- if (status === 'done')
1088
- return 'done';
1089
- if (status === 'in_progress')
1090
- return 'in-progress';
1091
- return 'open';
1092
- }
1093
- function mapCreateTaskRequest(req) {
1094
- return {
1095
- title: req.title.trim(),
1096
- type: req.type,
1097
- call: req.callId,
1098
- summary: req.description?.trim() || undefined,
1099
- patient: req.patient?.trim() || undefined,
1100
- priority: req.priority,
1101
- assignee: req.assignee?.trim() || undefined,
1102
- };
1103
- }
1104
- function mapRegenerateSummaryResponse(dto) {
1105
- return {
1106
- callId: dto.callId,
1107
- summary: dto.summary,
1108
- summaryModel: dto.summaryModel,
1109
- summaryGeneratedAt: dto.summaryGeneratedAt,
1110
- transcriptTurnCount: dto.transcriptTurnCount,
1111
- };
1112
- }
1113
- function mapAuditEventDto(dto, index) {
1114
- return {
1115
- id: `${dto.ts}-${index}`,
1116
- actor: dto.actorName || dto.actor,
1117
- action: dto.event,
1118
- target: dto.call || dto.patient || dto.cat,
1119
- detail: dto.detail,
1120
- at: dto.ts ? Date.parse(dto.ts) || Date.now() : Date.now(),
1121
- };
1122
- }
1123
- function mapAnalyticsDto(dto, range) {
1124
- const volume = mapVolumeSeries(dto.volume);
1125
- const peakHours = mapPeakSeries(dto.peak);
1126
- const outcomes = (dto.outcomes ?? []).map((o) => ({
1127
- label: o.label,
1128
- value: o.v,
1129
- color: TONE_COLORS[o.tone] ?? TONE_COLORS['brand'],
1130
- }));
1131
- const reasons = (dto.reasons ?? []).map((r) => ({ label: r.label, value: r.v }));
1132
- const transfers = (dto.transfers ?? []).map((t) => ({ label: t.label, value: t.v }));
1133
- const kpiCards = (dto.kpis ?? []).map((k) => ({
1134
- label: k.label,
1135
- value: k.value,
1136
- delta: k.delta,
1137
- tone: k.tone,
1138
- sub: k.sub,
1139
- }));
1140
- const kpiMap = {};
1141
- for (const k of dto.kpis ?? []) {
1142
- const key = k.label.toLowerCase();
1143
- const num = parseAnalyticsNumber(k.value);
1144
- if (key.includes('handled') || key.includes('total call') || key === 'calls') {
1145
- kpiMap['totalCalls'] = num;
1146
- }
1147
- else if (key.includes('handle time') || key.includes('avg duration') || key.includes('duration')) {
1148
- kpiMap['avgDuration'] = parseDurationSeconds(k.value);
1149
- }
1150
- else if (key.includes('resolution') || key.includes('booking')) {
1151
- kpiMap['bookingRate'] = num;
1152
- }
1153
- else if (key.includes('transfer')) {
1154
- kpiMap['transferRate'] = num;
1155
- }
1156
- }
1157
- return {
1158
- range,
1159
- kpiCards,
1160
- volume,
1161
- outcomes,
1162
- reasons,
1163
- transfers,
1164
- peakHours,
1165
- kpis: {
1166
- totalCalls: kpiMap['totalCalls'] ?? 0,
1167
- avgDuration: kpiMap['avgDuration'] ?? 0,
1168
- bookingRate: kpiMap['bookingRate'] ?? 0,
1169
- transferRate: kpiMap['transferRate'] ?? 0,
1170
- },
1171
- };
1172
- }
1173
- function parseAnalyticsNumber(value) {
1174
- const cleaned = String(value).replace(/[^\d.]/g, '');
1175
- const num = Number(cleaned);
1176
- return Number.isFinite(num) ? num : 0;
1177
- }
1178
- function parseDurationSeconds(value) {
1179
- const trimmed = value.trim();
1180
- const clock = /^(\d+):(\d{2})$/.exec(trimmed);
1181
- if (clock) {
1182
- return Number(clock[1]) * 60 + Number(clock[2]);
1183
- }
1184
- return parseAnalyticsNumber(trimmed);
1185
- }
1186
- function isVolumeSeriesDto(raw) {
1187
- return !!raw && typeof raw === 'object' && !Array.isArray(raw) && 'points' in raw;
1188
- }
1189
- function isPeakSeriesDto(raw) {
1190
- return !!raw && typeof raw === 'object' && !Array.isArray(raw) && 'points' in raw;
1191
- }
1192
- function formatLegacyHourLabel(hour) {
1193
- if (hour === 0)
1194
- return '12 AM';
1195
- if (hour < 12)
1196
- return `${hour} AM`;
1197
- if (hour === 12)
1198
- return '12 PM';
1199
- return `${hour - 12} PM`;
1200
- }
1201
- function mapVolumeSeries(raw) {
1202
- if (isVolumeSeriesDto(raw)) {
1203
- return {
1204
- timezone: raw.timezone ?? 'UTC',
1205
- startDate: raw.startDate ?? '',
1206
- endDate: raw.endDate ?? '',
1207
- points: (raw.points ?? []).map((p) => ({
1208
- date: p.date,
1209
- day: p.day,
1210
- label: p.label,
1211
- count: p.count,
1212
- inbound: p.inbound,
1213
- outbound: p.outbound,
1214
- })),
1215
- };
1216
- }
1217
- const values = Array.isArray(raw) ? raw : [];
1218
- return {
1219
- timezone: 'UTC',
1220
- startDate: '',
1221
- endDate: '',
1222
- points: values.map((count, i) => ({
1223
- date: '',
1224
- day: DAY_LABELS[i % DAY_LABELS.length] ?? `D${i + 1}`,
1225
- label: DAY_LABELS[i % DAY_LABELS.length] ?? `Day ${i + 1}`,
1226
- count,
1227
- })),
1228
- };
1229
- }
1230
- function mapPeakSeries(raw) {
1231
- if (isPeakSeriesDto(raw)) {
1232
- return {
1233
- timezone: raw.timezone ?? 'UTC',
1234
- points: (raw.points ?? []).map((p) => ({
1235
- hour: p.hour,
1236
- label: p.label,
1237
- count: p.count,
1238
- })),
1239
- };
1240
- }
1241
- const values = Array.isArray(raw) ? raw : [];
1242
- return {
1243
- timezone: 'UTC',
1244
- points: values.map((count, hour) => ({
1245
- hour,
1246
- label: formatLegacyHourLabel(hour),
1247
- count,
1248
- })),
1249
- };
1250
- }
1251
- function mapStatusDto(dto) {
1252
- const online = dto.agentOnline ?? dto.activated ?? false;
1253
- const step = dto.setupStep ?? (dto.activated ? 11 : 0);
1254
- return {
1255
- agentOn: online,
1256
- mode: 'live',
1257
- readiness: Math.min(100, Math.round((step / 11) * 100)),
1258
- };
1259
- }
1260
- function mapSetupDto(dto) {
1261
- const stepCount = 11;
1262
- const steps = Array.from({ length: stepCount }, (_, i) => ({
1263
- id: i + 1,
1264
- title: `Setup step ${i + 1}`,
1265
- description: dto.activated ? 'Complete' : i + 1 < dto.step ? 'Complete' : 'Pending',
1266
- complete: dto.activated || i + 1 < dto.step,
1267
- }));
1268
- return {
1269
- readiness: Math.min(100, Math.round((dto.step / stepCount) * 100)),
1270
- steps,
1271
- testTranscript: [],
1272
- };
1273
- }
1274
- function mapSettingsResponse(body, safetyBody) {
1275
- const raw = body;
1276
- const settings = raw?.settings ?? body ?? {};
1277
- const section = (key) => {
1278
- const val = settings[key];
1279
- if (val && typeof val === 'object' && !Array.isArray(val)) {
1280
- return val;
1281
- }
1282
- return {};
1283
- };
1284
- const safetyRaw = safetyBody;
1285
- const safety = (safetyRaw?.checks ?? []).map((c) => ({
1286
- id: c.id,
1287
- label: c.label ?? humanizeSettingsKey(c.id),
1288
- status: c.ok ? 'ok' : 'warn',
1289
- }));
1290
- const mapped = {
1291
- general: normalizeGeneralSection(section('general')),
1292
- phone: normalizePhoneSection(section('phoneAvailability')),
1293
- tasks: section('allowedTasks'),
1294
- scheduling: section('schedulingRules'),
1295
- refill: section('refillRules'),
1296
- verify: section('patientVerification'),
1297
- escalation: section('humanEscalation'),
1298
- outbound: section('outboundCalling'),
1299
- knowledge: normalizeKnowledgeSection(section('knowledgeBase')),
1300
- safety,
1301
- transcripts: normalizeTranscriptsSection(section('transcriptsRecording')),
1302
- advanced: normalizeAdvancedSection(section('advanced')),
1303
- };
1304
- mapped.effectiveWelcomeMessage =
1305
- raw.effectiveWelcomeMessage ?? computeEffectiveWelcomeMessage(mapped);
1306
- const root = body;
1307
- mapped.effectiveVoiceSystemPrompt = String(root['effectiveVoiceSystemPrompt'] ??
1308
- root['effective_voice_system_prompt'] ??
1309
- mapped.advanced['voiceSystemPrompt'] ??
1310
- '');
1311
- const usingDefaultRaw = root['usingDefaultVoiceSystemPrompt'] ?? root['using_default_voice_system_prompt'];
1312
- mapped.usingDefaultVoiceSystemPrompt =
1313
- typeof usingDefaultRaw === 'boolean'
1314
- ? usingDefaultRaw
1315
- : !String(mapped.advanced['voiceSystemPrompt'] ?? '').trim();
1316
- if (!mapped.knowledge) {
1317
- mapped.knowledge = { whatToSay: '', whatNotToSay: '' };
1318
- }
1319
- return mapped;
1320
- }
1321
- function normalizeAdvancedSection(raw) {
1322
- return {
1323
- ...raw,
1324
- voiceSystemPrompt: String(raw['voiceSystemPrompt'] ?? raw['voice_system_prompt'] ?? ''),
1325
- customVoiceInstructions: String(raw['customVoiceInstructions'] ?? raw['custom_voice_instructions'] ?? ''),
1326
- };
1327
- }
1328
- function normalizeKnowledgeSection(raw) {
1329
- return {
1330
- ...raw,
1331
- whatToSay: String(raw['whatToSay'] ?? raw['what_to_say'] ?? ''),
1332
- whatNotToSay: String(raw['whatNotToSay'] ?? raw['what_not_to_say'] ?? ''),
1333
- };
1334
- }
1335
- function normalizeGeneralSection(raw) {
1336
- const language = String(raw['language'] ?? 'English');
1337
- const languagesRaw = raw['languages'] ?? raw['languageList'] ?? language;
1338
- const languages = Array.isArray(languagesRaw)
1339
- ? languagesRaw.map(String).join(',')
1340
- : String(languagesRaw || language);
1341
- return {
1342
- ...raw,
1343
- languages,
1344
- tone: String(raw['tone'] ?? 'professional'),
1345
- };
1346
- }
1347
- function normalizePhoneSection(raw) {
1348
- const locationIds = raw['locationIds'] ?? raw['location_ids'] ?? raw['locationsHandled'] ?? '';
1349
- const locations = Array.isArray(locationIds) ? locationIds.map(String).join(',') : String(locationIds ?? '');
1350
- const afterHoursBehavior = String(raw['afterHoursBehavior'] ??
1351
- raw['after_hours_behavior'] ??
1352
- (raw['afterHours'] === false ? 'voicemail' : 'ai_answers'));
1353
- return {
1354
- ...raw,
1355
- answerMode: String(raw['answerMode'] ?? raw['answer_mode'] ?? 'always_first'),
1356
- transferNumber: String(raw['transferNumber'] ?? raw['transfer_number'] ?? ''),
1357
- ringTimeout: Number(raw['ringTimeout'] ?? raw['ring_timeout'] ?? 20) || 20,
1358
- createFollowUpTask: Boolean(raw['createFollowUpTask'] ?? raw['create_follow_up_task'] ?? false),
1359
- locationIds: locations,
1360
- maxCallDurationMin: Number(raw['maxCallDurationMin'] ?? raw['max_call_duration_min'] ?? 5) || 5,
1361
- silenceTimeoutSec: Number(raw['silenceTimeoutSec'] ?? raw['silence_timeout_sec'] ?? 30) || 30,
1362
- afterHoursBehavior,
1363
- };
1364
- }
1365
- function normalizeTranscriptsSection(raw) {
1366
- const legacyRetain = Number(raw['retainDays'] ?? raw['retain_days'] ?? 30) || 30;
1367
- return {
1368
- ...raw,
1369
- recordingRetainDays: Number(raw['recordingRetainDays'] ?? raw['recording_retain_days'] ?? legacyRetain) ||
1370
- legacyRetain,
1371
- transcriptRetainDays: Number(raw['transcriptRetainDays'] ?? raw['transcript_retain_days'] ?? legacyRetain) ||
1372
- legacyRetain,
1373
- disclosureWarningEnabled: Boolean(raw['disclosureWarningEnabled'] ?? raw['disclosure_warning_enabled'] ?? true),
1374
- disclosureWarningText: String(raw['disclosureWarningText'] ??
1375
- raw['disclosure_warning_text'] ??
1376
- '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.'),
1377
- };
1378
- }
1379
- function humanizeSettingsKey(key) {
1380
- return key
1381
- .replace(/([A-Z])/g, ' $1')
1382
- .replace(/_/g, ' ')
1383
- .trim()
1384
- .replace(/^\w/, (c) => c.toUpperCase());
1385
- }
1386
- /** Map frontend AgentSettings → backend PUT body section keys. */
1387
- function mapSettingsToRequest(settings) {
1388
- return {
1389
- general: settings.general,
1390
- phoneAvailability: settings.phone,
1391
- allowedTasks: settings.tasks,
1392
- schedulingRules: settings.scheduling,
1393
- refillRules: settings.refill,
1394
- patientVerification: settings.verify,
1395
- humanEscalation: settings.escalation,
1396
- outboundCalling: settings.outbound,
1397
- knowledgeBase: settings.knowledge,
1398
- transcriptsRecording: settings.transcripts,
1399
- advanced: settings.advanced,
1400
- };
1401
- }
1402
- function mapLocationDto(raw) {
1403
- const r = raw;
1404
- return {
1405
- id: r.locationId ?? r.id ?? '',
1406
- name: r.locationName ?? r.name ?? '',
1407
- };
1408
- }
1409
- function mapProviderDto(raw) {
1410
- const r = raw;
1411
- return {
1412
- id: r.providerId ?? r.id ?? '',
1413
- name: r.fullName ?? r.name ?? '',
1414
- };
1415
- }
1416
- function asTranscriptList(body) {
1417
- if (Array.isArray(body))
1418
- return body;
1419
- if (!body || typeof body !== 'object')
1420
- return [];
1421
- const o = body;
1422
- const list = o['lines'] ?? o['transcript'] ?? o['items'] ?? o['data'];
1423
- return Array.isArray(list) ? list : [];
1424
- }
1425
- function isHistoryCallDto(raw) {
1426
- return !!raw && typeof raw === 'object' && 'dir' in raw;
1427
- }
1428
- function asHistoryList(body) {
1429
- if (Array.isArray(body))
1430
- return body;
1431
- const list = body;
1432
- return list?.items ?? [];
1433
- }
1434
- function asLiveCallList(body) {
1435
- if (Array.isArray(body))
1436
- return body;
1437
- if (!body || typeof body !== 'object')
1438
- return [];
1439
- const o = body;
1440
- const list = o['items'] ?? o['data'] ?? o['calls'] ?? o['liveCalls'];
1441
- return Array.isArray(list) ? list : [];
1442
- }
1443
- function asTaskList(body) {
1444
- if (Array.isArray(body))
1445
- return body;
1446
- const list = body;
1447
- return list?.items ?? [];
1448
- }
1449
- function asAuditList(body) {
1450
- if (Array.isArray(body))
1451
- return body;
1452
- const list = body;
1453
- return list?.items ?? [];
1454
- }
1455
- function asAttentionList(body) {
1456
- if (Array.isArray(body))
1457
- return body;
1458
- return [];
1459
- }
1460
-
1461
- const now$2 = Date.now();
1462
- function item(partial) {
1463
- return {
1464
- callId: 'LC-4821',
1465
- clientPracticeId: 'practice-demo',
1466
- method: 'POST',
1467
- urlPath: '/api/v1/patients/search',
1468
- statusCode: 200,
1469
- success: true,
1470
- durationMs: 340,
1471
- toolName: null,
1472
- errorMessage: null,
1473
- startedAt: new Date(now$2 - 120_000).toISOString(),
1474
- requestPreview: '{"phone":"+15551234567"}',
1475
- responsePreview: '{"items":[{"id":"p1"}]}',
1476
- ...partial,
1477
- };
1478
- }
1479
- const SEED_CALL_API_LOGS = {
1480
- 'LC-4821': [
1481
- item({
1482
- id: 'log-1',
1483
- provider: 'vonage',
1484
- operation: 'answer_call',
1485
- method: 'POST',
1486
- urlPath: '/vonage/answer',
1487
- statusCode: 200,
1488
- durationMs: 120,
1489
- startedAt: new Date(now$2 - 300_000).toISOString(),
1490
- requestPreview: '{"callId":"..."}',
1491
- responsePreview: '{"status":"connected"}',
1492
- }),
1493
- item({
1494
- id: 'log-2',
1495
- provider: 'edvak',
1496
- operation: 'search_patient',
1497
- toolName: 'search_patient',
1498
- method: 'GET',
1499
- urlPath: '/api/v1/patients',
1500
- statusCode: 200,
1501
- durationMs: 420,
1502
- startedAt: new Date(now$2 - 240_000).toISOString(),
1503
- }),
1504
- item({
1505
- id: 'log-3',
1506
- provider: 'openai',
1507
- operation: 'chat_completion',
1508
- method: 'POST',
1509
- urlPath: '/v1/chat/completions',
1510
- statusCode: 200,
1511
- durationMs: 890,
1512
- startedAt: new Date(now$2 - 180_000).toISOString(),
1513
- requestPreview: '{"model":"gpt-4o-mini"}',
1514
- responsePreview: '{"choices":[...]}',
1515
- }),
1516
- item({
1517
- id: 'log-4',
1518
- provider: 'edvak',
1519
- operation: 'create_appointment',
1520
- toolName: 'create_appointment',
1521
- method: 'POST',
1522
- urlPath: '/api/appointments',
1523
- statusCode: 201,
1524
- durationMs: 560,
1525
- startedAt: new Date(now$2 - 60_000).toISOString(),
1526
- }),
1527
- ],
1528
- 'HC-9001': [
1529
- item({
1530
- id: 'log-f1',
1531
- callId: 'HC-9001',
1532
- provider: 'edvak',
1533
- operation: 'search_patient',
1534
- toolName: 'search_patient',
1535
- statusCode: 500,
1536
- success: false,
1537
- durationMs: 2100,
1538
- errorMessage: 'Internal Server Error',
1539
- startedAt: new Date(now$2 - 86_400_000).toISOString(),
1540
- }),
1541
- ],
1542
- };
1543
- const SEED_API_LOG_DETAILS = {
1544
- 'log-4': {
1545
- ...SEED_CALL_API_LOGS['LC-4821'][3],
1546
- traceId: 'trace-abc-123',
1547
- requestBody: { patientId: 'p1', slotId: 'slot-9', reason: 'Annual checkup' },
1548
- responseBody: { appointmentId: 'apt-42', status: 'confirmed' },
1549
- metadata: { practiceId: 'prac-1', locationId: 'loc-1' },
1550
- completedAt: new Date(now$2 - 59_500).toISOString(),
1551
- },
1552
- 'log-f1': {
1553
- ...SEED_CALL_API_LOGS['HC-9001'][0],
1554
- traceId: 'trace-err-999',
1555
- requestBody: { phone: '+15559876543' },
1556
- responseBody: { error: 'Internal Server Error', message: 'Database timeout' },
1557
- metadata: { retryCount: 1 },
1558
- completedAt: new Date(now$2 - 86_398_000).toISOString(),
1559
- },
1560
- };
1561
- function allSeedLogs() {
1562
- return Object.values(SEED_CALL_API_LOGS).flat();
1563
- }
1564
- const SEED_API_LOG_STATS = {
1565
- last24h: { total: 128, failed: 4, avgDurationMs: 680 },
1566
- byProvider: [
1567
- { provider: 'edvak', total: 52, failed: 3 },
1568
- { provider: 'openai', total: 38, failed: 0 },
1569
- { provider: 'vonage', total: 24, failed: 1 },
1570
- { provider: 'livekit', total: 14, failed: 0 },
1571
- ],
1572
- recentFailures: [
1573
- item({
1574
- id: 'log-fail-1',
1575
- callId: 'HC-9001',
1576
- provider: 'edvak',
1577
- operation: 'search_patient',
1578
- statusCode: 500,
1579
- success: false,
1580
- durationMs: 2100,
1581
- errorMessage: 'Internal Server Error',
1582
- startedAt: new Date(now$2 - 3_600_000).toISOString(),
1583
- }),
1584
- item({
1585
- id: 'log-fail-2',
1586
- callId: 'LC-4819',
1587
- provider: 'vonage',
1588
- operation: 'transfer',
1589
- statusCode: 503,
1590
- success: false,
1591
- durationMs: 1500,
1592
- errorMessage: 'Service unavailable',
1593
- startedAt: new Date(now$2 - 7_200_000).toISOString(),
1594
- }),
1595
- item({
1596
- id: 'log-fail-3',
1597
- callId: null,
1598
- provider: 'edvak',
1599
- operation: 'list_providers',
1600
- statusCode: 500,
1601
- success: false,
1602
- durationMs: 980,
1603
- errorMessage: 'Gateway timeout',
1604
- startedAt: new Date(now$2 - 10_800_000).toISOString(),
1605
- }),
1606
- ],
1607
- };
1608
-
1609
- const now$1 = Date.now();
1610
- const min = (m) => now$1 - m * 60_000;
1611
- const baseTranscript = [
1612
- { who: 'system', text: 'Call connected · inbound PSTN' },
1613
- {
1614
- who: 'ai',
1615
- text: 'Good afternoon, thank you for calling Riverside Family Medicine. How can I help you today?',
1616
- },
1617
- { who: 'patient', text: "Hi, I'd like to reschedule my appointment for next Tuesday." },
1618
- {
1619
- who: 'ai',
1620
- text: 'I can help with that. May I verify your date of birth and the name on the account?',
1621
- flag: 'verify',
1622
- },
1623
- { who: 'patient', text: 'March 14, 1985 — Maria Santos.' },
1624
- { who: 'ai', text: 'Thank you, Maria. I found your chart. You have a visit with Dr. Chen on Tuesday at 2:30 PM.' },
1625
- { who: 'patient', text: 'Can we move it to Thursday morning instead?' },
1626
- { who: 'ai', text: 'Checking availability with scheduling…' },
1627
- ];
1628
- const streamingLines = [
1629
- { who: 'ai', text: 'I have Thursday at 9:15 AM or 10:40 AM with Dr. Chen. Which works better?' },
1630
- { who: 'patient', text: '9:15 is perfect.' },
1631
- { who: 'ai', text: 'Great — I’ve moved your appointment to Thursday at 9:15 AM. You’ll receive a confirmation text shortly.' },
1632
- ];
1633
- const SEED_LIVE_CALLS = [
1634
- {
1635
- id: 'LC-4821',
1636
- name: 'Maria Santos',
1637
- initials: 'MS',
1638
- avatar: null,
1639
- phone: '+1 (512) 555-0142',
1640
- verification: 'verified',
1641
- direction: 'inbound',
1642
- reason: 'Reschedule appointment',
1643
- status: 'ai',
1644
- started: min(4),
1645
- sentiment: 'calm',
1646
- confidence: 92,
1647
- goal: 'Reschedule visit with Dr. Chen',
1648
- dob: '1985-03-14',
1649
- age: 41,
1650
- gender: 'F',
1651
- location: 'Riverside Main',
1652
- provider: 'Dr. Elena Chen',
1653
- language: 'English',
1654
- matched: true,
1655
- assigned: null,
1656
- tools: [
1657
- {
1658
- t: '0:42',
1659
- key: 'search_patients',
1660
- name: 'Searched Patients',
1661
- tech: 'tool_search_patients',
1662
- result: 'Matched DOB + name',
1663
- state: 'ok',
1664
- },
1665
- {
1666
- t: '1:18',
1667
- key: 'check_doctor_availability',
1668
- name: 'Checked Doctor Availability',
1669
- tech: 'tool_check_doctor_availability',
1670
- result: '1 upcoming visit',
1671
- state: 'ok',
1672
- },
1673
- {
1674
- t: '2:05',
1675
- key: 'check_doctor_availability',
1676
- name: 'Checked Doctor Availability',
1677
- tech: 'tool_check_doctor_availability',
1678
- result: '2 slots found',
1679
- state: 'active',
1680
- },
1681
- ],
1682
- transcript: [...baseTranscript],
1683
- },
1684
- {
1685
- id: 'LC-4819',
1686
- name: 'James Okonkwo',
1687
- initials: 'JO',
1688
- avatar: null,
1689
- phone: '+1 (737) 555-0198',
1690
- verification: 'partial',
1691
- direction: 'inbound',
1692
- reason: 'Medication refill — urgent',
1693
- status: 'needs-help',
1694
- started: min(7),
1695
- sentiment: 'frustrated',
1696
- confidence: 71,
1697
- goal: 'Refill lisinopril 10mg',
1698
- dob: '1978-09-22',
1699
- age: 47,
1700
- gender: 'M',
1701
- location: 'North Clinic',
1702
- provider: 'Dr. Patel',
1703
- language: 'English',
1704
- matched: true,
1705
- assigned: 'Front desk queue',
1706
- tools: [
1707
- {
1708
- t: '0:55',
1709
- key: 'search_patients',
1710
- name: 'Searched Patients',
1711
- tech: 'tool_search_patients',
1712
- result: 'Partial match',
1713
- state: 'warn',
1714
- },
1715
- {
1716
- t: '1:40',
1717
- key: 'submit_medication_refill',
1718
- name: 'Submitted Medication Refill',
1719
- tech: 'tool_submit_medication_refill',
1720
- result: 'Requires staff review',
1721
- state: 'warn',
1722
- },
1723
- ],
1724
- transcript: [
1725
- { who: 'ai', text: 'Thank you for calling North Clinic. How may I assist you?' },
1726
- { who: 'patient', text: 'I need my blood pressure medication refilled today — I’m out of pills.' },
1727
- { who: 'ai', text: 'I understand. Let me pull up your chart and check refill eligibility.', flag: 'verify' },
1728
- { who: 'patient', text: "I've been a patient for years, this shouldn't be so hard." },
1729
- { who: 'system', text: 'Escalation suggested — sentiment frustrated', flag: 'escalate' },
1730
- ],
1731
- },
1732
- {
1733
- id: 'LC-4815',
1734
- name: 'Unknown caller',
1735
- initials: '?',
1736
- avatar: null,
1737
- phone: '+1 (512) 555-0881',
1738
- verification: 'unknown',
1739
- direction: 'inbound',
1740
- reason: 'Billing question',
1741
- status: 'human-requested',
1742
- started: min(2),
1743
- sentiment: 'neutral',
1744
- confidence: 58,
1745
- goal: 'Speak with billing',
1746
- location: 'Riverside Main',
1747
- provider: null,
1748
- language: 'English',
1749
- matched: false,
1750
- assigned: null,
1751
- tools: [
1752
- {
1753
- t: '0:30',
1754
- key: 'search_practice_faq',
1755
- name: 'Searched Practice FAQ',
1756
- tech: 'tool_search_practice_faq',
1757
- result: 'Billing / human handoff',
1758
- state: 'ok',
1759
- },
1760
- ],
1761
- transcript: [
1762
- { who: 'ai', text: 'Good afternoon. How can I help you today?' },
1763
- { who: 'patient', text: 'I need to talk to someone in billing about my statement.' },
1764
- { who: 'ai', text: 'I can connect you with our billing team. One moment while I transfer you.' },
1765
- ],
1766
- },
1767
- ];
1768
- const SEED_ATTENTION = [
1769
- {
1770
- id: 'ATT-1',
1771
- callId: 'LC-4819',
1772
- title: 'Refill needs staff approval',
1773
- detail: 'Patient out of medication — partial verification',
1774
- severity: 'urgent',
1775
- time: min(1),
1776
- },
1777
- {
1778
- id: 'ATT-2',
1779
- callId: 'LC-4815',
1780
- title: 'Human requested',
1781
- detail: 'Billing transfer pending',
1782
- severity: 'warn',
1783
- time: min(0.5),
1784
- },
1785
- {
1786
- id: 'ATT-3',
1787
- callId: 'LC-4821',
1788
- title: 'Scheduling in progress',
1789
- detail: 'AI handling — monitor recommended',
1790
- severity: 'info',
1791
- time: min(3),
1792
- },
1793
- ];
1794
- const SEED_HISTORY = [
1795
- {
1796
- id: 'HC-9001',
1797
- name: 'Sooraj Jagadeesh',
1798
- initials: 'SJ',
1799
- phone: '+1 (512) 555-0211',
1800
- direction: 'inbound',
1801
- outcome: 'Appointment booked',
1802
- reason: 'Appointment Refill',
1803
- duration: 252,
1804
- durationLabel: '4:12',
1805
- started: Date.parse('2026-06-12T14:20:00'),
1806
- location: 'Riverside Main',
1807
- verification: 'verified',
1808
- review: 'reviewed',
1809
- handledBy: 'ai',
1810
- dob: '2002-06-30',
1811
- age: 23,
1812
- gender: 'M',
1813
- results: ['Appointment Booked'],
1814
- },
1815
- {
1816
- id: 'HC-9002',
1817
- name: 'Unknown Caller',
1818
- initials: '?',
1819
- phone: '+1 (555) 010-2299',
1820
- direction: 'outbound',
1821
- outcome: 'Task created',
1822
- reason: 'Appointment',
1823
- duration: 165,
1824
- durationLabel: '2:45',
1825
- started: Date.parse('2026-06-12T11:05:00'),
1826
- location: 'North Clinic',
1827
- verification: 'unknown',
1828
- review: 'needs',
1829
- handledBy: 'ai',
1830
- results: ['Task Created'],
1831
- risk: 'review',
1832
- },
1833
- {
1834
- id: 'HC-9003',
1835
- name: 'Dinesh Kumar',
1836
- initials: 'DK',
1837
- phone: '+1 (512) 555-0444',
1838
- direction: 'inbound',
1839
- outcome: 'Completed',
1840
- reason: 'Appointment',
1841
- duration: 372,
1842
- durationLabel: '6:12',
1843
- started: Date.parse('2026-06-11T16:45:00'),
1844
- location: 'Riverside Main',
1845
- verification: 'verified',
1846
- review: 'reviewed',
1847
- handledBy: 'staff',
1848
- dob: '1988-03-14',
1849
- age: 38,
1850
- gender: 'M',
1851
- results: ['Patient Registered', 'Appointment Booked'],
1852
- },
1853
- {
1854
- id: 'HC-9004',
1855
- name: 'Meera Banerjee',
1856
- initials: 'MB',
1857
- phone: '+1 (512) 555-0555',
1858
- direction: 'inbound',
1859
- outcome: 'Completed',
1860
- reason: 'Information',
1861
- duration: 93,
1862
- durationLabel: '1:33',
1863
- started: Date.parse('2026-06-11T09:12:00'),
1864
- location: 'South Clinic',
1865
- verification: 'partial',
1866
- review: 'needs',
1867
- handledBy: 'ai',
1868
- dob: '1995-11-02',
1869
- age: 30,
1870
- gender: 'F',
1871
- results: ['Information Provided'],
1872
- },
1873
- {
1874
- id: 'HC-9005',
1875
- name: 'Emily Foster',
1876
- initials: 'EF',
1877
- phone: '+1 (737) 555-0666',
1878
- direction: 'inbound',
1879
- outcome: 'Completed',
1880
- reason: 'Hours & directions',
1881
- duration: 89,
1882
- durationLabel: '1:29',
1883
- started: Date.parse('2026-06-10T13:40:00'),
1884
- location: 'North Clinic',
1885
- verification: 'unknown',
1886
- review: 'reviewed',
1887
- handledBy: 'ai',
1888
- results: ['Information Provided'],
1889
- },
1890
- ];
1891
- const SEED_HISTORY_DETAILS = {
1892
- 'HC-9001': {
1893
- ...SEED_HISTORY[0],
1894
- summary: 'New patient intake completed. AI collected demographics, verified insurance, and booked initial visit with Dr. Chen for next Monday at 10:00 AM.',
1895
- transcript: [
1896
- { who: 'ai', text: 'Welcome to Riverside Family Medicine. Are you a new patient?', at: 8 },
1897
- { who: 'patient', text: 'Yes, I need to establish care.', at: 22 },
1898
- { who: 'ai', text: 'I can help schedule your first visit. May I collect a few details?', at: 38 },
1899
- { who: 'patient', text: 'Sure.', at: 62 },
1900
- { who: 'ai', text: 'Booked: Mon 10:00 AM with Dr. Chen. Confirmation sent via SMS.', at: 285 },
1901
- ],
1902
- tools: [
1903
- {
1904
- t: '1:02',
1905
- key: 'register_and_book_appointment',
1906
- name: 'Registered & Booked Appointment',
1907
- tech: 'tool_register_and_book_appointment',
1908
- result: 'Chart created',
1909
- state: 'ok',
1910
- },
1911
- {
1912
- t: '3:45',
1913
- key: 'book_existing_appointment',
1914
- name: 'Booked Appointment',
1915
- tech: 'tool_book_existing_appointment',
1916
- result: 'Slot reserved',
1917
- state: 'ok',
1918
- },
1919
- ],
1920
- recordingUrl: '#mock-recording',
1921
- },
1922
- };
1923
- const SEED_TASKS = [
1924
- {
1925
- id: 'TK-101',
1926
- created: min(180),
1927
- title: 'Refill: Lisinopril 10mg',
1928
- type: 'Refill request',
1929
- description: 'Patient requested refill for lisinopril 10mg. Last filled 28 days ago.',
1930
- patient: 'James Okonkwo',
1931
- priority: 'urgent',
1932
- status: 'open',
1933
- source: 'voice',
1934
- assignee: 'Clinical staff',
1935
- callId: 'HC-9001',
1936
- edvakTaskId: 'EDV-8821',
1937
- edvakStatus: 'Pending review',
1938
- medicationName: 'Lisinopril 10mg',
1939
- medicationId: 'RX-4492',
1940
- },
1941
- {
1942
- id: 'TK-102',
1943
- created: min(240),
1944
- title: 'Billing follow-up',
1945
- type: 'Billing',
1946
- description: 'Caller disputed a statement charge from March visit. Needs billing review.',
1947
- patient: 'Unknown caller',
1948
- priority: 'normal',
1949
- status: 'open',
1950
- source: 'voice',
1951
- assignee: 'Billing',
1952
- callId: 'LC-4815',
1953
- },
1954
- {
1955
- id: 'TK-103',
1956
- created: min(300),
1957
- title: 'Callback requested',
1958
- type: 'Callback',
1959
- description: 'Sarah Williams asked for a nurse callback regarding prior auth status.',
1960
- patient: 'Sarah Williams',
1961
- priority: 'normal',
1962
- status: 'in_progress',
1963
- source: 'voice',
1964
- assignee: 'Front desk',
1965
- callId: 'HC-9003',
1966
- },
1967
- {
1968
- id: 'TK-104',
1969
- created: min(360),
1970
- title: 'Callback — lab results',
1971
- type: 'Callback',
1972
- description: 'Carlos Mendez requested nurse callback about recent lab results.',
1973
- patient: 'Carlos Mendez',
1974
- priority: 'normal',
1975
- status: 'done',
1976
- source: 'sync',
1977
- assignee: 'Nurse line',
1978
- callId: 'HC-9004',
1979
- },
1980
- {
1981
- id: 'TK-105',
1982
- created: min(90),
1983
- title: 'Schedule follow-up visit',
1984
- type: 'Scheduling',
1985
- description: 'Patient needs a 2-week follow-up after ER visit.',
1986
- patient: 'Maria Chen',
1987
- priority: 'normal',
1988
- status: 'open',
1989
- source: 'manual',
1990
- assignee: 'Scheduling',
1991
- },
1992
- ];
1993
- const SEED_AUDIT = [
1994
- {
1995
- id: 'AU-1',
1996
- actor: 'admin@riverside.fm',
1997
- action: 'Updated welcome message',
1998
- target: 'Agent Settings',
1999
- detail: 'Changed inbound greeting',
2000
- at: min(30),
2001
- },
2002
- {
2003
- id: 'AU-2',
2004
- actor: 'system',
2005
- action: 'Agent activated',
2006
- target: 'AI Receptionist',
2007
- detail: 'After-hours mode enabled',
2008
- at: min(120),
2009
- },
2010
- {
2011
- id: 'AU-3',
2012
- actor: 'staff@riverside.fm',
2013
- action: 'Takeover',
2014
- target: 'LC-4780',
2015
- detail: 'Staff joined live call',
2016
- at: min(300),
2017
- },
2018
- ];
2019
- const SEED_ANALYTICS = {
2020
- range: '30d',
2021
- kpiCards: [
2022
- {
2023
- label: 'Estimated Impact This Month',
2024
- value: '96 hours',
2025
- delta: '',
2026
- tone: 'pos',
2027
- sub: 'of front-desk time handled by the AI ~2.4 full work weeks.',
2028
- },
2029
- {
2030
- label: 'AI Autonomous Resolution',
2031
- value: '89%',
2032
- delta: '+12%',
2033
- tone: 'pos',
2034
- sub: 'without staff intervention',
2035
- },
2036
- {
2037
- label: 'Appointments Booked',
2038
- value: '34',
2039
- delta: '-35%',
2040
- tone: 'warn',
2041
- sub: 'Created by AI',
2042
- },
2043
- {
2044
- label: 'Tasks Created',
2045
- value: '19',
2046
- delta: '-35%',
2047
- tone: 'warn',
2048
- sub: 'Created by AI',
2049
- },
2050
- {
2051
- label: 'Patients Registered',
2052
- value: '75',
2053
- delta: '-6%',
2054
- tone: 'warn',
2055
- sub: 'Created by AI',
2056
- },
2057
- {
2058
- label: 'Calls Handled',
2059
- value: '1,234',
2060
- delta: '+25%',
2061
- tone: 'pos',
2062
- sub: 'Inbound 104 · Outbound 24',
2063
- },
2064
- ],
2065
- volume: {
2066
- timezone: 'America/Chicago',
2067
- startDate: '2025-05-01',
2068
- endDate: '2025-05-28',
2069
- points: [
2070
- { date: '2025-05-01', day: 'Week 1', label: 'Week 1', count: 210, inbound: 170, outbound: 40 },
2071
- { date: '2025-05-08', day: 'Week 2', label: 'Week 2', count: 255, inbound: 200, outbound: 55 },
2072
- { date: '2025-05-15', day: 'Week 3', label: 'Week 3', count: 180, inbound: 145, outbound: 35 },
2073
- { date: '2025-05-22', day: 'Week 4', label: 'Week 4', count: 290, inbound: 230, outbound: 60 },
2074
- ],
2075
- },
2076
- outcomes: [
2077
- { label: 'AI handled', value: 78, color: '#8E51FF' },
2078
- { label: 'Human Assisted', value: 18, color: '#3681F4' },
2079
- { label: 'Needs Attention', value: 4, color: '#F472B6' },
2080
- ],
2081
- reasons: [
2082
- { label: 'Appointments', value: 68 },
2083
- { label: 'Medication/Refills', value: 24 },
2084
- { label: 'Message', value: 20 },
2085
- { label: 'Information', value: 23 },
2086
- { label: 'Registration', value: 5 },
2087
- { label: 'Tasks', value: 20 },
2088
- { label: 'Others', value: 9 },
2089
- ],
2090
- transfers: [
2091
- { label: 'Out of Scope', value: 68 },
2092
- { label: 'Multiple Requests', value: 24 },
2093
- { label: 'Identity Unresolved', value: 20 },
2094
- { label: 'Others', value: 23 },
2095
- ],
2096
- peakHours: {
2097
- timezone: 'America/Chicago',
2098
- points: Array.from({ length: 24 }, (_, hour) => ({
2099
- hour,
2100
- label: hour === 0 ? '12 AM' : hour < 12 ? `${hour} AM` : hour === 12 ? '12 PM' : `${hour - 12} PM`,
2101
- count: hour >= 8 && hour <= 20
2102
- ? Math.round(30 + Math.sin((hour - 8) / 2.2) * 45 + (hour === 11 || hour === 16 ? 25 : 0))
2103
- : 4 + (hour % 3),
2104
- })),
2105
- },
2106
- kpis: {
2107
- totalCalls: 1234,
2108
- avgDuration: 186,
2109
- bookingRate: 89,
2110
- transferRate: 4,
2111
- },
2112
- };
2113
- const SEED_SETTINGS = {
2114
- general: {
2115
- practiceName: 'Riverside Family Medicine',
2116
- timezone: 'America/Chicago',
2117
- language: 'English',
2118
- languages: 'English,Spanish,Chinese,Hindi',
2119
- agentName: 'Robin',
2120
- tone: 'professional',
2121
- welcomeMessage: 'Thanks for calling {{practiceName}}! This is {{agentName}}, the practice’s virtual assistant. How can I help you today?',
2122
- ttsVoiceId: '7EzWGsX10sAS4c9m9cPf',
2123
- },
2124
- phone: {
2125
- answerMode: 'always_first',
2126
- mainNumber: '+1 (234) 092-0129',
2127
- transferNumber: '+1 (234) 092-0129',
2128
- ringTimeout: 20,
2129
- createFollowUpTask: true,
2130
- locationIds: 'loc-1,loc-2,loc-3',
2131
- maxCallDurationMin: 5,
2132
- silenceTimeoutSec: 30,
2133
- afterHoursBehavior: 'ai_answers',
2134
- afterHours: true,
2135
- },
2136
- tasks: { autoCreate: true, defaultAssignee: 'Front desk' },
2137
- scheduling: { leadTimeHours: 4, allowSameDay: true },
2138
- refill: { autoApproveDays: 7, requireStaffReview: true },
2139
- verify: { requireDob: true, requireName: true, maxAttempts: 3 },
2140
- escalation: { sentimentThreshold: 'frustrated', urgentKeywords: 'emergency, chest pain' },
2141
- outbound: { enabled: true, callerId: '+1 (512) 555-0100' },
2142
- knowledge: {
2143
- whatToSay: '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.',
2144
- whatNotToSay: '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.',
2145
- },
2146
- safety: [
2147
- { id: 's1', label: 'HIPAA logging enabled', status: 'ok' },
2148
- { id: 's2', label: 'Recording consent script', status: 'ok' },
2149
- { id: 's3', label: 'Emergency routing tested', status: 'warn' },
2150
- { id: 's4', label: 'PHI redaction in transcripts', status: 'ok' },
2151
- ],
2152
- transcripts: {
2153
- recordingRetainDays: 30,
2154
- transcriptRetainDays: 30,
2155
- disclosureWarningEnabled: true,
2156
- disclosureWarningText: '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.',
2157
- retainDays: 30,
2158
- redactPhi: true,
2159
- },
2160
- advanced: {
2161
- modelVersion: 'edvak-v2',
2162
- debugMode: false,
2163
- voiceSystemPrompt: '',
2164
- customVoiceInstructions: '',
2165
- },
2166
- effectiveWelcomeMessage: 'Thanks for calling Riverside Family Medicine! This is Robin, the practice’s virtual assistant. How can I help you today?',
2167
- };
2168
- const SEED_SETUP = {
2169
- readiness: 92,
2170
- steps: [
2171
- { id: 1, title: 'Practice profile', description: 'Name, locations, hours', complete: true },
2172
- { id: 2, title: 'Phone routing', description: 'Connect Vonage numbers', complete: true },
2173
- { id: 3, title: 'EHR integration', description: 'FHIR scheduling & charts', complete: true },
2174
- { id: 4, title: 'Welcome message', description: 'Inbound call greeting', complete: true },
2175
- { id: 5, title: 'Verification rules', description: 'Identity checks', complete: true },
2176
- { id: 6, title: 'Task routing', description: 'Assignees & SLAs', complete: true },
2177
- { id: 7, title: 'Escalation paths', description: 'Human handoff rules', complete: true },
2178
- { id: 8, title: 'Safety checklist', description: 'Compliance review', complete: false },
2179
- { id: 9, title: 'Test call', description: 'Simulated inbound call', complete: false },
2180
- { id: 10, title: 'Staff training', description: 'Takeover & monitoring', complete: true },
2181
- { id: 11, title: 'Go live', description: 'Activate AI receptionist', complete: false },
2182
- ],
2183
- testTranscript: [
2184
- { who: 'ai', text: 'Test call started — simulating inbound patient.' },
2185
- { who: 'patient', text: 'I would like to book an appointment.' },
2186
- { who: 'ai', text: 'Happy to help. May I verify your date of birth?' },
2187
- ],
2188
- };
2189
- const SEED_LOCATIONS = [
2190
- { id: 'loc-1', name: 'Riverside Main' },
2191
- { id: 'loc-2', name: 'North Clinic' },
2192
- { id: 'loc-3', name: 'South Clinic' },
2193
- ];
2194
- const SEED_PROVIDERS = [
2195
- { id: 'prov-1', name: 'Dr. Elena Chen' },
2196
- { id: 'prov-2', name: 'Dr. Raj Patel' },
2197
- { id: 'prov-3', name: 'Dr. Amy Foster' },
2198
- ];
2199
- function buildDashboard() {
2200
- return {
2201
- stats: {
2202
- activeCalls: SEED_LIVE_CALLS.length,
2203
- answeredToday: 47,
2204
- appointmentsBooked: 6,
2205
- tasksCreated: 8,
2206
- completionRate: 86,
2207
- },
2208
- liveCalls: SEED_LIVE_CALLS,
2209
- latestTasks: SEED_TASKS.slice(0, 5),
2210
- latestAppointments: [
2211
- {
2212
- id: 'appt-ai-1',
2213
- appointmentId: 'appt-ai-1',
2214
- patientName: 'Maria Garcia',
2215
- providerName: 'Dr. Elena Chen',
2216
- startTime: Date.now() + 86_400_000,
2217
- createdAt: min(25),
2218
- callId: 'HC-9001',
2219
- status: 'booked',
2220
- },
2221
- ],
2222
- recentHistory: SEED_HISTORY.slice(0, 5),
2223
- };
2224
- }
2225
- function getStreamingLines() {
2226
- return streamingLines;
2227
- }
2228
- function cloneLiveCalls() {
2229
- return SEED_LIVE_CALLS.map((c) => ({
2230
- ...c,
2231
- tools: c.tools.map((t) => ({ ...t })),
2232
- transcript: c.transcript.map((l) => ({ ...l })),
2233
- }));
2234
- }
2235
- function cloneHistory() {
2236
- return SEED_HISTORY.map((h) => ({ ...h }));
2237
- }
2238
- function cloneTasks() {
2239
- return SEED_TASKS.map((t) => ({ ...t }));
2240
- }
2241
-
2242
- const DEFAULT_PLACEHOLDERS = [
2243
- { token: '{{patientName}}', label: 'Patient name', sampleValue: 'Maria Garcia' },
2244
- { token: '{{appointmentDate}}', label: 'Appointment date', sampleValue: 'March 15' },
2245
- { token: '{{appointmentTime}}', label: 'Appointment time', sampleValue: '2:30 PM' },
2246
- { token: '{{providerName}}', label: 'Provider name', sampleValue: 'Dr. Patel' },
2247
- { token: '{{practiceName}}', label: 'Practice name', sampleValue: 'Edvak Family Medicine' },
2248
- ];
2249
- const SEED_OUTBOUND_PURPOSES = [
2250
- {
2251
- purposeId: 'purpose-confirm-appt',
2252
- label: 'Confirm appointment',
2253
- description: 'Remind patient of upcoming visit and confirm attendance.',
2254
- sampleOpening: 'Hi {{patientName}}, this is {{practiceName}} calling to confirm your appointment on {{appointmentDate}} at {{appointmentTime}} with {{providerName}}.',
2255
- openingTemplate: 'Hi {{patientName}}, this is {{practiceName}} calling to confirm your appointment on {{appointmentDate}} at {{appointmentTime}} with {{providerName}}.',
2256
- agentContextHint: 'Confirm attendance; offer reschedule if patient cannot make it.',
2257
- requiredFields: ['appointmentDate', 'appointmentTime', 'providerName'],
2258
- allowsCustomScript: false,
2259
- isSystem: true,
2260
- isActive: true,
2261
- sortOrder: 1,
2262
- placeholders: DEFAULT_PLACEHOLDERS,
2263
- },
2264
- {
2265
- purposeId: 'purpose-recall',
2266
- label: 'Recall / follow-up',
2267
- description: 'Invite patient to schedule a follow-up visit.',
2268
- sampleOpening: 'Hello {{patientName}}, {{practiceName}} here. We would like to help you schedule a follow-up with {{providerName}}.',
2269
- openingTemplate: 'Hello {{patientName}}, {{practiceName}} here. We would like to help you schedule a follow-up with {{providerName}}.',
2270
- agentContextHint: null,
2271
- requiredFields: ['providerName'],
2272
- allowsCustomScript: true,
2273
- isSystem: true,
2274
- isActive: true,
2275
- sortOrder: 2,
2276
- placeholders: DEFAULT_PLACEHOLDERS,
2277
- },
2278
- {
2279
- purposeId: 'purpose-custom',
2280
- label: 'Custom outreach',
2281
- description: 'Staff-defined script for one-off calls.',
2282
- sampleOpening: '',
2283
- openingTemplate: 'Hi {{patientName}}, this is {{practiceName}}.',
2284
- agentContextHint: 'Follow the custom script closely.',
2285
- requiredFields: ['customScript'],
2286
- allowsCustomScript: true,
2287
- isSystem: false,
2288
- isActive: false,
2289
- sortOrder: 99,
2290
- placeholders: DEFAULT_PLACEHOLDERS,
2291
- },
2292
- ];
2293
-
2294
- const hour = 60 * 60 * 1000;
2295
- const now = Date.now();
2296
- function todayAt(h, m = 0) {
2297
- const d = new Date();
2298
- d.setHours(h, m, 0, 0);
2299
- return d.toISOString();
2300
- }
2301
- const SEED_ACTIVITIES = [
2302
- {
2303
- id: 'act-appt-1',
2304
- type: 'appointment_booked',
2305
- occurredAt: new Date(now - 0.4 * hour).toISOString(),
2306
- title: 'Appointment booked',
2307
- detail: '',
2308
- patientId: 'pat-1001',
2309
- patientName: 'Sooraj Jagadeesh',
2310
- patientInitials: 'SJ',
2311
- patientDob: '2002-06-30',
2312
- patientAge: 23,
2313
- patientGender: 'M',
2314
- providerName: 'Dr. Anika Mehra',
2315
- providerInitials: 'AM',
2316
- providerSpecialty: 'Cardiologist',
2317
- appointmentId: 'appt-9001',
2318
- callId: 'LC-4801',
2319
- startAt: todayAt(8, 0),
2320
- endAt: todayAt(8, 15),
2321
- durationMinutes: 15,
2322
- visitType: 'Follow Up',
2323
- hasInsurance: true,
2324
- insuranceName: 'Aetna PPO',
2325
- },
2326
- {
2327
- id: 'act-appt-1b',
2328
- type: 'task_created',
2329
- occurredAt: new Date(now - 0.35 * hour).toISOString(),
2330
- title: 'Needs Scheduling Assistance',
2331
- detail: '',
2332
- patientId: 'pat-1001',
2333
- patientName: 'Sooraj Jagadeesh',
2334
- patientInitials: 'SJ',
2335
- patientDob: '2002-06-30',
2336
- patientAge: 23,
2337
- patientGender: 'M',
2338
- providerName: 'Front Desk',
2339
- providerInitials: 'FD',
2340
- providerSpecialty: 'Operations',
2341
- taskId: 'task-4801',
2342
- callId: 'LC-4801',
2343
- startAt: todayAt(8, 5),
2344
- visitType: 'Insurance verification',
2345
- durationMinutes: 10,
2346
- priority: 'medium',
2347
- },
2348
- {
2349
- id: 'act-appt-2',
2350
- type: 'appointment_booked',
2351
- occurredAt: new Date(now - 1.1 * hour).toISOString(),
2352
- title: 'Appointment booked',
2353
- detail: '',
2354
- patientId: 'pat-1005',
2355
- patientName: 'Lisa Sullivan',
2356
- patientInitials: 'LS',
2357
- patientDob: '1998-03-12',
2358
- patientAge: 28,
2359
- patientGender: 'F',
2360
- providerName: 'Dr. Marcus Webb',
2361
- providerInitials: 'MW',
2362
- providerSpecialty: 'Endocrinologist',
2363
- appointmentId: 'appt-9003',
2364
- callId: 'LC-4800',
2365
- startAt: todayAt(8, 15),
2366
- endAt: todayAt(8, 30),
2367
- durationMinutes: 15,
2368
- visitType: 'Lab Results Review',
2369
- hasInsurance: false,
2370
- },
2371
- {
2372
- id: 'act-appt-3',
2373
- type: 'appointment_booked',
2374
- occurredAt: new Date(now - 2.2 * hour).toISOString(),
2375
- title: 'Appointment booked',
2376
- detail: '',
2377
- patientId: 'pat-1006',
2378
- patientName: 'Aiden Rivera',
2379
- patientInitials: 'AR',
2380
- patientDob: '1995-11-04',
2381
- patientAge: 30,
2382
- patientGender: 'M',
2383
- providerName: 'Dr. Priya Nair',
2384
- providerInitials: 'PN',
2385
- providerSpecialty: 'General Practitioner',
2386
- appointmentId: 'appt-9004',
2387
- callId: 'LC-4799',
2388
- startAt: todayAt(8, 30),
2389
- endAt: todayAt(8, 45),
2390
- durationMinutes: 15,
2391
- visitType: 'Routine Checkup',
2392
- },
2393
- {
2394
- id: 'act-appt-4',
2395
- type: 'appointment_booked',
2396
- occurredAt: new Date(now - 8 * hour).toISOString(),
2397
- title: 'Appointment booked',
2398
- detail: '',
2399
- patientId: 'pat-1003',
2400
- patientName: 'Aisha Patel',
2401
- patientInitials: 'AP',
2402
- patientDob: '1988-01-19',
2403
- patientAge: 38,
2404
- patientGender: 'F',
2405
- providerName: 'Dr. Jordan Lee',
2406
- providerInitials: 'JL',
2407
- providerSpecialty: 'Internal Medicine',
2408
- appointmentId: 'appt-9002',
2409
- callId: 'LC-4790',
2410
- startAt: todayAt(14, 30),
2411
- endAt: todayAt(15, 0),
2412
- durationMinutes: 30,
2413
- visitType: 'Annual Wellness',
2414
- hasInsurance: true,
2415
- insuranceName: 'BlueCross Blue Shield',
2416
- },
2417
- {
2418
- id: 'act-1',
2419
- type: 'patient_created',
2420
- occurredAt: new Date(now - 0.5 * hour).toISOString(),
2421
- title: 'Patient registered',
2422
- detail: '',
2423
- patientId: 'pat-1008',
2424
- patientName: 'Maria Garcia',
2425
- patientInitials: 'MG',
2426
- patientDob: '1991-04-22',
2427
- patientAge: 35,
2428
- patientGender: 'F',
2429
- callId: 'LC-4801',
2430
- startAt: todayAt(9, 12),
2431
- visitType: 'New registration',
2432
- hasInsurance: true,
2433
- insuranceName: 'UnitedHealthcare',
2434
- },
2435
- {
2436
- id: 'act-5',
2437
- type: 'patient_created',
2438
- occurredAt: new Date(now - 26 * hour).toISOString(),
2439
- title: 'Patient registered',
2440
- detail: '',
2441
- patientId: 'pat-1004',
2442
- patientName: 'Sam Okonkwo',
2443
- patientInitials: 'SO',
2444
- patientDob: '1979-09-08',
2445
- patientAge: 46,
2446
- patientGender: 'M',
2447
- callId: 'LC-4782',
2448
- startAt: new Date(now - 26 * hour).toISOString(),
2449
- visitType: 'Outbound registration',
2450
- hasInsurance: false,
2451
- },
2452
- {
2453
- id: 'act-3',
2454
- type: 'task_created',
2455
- occurredAt: new Date(now - 3 * hour).toISOString(),
2456
- title: 'Needs Scheduling Assistance',
2457
- detail: '',
2458
- patientId: 'pat-1002',
2459
- patientName: 'James Chen',
2460
- patientInitials: 'JC',
2461
- patientDob: '1985-12-01',
2462
- patientAge: 40,
2463
- patientGender: 'M',
2464
- providerName: 'Front Desk',
2465
- providerInitials: 'FD',
2466
- providerSpecialty: 'Operations',
2467
- taskId: 'task-301',
2468
- callId: 'LC-4798',
2469
- startAt: new Date(now - 3 * hour).toISOString(),
2470
- visitType: 'Insurance verification',
2471
- durationMinutes: 15,
2472
- priority: 'medium',
2473
- },
2474
- {
2475
- id: 'act-6',
2476
- type: 'task_created',
2477
- occurredAt: new Date(now - 5 * hour).toISOString(),
2478
- title: 'Needs Scheduling Assistance',
2479
- detail: '',
2480
- patientId: 'pat-1007',
2481
- patientName: 'Elena Foster',
2482
- patientInitials: 'EF',
2483
- patientDob: '1993-07-15',
2484
- patientAge: 32,
2485
- patientGender: 'F',
2486
- providerName: 'Nurse Station',
2487
- providerInitials: 'NS',
2488
- providerSpecialty: 'Clinical support',
2489
- taskId: 'task-302',
2490
- callId: 'LC-4795',
2491
- startAt: new Date(now - 5 * hour).toISOString(),
2492
- visitType: 'Clinical callback',
2493
- durationMinutes: 10,
2494
- priority: 'medium',
2495
- },
2496
- ];
2497
-
2498
- const MOCK_DELAY_MS = 200;
2499
- class AiReceptionistApiMockService {
2500
- constructor() {
2501
- this.liveCalls = signal(cloneLiveCalls());
2502
- this.tasks = signal(cloneTasks());
2503
- this.history = signal(cloneHistory());
2504
- this.settings = signal(structuredClone(SEED_SETTINGS));
2505
- this.status = signal({
2506
- agentOn: true,
2507
- mode: 'after-hours',
2508
- readiness: SEED_SETUP.readiness,
2509
- });
2510
- this.outboundPurposes = signal(structuredClone(SEED_OUTBOUND_PURPOSES));
2511
- }
2512
- mock(data) {
2513
- return of({ data }).pipe(delay(MOCK_DELAY_MS));
2514
- }
2515
- paginate(rows, page = 1, limit = DEFAULT_PAGE_SIZE) {
2516
- const safePage = Math.max(1, page);
2517
- const safeLimit = Math.min(100, Math.max(1, limit));
2518
- const start = (safePage - 1) * safeLimit;
2519
- return of({
2520
- items: rows.slice(start, start + safeLimit),
2521
- total: rows.length,
2522
- page: safePage,
2523
- limit: safeLimit,
2524
- }).pipe(delay(MOCK_DELAY_MS));
2525
- }
2526
- getStatus() {
2527
- return this.mock(this.status());
2528
- }
2529
- setAgentOn(on) {
2530
- this.status.update((s) => ({ ...s, agentOn: on }));
2531
- }
2532
- getDashboard() {
2533
- const dash = buildDashboard();
2534
- dash.liveCalls = [];
2535
- return this.mock(dash);
2536
- }
2537
- getLiveCalls() {
2538
- return this.mock(this.liveCalls());
2539
- }
2540
- getLiveCall(id) {
2541
- const call = this.liveCalls().find((c) => c.id === id) ?? null;
2542
- return this.mock(call ? structuredClone(call) : null);
2543
- }
2544
- getCallTranscript(id) {
2545
- const call = this.liveCalls().find((c) => c.id === id);
2546
- return this.mock(call ? call.transcript.map((l) => ({ ...l })) : []);
2547
- }
2548
- getCallSummary(id) {
2549
- const detail = SEED_HISTORY_DETAILS[id];
2550
- if (detail) {
2551
- return this.mock({
2552
- summary: detail.summary,
2553
- transcript: detail.transcript.map((l) => ({ ...l })),
2554
- tools: detail.tools.map((t) => ({ ...t })),
2555
- });
2556
- }
2557
- const call = this.liveCalls().find((c) => c.id === id);
2558
- if (call) {
2559
- return this.mock({
2560
- summary: 'Call summary will appear here after processing.',
2561
- transcript: call.transcript.map((l) => ({ ...l })),
2562
- tools: call.tools.map((t) => ({ ...t })),
2563
- });
2564
- }
2565
- return this.mock(null);
2566
- }
2567
- getCallRecording(callId) {
2568
- const detail = SEED_HISTORY_DETAILS[callId];
2569
- if (detail?.recordingUrl) {
2570
- const meta = {
2571
- callId,
2572
- status: 'ready',
2573
- url: `/api/ai-receptionist/calls/${callId}/recording/audio`,
2574
- contentType: 'audio/ogg',
2575
- durationSeconds: detail.duration || 120,
2576
- };
2577
- return of(meta).pipe(delay(MOCK_DELAY_MS));
2578
- }
2579
- const unavailable = {
2580
- callId,
2581
- status: 'unavailable',
2582
- url: null,
2583
- message: 'No recording available for this call',
2584
- };
2585
- return of(unavailable).pipe(delay(MOCK_DELAY_MS));
2586
- }
2587
- getCallRecordingBlob() {
2588
- return of(new Blob([], { type: 'audio/ogg' })).pipe(delay(MOCK_DELAY_MS));
2589
- }
2590
- getHistory(filters) {
2591
- let rows = this.history();
2592
- const q = filters?.q?.toLowerCase().trim();
2593
- if (q) {
2594
- rows = rows.filter((h) => h.name.toLowerCase().includes(q) ||
2595
- h.phone.includes(q) ||
2596
- h.reason.toLowerCase().includes(q) ||
2597
- h.id.toLowerCase().includes(q));
2598
- }
2599
- if (filters?.dir)
2600
- rows = rows.filter((h) => h.direction === filters.dir);
2601
- if (filters?.outcome) {
2602
- rows = rows.filter((h) => h.outcome.toLowerCase().includes(filters.outcome.toLowerCase()));
2603
- }
2604
- if (filters?.location)
2605
- rows = rows.filter((h) => h.location === filters.location);
2606
- if (filters?.review)
2607
- rows = rows.filter((h) => h.review === filters.review);
2608
- return this.paginate(rows, filters?.page, filters?.limit);
2609
- }
2610
- getCallDetail(id) {
2611
- const detail = SEED_HISTORY_DETAILS[id] ?? null;
2612
- return this.mock(detail ? structuredClone(detail) : null);
2613
- }
2614
- regenerateCallSummary(callId) {
2615
- const detail = SEED_HISTORY_DETAILS[callId];
2616
- if (!detail) {
2617
- return throwError(() => ({ message: 'Call not found.', status: 404 }));
2618
- }
2619
- if (!detail.transcript.length) {
2620
- return throwError(() => ({ message: 'No transcript on this call.', status: 400 }));
2621
- }
2622
- const turnCount = detail.transcript.filter((line) => line.who !== 'system').length;
2623
- const summary = `Regenerated summary (${new Date().toLocaleString()}): ${detail.summary}`;
2624
- detail.summary = summary;
2625
- SEED_HISTORY_DETAILS[callId] = detail;
2626
- return this.mock({
2627
- callId,
2628
- summary,
2629
- summaryModel: 'gpt-4o-mini',
2630
- summaryGeneratedAt: new Date().toISOString(),
2631
- transcriptTurnCount: turnCount,
2632
- });
2633
- }
2634
- postTakeover(id) {
2635
- return this.postMediaJoin(id, 'takeover').pipe(map(() => ({ data: { success: true } })));
2636
- }
2637
- postMediaJoin(id, mode) {
2638
- this.patchLive(id, (c) => ({
2639
- ...c,
2640
- status: mode === 'takeover' ? 'takeover' : c.status,
2641
- controlMode: mode,
2642
- assigned: mode === 'takeover' ? 'You' : c.assigned,
2643
- aiPaused: mode === 'takeover',
2644
- }));
2645
- // Mock tokens are placeholders — StaffMediaService is skipped when useMockApi is on.
2646
- return this.mock({
2647
- ok: true,
2648
- callId: id,
2649
- mode,
2650
- provider: 'livekit',
2651
- livekitUrl: 'wss://mock.livekit.local',
2652
- clientToken: `mock-token-${mode}-${id}`,
2653
- roomName: `call-${id}`,
2654
- controlMode: mode,
2655
- aiPaused: mode === 'takeover',
2656
- assigned: mode === 'takeover' ? 'You' : null,
2657
- });
2658
- }
2659
- postMediaLeave(id) {
2660
- this.patchLive(id, (c) => ({
2661
- ...c,
2662
- status: 'ai',
2663
- controlMode: 'ai',
2664
- assigned: null,
2665
- aiPaused: false,
2666
- }));
2667
- return this.mock({ success: true });
2668
- }
2669
- postResumeAi(id) {
2670
- return this.postMediaLeave(id);
2671
- }
2672
- postPause(id) {
2673
- this.patchLive(id, (c) => ({ ...c, controlMode: 'paused', aiPaused: true }));
2674
- return this.mock({ success: true });
2675
- }
2676
- postResume(id) {
2677
- this.patchLive(id, (c) => ({
2678
- ...c,
2679
- controlMode: c.status === 'takeover' || c.assigned ? 'takeover' : 'ai',
2680
- aiPaused: false,
2681
- }));
2682
- return this.mock({ success: true });
2683
- }
2684
- postListen(id) {
2685
- return this.postMediaJoin(id, 'listen').pipe(map(() => ({ data: { success: true } })));
2686
- }
2687
- postTransfer(id) {
2688
- this.patchLive(id, (c) => ({ ...c, status: 'transferring' }));
2689
- return this.mock({ success: true });
2690
- }
2691
- postEnd(id) {
2692
- this.liveCalls.update((calls) => calls.filter((c) => c.id !== id));
2693
- return this.mock({ success: true });
2694
- }
2695
- postMessage(id, text) {
2696
- this.patchLive(id, (c) => ({
2697
- ...c,
2698
- transcript: [...c.transcript, { who: 'staff', text, at: Date.now() }],
2699
- }));
2700
- return this.mock({ success: true });
2701
- }
2702
- postReview(id) {
2703
- this.history.update((rows) => rows.map((h) => (h.id === id ? { ...h, review: 'reviewed' } : h)));
2704
- const detail = SEED_HISTORY_DETAILS[id];
2705
- if (detail) {
2706
- detail.review = 'reviewed';
2707
- }
2708
- return this.mock({ review: 'reviewed' });
2709
- }
2710
- getTasks(filters) {
2711
- let rows = this.tasks();
2712
- if (filters?.status)
2713
- rows = rows.filter((t) => t.status === filters.status);
2714
- if (filters?.type)
2715
- rows = rows.filter((t) => t.type === filters.type);
2716
- if (filters?.source)
2717
- rows = rows.filter((t) => t.source === filters.source);
2718
- if (filters?.callId)
2719
- rows = rows.filter((t) => t.callId === filters.callId);
2720
- return this.paginate(rows, filters?.page, filters?.limit);
2721
- }
2722
- getCallTasks(callId) {
2723
- return this.getTasks({ callId, limit: 100 }).pipe(map((page) => ({ data: page.items })));
2724
- }
2725
- createTask(req) {
2726
- let description = req.description?.trim() ?? '';
2727
- if (!description && req.callId) {
2728
- description = SEED_HISTORY_DETAILS[req.callId]?.summary ?? '';
2729
- }
2730
- const task = {
2731
- id: `TK-${Date.now()}`,
2732
- created: Date.now(),
2733
- title: req.title.trim(),
2734
- type: req.type,
2735
- description,
2736
- patient: req.patient?.trim() || '—',
2737
- priority: req.priority ?? 'normal',
2738
- status: 'open',
2739
- source: 'manual',
2740
- assignee: req.assignee?.trim() || 'Front desk',
2741
- callId: req.callId,
2742
- };
2743
- this.tasks.update((rows) => [task, ...rows]);
2744
- return this.mock(task);
2745
- }
2746
- patchTask(id, status) {
2747
- let updated = null;
2748
- this.tasks.update((rows) => rows.map((t) => {
2749
- if (t.id !== id)
2750
- return t;
2751
- updated = { ...t, status };
2752
- return updated;
2753
- }));
2754
- return this.mock(updated);
2755
- }
2756
- getAnalytics(range) {
2757
- return this.mock({ ...SEED_ANALYTICS, range });
2758
- }
2759
- getSettings() {
2760
- const data = this.withEffectiveWelcome(this.settings());
2761
- return this.mock(data);
2762
- }
2763
- putSettings(next) {
2764
- const saved = this.withEffectiveWelcome(structuredClone(next));
2765
- this.settings.set(saved);
2766
- return this.mock(saved);
2767
- }
2768
- getVoicePromptDefault() {
2769
- return of({
2770
- defaultVoiceSystemPrompt: 'You are an AI receptionist for a medical practice. Be warm, concise, and HIPAA-aware.',
2771
- voiceSystemPromptMaxLength: 24000,
2772
- customVoiceInstructionsMaxLength: 8000,
2773
- notes: 'Leave voiceSystemPrompt empty to use this shipped default.',
2774
- }).pipe(delay(MOCK_DELAY_MS));
2775
- }
2776
- previewVoice(_voiceId) {
2777
- // Silent tiny wav so mock mode does not break the Play button.
2778
- const silent = new Uint8Array([
2779
- 0x52, 0x49, 0x46, 0x46, 0x24, 0x00, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45, 0x66, 0x6d, 0x74,
2780
- 0x20, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x40, 0x1f, 0x00, 0x00, 0x80, 0x3e,
2781
- 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, 0x64, 0x61, 0x74, 0x61, 0x00, 0x00, 0x00, 0x00,
2782
- ]);
2783
- return of(new Blob([silent], { type: 'audio/wav' })).pipe(delay(MOCK_DELAY_MS));
2784
- }
2785
- testKnowledgeAnswer(params) {
2786
- const answer = `Based on our guidance: for “${params.question.trim()}”, ` +
2787
- `I'd share what's in our practice knowledge and avoid restricted topics.`;
2788
- return this.previewVoice(params.voiceId ?? 'mock').pipe(map((audioBlob) => ({
2789
- answer,
2790
- voiceId: params.voiceId ?? 'mock',
2791
- audioBlob,
2792
- })));
2793
- }
2794
- withEffectiveWelcome(settings) {
2795
- return {
2796
- ...settings,
2797
- effectiveWelcomeMessage: computeEffectiveWelcomeMessage(settings),
2798
- };
2799
- }
2800
- getAudit(q, actor, opts) {
2801
- let rows = SEED_AUDIT;
2802
- if (q) {
2803
- const needle = q.toLowerCase();
2804
- rows = rows.filter((e) => e.action.toLowerCase().includes(needle) ||
2805
- e.detail.toLowerCase().includes(needle) ||
2806
- e.target.toLowerCase().includes(needle));
2807
- }
2808
- if (actor)
2809
- rows = rows.filter((e) => e.actor.toLowerCase().includes(actor.toLowerCase()));
2810
- return this.paginate(rows, opts?.page, opts?.limit);
2811
- }
2812
- getActivities(filters) {
2813
- let rows = structuredClone(SEED_ACTIVITIES);
2814
- const types = (filters?.types ?? '')
2815
- .split(',')
2816
- .map((t) => t.trim())
2817
- .filter(Boolean);
2818
- if (types.length) {
2819
- rows = rows.filter((a) => types.includes(a.type));
2820
- }
2821
- if (filters?.callId?.trim()) {
2822
- const callId = filters.callId.trim().toLowerCase();
2823
- rows = rows.filter((a) => (a.callId || '').toLowerCase() === callId);
2824
- }
2825
- if (filters?.search?.trim()) {
2826
- const needle = filters.search.trim().toLowerCase();
2827
- rows = rows.filter((a) => [a.title, a.detail, a.patientName, a.callId, a.type]
2828
- .filter(Boolean)
2829
- .join(' ')
2830
- .toLowerCase()
2831
- .includes(needle));
2832
- }
2833
- return this.paginate(rows, filters?.page, filters?.limit);
2834
- }
2835
- getSetup() {
2836
- return this.mock(SEED_SETUP);
2837
- }
2838
- activateSetup() {
2839
- return this.mock({ success: true });
2840
- }
2841
- getLocations() {
2842
- return this.mock(SEED_LOCATIONS);
2843
- }
2844
- getProviders() {
2845
- return this.mock(SEED_PROVIDERS);
2846
- }
2847
- getStreamLines() {
2848
- return getStreamingLines();
2849
- }
2850
- appendStreamLine(callId, line) {
2851
- this.patchLive(callId, (c) => ({
2852
- ...c,
2853
- transcript: [...c.transcript, line],
2854
- }));
2855
- }
2856
- usesMockStreaming() {
2857
- return true;
2858
- }
2859
- getCallApiLogs(callId) {
2860
- const template = SEED_CALL_API_LOGS[callId] ?? SEED_CALL_API_LOGS['LC-4821'] ?? [];
2861
- const items = template.map((row) => ({ ...row, callId }));
2862
- return of({ items: structuredClone(items), total: items.length }).pipe(delay(MOCK_DELAY_MS));
2863
- }
2864
- getApiLogs(filters = {}) {
2865
- let rows = allSeedLogs();
2866
- if (filters.callId) {
2867
- rows = rows.filter((r) => r.callId === filters.callId);
2868
- }
2869
- if (filters.provider) {
2870
- const providers = filters.provider.split(',').filter(Boolean);
2871
- rows = rows.filter((r) => providers.includes(r.provider));
2872
- }
2873
- if (filters.success !== undefined) {
2874
- rows = rows.filter((r) => r.success === filters.success);
2875
- }
2876
- if (filters.statusCode != null) {
2877
- rows = rows.filter((r) => r.statusCode === filters.statusCode);
2878
- }
2879
- if (filters.operation) {
2880
- const op = filters.operation.toLowerCase();
2881
- rows = rows.filter((r) => r.operation.toLowerCase().includes(op));
2882
- }
2883
- if (filters.search) {
2884
- const q = filters.search.toLowerCase();
2885
- rows = rows.filter((r) => r.operation.toLowerCase().includes(q) ||
2886
- r.urlPath.toLowerCase().includes(q) ||
2887
- (r.errorMessage?.toLowerCase().includes(q) ?? false) ||
2888
- (r.toolName?.toLowerCase().includes(q) ?? false));
2889
- }
2890
- if (filters.from) {
2891
- const from = Date.parse(filters.from);
2892
- rows = rows.filter((r) => Date.parse(r.startedAt) >= from);
2893
- }
2894
- if (filters.to) {
2895
- const to = Date.parse(filters.to);
2896
- rows = rows.filter((r) => Date.parse(r.startedAt) <= to);
2897
- }
2898
- if (filters.practiceId) {
2899
- rows = rows.filter((r) => (r.clientPracticeId ?? '') === filters.practiceId);
2900
- }
2901
- rows = [...rows].sort((a, b) => Date.parse(b.startedAt) - Date.parse(a.startedAt));
2902
- const page = filters.page ?? 1;
2903
- const limit = filters.limit ?? 50;
2904
- const start = (page - 1) * limit;
2905
- const items = rows.slice(start, start + limit);
2906
- return of({
2907
- items,
2908
- total: rows.length,
2909
- page,
2910
- limit,
2911
- practiceId: filters.practiceId ?? null,
2912
- }).pipe(delay(MOCK_DELAY_MS));
2913
- }
2914
- getApiLogDetail(logId) {
2915
- const detail = SEED_API_LOG_DETAILS[logId];
2916
- if (detail) {
2917
- return this.mock(structuredClone(detail));
2918
- }
2919
- const listItem = allSeedLogs().find((r) => r.id === logId);
2920
- if (!listItem) {
2921
- return of({ data: null }).pipe(delay(MOCK_DELAY_MS));
2922
- }
2923
- const fallback = {
2924
- ...listItem,
2925
- traceId: null,
2926
- requestBody: listItem.requestPreview ? { preview: listItem.requestPreview } : null,
2927
- responseBody: listItem.responsePreview ? { preview: listItem.responsePreview } : null,
2928
- metadata: null,
2929
- completedAt: listItem.startedAt,
2930
- };
2931
- return this.mock(fallback);
2932
- }
2933
- getApiLogStats() {
2934
- return this.mock(structuredClone(SEED_API_LOG_STATS));
2935
- }
2936
- getOutboundPurposes(includeInactive = false) {
2937
- let rows = [...this.outboundPurposes()].sort((a, b) => a.sortOrder - b.sortOrder);
2938
- if (!includeInactive) {
2939
- rows = rows.filter((p) => p.isActive);
2940
- }
2941
- return of({ purposes: structuredClone(rows) }).pipe(delay(MOCK_DELAY_MS));
2942
- }
2943
- createOutboundPurpose(body) {
2944
- const purpose = {
2945
- purposeId: `purpose-${Date.now()}`,
2946
- label: body.label,
2947
- description: body.description ?? '',
2948
- sampleOpening: body.sampleOpening ?? '',
2949
- openingTemplate: body.openingTemplate,
2950
- agentContextHint: body.agentContextHint ?? null,
2951
- requiredFields: body.requiredFields,
2952
- allowsCustomScript: body.allowsCustomScript ?? false,
2953
- isSystem: false,
2954
- isActive: true,
2955
- sortOrder: body.sortOrder ?? this.outboundPurposes().length + 1,
2956
- placeholders: structuredClone(DEFAULT_PLACEHOLDERS),
2957
- };
2958
- this.outboundPurposes.update((list) => [...list, purpose]);
2959
- return of(structuredClone(purpose)).pipe(delay(MOCK_DELAY_MS));
2960
- }
2961
- updateOutboundPurpose(purposeId, body) {
2962
- let updated = null;
2963
- this.outboundPurposes.update((list) => list.map((p) => {
2964
- if (p.purposeId !== purposeId)
2965
- return p;
2966
- updated = {
2967
- ...p,
2968
- ...body,
2969
- label: body.label ?? p.label,
2970
- description: body.description ?? p.description,
2971
- sampleOpening: body.sampleOpening ?? p.sampleOpening,
2972
- openingTemplate: body.openingTemplate ?? p.openingTemplate,
2973
- agentContextHint: body.agentContextHint !== undefined ? body.agentContextHint : p.agentContextHint,
2974
- requiredFields: body.requiredFields ?? p.requiredFields,
2975
- allowsCustomScript: body.allowsCustomScript ?? p.allowsCustomScript,
2976
- isActive: body.isActive ?? p.isActive,
2977
- sortOrder: body.sortOrder ?? p.sortOrder,
2978
- };
2979
- return updated;
2980
- }));
2981
- if (!updated) {
2982
- return throwError(() => new Error('Purpose not found'));
2983
- }
2984
- const saved = updated;
2985
- return of(structuredClone(saved)).pipe(delay(MOCK_DELAY_MS));
2986
- }
2987
- deleteOutboundPurpose(purposeId) {
2988
- const target = this.outboundPurposes().find((p) => p.purposeId === purposeId);
2989
- if (!target) {
2990
- return of({ success: false }).pipe(delay(MOCK_DELAY_MS));
2991
- }
2992
- if (target.isSystem) {
2993
- return of({ success: false }).pipe(delay(MOCK_DELAY_MS));
2994
- }
2995
- this.outboundPurposes.update((list) => list.filter((p) => p.purposeId !== purposeId));
2996
- return of({ success: true }).pipe(delay(MOCK_DELAY_MS));
2997
- }
2998
- placeOutboundCall(body) {
2999
- const idHint = body.appointmentId
3000
- ? ` (appt ${body.appointmentId})`
3001
- : body.patientId
3002
- ? ` (patient ${body.patientId})`
3003
- : '';
3004
- return of({
3005
- success: true,
3006
- callId: `LC-${Math.floor(4800 + Math.random() * 100)}`,
3007
- message: `Outbound call started to ${body.phone}${idHint}`,
3008
- }).pipe(delay(MOCK_DELAY_MS));
3009
- }
3010
- searchPatientsForOutbound(q, limit = 10) {
3011
- const needle = q.trim().toLowerCase();
3012
- const digits = q.replace(/\D/g, '');
3013
- const hits = [
3014
- {
3015
- patientId: 'pat-1001',
3016
- firstName: 'Maria',
3017
- lastName: 'Garcia',
3018
- fullName: 'Maria Garcia',
3019
- phone: '+14155550100',
3020
- dob: '1988-04-12',
3021
- },
3022
- {
3023
- patientId: 'pat-1002',
3024
- firstName: 'James',
3025
- lastName: 'Chen',
3026
- fullName: 'James Chen',
3027
- phone: '+14155550122',
3028
- dob: '1975-11-03',
3029
- },
3030
- {
3031
- patientId: 'pat-1003',
3032
- firstName: 'Aisha',
3033
- lastName: 'Patel',
3034
- fullName: 'Aisha Patel',
3035
- phone: '+14155550987',
3036
- dob: '1992-07-21',
3037
- },
3038
- ].filter((p) => {
3039
- if (!needle)
3040
- return false;
3041
- const hay = `${p.fullName} ${p.phone} ${p.patientId}`.toLowerCase();
3042
- return hay.includes(needle) || (!!digits && (p.phone ?? '').includes(digits));
3043
- });
3044
- return of(hits.slice(0, limit)).pipe(delay(MOCK_DELAY_MS));
3045
- }
3046
- listPatientAppointmentsForOutbound(patientId, limit = 20) {
3047
- const now = Date.now();
3048
- const day = 24 * 60 * 60 * 1000;
3049
- const all = [
3050
- {
3051
- appointmentId: `appt-${patientId}-1`,
3052
- startTime: new Date(now + 2 * day).toISOString(),
3053
- endTime: new Date(now + 2 * day + 30 * 60 * 1000).toISOString(),
3054
- providerName: 'Dr. Patel',
3055
- locationName: 'Main Clinic',
3056
- status: 'scheduled',
3057
- visitType: 'Follow-up',
3058
- },
3059
- {
3060
- appointmentId: `appt-${patientId}-2`,
3061
- startTime: new Date(now + 9 * day).toISOString(),
3062
- endTime: new Date(now + 9 * day + 45 * 60 * 1000).toISOString(),
3063
- providerName: 'Dr. Nguyen',
3064
- locationName: 'West Wing',
3065
- status: 'confirmed',
3066
- visitType: 'Annual wellness',
3067
- },
3068
- ];
3069
- return of(all.slice(0, limit)).pipe(delay(MOCK_DELAY_MS));
3070
- }
3071
- patchLive(id, fn) {
3072
- this.liveCalls.update((calls) => calls.map((c) => (c.id === id ? fn(structuredClone(c)) : c)));
3073
- }
3074
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AiReceptionistApiMockService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3075
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AiReceptionistApiMockService, providedIn: 'root' }); }
3076
- }
3077
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AiReceptionistApiMockService, decorators: [{
3078
- type: Injectable,
3079
- args: [{ providedIn: 'root' }]
3080
- }] });
3081
-
3082
- class AiReceptionistApiService {
3083
- constructor() {
3084
- this.http = inject(HttpClient);
3085
- this.mock = inject(AiReceptionistApiMockService);
3086
- this.config = inject(VOICE_RECEPTIONIST_CONFIG);
3087
- this.paths = createVoiceReceptionistPaths(this.config);
3088
- this.arBase = this.paths.aiReceptionistPath();
3089
- }
3090
- get useMock() {
3091
- return !!this.config.useMockApi;
3092
- }
3093
- getStatus() {
3094
- if (this.useMock)
3095
- return this.mock.getStatus();
3096
- return this.http.get(`${this.arBase}/status`).pipe(map((body) => ({ data: mapStatusDto(body) })), catchError((err) => throwError(() => ({
3097
- message: this.apiErrorMessage(err, 'Failed to load agent status.'),
3098
- status: err.status,
3099
- }))));
3100
- }
3101
- /** Prefer this for the dashboard On/Off switch — PUT { enabled }. */
3102
- setAgentOnline(enabled) {
3103
- if (this.useMock) {
3104
- this.mock.setAgentOn(enabled);
3105
- return this.mock.getStatus();
3106
- }
3107
- return this.http
3108
- .put(`${this.arBase}/agent-online`, { enabled })
3109
- .pipe(map((body) => ({ data: mapStatusDto(body) })), catchError((err) => throwError(() => ({
3110
- message: this.apiErrorMessage(err, 'Failed to update agent online status.'),
3111
- status: err.status,
3112
- }))));
3113
- }
3114
- /** @deprecated Prefer setAgentOnline — kept for setup wizard activate flow. */
3115
- setAgentOn(on) {
3116
- if (this.useMock) {
3117
- this.mock.setAgentOn(on);
3118
- return;
3119
- }
3120
- const path = on ? 'activate' : 'deactivate';
3121
- this.http.post(`${this.arBase}/${path}`, {}).subscribe();
3122
- }
3123
- getDashboard() {
3124
- if (this.useMock)
3125
- return this.mock.getDashboard();
3126
- return forkJoin({
3127
- summary: this.http.get(`${this.arBase}/dashboard/summary`),
3128
- history: this.http.get(`${this.arBase}/calls/history`, {
3129
- params: new HttpParams().set('page', '1').set('limit', '5'),
3130
- }),
3131
- tasks: this.http
3132
- .get(`${this.arBase}/tasks`, {
3133
- params: new HttpParams().set('source', 'voice').set('limit', '5'),
3134
- })
3135
- .pipe(catchError(() => of([]))),
3136
- appointments: this.http
3137
- .get(`${this.arBase}/dashboard/appointments`, { params: new HttpParams().set('limit', '5') })
3138
- .pipe(catchError(() => of([]))),
3139
- }).pipe(map(({ summary, history, tasks, appointments }) => ({
3140
- data: {
3141
- stats: mapDashboardSummaryDto(summary),
3142
- liveCalls: [],
3143
- latestTasks: asTaskList(tasks)
3144
- .map(mapTaskDto)
3145
- .sort((a, b) => b.created - a.created)
3146
- .slice(0, 5),
3147
- latestAppointments: (Array.isArray(appointments)
3148
- ? appointments
3149
- : appointments.items ?? []).map(mapAiCreatedAppointmentDto),
3150
- recentHistory: asHistoryList(history).map(mapHistoryCallDto),
3151
- },
3152
- })));
3153
- }
3154
- getLiveCalls() {
3155
- if (this.useMock)
3156
- return this.mock.getLiveCalls();
3157
- return this.http.get(`${this.arBase}/calls/live`).pipe(map((body) => ({ data: asLiveCallList(body).map(mapLiveCallDto) })));
3158
- }
3159
- getLiveCall(id) {
3160
- if (this.useMock)
3161
- return this.mock.getLiveCall(id);
3162
- const enc = encodeURIComponent(id);
3163
- return this.http.get(`${this.arBase}/calls/${enc}`).pipe(map((dto) => ({ data: dto?.id ? mapLiveCallDto(dto) : null })), catchError(() => of({ data: null })));
3164
- }
3165
- getCallTranscript(id) {
3166
- if (this.useMock)
3167
- return this.mock.getCallTranscript(id);
3168
- const enc = encodeURIComponent(id);
3169
- return this.http.get(`${this.arBase}/calls/${enc}/transcript`).pipe(map((body) => ({ data: asTranscriptList(body).map(mapTranscriptLine) })), catchError(() => of({ data: [] })));
3170
- }
3171
- getCallSummary(id) {
3172
- if (this.useMock)
3173
- return this.mock.getCallSummary(id);
3174
- const enc = encodeURIComponent(id);
3175
- return this.http.get(`${this.arBase}/calls/${enc}/summary`).pipe(map((dto) => ({
3176
- data: dto
3177
- ? {
3178
- summary: dto.summary ?? '',
3179
- transcript: (dto.transcript ?? []).map(mapTranscriptLine),
3180
- tools: (dto.tools ?? []).map(mapToolEvent),
3181
- }
3182
- : null,
3183
- })), catchError(() => of({ data: null })));
3184
- }
3185
- getCallRecording(callId) {
3186
- if (this.useMock)
3187
- return this.mock.getCallRecording(callId);
3188
- const enc = encodeURIComponent(callId);
3189
- return this.http.get(`${this.arBase}/calls/${enc}/recording`).pipe(map((dto) => mapRecordingMeta(dto)), catchError(() => of({
3190
- callId,
3191
- status: 'unavailable',
3192
- url: null,
3193
- message: 'No recording available for this call',
3194
- })));
3195
- }
3196
- /** Fetch audio bytes with JWT (interceptor). Pass relative path from metadata.url. */
3197
- getCallRecordingBlob(audioPath) {
3198
- if (this.useMock)
3199
- return this.mock.getCallRecordingBlob();
3200
- const url = audioPath.startsWith('http') ? audioPath : `${this.paths.apiRoot()}${audioPath}`;
3201
- return this.http.get(url, { responseType: 'blob' });
3202
- }
3203
- getHistory(filters) {
3204
- if (this.useMock)
3205
- return this.mock.getHistory(filters);
3206
- const page = filters?.page ?? 1;
3207
- const limit = filters?.limit ?? DEFAULT_PAGE_SIZE;
3208
- let params = new HttpParams().set('page', String(page)).set('limit', String(limit));
3209
- if (filters?.q)
3210
- params = params.set('search', filters.q);
3211
- if (filters?.dir)
3212
- params = params.set('direction', filters.dir);
3213
- if (filters?.outcome)
3214
- params = params.set('outcome', filters.outcome);
3215
- if (filters?.location)
3216
- params = params.set('location', filters.location);
3217
- if (filters?.review)
3218
- params = params.set('review', filters.review);
3219
- return this.http.get(`${this.arBase}/calls/history`, { params }).pipe(map((body) => {
3220
- const pageResult = asPaginatedResult(body, page, limit);
3221
- return {
3222
- ...pageResult,
3223
- items: pageResult.items.map(mapHistoryCallDto),
3224
- };
3225
- }));
3226
- }
3227
- getCallDetail(id) {
3228
- if (this.useMock)
3229
- return this.mock.getCallDetail(id);
3230
- const enc = encodeURIComponent(id);
3231
- return forkJoin({
3232
- call: this.http.get(`${this.arBase}/calls/${enc}`),
3233
- summary: this.http.get(`${this.arBase}/calls/${enc}/summary`),
3234
- recording: this.http
3235
- .get(`${this.arBase}/calls/${enc}/recording`)
3236
- .pipe(catchError(() => of({ callId: id, url: null, message: '' }))),
3237
- }).pipe(map(({ call, summary, recording }) => {
3238
- if (!isHistoryCallDto(call))
3239
- return { data: null };
3240
- return {
3241
- data: mapHistoryDetailDto(call, summary, recording?.url),
3242
- };
3243
- }), catchError(() => of({ data: null })));
3244
- }
3245
- regenerateCallSummary(callId) {
3246
- if (this.useMock)
3247
- return this.mock.regenerateCallSummary(callId);
3248
- const enc = encodeURIComponent(callId);
3249
- return this.http
3250
- .post(`${this.arBase}/calls/${enc}/summary/regenerate`, {})
3251
- .pipe(map((body) => ({ data: mapRegenerateSummaryResponse(body) })), catchError((err) => throwError(() => ({
3252
- message: this.apiErrorMessage(err, 'Failed to regenerate summary.'),
3253
- status: err.status,
3254
- }))));
3255
- }
3256
- /**
3257
- * Staff softphone join into LiveKit room `call-{callId}`.
3258
- * POST /calls/:id/media/join { mode: listen|takeover }
3259
- */
3260
- postMediaJoin(id, mode) {
3261
- if (this.useMock)
3262
- return this.mock.postMediaJoin(id, mode);
3263
- const enc = encodeURIComponent(id);
3264
- return this.http
3265
- .post(`${this.arBase}/calls/${enc}/media/join`, { mode })
3266
- .pipe(map((body) => {
3267
- const data = mapStaffMediaJoinResult(body);
3268
- if (!data) {
3269
- throw new Error('media/join response missing livekitUrl or clientToken');
3270
- }
3271
- return { data: { ...data, callId: data.callId || id, mode } };
3272
- }), catchError((err) => throwError(() => new Error(this.apiErrorMessage(err, 'Failed to join call media')))));
3273
- }
3274
- /** Drop staff WebRTC only; does not hang up the patient. */
3275
- postMediaLeave(id) {
3276
- if (this.useMock)
3277
- return this.mock.postMediaLeave(id);
3278
- const enc = encodeURIComponent(id);
3279
- return this.http
3280
- .post(`${this.arBase}/calls/${enc}/media/leave`, {})
3281
- .pipe(map(() => ({ data: { success: true } })));
3282
- }
3283
- /**
3284
- * Take over — same join payload as media/join { mode: takeover }.
3285
- * Prefer this or postMediaJoin('takeover'); both are supported by BE.
3286
- */
3287
- postTakeover(id) {
3288
- if (this.useMock)
3289
- return this.mock.postMediaJoin(id, 'takeover');
3290
- const enc = encodeURIComponent(id);
3291
- return this.http.post(`${this.arBase}/calls/${enc}/takeover`, {}).pipe(map((body) => {
3292
- const data = mapStaffMediaJoinResult(body);
3293
- if (!data) {
3294
- throw new Error('takeover response missing livekitUrl or clientToken');
3295
- }
3296
- const mode = 'takeover';
3297
- return { data: { ...data, callId: data.callId || id, mode } };
3298
- }), catchError((err) => throwError(() => new Error(this.apiErrorMessage(err, 'Failed to take over call')))));
3299
- }
3300
- postResumeAi(id) {
3301
- if (this.useMock)
3302
- return this.mock.postResumeAi(id);
3303
- return this.postCallAction(id, 'resume-ai');
3304
- }
3305
- postPause(id) {
3306
- if (this.useMock)
3307
- return this.mock.postPause(id);
3308
- return this.postCallAction(id, 'pause');
3309
- }
3310
- postResume(id) {
3311
- if (this.useMock)
3312
- return this.mock.postResume(id);
3313
- return this.postCallAction(id, 'resume');
3314
- }
3315
- /** Listen — same join payload as media/join { mode: listen }. */
3316
- postListen(id) {
3317
- if (this.useMock)
3318
- return this.mock.postMediaJoin(id, 'listen');
3319
- const enc = encodeURIComponent(id);
3320
- return this.http.post(`${this.arBase}/calls/${enc}/listen`, {}).pipe(map((body) => {
3321
- const data = mapStaffMediaJoinResult(body);
3322
- if (!data) {
3323
- throw new Error('listen response missing livekitUrl or clientToken');
3324
- }
3325
- const mode = 'listen';
3326
- return { data: { ...data, callId: data.callId || id, mode } };
3327
- }), catchError((err) => throwError(() => new Error(this.apiErrorMessage(err, 'Failed to listen to call')))));
3328
- }
3329
- postTransfer(id) {
3330
- if (this.useMock)
3331
- return this.mock.postTransfer(id);
3332
- return this.postCallAction(id, 'transfer');
3333
- }
3334
- postEnd(id) {
3335
- if (this.useMock)
3336
- return this.mock.postEnd(id);
3337
- const enc = encodeURIComponent(id);
3338
- return this.http
3339
- .post(`${this.arBase}/calls/${enc}/end`, {})
3340
- .pipe(map(() => ({ data: { success: true } })));
3341
- }
3342
- postMessage(id, text) {
3343
- if (this.useMock)
3344
- return this.mock.postMessage(id, text);
3345
- const enc = encodeURIComponent(id);
3346
- return this.http
3347
- .post(`${this.arBase}/calls/${enc}/messages`, { text })
3348
- .pipe(map(() => ({ data: { success: true } })));
3349
- }
3350
- postReview(id) {
3351
- if (this.useMock)
3352
- return this.mock.postReview(id);
3353
- const enc = encodeURIComponent(id);
3354
- return this.http
3355
- .post(`${this.arBase}/calls/${enc}/review`, {})
3356
- .pipe(map(() => ({ data: { review: 'reviewed' } })));
3357
- }
3358
- getTasks(filters) {
3359
- if (this.useMock)
3360
- return this.mock.getTasks(filters);
3361
- const page = filters?.page ?? 1;
3362
- const limit = filters?.limit ?? DEFAULT_PAGE_SIZE;
3363
- let params = new HttpParams().set('page', String(page)).set('limit', String(limit));
3364
- if (filters?.status) {
3365
- const apiStatus = filters.status === 'in_progress' ? 'in-progress' : filters.status;
3366
- params = params.set('status', apiStatus);
3367
- }
3368
- if (filters?.type)
3369
- params = params.set('type', filters.type);
3370
- if (filters?.source)
3371
- params = params.set('source', filters.source);
3372
- if (filters?.callId)
3373
- params = params.set('callId', filters.callId);
3374
- return this.http.get(`${this.arBase}/tasks`, { params }).pipe(map((body) => {
3375
- const pageResult = asPaginatedResult(body, page, limit);
3376
- return {
3377
- ...pageResult,
3378
- items: pageResult.items.map(mapTaskDto),
3379
- };
3380
- }));
3381
- }
3382
- getCallTasks(callId) {
3383
- if (this.useMock)
3384
- return this.mock.getCallTasks(callId);
3385
- const enc = encodeURIComponent(callId);
3386
- return this.http.get(`${this.arBase}/calls/${enc}/tasks`).pipe(map((body) => ({ data: asTaskList(body).map(mapTaskDto) })));
3387
- }
3388
- createTask(req) {
3389
- if (this.useMock)
3390
- return this.mock.createTask(req);
3391
- return this.http
3392
- .post(`${this.arBase}/tasks`, mapCreateTaskRequest(req))
3393
- .pipe(map((body) => ({ data: mapTaskDto(body) })));
3394
- }
3395
- patchTask(id, status) {
3396
- if (this.useMock)
3397
- return this.mock.patchTask(id, status);
3398
- const enc = encodeURIComponent(id);
3399
- return this.http
3400
- .patch(`${this.arBase}/tasks/${enc}`, { status: toApiTaskStatus(status) })
3401
- .pipe(map((body) => ({ data: mapTaskDto(body) })));
3402
- }
3403
- getAnalytics(range) {
3404
- if (this.useMock)
3405
- return this.mock.getAnalytics(range);
3406
- const params = new HttpParams().set('range', range);
3407
- return this.http.get(`${this.arBase}/analytics/summary`, { params }).pipe(map((body) => ({ data: mapAnalyticsDto(body, range) })));
3408
- }
3409
- getSettings() {
3410
- if (this.useMock)
3411
- return this.mock.getSettings();
3412
- return forkJoin({
3413
- settings: this.http.get(`${this.arBase}/settings`),
3414
- safety: this.http.get(`${this.arBase}/settings/safety-checks`),
3415
- }).pipe(map(({ settings, safety }) => ({
3416
- data: mapSettingsResponse(settings, safety),
3417
- })));
3418
- }
3419
- putSettings(next) {
3420
- if (this.useMock)
3421
- return this.mock.putSettings(next);
3422
- return this.http
3423
- .put(`${this.arBase}/settings`, { settings: mapSettingsToRequest(next) })
3424
- .pipe(switchMap(() => this.getSettings()), catchError((err) => throwError(() => new Error(this.apiErrorMessage(err, 'Failed to save agent settings')))));
3425
- }
3426
- /** Shipped default voice system prompt + max lengths. */
3427
- getVoicePromptDefault() {
3428
- if (this.useMock)
3429
- return this.mock.getVoicePromptDefault();
3430
- return this.http.get(`${this.arBase}/settings/voice-prompt-default`).pipe(map((body) => ({
3431
- defaultVoiceSystemPrompt: String(body?.defaultVoiceSystemPrompt ?? ''),
3432
- voiceSystemPromptMaxLength: Number(body?.voiceSystemPromptMaxLength) || 24000,
3433
- customVoiceInstructionsMaxLength: Number(body?.customVoiceInstructionsMaxLength) || 8000,
3434
- notes: body?.notes ? String(body.notes) : undefined,
3435
- })));
3436
- }
3437
- /** ElevenLabs spoken sample for Agent Settings voice picker. */
3438
- previewVoice(voiceId) {
3439
- if (this.useMock)
3440
- return this.mock.previewVoice(voiceId);
3441
- return this.http.post(`${this.arBase}/settings/preview-voice`, { voiceId }, {
3442
- responseType: 'blob',
3443
- });
3444
- }
3445
- /**
3446
- * Knowledge Base test: draft an answer from whatToSay / whatNotToSay and
3447
- * return spoken audio in the practice (or selected) voice.
3448
- */
3449
- testKnowledgeAnswer(params) {
3450
- if (this.useMock) {
3451
- return this.mock.testKnowledgeAnswer(params);
3452
- }
3453
- return this.http
3454
- .post(`${this.arBase}/settings/test-knowledge`, params)
3455
- .pipe(map((body) => {
3456
- const answer = String(body?.answer ?? '').trim();
3457
- const b64 = String(body?.audioBase64 ?? '').trim();
3458
- if (!answer || !b64) {
3459
- throw new Error('Test response missing answer or audio');
3460
- }
3461
- const contentType = String(body?.contentType ?? 'audio/mpeg');
3462
- const binary = atob(b64);
3463
- const bytes = new Uint8Array(binary.length);
3464
- for (let i = 0; i < binary.length; i++)
3465
- bytes[i] = binary.charCodeAt(i);
3466
- return {
3467
- answer,
3468
- voiceId: String(body?.voiceId ?? params.voiceId ?? ''),
3469
- audioBlob: new Blob([bytes], { type: contentType }),
3470
- };
3471
- }), catchError((err) => throwError(() => new Error(this.apiErrorMessage(err, 'Could not generate a test answer.')))));
3472
- }
3473
- getAudit(q, opts) {
3474
- if (this.useMock)
3475
- return this.mock.getAudit(q, undefined, opts);
3476
- const page = opts?.page ?? 1;
3477
- const limit = opts?.limit ?? DEFAULT_PAGE_SIZE;
3478
- let params = new HttpParams().set('page', String(page)).set('limit', String(limit));
3479
- if (q)
3480
- params = params.set('search', q);
3481
- return this.http.get(`${this.arBase}/audit`, { params }).pipe(map((body) => {
3482
- const pageResult = asPaginatedResult(body, page, limit);
3483
- return {
3484
- ...pageResult,
3485
- items: asAuditList(body).map((e, i) => mapAuditEventDto(e, i)),
3486
- };
3487
- }));
3488
- }
3489
- /**
3490
- * Agent activity feed: patients created, appointments booked, tasks from AI.
3491
- * GET /api/ai-receptionist/activities
3492
- */
3493
- getActivities(filters) {
3494
- if (this.useMock)
3495
- return this.mock.getActivities(filters);
3496
- const page = filters?.page ?? 1;
3497
- const limit = filters?.limit ?? DEFAULT_PAGE_SIZE;
3498
- let params = new HttpParams().set('page', String(page)).set('limit', String(limit));
3499
- if (filters?.search?.trim())
3500
- params = params.set('search', filters.search.trim());
3501
- if (filters?.types?.trim())
3502
- params = params.set('types', filters.types.trim());
3503
- if (filters?.from?.trim())
3504
- params = params.set('from', filters.from.trim());
3505
- if (filters?.to?.trim())
3506
- params = params.set('to', filters.to.trim());
3507
- if (filters?.callId?.trim())
3508
- params = params.set('callId', filters.callId.trim());
3509
- return this.http.get(`${this.arBase}/activities`, { params }).pipe(map((body) => {
3510
- const pageResult = asPaginatedResult(body, page, limit);
3511
- return {
3512
- ...pageResult,
3513
- items: pageResult.items.map((row, i) => mapAgentActivity(row, i)),
3514
- };
3515
- }));
3516
- }
3517
- getSetup() {
3518
- if (this.useMock)
3519
- return this.mock.getSetup();
3520
- return this.http.get(`${this.arBase}/setup`).pipe(map((body) => ({ data: mapSetupDto(body) })));
3521
- }
3522
- activateSetup() {
3523
- if (this.useMock)
3524
- return this.mock.activateSetup();
3525
- return this.http
3526
- .post(`${this.arBase}/setup/activate`, {})
3527
- .pipe(map(() => ({ data: { success: true } })));
3528
- }
3529
- getLocations() {
3530
- if (this.useMock)
3531
- return this.mock.getLocations();
3532
- return this.http.get(this.paths.apiPath('/locations')).pipe(map((body) => ({ data: extractApiRows(body).map(mapLocationDto) })));
3533
- }
3534
- getProviders() {
3535
- if (this.useMock)
3536
- return this.mock.getProviders();
3537
- return this.http.get(this.paths.v1Path('/providers')).pipe(map((body) => ({ data: extractApiRows(body).map(mapProviderDto) })));
3538
- }
3539
- getStreamLines() {
3540
- return this.mock.getStreamLines();
3541
- }
3542
- appendStreamLine(callId, line) {
3543
- this.mock.appendStreamLine(callId, line);
3544
- }
3545
- usesMockStreaming() {
3546
- return this.useMock;
3547
- }
3548
- getCallApiLogs(callId) {
3549
- if (this.useMock)
3550
- return this.mock.getCallApiLogs(callId);
3551
- const enc = encodeURIComponent(callId);
3552
- return this.http.get(`${this.arBase}/calls/${enc}/api-logs`).pipe(map((body) => ({
3553
- items: [...(body.items ?? [])].sort((a, b) => Date.parse(a.startedAt) - Date.parse(b.startedAt)),
3554
- total: body.total ?? body.items?.length ?? 0,
3555
- })));
3556
- }
3557
- getApiLogs(filters = {}) {
3558
- if (this.useMock)
3559
- return this.mock.getApiLogs(filters);
3560
- let params = new HttpParams();
3561
- if (filters.provider)
3562
- params = params.set('provider', filters.provider);
3563
- if (filters.success !== undefined)
3564
- params = params.set('success', String(filters.success));
3565
- if (filters.statusCode != null)
3566
- params = params.set('statusCode', String(filters.statusCode));
3567
- if (filters.operation)
3568
- params = params.set('operation', filters.operation);
3569
- if (filters.callId)
3570
- params = params.set('callId', filters.callId);
3571
- if (filters.from)
3572
- params = params.set('from', filters.from);
3573
- if (filters.to)
3574
- params = params.set('to', filters.to);
3575
- if (filters.search)
3576
- params = params.set('search', filters.search);
3577
- if (filters.page != null)
3578
- params = params.set('page', String(filters.page));
3579
- if (filters.limit != null)
3580
- params = params.set('limit', String(filters.limit));
3581
- if (filters.practiceId)
3582
- params = params.set('practiceId', filters.practiceId);
3583
- return this.http.get(`${this.arBase}/api-logs`, { params });
3584
- }
3585
- getApiLogDetail(logId) {
3586
- if (this.useMock)
3587
- return this.mock.getApiLogDetail(logId);
3588
- const enc = encodeURIComponent(logId);
3589
- return this.http
3590
- .get(`${this.arBase}/api-logs/${enc}`)
3591
- .pipe(map((data) => ({ data })));
3592
- }
3593
- getApiLogStats(practiceId) {
3594
- if (this.useMock)
3595
- return this.mock.getApiLogStats();
3596
- let params = new HttpParams();
3597
- if (practiceId)
3598
- params = params.set('practiceId', practiceId);
3599
- return this.http
3600
- .get(`${this.arBase}/api-logs/stats`, { params })
3601
- .pipe(map((data) => ({ data })));
3602
- }
3603
- getOutboundPurposes(includeInactive = false) {
3604
- if (this.useMock)
3605
- return this.mock.getOutboundPurposes(includeInactive);
3606
- const params = includeInactive ? new HttpParams().set('includeInactive', 'true') : undefined;
3607
- return this.http.get(`${this.arBase}/calls/outbound/purposes`, {
3608
- params,
3609
- });
3610
- }
3611
- createOutboundPurpose(body) {
3612
- if (this.useMock)
3613
- return this.mock.createOutboundPurpose(body);
3614
- return this.http.post(`${this.arBase}/calls/outbound/purposes`, body);
3615
- }
3616
- updateOutboundPurpose(purposeId, body) {
3617
- if (this.useMock)
3618
- return this.mock.updateOutboundPurpose(purposeId, body);
3619
- const enc = encodeURIComponent(purposeId);
3620
- return this.http.patch(`${this.arBase}/calls/outbound/purposes/${enc}`, body);
3621
- }
3622
- deleteOutboundPurpose(purposeId) {
3623
- if (this.useMock)
3624
- return this.mock.deleteOutboundPurpose(purposeId);
3625
- const enc = encodeURIComponent(purposeId);
3626
- return this.http.delete(`${this.arBase}/calls/outbound/purposes/${enc}`);
3627
- }
3628
- placeOutboundCall(body) {
3629
- if (this.useMock)
3630
- return this.mock.placeOutboundCall(body);
3631
- return this.http.post(`${this.arBase}/calls/outbound`, body).pipe(catchError((err) => {
3632
- const detail = typeof err.error === 'object' && err.error && 'message' in err.error
3633
- ? String(err.error.message)
3634
- : err.message;
3635
- return throwError(() => ({ message: detail || 'Failed to place outbound call.' }));
3636
- }));
3637
- }
3638
- /**
3639
- * Patient typeahead for outbound dialer.
3640
- * Tries `/api/v1/patients/search`, then `/api/v1/patients?q=`, then by-phone for digit queries.
3641
- */
3642
- searchPatientsForOutbound(q, limit = 10) {
3643
- const query = q.trim();
3644
- if (!query)
3645
- return of([]);
3646
- if (this.useMock)
3647
- return this.mock.searchPatientsForOutbound(query, limit);
3648
- const params = new HttpParams().set('q', query).set('limit', String(limit));
3649
- const searchUrl = this.paths.v1Path('/patients/search');
3650
- const listUrl = this.paths.v1Path('/patients');
3651
- return this.http.get(searchUrl, { params }).pipe(map((body) => this.mapPatientHits(body)), catchError(() => this.http.get(listUrl, { params }).pipe(map((body) => this.mapPatientHits(body)), catchError(() => of([])))), switchMap((hits) => {
3652
- if (hits.length > 0)
3653
- return of(hits);
3654
- const phone = toE164Phone(query);
3655
- if (!phone && !/\d{7,}/.test(query))
3656
- return of([]);
3657
- return this.http
3658
- .get(this.paths.v1Path('/patients/by-phone'), {
3659
- params: new HttpParams().set('phone', phone || query.replace(/\D/g, '')),
3660
- })
3661
- .pipe(map((body) => this.mapPatientHits(body)), catchError(() => of([])));
3662
- }));
3663
- }
3664
- /** Upcoming appointments for a patient (dialer picker). */
3665
- listPatientAppointmentsForOutbound(patientId, limit = 20) {
3666
- const id = patientId.trim();
3667
- if (!id)
3668
- return of([]);
3669
- if (this.useMock)
3670
- return this.mock.listPatientAppointmentsForOutbound(id, limit);
3671
- const from = new Date();
3672
- from.setHours(0, 0, 0, 0);
3673
- const params = new HttpParams()
3674
- .set('patientId', id)
3675
- .set('patient_id', id)
3676
- .set('from', from.toISOString())
3677
- .set('limit', String(limit));
3678
- const v1Url = this.paths.v1Path('/appointments');
3679
- const apiUrl = this.paths.apiPath('/appointments');
3680
- // Prefer /api/appointments (current host contract), then /api/v1/appointments.
3681
- return this.http.get(apiUrl, { params }).pipe(map((body) => this.mapAppointmentHits(body)), catchError(() => this.http.get(v1Url, { params }).pipe(map((body) => this.mapAppointmentHits(body)), catchError(() => of([])))));
3682
- }
3683
- mapPatientHits(body) {
3684
- return extractApiRows(body)
3685
- .map(mapOutboundPatientHit)
3686
- .filter((p) => !!p);
3687
- }
3688
- mapAppointmentHits(body) {
3689
- return extractApiRows(body)
3690
- .map(mapOutboundAppointmentHit)
3691
- .filter((a) => !!a)
3692
- .sort((a, b) => String(a.startTime ?? '').localeCompare(String(b.startTime ?? '')));
3693
- }
3694
- postCallAction(id, action) {
3695
- const enc = encodeURIComponent(id);
3696
- return this.http
3697
- .post(`${this.arBase}/calls/${enc}/${action}`, {})
3698
- .pipe(map(() => ({ data: { success: true } })));
3699
- }
3700
- apiErrorMessage(err, fallback) {
3701
- const body = err.error;
3702
- if (typeof body === 'object' && body && 'message' in body) {
3703
- return String(body.message);
3704
- }
3705
- if (typeof body === 'string' && body.trim())
3706
- return body;
3707
- return fallback;
3708
- }
3709
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AiReceptionistApiService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3710
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AiReceptionistApiService, providedIn: 'root' }); }
3711
- }
3712
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: AiReceptionistApiService, decorators: [{
3713
- type: Injectable,
3714
- args: [{ providedIn: 'root' }]
3715
- }] });
3716
-
3717
- /**
3718
- * Single shared Socket.io connection to the `/dashboard` namespace.
3719
- * Used by live calls list + per-call transcript stream.
3720
- */
3721
- class DashboardSocketService {
3722
- constructor() {
3723
- this.config = inject(VOICE_RECEPTIONIST_CONFIG);
3724
- this.paths = createVoiceReceptionistPaths(this.config);
3725
- this.connected = signal(false);
3726
- this.socket = null;
3727
- this.refCount = 0;
3728
- this.handlers = new Map();
3729
- this.connectCallbacks = new Set();
3730
- }
3731
- acquire() {
3732
- this.refCount++;
3733
- if (this.refCount === 1) {
3734
- this.connect();
3735
- }
3736
- }
3737
- release() {
3738
- this.refCount = Math.max(0, this.refCount - 1);
3739
- if (this.refCount === 0) {
3740
- this.disconnect();
3741
- }
3742
- }
3743
- onConnect(callback) {
3744
- this.connectCallbacks.add(callback);
3745
- if (this.connected()) {
3746
- callback();
3747
- }
3748
- }
3749
- offConnect(callback) {
3750
- this.connectCallbacks.delete(callback);
3751
- }
3752
- on(event, handler) {
3753
- const wrapped = (payload) => handler(payload);
3754
- if (!this.handlers.has(event)) {
3755
- this.handlers.set(event, new Map());
3756
- }
3757
- this.handlers.get(event).set(handler, wrapped);
3758
- if (this.socket) {
3759
- this.socket.on(event, wrapped);
3760
- }
3761
- }
3762
- off(event, handler) {
3763
- const eventHandlers = this.handlers.get(event);
3764
- const wrapped = eventHandlers?.get(handler);
3765
- if (wrapped) {
3766
- this.socket?.off(event, wrapped);
3767
- eventHandlers.delete(handler);
3768
- }
3769
- }
3770
- emit(event, payload) {
3771
- this.socket?.emit(event, payload);
3772
- }
3773
- connect() {
3774
- if (this.config.useMockApi) {
3775
- this.connected.set(true);
3776
- this.fireConnectCallbacks();
3777
- return;
3778
- }
3779
- this.socket = io(`${this.paths.apiRoot()}/dashboard`, {
3780
- path: '/socket.io',
3781
- transports: ['websocket'],
3782
- autoConnect: false,
3783
- });
3784
- this.socket.on('connect', () => {
3785
- this.connected.set(true);
3786
- this.fireConnectCallbacks();
3787
- });
3788
- this.socket.on('disconnect', () => {
3789
- this.connected.set(false);
3790
- });
3791
- this.socket.io.on('reconnect', () => {
3792
- this.fireConnectCallbacks();
3793
- });
3794
- for (const [event, handlerMap] of this.handlers) {
3795
- for (const wrapped of handlerMap.values()) {
3796
- this.socket.on(event, wrapped);
3797
- }
3798
- }
3799
- this.socket.connect();
3800
- }
3801
- disconnect() {
3802
- if (!this.socket) {
3803
- this.connected.set(false);
3804
- return;
3805
- }
3806
- for (const [event, handlerMap] of this.handlers) {
3807
- for (const wrapped of handlerMap.values()) {
3808
- this.socket.off(event, wrapped);
3809
- }
3810
- }
3811
- this.socket.removeAllListeners();
3812
- this.socket.disconnect();
3813
- this.socket = null;
3814
- this.connected.set(false);
3815
- }
3816
- fireConnectCallbacks() {
3817
- for (const cb of this.connectCallbacks) {
3818
- cb();
3819
- }
3820
- }
3821
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: DashboardSocketService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3822
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: DashboardSocketService, providedIn: 'root' }); }
3823
- }
3824
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: DashboardSocketService, decorators: [{
3825
- type: Injectable,
3826
- args: [{ providedIn: 'root' }]
3827
- }] });
3828
-
3829
- const DEFAULT_POLL_MS = 12_000;
3830
- /**
3831
- * Shared live calls list — REST + `live_calls_updated` socket + fallback poll.
3832
- */
3833
- class LiveCallsListService {
3834
- constructor() {
3835
- this.api = inject(AiReceptionistApiService);
3836
- this.socket = inject(DashboardSocketService);
3837
- this.config = inject(VOICE_RECEPTIONIST_CONFIG);
3838
- this.calls = signal([]);
3839
- this.loading = signal(false);
3840
- this.error = signal(null);
3841
- this.lastUpdated = signal(null);
3842
- this.subscriberCount = 0;
3843
- this.refreshId = 0;
3844
- this.mockPollTimer = null;
3845
- this.onLiveCallsUpdated = () => this.refresh(false);
3846
- this.onSocketConnect = () => this.refresh(false);
3847
- }
3848
- start() {
3849
- this.subscriberCount++;
3850
- if (this.subscriberCount > 1) {
3851
- this.refresh(false);
3852
- return;
3853
- }
3854
- this.socket.acquire();
3855
- this.socket.on('live_calls_updated', this.onLiveCallsUpdated);
3856
- this.socket.onConnect(this.onSocketConnect);
3857
- this.bindVisibility();
3858
- this.refresh(true);
3859
- this.startFallbackPoll();
3860
- }
3861
- stop() {
3862
- this.subscriberCount = Math.max(0, this.subscriberCount - 1);
3863
- if (this.subscriberCount > 0) {
3864
- return;
3865
- }
3866
- this.refreshId++;
3867
- this.refreshSub?.unsubscribe();
3868
- this.refreshSub = undefined;
3869
- this.stopFallbackPoll();
3870
- this.unbindVisibility();
3871
- this.socket.off('live_calls_updated', this.onLiveCallsUpdated);
3872
- this.socket.offConnect(this.onSocketConnect);
3873
- this.socket.release();
3874
- }
3875
- refresh(showLoading = true) {
3876
- const requestId = ++this.refreshId;
3877
- if (showLoading && this.calls().length === 0) {
3878
- this.loading.set(true);
3879
- }
3880
- this.refreshSub?.unsubscribe();
3881
- this.refreshSub = this.api.getLiveCalls().subscribe({
3882
- next: ({ data }) => {
3883
- if (requestId !== this.refreshId)
3884
- return;
3885
- this.calls.set(data);
3886
- this.lastUpdated.set(Date.now());
3887
- this.loading.set(false);
3888
- this.error.set(null);
3889
- },
3890
- error: (err) => {
3891
- if (requestId !== this.refreshId)
3892
- return;
3893
- this.loading.set(false);
3894
- const message = err instanceof Error ? err.message : 'Could not load live calls.';
3895
- this.error.set(message);
3896
- },
3897
- });
3898
- }
3899
- startFallbackPoll() {
3900
- const pollMs = this.config.liveCallsPollIntervalMs ?? DEFAULT_POLL_MS;
3901
- if (this.config.useMockApi) {
3902
- this.mockPollTimer = setInterval(() => {
3903
- if (!document.hidden) {
3904
- this.refresh(false);
3905
- }
3906
- }, pollMs);
3907
- return;
3908
- }
3909
- this.pollSub = interval(pollMs)
3910
- .pipe(filter$1(() => !document.hidden))
3911
- .subscribe(() => this.refresh(false));
3912
- }
3913
- stopFallbackPoll() {
3914
- this.pollSub?.unsubscribe();
3915
- this.pollSub = undefined;
3916
- if (this.mockPollTimer) {
3917
- clearInterval(this.mockPollTimer);
3918
- this.mockPollTimer = null;
3919
- }
3920
- }
3921
- bindVisibility() {
3922
- this.visibilityHandler = () => {
3923
- if (!document.hidden) {
3924
- this.refresh(false);
3925
- }
3926
- };
3927
- document.addEventListener('visibilitychange', this.visibilityHandler);
3928
- }
3929
- unbindVisibility() {
3930
- if (this.visibilityHandler) {
3931
- document.removeEventListener('visibilitychange', this.visibilityHandler);
3932
- this.visibilityHandler = undefined;
3933
- }
3934
- }
3935
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LiveCallsListService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
3936
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LiveCallsListService, providedIn: 'root' }); }
3937
- }
3938
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LiveCallsListService, decorators: [{
3939
- type: Injectable,
3940
- args: [{ providedIn: 'root' }]
3941
- }] });
3942
-
3943
- /**
3944
- * Owns live-calls polling/socket for both the list and the per-call monitor
3945
- * so navigating list → detail → back does not tear down the shared list.
3946
- */
3947
- class LiveCallsShellComponent {
3948
- constructor() {
3949
- this.liveCallsList = inject(LiveCallsListService);
3950
- }
3951
- ngOnInit() {
3952
- this.liveCallsList.start();
3953
- }
3954
- ngOnDestroy() {
3955
- this.liveCallsList.stop();
3956
- }
3957
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LiveCallsShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
3958
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: LiveCallsShellComponent, isStandalone: true, selector: "eds-live-calls-shell", ngImport: i0, template: '<router-outlet />', isInline: true, styles: [":host{display:contents}\n"], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3959
- }
3960
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: LiveCallsShellComponent, decorators: [{
3961
- type: Component,
3962
- args: [{ selector: 'eds-live-calls-shell', imports: [RouterOutlet], template: '<router-outlet />', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:contents}\n"] }]
3963
- }] });
3964
-
3965
- /** Feature child routes (under the embed shell). */
3966
- const VOICE_RECEPTIONIST_FEATURE_ROUTES = [
3967
- { path: '', pathMatch: 'full', redirectTo: 'dashboard' },
3968
- {
3969
- path: 'dashboard',
3970
- loadComponent: () => import('./edvak99-voice-receptionist-widget-dashboard-page.component-B_EYljRs.mjs').then((m) => m.DashboardPageComponent),
3971
- },
3972
- {
3973
- path: 'live',
3974
- component: LiveCallsShellComponent,
3975
- children: [
3976
- {
3977
- path: '',
3978
- pathMatch: 'full',
3979
- loadComponent: () => import('./edvak99-voice-receptionist-widget-live-calls-page.component-1woGuh0J.mjs').then((m) => m.LiveCallsPageComponent),
3980
- },
3981
- {
3982
- path: ':id',
3983
- loadComponent: () => import('./edvak99-voice-receptionist-widget-live-monitor-page.component-ihwm1LNn.mjs').then((m) => m.LiveMonitorPageComponent),
3984
- },
3985
- ],
3986
- },
3987
- {
3988
- path: 'history',
3989
- loadComponent: () => import('./edvak99-voice-receptionist-widget-call-history-page.component-DoYJFpSa.mjs').then((m) => m.CallHistoryPageComponent),
3990
- },
3991
- {
3992
- path: 'history/:id',
3993
- loadComponent: () => import('./edvak99-voice-receptionist-widget-call-history-detail-page.component-ENq2c-sm.mjs').then((m) => m.CallHistoryDetailPageComponent),
3994
- },
3995
- {
3996
- path: 'activities',
3997
- loadComponent: () => import('./edvak99-voice-receptionist-widget-activities-page.component-Br2Vi1Im.mjs').then((m) => m.ActivitiesPageComponent),
3998
- },
3999
- {
4000
- path: 'tasks',
4001
- loadComponent: () => import('./edvak99-voice-receptionist-widget-tasks-page.component-Cf76XyCz.mjs').then((m) => m.TasksPageComponent),
4002
- },
4003
- {
4004
- path: 'analytics',
4005
- loadComponent: () => import('./edvak99-voice-receptionist-widget-analytics-page.component-CglgGV6H.mjs').then((m) => m.AnalyticsPageComponent),
4006
- },
4007
- {
4008
- path: 'api-logs',
4009
- canActivate: [apiLogsStandaloneGuard],
4010
- loadComponent: () => import('./edvak99-voice-receptionist-widget-api-logs-page.component-DPJiuNjk.mjs').then((m) => m.ApiLogsPageComponent),
4011
- },
4012
- {
4013
- path: 'settings',
4014
- loadComponent: () => import('./edvak99-voice-receptionist-widget-settings-page.component-C6F-Hgmk.mjs').then((m) => m.SettingsPageComponent),
4015
- },
4016
- {
4017
- path: 'settings/outbound-purposes',
4018
- loadComponent: () => import('./edvak99-voice-receptionist-widget-outbound-purposes-page.component-B2koBFU3.mjs').then((m) => m.OutboundPurposesPageComponent),
4019
- },
4020
- {
4021
- path: 'knowledge',
4022
- loadComponent: () => import('./edvak99-voice-receptionist-widget-settings-page.component-C6F-Hgmk.mjs').then((m) => m.SettingsPageComponent),
4023
- data: { settingsTab: 'knowledge' },
4024
- },
4025
- {
4026
- path: 'wizard',
4027
- loadComponent: () => import('./edvak99-voice-receptionist-widget-wizard-page.component-BQTlz2F5.mjs').then((m) => m.WizardPageComponent),
4028
- },
4029
- ];
4030
- /**
4031
- * Lazy-loadable routes for EHR (and standalone hosts).
4032
- * Mount under a host path, e.g. `{ path: 'ai-receptionist', children: VOICE_RECEPTIONIST_ROUTES }`.
4033
- */
4034
- const VOICE_RECEPTIONIST_ROUTES = [
4035
- {
4036
- path: '',
4037
- component: EdsAppShellComponent,
4038
- children: VOICE_RECEPTIONIST_FEATURE_ROUTES,
4039
- },
4040
- ];
4041
-
4042
- class EdsBadgeComponent {
4043
- constructor() {
4044
- this.tone = input('gray');
4045
- }
4046
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4047
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.17", type: EdsBadgeComponent, isStandalone: true, selector: "eds-badge", inputs: { tone: { classPropertyName: "tone", publicName: "tone", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `<span class="eds-badge inline-flex items-center gap-2 py-1 px-2" [attr.data-tone]="tone()"><ng-content /></span>`, isInline: true, styles: [".eds-badge{border-radius:var(--eds-radius-sm);font-family:var(--eds-font-inter);font-size:12px;font-weight:500;line-height:1.4;white-space:nowrap}.eds-badge[data-tone=brand]{background:#3681f41f;color:var(--eds-brand-600)}.eds-badge[data-tone=pos]{background:#0abf521f;color:var(--eds-green-500)}.eds-badge[data-tone=notice]{background:#ffb90026;color:#b45309}.eds-badge[data-tone=neg]{background:#f037401f;color:var(--eds-red-500)}.eds-badge[data-tone=violet]{background:#8e51ff1f;color:var(--eds-violet-500)}.eds-badge[data-tone=gray]{background:var(--eds-gray-100);color:var(--eds-gray-600)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4048
- }
4049
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsBadgeComponent, decorators: [{
4050
- type: Component,
4051
- args: [{ selector: 'eds-badge', standalone: true, template: `<span class="eds-badge inline-flex items-center gap-2 py-1 px-2" [attr.data-tone]="tone()"><ng-content /></span>`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".eds-badge{border-radius:var(--eds-radius-sm);font-family:var(--eds-font-inter);font-size:12px;font-weight:500;line-height:1.4;white-space:nowrap}.eds-badge[data-tone=brand]{background:#3681f41f;color:var(--eds-brand-600)}.eds-badge[data-tone=pos]{background:#0abf521f;color:var(--eds-green-500)}.eds-badge[data-tone=notice]{background:#ffb90026;color:#b45309}.eds-badge[data-tone=neg]{background:#f037401f;color:var(--eds-red-500)}.eds-badge[data-tone=violet]{background:#8e51ff1f;color:var(--eds-violet-500)}.eds-badge[data-tone=gray]{background:var(--eds-gray-100);color:var(--eds-gray-600)}\n"] }]
4052
- }] });
4053
-
4054
- class EdsButtonComponent {
4055
- constructor() {
4056
- this.variant = input('secondary');
4057
- this.type = input('button');
4058
- this.disabled = input(false);
4059
- }
4060
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
4061
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.17", type: EdsButtonComponent, isStandalone: true, selector: "eds-button", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
4062
- <button [type]="type()" [disabled]="disabled()" [attr.data-variant]="variant()" class="eds-btn inline-flex items-center justify-center gap-2 py-2 px-4">
4063
- <ng-content />
4064
- </button>
4065
- `, isInline: true, styles: [".eds-btn{border-radius:var(--eds-radius-md);border:1px solid transparent;font-family:var(--eds-font-inter);font-size:13px;font-weight:500;cursor:pointer;transition:background .12s ease,border-color .12s ease,color .12s ease}.eds-btn:disabled{opacity:.5;cursor:not-allowed}.eds-btn[data-variant=primary]{background:var(--eds-brand-600);color:#fff}.eds-btn[data-variant=primary]:hover:not(:disabled){background:var(--eds-brand-500)}.eds-btn[data-variant=secondary]{background:var(--eds-surface-l0);color:var(--eds-text-primary);border-color:var(--eds-border-default)}.eds-btn[data-variant=secondary]:hover:not(:disabled){background:var(--eds-surface-l1)}.eds-btn[data-variant=ghost]{background:transparent;color:var(--eds-text-secondary)}.eds-btn[data-variant=ghost]:hover:not(:disabled){background:var(--eds-gray-100);color:var(--eds-text-primary)}.eds-btn[data-variant=danger]{background:#f037401a;color:var(--eds-red-500);border-color:#f0374040}.eds-btn[data-variant=positive]{background:#0abf521f;color:var(--eds-green-500);border-color:#0abf5240}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4066
- }
4067
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: EdsButtonComponent, decorators: [{
4068
- type: Component,
4069
- args: [{ selector: 'eds-button', standalone: true, template: `
4070
- <button [type]="type()" [disabled]="disabled()" [attr.data-variant]="variant()" class="eds-btn inline-flex items-center justify-center gap-2 py-2 px-4">
4071
- <ng-content />
4072
- </button>
4073
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".eds-btn{border-radius:var(--eds-radius-md);border:1px solid transparent;font-family:var(--eds-font-inter);font-size:13px;font-weight:500;cursor:pointer;transition:background .12s ease,border-color .12s ease,color .12s ease}.eds-btn:disabled{opacity:.5;cursor:not-allowed}.eds-btn[data-variant=primary]{background:var(--eds-brand-600);color:#fff}.eds-btn[data-variant=primary]:hover:not(:disabled){background:var(--eds-brand-500)}.eds-btn[data-variant=secondary]{background:var(--eds-surface-l0);color:var(--eds-text-primary);border-color:var(--eds-border-default)}.eds-btn[data-variant=secondary]:hover:not(:disabled){background:var(--eds-surface-l1)}.eds-btn[data-variant=ghost]{background:transparent;color:var(--eds-text-secondary)}.eds-btn[data-variant=ghost]:hover:not(:disabled){background:var(--eds-gray-100);color:var(--eds-text-primary)}.eds-btn[data-variant=danger]{background:#f037401a;color:var(--eds-red-500);border-color:#f0374040}.eds-btn[data-variant=positive]{background:#0abf521f;color:var(--eds-green-500);border-color:#0abf5240}\n"] }]
4074
- }] });
4075
-
4076
- /*
4077
- * Public API Surface of @edvak99/voice-receptionist-widget
4078
- *
4079
- * Only export host-facing symbols here. Internal pages/services stay private
4080
- * and are reached via VOICE_RECEPTIONIST_ROUTES / FEATURE_ROUTES.
4081
- */
4082
- // Config & DI
4083
-
4084
- /**
4085
- * Generated bundle index. Do not edit.
4086
- */
4087
-
4088
- export { AiReceptionistApiService as A, DashboardSocketService as D, EdsButtonComponent as E, LiveCallsListService as L, ToastService as T, VOICE_RECEPTIONIST_CONFIG as V, WELCOME_MESSAGE_MAX as W, historyResolutionLabel as a, historyResolution as b, callerMetaLine as c, EdsIconComponent as d, ageFromDob as e, resolveToolKey as f, resolveToolDisplayName as g, historyResultChips as h, isUnknownCaller as i, DEFAULT_PAGE_SIZE as j, totalPages as k, EdsBadgeComponent as l, activityTypeLabel as m, initialsFromName as n, VOICE_RECEPTIONIST_SESSION as o, buildAutoWelcomeTemplate as p, resolveWelcomePreview as q, resultChipIcon as r, DEFAULT_PLACEHOLDERS as s, toolEventTrackKey as t, EdsAppShellComponent as u, EdsRouteProgressComponent as v, ToastContainerComponent as w, VOICE_RECEPTIONIST_FEATURE_ROUTES as x, VOICE_RECEPTIONIST_ROUTES as y, provideVoiceReceptionist as z };
4089
- //# sourceMappingURL=edvak99-voice-receptionist-widget-edvak99-voice-receptionist-widget-pS2jeB4x.mjs.map