@alfadocs/ui-kit-debug 1.132.0 → 1.134.0

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 (463) hide show
  1. package/dist/_chunks/{agenda-card-B8hV3dZV.js → agenda-card-B9wgX_Ed.js} +2 -2
  2. package/dist/_chunks/{agenda-card-B8hV3dZV.js.map → agenda-card-B9wgX_Ed.js.map} +1 -1
  3. package/dist/_chunks/{agenda-tray-Bu46s3dI.js → agenda-tray-CGcS_qoM.js} +2 -2
  4. package/dist/_chunks/{agenda-tray-Bu46s3dI.js.map → agenda-tray-CGcS_qoM.js.map} +1 -1
  5. package/dist/_chunks/appointment-card-DG3m9yN-.js +504 -0
  6. package/dist/_chunks/appointment-card-DG3m9yN-.js.map +1 -0
  7. package/dist/_chunks/{appointment-peek-DZa6xyUb.js → appointment-peek-BK0tDs4C.js} +2 -2
  8. package/dist/_chunks/{appointment-peek-DZa6xyUb.js.map → appointment-peek-BK0tDs4C.js.map} +1 -1
  9. package/dist/_chunks/{appointment-timeline-DQePqpyH.js → appointment-timeline-BiI2riRZ.js} +2 -2
  10. package/dist/_chunks/{appointment-timeline-DQePqpyH.js.map → appointment-timeline-BiI2riRZ.js.map} +1 -1
  11. package/dist/_chunks/appointment-tray-ClJCtYQj.js +200 -0
  12. package/dist/_chunks/appointment-tray-ClJCtYQj.js.map +1 -0
  13. package/dist/_chunks/{appointment-workflow-status-DMjuIK90.js → appointment-workflow-status-S-lx81Yz.js} +2 -2
  14. package/dist/_chunks/{appointment-workflow-status-DMjuIK90.js.map → appointment-workflow-status-S-lx81Yz.js.map} +1 -1
  15. package/dist/_chunks/ban-CiSCCcOE.js +15 -0
  16. package/dist/_chunks/ban-CiSCCcOE.js.map +1 -0
  17. package/dist/_chunks/{calendar-BIoOeBTT.js → calendar-CyLtLBNP.js} +2 -2
  18. package/dist/_chunks/{calendar-BIoOeBTT.js.map → calendar-CyLtLBNP.js.map} +1 -1
  19. package/dist/_chunks/calendar-appointment-editor-dialog-BSkIYGlW.js +13773 -0
  20. package/dist/_chunks/calendar-appointment-editor-dialog-BSkIYGlW.js.map +1 -0
  21. package/dist/_chunks/{calendar-event-card-BNEzkjm-.js → calendar-event-card-BJifpYZQ.js} +7 -6
  22. package/dist/_chunks/{calendar-event-card-BNEzkjm-.js.map → calendar-event-card-BJifpYZQ.js.map} +1 -1
  23. package/dist/_chunks/{care-plan-card-DKScH9Ss.js → care-plan-card-CjHq6PLo.js} +6 -6
  24. package/dist/_chunks/{care-plan-card-DKScH9Ss.js.map → care-plan-card-CjHq6PLo.js.map} +1 -1
  25. package/dist/_chunks/{care-plan-entry-card-AG1y3nyW.js → care-plan-entry-card-DY1toF6E.js} +2 -2
  26. package/dist/_chunks/{care-plan-entry-card-AG1y3nyW.js.map → care-plan-entry-card-DY1toF6E.js.map} +1 -1
  27. package/dist/_chunks/{care-plan-header-Dx5OMkc9.js → care-plan-header-CeFXUDnL.js} +6 -6
  28. package/dist/_chunks/{care-plan-header-Dx5OMkc9.js.map → care-plan-header-CeFXUDnL.js.map} +1 -1
  29. package/dist/_chunks/check-in-documents-CEVcgcYZ.js +136 -0
  30. package/dist/_chunks/check-in-documents-CEVcgcYZ.js.map +1 -0
  31. package/dist/_chunks/{clinical-note-card-pPaeWWnu.js → clinical-note-card-D--IwbZa.js} +2 -2
  32. package/dist/_chunks/{clinical-note-card-pPaeWWnu.js.map → clinical-note-card-D--IwbZa.js.map} +1 -1
  33. package/dist/_chunks/document-preview-DLVIrOYV.js +385 -0
  34. package/dist/_chunks/document-preview-DLVIrOYV.js.map +1 -0
  35. package/dist/_chunks/{entity-card-fpm-KUKc.js → entity-card-p-LANpYt.js} +18 -17
  36. package/dist/_chunks/{entity-card-fpm-KUKc.js.map → entity-card-p-LANpYt.js.map} +1 -1
  37. package/dist/_chunks/{error-page-B0fGNTRB.js → error-page-WLhmWUTq.js} +100 -115
  38. package/dist/_chunks/error-page-WLhmWUTq.js.map +1 -0
  39. package/dist/_chunks/finished-terminal-unDnXT4j.js +191 -0
  40. package/dist/_chunks/finished-terminal-unDnXT4j.js.map +1 -0
  41. package/dist/_chunks/house-DGCypGTo.js +21 -0
  42. package/dist/_chunks/house-DGCypGTo.js.map +1 -0
  43. package/dist/_chunks/is-safe-url-CEy9CEml.js +8 -0
  44. package/dist/_chunks/is-safe-url-CEy9CEml.js.map +1 -0
  45. package/dist/_chunks/keypad-DBH_keVs.js +152 -0
  46. package/dist/_chunks/keypad-DBH_keVs.js.map +1 -0
  47. package/dist/_chunks/keypad-button-mOaPQRrH.js +114 -0
  48. package/dist/_chunks/keypad-button-mOaPQRrH.js.map +1 -0
  49. package/dist/_chunks/{message-card-BG3_3nN1.js → message-card-Bw_q1qKx.js} +2 -2
  50. package/dist/_chunks/{message-card-BG3_3nN1.js.map → message-card-Bw_q1qKx.js.map} +1 -1
  51. package/dist/_chunks/{message-tray-BjZv0Fsk.js → message-tray-pLGgLmoG.js} +2 -2
  52. package/dist/_chunks/{message-tray-BjZv0Fsk.js.map → message-tray-pLGgLmoG.js.map} +1 -1
  53. package/dist/_chunks/{note-attachment-MNTIqdSz.js → note-attachment-JTIy9iXN.js} +2 -2
  54. package/dist/_chunks/{note-attachment-MNTIqdSz.js.map → note-attachment-JTIy9iXN.js.map} +1 -1
  55. package/dist/_chunks/{note-timeline-BQeW0VZY.js → note-timeline-BbjHMhkL.js} +2 -2
  56. package/dist/_chunks/{note-timeline-BQeW0VZY.js.map → note-timeline-BbjHMhkL.js.map} +1 -1
  57. package/dist/_chunks/{notes-panel-Cm-_pCRJ.js → notes-panel-BAyPOr8N.js} +2 -2
  58. package/dist/_chunks/{notes-panel-Cm-_pCRJ.js.map → notes-panel-BAyPOr8N.js.map} +1 -1
  59. package/dist/_chunks/{operator-hero-CnfWckNQ.js → operator-hero-D4wfVu2l.js} +2 -2
  60. package/dist/_chunks/{operator-hero-CnfWckNQ.js.map → operator-hero-D4wfVu2l.js.map} +1 -1
  61. package/dist/_chunks/otp-input-BNOTlxq3.js +342 -0
  62. package/dist/_chunks/otp-input-BNOTlxq3.js.map +1 -0
  63. package/dist/_chunks/patient-account-settings-BkAtIxJW.js +546 -0
  64. package/dist/_chunks/patient-account-settings-BkAtIxJW.js.map +1 -0
  65. package/dist/_chunks/patient-card-DTh3QTyS.js +125 -0
  66. package/dist/_chunks/patient-card-DTh3QTyS.js.map +1 -0
  67. package/dist/_chunks/patient-check-in-resume-xhqjC6gf.js +742 -0
  68. package/dist/_chunks/patient-check-in-resume-xhqjC6gf.js.map +1 -0
  69. package/dist/_chunks/patient-sign-in-pin-CDBqV254.js +432 -0
  70. package/dist/_chunks/patient-sign-in-pin-CDBqV254.js.map +1 -0
  71. package/dist/_chunks/patient-sign-in-steps-C2JSqlok.js +199 -0
  72. package/dist/_chunks/patient-sign-in-steps-C2JSqlok.js.map +1 -0
  73. package/dist/_chunks/{patient-summary-card-BUcZ-gaL.js → patient-summary-card-Bl2NknPe.js} +2 -2
  74. package/dist/_chunks/{patient-summary-card-BUcZ-gaL.js.map → patient-summary-card-Bl2NknPe.js.map} +1 -1
  75. package/dist/_chunks/{payment-request-card-Dv4WbRBe.js → payment-request-card-CNW00DCx.js} +6 -6
  76. package/dist/_chunks/{payment-request-card-Dv4WbRBe.js.map → payment-request-card-CNW00DCx.js.map} +1 -1
  77. package/dist/_chunks/{pdf-viewer-BnBKdx0y.js → pdf-viewer-TRC5jEm5.js} +472 -425
  78. package/dist/_chunks/pdf-viewer-TRC5jEm5.js.map +1 -0
  79. package/dist/_chunks/pin-entry-BugWQMOS.js +219 -0
  80. package/dist/_chunks/pin-entry-BugWQMOS.js.map +1 -0
  81. package/dist/_chunks/pin-indicator-Cb-n40UI.js +124 -0
  82. package/dist/_chunks/pin-indicator-Cb-n40UI.js.map +1 -0
  83. package/dist/_chunks/portal-details-CTEsm705.js +478 -0
  84. package/dist/_chunks/portal-details-CTEsm705.js.map +1 -0
  85. package/dist/_chunks/portal-documents-D8skew0h.js +902 -0
  86. package/dist/_chunks/portal-documents-D8skew0h.js.map +1 -0
  87. package/dist/_chunks/portal-parts-BdR29P7z.js +285 -0
  88. package/dist/_chunks/portal-parts-BdR29P7z.js.map +1 -0
  89. package/dist/_chunks/{privacy-mask-DJ1gee4c.js → privacy-mask-C19dJFMk.js} +5 -5
  90. package/dist/_chunks/{privacy-mask-DJ1gee4c.js.map → privacy-mask-C19dJFMk.js.map} +1 -1
  91. package/dist/_chunks/{product-hub-panel-a8wdVOUt.js → product-hub-panel-K4QbULG7.js} +2 -2
  92. package/dist/_chunks/{product-hub-panel-a8wdVOUt.js.map → product-hub-panel-K4QbULG7.js.map} +1 -1
  93. package/dist/_chunks/{registration-form-CwbhtKcy.js → registration-form-DS3RuKHu.js} +2 -2
  94. package/dist/_chunks/{registration-form-CwbhtKcy.js.map → registration-form-DS3RuKHu.js.map} +1 -1
  95. package/dist/_chunks/{reserved.agent-W8mR179D.js → reserved.agent-DOzOBUW7.js} +2 -2
  96. package/dist/_chunks/{reserved.agent-W8mR179D.js.map → reserved.agent-DOzOBUW7.js.map} +1 -1
  97. package/dist/_chunks/session-countdown-DOx1IBUB.js +232 -0
  98. package/dist/_chunks/session-countdown-DOx1IBUB.js.map +1 -0
  99. package/dist/_chunks/{sign-document-CQZVzfpk.js → sign-document-DDZbmYHu.js} +2 -2
  100. package/dist/_chunks/{sign-document-CQZVzfpk.js.map → sign-document-DDZbmYHu.js.map} +1 -1
  101. package/dist/_chunks/{signature-field-DjabvRZm.js → signature-field-BjlY_yXH.js} +39 -34
  102. package/dist/_chunks/signature-field-BjlY_yXH.js.map +1 -0
  103. package/dist/_chunks/{signature-request-4pGq3YBe.js → signature-request-CHsM_iWi.js} +2 -2
  104. package/dist/_chunks/{signature-request-4pGq3YBe.js.map → signature-request-CHsM_iWi.js.map} +1 -1
  105. package/dist/_chunks/{signature-status-chip-pIoQjvH8.js → signature-status-chip-DS9hHwIt.js} +66 -69
  106. package/dist/_chunks/signature-status-chip-DS9hHwIt.js.map +1 -0
  107. package/dist/_chunks/signing-end-screen-an9P8DOT.js +1041 -0
  108. package/dist/_chunks/signing-end-screen-an9P8DOT.js.map +1 -0
  109. package/dist/_chunks/sms-code-entry-Dgp4GwlM.js +316 -0
  110. package/dist/_chunks/sms-code-entry-Dgp4GwlM.js.map +1 -0
  111. package/dist/_chunks/step-up-dialog-C2JqJmCA.js +132 -0
  112. package/dist/_chunks/step-up-dialog-C2JqJmCA.js.map +1 -0
  113. package/dist/_chunks/{task-editor-BL2hHxNz.js → task-editor-g1AGfxhr.js} +38 -38
  114. package/dist/_chunks/{task-editor-BL2hHxNz.js.map → task-editor-g1AGfxhr.js.map} +1 -1
  115. package/dist/_chunks/{use-appointment-details-read-_b7FRB1x.js → use-appointment-details-read-Dzc6fEzG.js} +6 -6
  116. package/dist/_chunks/{use-appointment-details-read-_b7FRB1x.js.map → use-appointment-details-read-Dzc6fEzG.js.map} +1 -1
  117. package/dist/_chunks/use-zoom-drilldown-Cr1baU5X.js +221 -0
  118. package/dist/_chunks/use-zoom-drilldown-Cr1baU5X.js.map +1 -0
  119. package/dist/_chunks/{user-x-DYszNtIg.js → user-x-BJZg4kaP.js} +8 -19
  120. package/dist/_chunks/user-x-BJZg4kaP.js.map +1 -0
  121. package/dist/_chunks/{verify-identity-types-CxtrBXsZ.js → verify-identity-types-C6Bam8v6.js} +2 -2
  122. package/dist/_chunks/{verify-identity-types-CxtrBXsZ.js.map → verify-identity-types-C6Bam8v6.js.map} +1 -1
  123. package/dist/agent-catalog.json +723 -364
  124. package/dist/agent-i18n/en.json +75 -18
  125. package/dist/browser-support.js +1 -1
  126. package/dist/components/_shared/is-safe-url.d.ts +3 -1
  127. package/dist/components/_shared/is-safe-url.d.ts.map +1 -1
  128. package/dist/components/agenda-card/index.js +2 -2
  129. package/dist/components/agenda-tray/index.js +1 -1
  130. package/dist/components/appointment-card/appointment-card.d.ts +45 -0
  131. package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
  132. package/dist/components/appointment-card/appointment-tray.agent.d.ts.map +1 -1
  133. package/dist/components/appointment-card/appointment-tray.d.ts +11 -0
  134. package/dist/components/appointment-card/appointment-tray.d.ts.map +1 -1
  135. package/dist/components/appointment-card/index.js +3 -3
  136. package/dist/components/appointment-details-panel/index.js +1 -1
  137. package/dist/components/appointment-peek/index.js +1 -1
  138. package/dist/components/appointment-timeline/index.js +1 -1
  139. package/dist/components/booking/index.js +1 -1
  140. package/dist/components/calendar/index.js +1 -1
  141. package/dist/components/calendar-event-card/index.js +1 -1
  142. package/dist/components/care-plan-card/index.js +1 -1
  143. package/dist/components/care-plan-entry-card/index.js +1 -1
  144. package/dist/components/care-plan-header/index.js +1 -1
  145. package/dist/components/clinical-note-card/index.js +1 -1
  146. package/dist/components/document-preview/document-preview.agent.d.ts.map +1 -1
  147. package/dist/components/document-preview/document-preview.d.ts +61 -7
  148. package/dist/components/document-preview/document-preview.d.ts.map +1 -1
  149. package/dist/components/document-preview/index.js +1 -1
  150. package/dist/components/finished-terminal/finished-terminal.d.ts +63 -6
  151. package/dist/components/finished-terminal/finished-terminal.d.ts.map +1 -1
  152. package/dist/components/finished-terminal/index.d.ts +1 -1
  153. package/dist/components/finished-terminal/index.d.ts.map +1 -1
  154. package/dist/components/finished-terminal/index.js +1 -1
  155. package/dist/components/index.d.ts +12 -0
  156. package/dist/components/index.d.ts.map +1 -1
  157. package/dist/components/keypad/index.d.ts +3 -0
  158. package/dist/components/keypad/index.d.ts.map +1 -0
  159. package/dist/components/keypad/index.js +6 -0
  160. package/dist/components/keypad/index.js.map +1 -0
  161. package/dist/components/keypad/keypad.d.ts +54 -0
  162. package/dist/components/keypad/keypad.d.ts.map +1 -0
  163. package/dist/components/keypad-button/index.d.ts +3 -0
  164. package/dist/components/keypad-button/index.d.ts.map +1 -0
  165. package/dist/components/keypad-button/index.js +6 -0
  166. package/dist/components/keypad-button/index.js.map +1 -0
  167. package/dist/components/keypad-button/keypad-button.d.ts +33 -0
  168. package/dist/components/keypad-button/keypad-button.d.ts.map +1 -0
  169. package/dist/components/message-card/index.js +2 -2
  170. package/dist/components/message-tray/index.js +1 -1
  171. package/dist/components/note-timeline/index.js +1 -1
  172. package/dist/components/notes-panel/index.js +1 -1
  173. package/dist/components/operator-hero/index.js +1 -1
  174. package/dist/components/otp-input/index.js +1 -1
  175. package/dist/components/otp-input/otp-input.d.ts +11 -0
  176. package/dist/components/otp-input/otp-input.d.ts.map +1 -1
  177. package/dist/components/patient-summary-card/index.js +1 -1
  178. package/dist/components/payment-card/index.js +1 -1
  179. package/dist/components/pdf-viewer/index.js +1 -1
  180. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
  181. package/dist/components/pdf-viewer/pdf-viewer.d.ts +7 -0
  182. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  183. package/dist/components/pin-entry/index.d.ts +3 -0
  184. package/dist/components/pin-entry/index.d.ts.map +1 -0
  185. package/dist/components/pin-entry/index.js +5 -0
  186. package/dist/components/pin-entry/index.js.map +1 -0
  187. package/dist/components/pin-entry/pin-entry.agent.d.ts +4 -0
  188. package/dist/components/pin-entry/pin-entry.agent.d.ts.map +1 -0
  189. package/dist/components/pin-entry/pin-entry.d.ts +64 -0
  190. package/dist/components/pin-entry/pin-entry.d.ts.map +1 -0
  191. package/dist/components/pin-indicator/index.d.ts +3 -0
  192. package/dist/components/pin-indicator/index.d.ts.map +1 -0
  193. package/dist/components/pin-indicator/index.js +9 -0
  194. package/dist/components/pin-indicator/index.js.map +1 -0
  195. package/dist/components/pin-indicator/pin-indicator.d.ts +34 -0
  196. package/dist/components/pin-indicator/pin-indicator.d.ts.map +1 -0
  197. package/dist/components/product-hub-tray/index.js +2 -2
  198. package/dist/components/session-countdown/index.js +1 -1
  199. package/dist/components/session-countdown/session-countdown.d.ts +19 -0
  200. package/dist/components/session-countdown/session-countdown.d.ts.map +1 -1
  201. package/dist/components/sign-document/index.js +1 -1
  202. package/dist/components/signature-field/index.js +1 -1
  203. package/dist/components/signature-field/signature-field.d.ts +17 -6
  204. package/dist/components/signature-field/signature-field.d.ts.map +1 -1
  205. package/dist/components/signature-status-chip/index.js +1 -1
  206. package/dist/components/signature-status-chip/signature-status-chip.d.ts +3 -2
  207. package/dist/components/signature-status-chip/signature-status-chip.d.ts.map +1 -1
  208. package/dist/components/sms-code-entry/index.d.ts +3 -0
  209. package/dist/components/sms-code-entry/index.d.ts.map +1 -0
  210. package/dist/components/sms-code-entry/index.js +5 -0
  211. package/dist/components/sms-code-entry/index.js.map +1 -0
  212. package/dist/components/sms-code-entry/sms-code-entry.agent.d.ts +4 -0
  213. package/dist/components/sms-code-entry/sms-code-entry.agent.d.ts.map +1 -0
  214. package/dist/components/sms-code-entry/sms-code-entry.d.ts +156 -0
  215. package/dist/components/sms-code-entry/sms-code-entry.d.ts.map +1 -0
  216. package/dist/components/step-up-dialog/index.d.ts +3 -0
  217. package/dist/components/step-up-dialog/index.d.ts.map +1 -0
  218. package/dist/components/step-up-dialog/index.js +5 -0
  219. package/dist/components/step-up-dialog/index.js.map +1 -0
  220. package/dist/components/step-up-dialog/step-up-dialog.d.ts +108 -0
  221. package/dist/components/step-up-dialog/step-up-dialog.d.ts.map +1 -0
  222. package/dist/components/task-editor/index.js +1 -1
  223. package/dist/components/workflow-status/index.js +1 -1
  224. package/dist/core.css +1 -1
  225. package/dist/hooks/index.js +1 -1
  226. package/dist/hooks/use-signing-session.d.ts +7 -2
  227. package/dist/hooks/use-signing-session.d.ts.map +1 -1
  228. package/dist/host-compat.css +10 -1
  229. package/dist/i18n/locales/ar.d.ts +514 -1
  230. package/dist/i18n/locales/ar.d.ts.map +1 -1
  231. package/dist/i18n/locales/ar.js +512 -4
  232. package/dist/i18n/locales/ar.js.map +1 -1
  233. package/dist/i18n/locales/de.d.ts +514 -1
  234. package/dist/i18n/locales/de.d.ts.map +1 -1
  235. package/dist/i18n/locales/de.js +520 -5
  236. package/dist/i18n/locales/de.js.map +1 -1
  237. package/dist/i18n/locales/el.d.ts +514 -1
  238. package/dist/i18n/locales/el.d.ts.map +1 -1
  239. package/dist/i18n/locales/el.js +515 -5
  240. package/dist/i18n/locales/el.js.map +1 -1
  241. package/dist/i18n/locales/en.d.ts +516 -1
  242. package/dist/i18n/locales/en.d.ts.map +1 -1
  243. package/dist/i18n/locales/en.js +522 -4
  244. package/dist/i18n/locales/en.js.map +1 -1
  245. package/dist/i18n/locales/es.d.ts +514 -1
  246. package/dist/i18n/locales/es.d.ts.map +1 -1
  247. package/dist/i18n/locales/es.js +513 -5
  248. package/dist/i18n/locales/es.js.map +1 -1
  249. package/dist/i18n/locales/fr.d.ts +514 -1
  250. package/dist/i18n/locales/fr.d.ts.map +1 -1
  251. package/dist/i18n/locales/fr.js +513 -5
  252. package/dist/i18n/locales/fr.js.map +1 -1
  253. package/dist/i18n/locales/hi.d.ts +514 -1
  254. package/dist/i18n/locales/hi.d.ts.map +1 -1
  255. package/dist/i18n/locales/hi.js +513 -5
  256. package/dist/i18n/locales/hi.js.map +1 -1
  257. package/dist/i18n/locales/it.d.ts +514 -1
  258. package/dist/i18n/locales/it.d.ts.map +1 -1
  259. package/dist/i18n/locales/it.js +520 -5
  260. package/dist/i18n/locales/it.js.map +1 -1
  261. package/dist/i18n/locales/ja.d.ts +514 -1
  262. package/dist/i18n/locales/ja.d.ts.map +1 -1
  263. package/dist/i18n/locales/ja.js +513 -5
  264. package/dist/i18n/locales/ja.js.map +1 -1
  265. package/dist/i18n/locales/nl.d.ts +514 -1
  266. package/dist/i18n/locales/nl.d.ts.map +1 -1
  267. package/dist/i18n/locales/nl.js +520 -5
  268. package/dist/i18n/locales/nl.js.map +1 -1
  269. package/dist/i18n/locales/pl.d.ts +514 -1
  270. package/dist/i18n/locales/pl.d.ts.map +1 -1
  271. package/dist/i18n/locales/pl.js +520 -5
  272. package/dist/i18n/locales/pl.js.map +1 -1
  273. package/dist/i18n/locales/pt.d.ts +514 -1
  274. package/dist/i18n/locales/pt.d.ts.map +1 -1
  275. package/dist/i18n/locales/pt.js +520 -5
  276. package/dist/i18n/locales/pt.js.map +1 -1
  277. package/dist/i18n/locales/ro.d.ts +514 -1
  278. package/dist/i18n/locales/ro.d.ts.map +1 -1
  279. package/dist/i18n/locales/ro.js +520 -5
  280. package/dist/i18n/locales/ro.js.map +1 -1
  281. package/dist/i18n/locales/ru.d.ts +514 -1
  282. package/dist/i18n/locales/ru.d.ts.map +1 -1
  283. package/dist/i18n/locales/ru.js +512 -4
  284. package/dist/i18n/locales/ru.js.map +1 -1
  285. package/dist/i18n/locales/sq.d.ts +514 -1
  286. package/dist/i18n/locales/sq.d.ts.map +1 -1
  287. package/dist/i18n/locales/sq.js +513 -5
  288. package/dist/i18n/locales/sq.js.map +1 -1
  289. package/dist/i18n/locales/sv.d.ts +514 -1
  290. package/dist/i18n/locales/sv.d.ts.map +1 -1
  291. package/dist/i18n/locales/sv.js +513 -5
  292. package/dist/i18n/locales/sv.js.map +1 -1
  293. package/dist/i18n/locales/tr.d.ts +514 -1
  294. package/dist/i18n/locales/tr.d.ts.map +1 -1
  295. package/dist/i18n/locales/tr.js +515 -5
  296. package/dist/i18n/locales/tr.js.map +1 -1
  297. package/dist/i18n/locales/zh.d.ts +514 -1
  298. package/dist/i18n/locales/zh.d.ts.map +1 -1
  299. package/dist/i18n/locales/zh.js +513 -5
  300. package/dist/i18n/locales/zh.js.map +1 -1
  301. package/dist/index.js +1271 -1204
  302. package/dist/index.js.map +1 -1
  303. package/dist/locales/ar.json +516 -3
  304. package/dist/locales/de.json +517 -4
  305. package/dist/locales/el.json +517 -4
  306. package/dist/locales/en.json +516 -3
  307. package/dist/locales/es.json +517 -4
  308. package/dist/locales/fr.json +517 -4
  309. package/dist/locales/hi.json +517 -4
  310. package/dist/locales/it.json +517 -4
  311. package/dist/locales/ja.json +517 -4
  312. package/dist/locales/nl.json +517 -4
  313. package/dist/locales/pl.json +517 -4
  314. package/dist/locales/pt.json +517 -4
  315. package/dist/locales/ro.json +517 -4
  316. package/dist/locales/ru.json +516 -3
  317. package/dist/locales/sq.json +517 -4
  318. package/dist/locales/sv.json +517 -4
  319. package/dist/locales/tr.json +517 -4
  320. package/dist/locales/zh.json +517 -4
  321. package/dist/patterns/calendar/calendar-workspace.d.ts.map +1 -1
  322. package/dist/patterns/calendar/calendar-workspace.model.d.ts.map +1 -1
  323. package/dist/patterns/calendar/calendar.journey.d.ts +4 -0
  324. package/dist/patterns/calendar/calendar.journey.d.ts.map +1 -1
  325. package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
  326. package/dist/patterns/calendar/calendar.surface.d.ts +15 -1
  327. package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
  328. package/dist/patterns/calendar/calendar.types.d.ts +4 -0
  329. package/dist/patterns/calendar/calendar.types.d.ts.map +1 -1
  330. package/dist/patterns/calendar/index.js +1 -1
  331. package/dist/patterns/check-in-documents/check-in-documents.d.ts +61 -0
  332. package/dist/patterns/check-in-documents/check-in-documents.d.ts.map +1 -0
  333. package/dist/patterns/check-in-documents/check-in-signable-document.d.ts +32 -0
  334. package/dist/patterns/check-in-documents/check-in-signable-document.d.ts.map +1 -0
  335. package/dist/patterns/check-in-documents/index.d.ts +4 -0
  336. package/dist/patterns/check-in-documents/index.d.ts.map +1 -0
  337. package/dist/patterns/check-in-documents/index.js +5 -0
  338. package/dist/patterns/check-in-documents/index.js.map +1 -0
  339. package/dist/patterns/error-page/index.js +1 -1
  340. package/dist/patterns/patient-account-settings/index.d.ts +4 -0
  341. package/dist/patterns/patient-account-settings/index.d.ts.map +1 -0
  342. package/dist/patterns/patient-account-settings/index.js +5 -0
  343. package/dist/patterns/patient-account-settings/index.js.map +1 -0
  344. package/dist/patterns/patient-account-settings/patient-account-settings-panels.d.ts +36 -0
  345. package/dist/patterns/patient-account-settings/patient-account-settings-panels.d.ts.map +1 -0
  346. package/dist/patterns/patient-account-settings/patient-account-settings.d.ts +94 -0
  347. package/dist/patterns/patient-account-settings/patient-account-settings.d.ts.map +1 -0
  348. package/dist/patterns/patient-account-settings/patient-account-settings.types.d.ts +91 -0
  349. package/dist/patterns/patient-account-settings/patient-account-settings.types.d.ts.map +1 -0
  350. package/dist/patterns/patient-check-in/index.d.ts +20 -0
  351. package/dist/patterns/patient-check-in/index.d.ts.map +1 -0
  352. package/dist/patterns/patient-check-in/index.js +13 -0
  353. package/dist/patterns/patient-check-in/index.js.map +1 -0
  354. package/dist/patterns/patient-check-in/patient-check-in-changed.d.ts +33 -0
  355. package/dist/patterns/patient-check-in/patient-check-in-changed.d.ts.map +1 -0
  356. package/dist/patterns/patient-check-in/patient-check-in-connection-notice.d.ts +29 -0
  357. package/dist/patterns/patient-check-in/patient-check-in-connection-notice.d.ts.map +1 -0
  358. package/dist/patterns/patient-check-in/patient-check-in-done.d.ts +25 -0
  359. package/dist/patterns/patient-check-in/patient-check-in-done.d.ts.map +1 -0
  360. package/dist/patterns/patient-check-in/patient-check-in-entry.d.ts +29 -0
  361. package/dist/patterns/patient-check-in/patient-check-in-entry.d.ts.map +1 -0
  362. package/dist/patterns/patient-check-in/patient-check-in-hub-empty.d.ts +23 -0
  363. package/dist/patterns/patient-check-in/patient-check-in-hub-empty.d.ts.map +1 -0
  364. package/dist/patterns/patient-check-in/patient-check-in-hub.d.ts +61 -0
  365. package/dist/patterns/patient-check-in/patient-check-in-hub.d.ts.map +1 -0
  366. package/dist/patterns/patient-check-in/patient-check-in-personal-data.d.ts +73 -0
  367. package/dist/patterns/patient-check-in/patient-check-in-personal-data.d.ts.map +1 -0
  368. package/dist/patterns/patient-check-in/patient-check-in-privacy.d.ts +9 -0
  369. package/dist/patterns/patient-check-in/patient-check-in-privacy.d.ts.map +1 -0
  370. package/dist/patterns/patient-check-in/patient-check-in-resume.d.ts +29 -0
  371. package/dist/patterns/patient-check-in/patient-check-in-resume.d.ts.map +1 -0
  372. package/dist/patterns/patient-check-in/patient-check-in-shell.d.ts +60 -0
  373. package/dist/patterns/patient-check-in/patient-check-in-shell.d.ts.map +1 -0
  374. package/dist/patterns/patient-check-in/patient-check-in-types.d.ts +92 -0
  375. package/dist/patterns/patient-check-in/patient-check-in-types.d.ts.map +1 -0
  376. package/dist/patterns/patient-portal/index.d.ts +12 -0
  377. package/dist/patterns/patient-portal/index.d.ts.map +1 -0
  378. package/dist/patterns/patient-portal/index.js +13 -0
  379. package/dist/patterns/patient-portal/index.js.map +1 -0
  380. package/dist/patterns/patient-portal/portal-appointments.d.ts +70 -0
  381. package/dist/patterns/patient-portal/portal-appointments.d.ts.map +1 -0
  382. package/dist/patterns/patient-portal/portal-details.d.ts +148 -0
  383. package/dist/patterns/patient-portal/portal-details.d.ts.map +1 -0
  384. package/dist/patterns/patient-portal/portal-documents.d.ts +74 -0
  385. package/dist/patterns/patient-portal/portal-documents.d.ts.map +1 -0
  386. package/dist/patterns/patient-portal/portal-format.d.ts +14 -0
  387. package/dist/patterns/patient-portal/portal-format.d.ts.map +1 -0
  388. package/dist/patterns/patient-portal/portal-home.d.ts +71 -0
  389. package/dist/patterns/patient-portal/portal-home.d.ts.map +1 -0
  390. package/dist/patterns/patient-portal/portal-parts.d.ts +107 -0
  391. package/dist/patterns/patient-portal/portal-parts.d.ts.map +1 -0
  392. package/dist/patterns/patient-portal/portal-shell.d.ts +84 -0
  393. package/dist/patterns/patient-portal/portal-shell.d.ts.map +1 -0
  394. package/dist/patterns/patient-portal/portal-types.d.ts +157 -0
  395. package/dist/patterns/patient-portal/portal-types.d.ts.map +1 -0
  396. package/dist/patterns/patient-sign-in/index.d.ts +7 -0
  397. package/dist/patterns/patient-sign-in/index.d.ts.map +1 -0
  398. package/dist/patterns/patient-sign-in/index.js +15 -0
  399. package/dist/patterns/patient-sign-in/index.js.map +1 -0
  400. package/dist/patterns/patient-sign-in/patient-card.d.ts +74 -0
  401. package/dist/patterns/patient-sign-in/patient-card.d.ts.map +1 -0
  402. package/dist/patterns/patient-sign-in/patient-sign-in-email.d.ts +109 -0
  403. package/dist/patterns/patient-sign-in/patient-sign-in-email.d.ts.map +1 -0
  404. package/dist/patterns/patient-sign-in/patient-sign-in-pin.d.ts +157 -0
  405. package/dist/patterns/patient-sign-in/patient-sign-in-pin.d.ts.map +1 -0
  406. package/dist/patterns/patient-sign-in/patient-sign-in-steps.d.ts +143 -0
  407. package/dist/patterns/patient-sign-in/patient-sign-in-steps.d.ts.map +1 -0
  408. package/dist/patterns/registration-form/index.js +1 -1
  409. package/dist/patterns/signature-request/index.js +1 -1
  410. package/dist/patterns/signing/index.d.ts +25 -0
  411. package/dist/patterns/signing/index.d.ts.map +1 -0
  412. package/dist/patterns/signing/index.js +16 -0
  413. package/dist/patterns/signing/index.js.map +1 -0
  414. package/dist/patterns/signing/multi-field-signer.d.ts +117 -0
  415. package/dist/patterns/signing/multi-field-signer.d.ts.map +1 -0
  416. package/dist/patterns/signing/signing-awaiting-screen.d.ts +25 -0
  417. package/dist/patterns/signing/signing-awaiting-screen.d.ts.map +1 -0
  418. package/dist/patterns/signing/signing-chrome.d.ts +30 -0
  419. package/dist/patterns/signing/signing-chrome.d.ts.map +1 -0
  420. package/dist/patterns/signing/signing-document-screen.d.ts +87 -0
  421. package/dist/patterns/signing/signing-document-screen.d.ts.map +1 -0
  422. package/dist/patterns/signing/signing-end-screen.d.ts +27 -0
  423. package/dist/patterns/signing/signing-end-screen.d.ts.map +1 -0
  424. package/dist/patterns/signing/signing-finished-screen.d.ts +34 -0
  425. package/dist/patterns/signing/signing-finished-screen.d.ts.map +1 -0
  426. package/dist/patterns/signing/signing-footer.d.ts +56 -0
  427. package/dist/patterns/signing/signing-footer.d.ts.map +1 -0
  428. package/dist/patterns/signing/signing-handoff-screen.d.ts +37 -0
  429. package/dist/patterns/signing/signing-handoff-screen.d.ts.map +1 -0
  430. package/dist/patterns/signing/signing-message-dialog.d.ts +29 -0
  431. package/dist/patterns/signing/signing-message-dialog.d.ts.map +1 -0
  432. package/dist/patterns/signing/signing-progress-chip.d.ts +27 -0
  433. package/dist/patterns/signing/signing-progress-chip.d.ts.map +1 -0
  434. package/dist/patterns/signing/signing-roster.d.ts +44 -0
  435. package/dist/patterns/signing/signing-roster.d.ts.map +1 -0
  436. package/dist/patterns/signing/signing-staff-id-confirmation.d.ts +49 -0
  437. package/dist/patterns/signing/signing-staff-id-confirmation.d.ts.map +1 -0
  438. package/dist/patterns/verify-identity/index.js +1 -1
  439. package/dist/tokens.css +1 -1
  440. package/package.json +49 -1
  441. package/dist/_chunks/appointment-card-OAOur8lH.js +0 -434
  442. package/dist/_chunks/appointment-card-OAOur8lH.js.map +0 -1
  443. package/dist/_chunks/appointment-tray-DSFqO5Rm.js +0 -193
  444. package/dist/_chunks/appointment-tray-DSFqO5Rm.js.map +0 -1
  445. package/dist/_chunks/calendar-appointment-editor-dialog-WW6V1SGh.js +0 -13663
  446. package/dist/_chunks/calendar-appointment-editor-dialog-WW6V1SGh.js.map +0 -1
  447. package/dist/_chunks/document-preview-_kQ9QvZV.js +0 -291
  448. package/dist/_chunks/document-preview-_kQ9QvZV.js.map +0 -1
  449. package/dist/_chunks/error-page-B0fGNTRB.js.map +0 -1
  450. package/dist/_chunks/finished-terminal-FR8uc_Ws.js +0 -122
  451. package/dist/_chunks/finished-terminal-FR8uc_Ws.js.map +0 -1
  452. package/dist/_chunks/is-safe-url-DkETxeHz.js +0 -7
  453. package/dist/_chunks/is-safe-url-DkETxeHz.js.map +0 -1
  454. package/dist/_chunks/otp-input-gV1446Dw.js +0 -301
  455. package/dist/_chunks/otp-input-gV1446Dw.js.map +0 -1
  456. package/dist/_chunks/pdf-viewer-BnBKdx0y.js.map +0 -1
  457. package/dist/_chunks/session-countdown-C4tzbJVc.js +0 -223
  458. package/dist/_chunks/session-countdown-C4tzbJVc.js.map +0 -1
  459. package/dist/_chunks/signature-field-DjabvRZm.js.map +0 -1
  460. package/dist/_chunks/signature-status-chip-pIoQjvH8.js.map +0 -1
  461. package/dist/_chunks/use-zoom-drilldown-qCX34w9I.js +0 -210
  462. package/dist/_chunks/use-zoom-drilldown-qCX34w9I.js.map +0 -1
  463. package/dist/_chunks/user-x-DYszNtIg.js.map +0 -1
@@ -0,0 +1,546 @@
1
+ import { jsx as n, jsxs as C, Fragment as it } from "react/jsx-runtime";
2
+ import { useState as M, useRef as I, useEffect as V, useId as $ } from "react";
3
+ import { useTranslation as T } from "react-i18next";
4
+ import { A as z } from "./alert-C4WKViaS.js";
5
+ import { B as D } from "./button-DohK_Ak_.js";
6
+ import { r as at } from "./pin-indicator-Cb-n40UI.js";
7
+ import { P as st } from "./privacy-mask-C19dJFMk.js";
8
+ import { u as ct } from "./use-controllable-state-BiY4xTzM.js";
9
+ import { P as lt, a as ot, b as W, e as dt, c as rt, d as ut } from "./portal-parts-BdR29P7z.js";
10
+ import { E as pt } from "./email-input-DxwbREpx.js";
11
+ import { F as Z } from "./form-field-CyHfOVKF.js";
12
+ import { P as mt } from "./phone-input-BL8Sj6OG.js";
13
+ import { P as tt } from "./pin-entry-BugWQMOS.js";
14
+ import { a as X } from "./format-number-DdzqwMs1.js";
15
+ import { u as _ } from "./patient-card-DTh3QTyS.js";
16
+ import { p as ft } from "./privacy-mask-text-B8YfzB7L.js";
17
+ function q(t) {
18
+ return t ? `${t.rowId}|${t.code}|${t.text ?? ""}` : null;
19
+ }
20
+ function nt(...t) {
21
+ return t.filter(Boolean).join(" ") || void 0;
22
+ }
23
+ function G(t) {
24
+ var d;
25
+ const { t: s } = T("ui");
26
+ if (t) {
27
+ if ((d = t.text) != null && d.trim()) return t.text;
28
+ switch (t.code) {
29
+ case "invalid-value":
30
+ return s("patientAccountSettings.error.invalidValue");
31
+ case "wrong-current-pin":
32
+ return s("patientAccountSettings.error.wrongCurrentPin");
33
+ case "pin-refused":
34
+ return s("patientAccountSettings.error.pinRefused");
35
+ case "pin-mismatch":
36
+ return s("patientAccountSettings.error.pinMismatch");
37
+ }
38
+ }
39
+ }
40
+ function J({
41
+ rowId: t,
42
+ kind: s,
43
+ title: d,
44
+ headingLevel: r,
45
+ step: m,
46
+ stepId: l,
47
+ description: k,
48
+ descriptionId: b,
49
+ alert: c,
50
+ alertId: o,
51
+ saving: i,
52
+ canSubmit: p,
53
+ submitLabel: a,
54
+ submitAction: h,
55
+ onSubmit: S,
56
+ onCancel: A,
57
+ children: f
58
+ }) {
59
+ const { t: g } = T("ui"), P = `h${r}`, e = I(null), u = i && h === "save-change";
60
+ return /* @__PURE__ */ C(
61
+ "form",
62
+ {
63
+ noValidate: !0,
64
+ "data-component": "patient-account-settings-panel",
65
+ "data-row-id": t,
66
+ "data-kind": s,
67
+ className: "ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-md)]",
68
+ onSubmit: (x) => {
69
+ var y;
70
+ if (x.preventDefault(), !p) return;
71
+ const N = document.activeElement;
72
+ N instanceof HTMLElement && N !== e.current && ((y = e.current) == null || y.focus()), S();
73
+ },
74
+ children: [
75
+ /* @__PURE__ */ C("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
76
+ m ? /* @__PURE__ */ n(
77
+ "p",
78
+ {
79
+ id: l,
80
+ className: "type-meta ds:m-0 ds:text-[color:var(--muted-foreground)]",
81
+ children: m
82
+ }
83
+ ) : null,
84
+ /* @__PURE__ */ n(P, { className: "type-title-card ds:m-0 ds:text-foreground", children: d }),
85
+ k ? /* @__PURE__ */ n(
86
+ "p",
87
+ {
88
+ id: b,
89
+ className: "type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]",
90
+ children: k
91
+ }
92
+ ) : null
93
+ ] }),
94
+ c ? /* @__PURE__ */ n(z, { variant: "error", id: o, children: /* @__PURE__ */ n(z.Description, { children: c }) }) : null,
95
+ f,
96
+ /* @__PURE__ */ C("div", { className: "ds:flex ds:flex-wrap ds:gap-[var(--spacing-sm)]", children: [
97
+ /* @__PURE__ */ n(
98
+ D,
99
+ {
100
+ ref: e,
101
+ type: "submit",
102
+ intent: "primary",
103
+ className: "ds:min-h-[var(--min-target-size)]",
104
+ "data-action": h,
105
+ disabled: !p,
106
+ loading: u,
107
+ children: u ? g("patientAccountSettings.panel.saving") : a
108
+ }
109
+ ),
110
+ /* @__PURE__ */ n(
111
+ D,
112
+ {
113
+ type: "button",
114
+ intent: "ghost",
115
+ className: "ds:min-h-[var(--min-target-size)]",
116
+ "data-action": "cancel-change",
117
+ disabled: i,
118
+ onClick: A,
119
+ children: g("patientAccountSettings.panel.cancel")
120
+ }
121
+ )
122
+ ] })
123
+ ]
124
+ }
125
+ );
126
+ }
127
+ function gt({
128
+ row: t,
129
+ headingLevel: s,
130
+ saving: d,
131
+ focusOnOpen: r,
132
+ error: m,
133
+ onSubmitChange: l,
134
+ onCancel: k
135
+ }) {
136
+ const { t: b } = T("ui"), [c, o] = M(""), i = I(null), p = G(m);
137
+ return V(() => {
138
+ var a;
139
+ r && ((a = i.current) == null || a.focus());
140
+ }, []), _(q(m), d, () => {
141
+ var a;
142
+ return (a = i.current) == null ? void 0 : a.focus();
143
+ }), /* @__PURE__ */ n(
144
+ J,
145
+ {
146
+ rowId: t.id,
147
+ kind: "email",
148
+ title: b("patientAccountSettings.email.title"),
149
+ headingLevel: s,
150
+ description: b("patientAccountSettings.email.body"),
151
+ saving: d,
152
+ canSubmit: c.trim().length > 0,
153
+ submitLabel: b("patientAccountSettings.panel.save"),
154
+ submitAction: "save-change",
155
+ onSubmit: () => l({ rowId: t.id, kind: "email", email: c }),
156
+ onCancel: k,
157
+ children: /* @__PURE__ */ n(
158
+ Z,
159
+ {
160
+ label: b("patientAccountSettings.email.label"),
161
+ error: m && !d ? p : void 0,
162
+ children: /* @__PURE__ */ n(
163
+ pt,
164
+ {
165
+ ref: i,
166
+ value: c,
167
+ onChange: (a) => o(a.target.value),
168
+ autoComplete: "email",
169
+ disableBuiltInValidation: !0,
170
+ errorMessage: null,
171
+ disabled: d,
172
+ "data-field": "email"
173
+ }
174
+ )
175
+ }
176
+ )
177
+ }
178
+ );
179
+ }
180
+ function bt({
181
+ row: t,
182
+ headingLevel: s,
183
+ pinLength: d,
184
+ saving: r,
185
+ focusOnOpen: m,
186
+ error: l,
187
+ onSubmitChange: k,
188
+ onCancel: b
189
+ }) {
190
+ const { t: c } = T("ui"), [o, i] = M(""), [p, a] = M(""), h = I(null), S = I(null), A = $(), f = $(), g = G(l), P = l !== null && l.code !== "invalid-value", e = P && !r;
191
+ return V(() => {
192
+ var u;
193
+ m && ((u = h.current) == null || u.focus());
194
+ }, []), _(q(l), r, () => {
195
+ var u, x;
196
+ P ? (i(""), (u = h.current) == null || u.focus()) : (x = S.current) == null || x.focus();
197
+ }), /* @__PURE__ */ C(
198
+ J,
199
+ {
200
+ rowId: t.id,
201
+ kind: "mobile",
202
+ title: c("patientAccountSettings.mobile.title"),
203
+ headingLevel: s,
204
+ description: c("patientAccountSettings.mobile.pinBody"),
205
+ descriptionId: f,
206
+ alert: e ? g : void 0,
207
+ alertId: A,
208
+ saving: r,
209
+ canSubmit: o.length === d && p.trim().length > 0,
210
+ submitLabel: c("patientAccountSettings.panel.save"),
211
+ submitAction: "save-change",
212
+ onSubmit: () => k({
213
+ rowId: t.id,
214
+ kind: "mobile",
215
+ currentPin: o,
216
+ mobile: p
217
+ }),
218
+ onCancel: b,
219
+ children: [
220
+ /* @__PURE__ */ n("div", { className: "ds:flex ds:justify-center", children: /* @__PURE__ */ n(
221
+ tt,
222
+ {
223
+ ref: h,
224
+ length: d,
225
+ label: c("patientAccountSettings.pin.currentLabel"),
226
+ value: o,
227
+ onChange: i,
228
+ error: e && o.length === 0,
229
+ disabled: r,
230
+ autoComplete: "current-password",
231
+ "aria-describedby": nt(
232
+ f,
233
+ e ? A : void 0
234
+ )
235
+ }
236
+ ) }),
237
+ /* @__PURE__ */ n(
238
+ Z,
239
+ {
240
+ label: c("patientAccountSettings.mobile.newLabel"),
241
+ error: (l == null ? void 0 : l.code) === "invalid-value" && !r ? g : void 0,
242
+ children: /* @__PURE__ */ n(
243
+ mt,
244
+ {
245
+ ref: S,
246
+ onChange: (u) => a(u),
247
+ disabled: r
248
+ }
249
+ )
250
+ }
251
+ )
252
+ ]
253
+ }
254
+ );
255
+ }
256
+ const U = ["current", "new", "confirm"];
257
+ function Y(t) {
258
+ return t ? t.code === "wrong-current-pin" ? "current" : "new" : "current";
259
+ }
260
+ function ht({
261
+ row: t,
262
+ headingLevel: s,
263
+ pinLength: d,
264
+ saving: r,
265
+ focusOnOpen: m,
266
+ error: l,
267
+ onSubmitChange: k,
268
+ onCancel: b
269
+ }) {
270
+ const { t: c, i18n: o } = T("ui"), [i, p] = M(() => Y(l)), [a, h] = M(""), [S, A] = M(""), [f, g] = M(""), P = I(null), e = $(), u = $(), x = G(l), N = l !== null && !r && i === Y(l), y = I(!0);
271
+ V(() => {
272
+ var L;
273
+ const F = y.current;
274
+ y.current = !1, !(F && !m) && ((L = P.current) == null || L.focus());
275
+ }, [i]), _(q(l), r, () => {
276
+ A(""), g(""), (l == null ? void 0 : l.code) === "wrong-current-pin" ? (h(""), p("current")) : p("new");
277
+ });
278
+ const E = U.indexOf(i), B = i === "confirm", O = i === "current" ? a : i === "new" ? S : f, w = i === "current" ? h : i === "new" ? A : g, H = c(i === "current" ? "patientAccountSettings.pin.currentTitle" : i === "new" ? "patientAccountSettings.pin.newTitle" : "patientAccountSettings.pin.confirmTitle"), K = c(i === "current" ? "patientAccountSettings.pin.currentLabel" : i === "new" ? "patientAccountSettings.pin.newLabel" : "patientAccountSettings.pin.confirmLabel");
279
+ return /* @__PURE__ */ n(
280
+ J,
281
+ {
282
+ rowId: t.id,
283
+ kind: "pin",
284
+ title: H,
285
+ headingLevel: s,
286
+ stepId: u,
287
+ step: c("patientAccountSettings.panel.step", {
288
+ current: X(E + 1, o.language),
289
+ total: X(U.length, o.language)
290
+ }),
291
+ alert: N ? x : void 0,
292
+ alertId: e,
293
+ saving: r,
294
+ canSubmit: O.length === d,
295
+ submitLabel: c(B ? "patientAccountSettings.panel.save" : "patientAccountSettings.panel.continue"),
296
+ submitAction: B ? "save-change" : "continue-change",
297
+ onSubmit: () => {
298
+ B ? k({
299
+ rowId: t.id,
300
+ kind: "pin",
301
+ currentPin: a,
302
+ newPin: S,
303
+ confirmPin: f
304
+ }) : p(U[E + 1] ?? "confirm");
305
+ },
306
+ onCancel: b,
307
+ children: /* @__PURE__ */ n("div", { className: "ds:flex ds:justify-center", children: /* @__PURE__ */ n(
308
+ tt,
309
+ {
310
+ ref: P,
311
+ length: d,
312
+ label: K,
313
+ value: O,
314
+ onChange: w,
315
+ error: N && O.length === 0,
316
+ disabled: r,
317
+ autoComplete: i === "current" ? "current-password" : "new-password",
318
+ "aria-describedby": nt(
319
+ u,
320
+ N ? e : void 0
321
+ )
322
+ },
323
+ i
324
+ ) })
325
+ }
326
+ );
327
+ }
328
+ function St({
329
+ row: t,
330
+ editing: s,
331
+ stepUpOpen: d,
332
+ otherOpen: r,
333
+ privacy: m,
334
+ panelLevel: l,
335
+ pinLength: k,
336
+ saving: b,
337
+ error: c,
338
+ onOpen: o,
339
+ onCancel: i,
340
+ onSubmitChange: p
341
+ }) {
342
+ const { t: a } = T("ui"), h = I(null), S = I(s);
343
+ V(() => {
344
+ var x;
345
+ S.current !== s && (S.current = s, !s && !d && !r && ((x = h.current) == null || x.focus()));
346
+ }, [s, d, r]);
347
+ const A = I(!1);
348
+ s || (A.current = !1);
349
+ const f = t.label ?? (t.kind === "email" ? a("patientAccountSettings.row.email") : t.kind === "mobile" ? a("patientAccountSettings.row.mobile") : t.kind === "pin" ? a("patientAccountSettings.row.pin") : void 0);
350
+ let g;
351
+ t.kind === "pin" ? g = a("patientAccountSettings.row.pinHidden") : t.value && (g = m ? ft() : /* @__PURE__ */ n(
352
+ "bdi",
353
+ {
354
+ dir: t.kind === "mobile" || t.kind === "email" ? "ltr" : void 0,
355
+ children: t.value
356
+ }
357
+ ));
358
+ const P = t.kind !== "readonly" && !m, e = s && !m, u = {
359
+ row: t,
360
+ headingLevel: l,
361
+ pinLength: k,
362
+ saving: b,
363
+ error: c,
364
+ focusOnOpen: A.current,
365
+ onSubmitChange: p,
366
+ onCancel: i
367
+ };
368
+ return /* @__PURE__ */ C(
369
+ "li",
370
+ {
371
+ "data-component": "patient-account-settings-row",
372
+ "data-row-id": t.id,
373
+ "data-kind": t.kind,
374
+ className: "ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)] " + // An open PIN or mobile panel holds a keypad: less padding keeps it
375
+ // inside the row at 320 px, also in the accessible themes.
376
+ (e && t.kind !== "email" ? "ds:p-[var(--spacing-sm)]" : "ds:p-[var(--spacing-md)]"),
377
+ children: [
378
+ /* @__PURE__ */ C("div", { className: "ds:flex ds:flex-wrap ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]", children: [
379
+ /* @__PURE__ */ C("div", { className: "ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
380
+ f ? /* @__PURE__ */ n("span", { className: "type-label ds:text-[color:var(--muted-foreground)]", children: f }) : null,
381
+ g ? /* @__PURE__ */ n("span", { className: "type-body ds:break-words ds:text-foreground", children: g }) : null
382
+ ] }),
383
+ P && !e ? /* @__PURE__ */ n(
384
+ D,
385
+ {
386
+ ref: h,
387
+ type: "button",
388
+ intent: "secondary",
389
+ className: "ds:min-h-[var(--min-target-size)]",
390
+ "data-action": `change-${t.kind}`,
391
+ disabled: t.disabled,
392
+ onClick: () => {
393
+ A.current = !0, o();
394
+ },
395
+ children: t.changeLabel ?? (t.kind === "email" ? a("patientAccountSettings.change.email") : t.kind === "mobile" ? a("patientAccountSettings.change.mobile") : a("patientAccountSettings.change.pin"))
396
+ }
397
+ ) : null
398
+ ] }),
399
+ e && t.kind === "email" ? /* @__PURE__ */ n(gt, { ...u }) : null,
400
+ e && t.kind === "mobile" ? /* @__PURE__ */ n(bt, { ...u }) : null,
401
+ e && t.kind === "pin" ? /* @__PURE__ */ n(ht, { ...u }) : null,
402
+ s && m && t.kind !== "readonly" ? /* @__PURE__ */ C("div", { className: "ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-sm)]", children: [
403
+ /* @__PURE__ */ n(st, { block: "change-panel" }),
404
+ /* @__PURE__ */ n(
405
+ D,
406
+ {
407
+ type: "button",
408
+ intent: "ghost",
409
+ className: "ds:min-h-[var(--min-target-size)]",
410
+ "data-action": "cancel-change",
411
+ onClick: i,
412
+ children: a("patientAccountSettings.panel.cancel")
413
+ }
414
+ )
415
+ ] }) : null
416
+ ]
417
+ }
418
+ );
419
+ }
420
+ function wt({
421
+ sections: t,
422
+ status: s = "ready",
423
+ errorText: d,
424
+ onRetry: r,
425
+ onSubmitChange: m,
426
+ editingRowId: l,
427
+ defaultEditingRowId: k = null,
428
+ onEditingRowIdChange: b,
429
+ savingRowId: c = null,
430
+ savedRowId: o = null,
431
+ savedText: i,
432
+ rowError: p = null,
433
+ stepUp: a = null,
434
+ pinLength: h,
435
+ privacy: S = !1,
436
+ title: A,
437
+ headingLevel: f = 1,
438
+ focusOnMount: g = !1,
439
+ className: P
440
+ }) {
441
+ const { t: e } = T("ui"), u = at(h), [x, N] = ct({
442
+ value: l,
443
+ defaultValue: k,
444
+ onChange: b
445
+ }), y = x ?? null, E = I(o);
446
+ V(() => {
447
+ E.current !== o && (E.current = o, o !== null && y === o && N(null));
448
+ }, [o, y, N]);
449
+ const B = t.flatMap((v) => v.rows), O = B.length === 0, w = o ? B.find((v) => v.id === o) : void 0, H = {
450
+ email: e("patientAccountSettings.saved.email"),
451
+ mobile: e("patientAccountSettings.saved.mobile"),
452
+ pin: e("patientAccountSettings.saved.pin")
453
+ }, K = {
454
+ email: e("patientAccountSettings.stepUp.subject.email"),
455
+ mobile: e("patientAccountSettings.stepUp.subject.mobile"),
456
+ pin: e("patientAccountSettings.stepUp.subject.pin")
457
+ }, F = w ? i ?? (w.kind !== "readonly" ? H[w.kind] : void 0) : void 0, L = y ? B.find((v) => v.id === y) : void 0, Q = f === 1 ? 2 : 3, et = a ? {
458
+ ...a,
459
+ // `undefined` takes the default; `null` or `false` hides it.
460
+ note: a.note === void 0 ? (L == null ? void 0 : L.kind) === "mobile" ? e("patientAccountSettings.stepUp.currentMobileNote") : void 0 : a.note
461
+ } : null;
462
+ return /* @__PURE__ */ C(
463
+ lt,
464
+ {
465
+ component: "patient-account-settings",
466
+ title: A ?? e("patientAccountSettings.title"),
467
+ description: e("patientAccountSettings.description"),
468
+ headingLevel: f,
469
+ focusOnMount: g,
470
+ privacy: S,
471
+ className: P,
472
+ status: s,
473
+ loadingLabel: e("patientAccountSettings.status.loading"),
474
+ errorLabel: d ?? e("patientAccountSettings.status.errorTitle"),
475
+ message: F,
476
+ children: [
477
+ s === "loading" ? /* @__PURE__ */ n(ot, {}) : s === "error" ? /* @__PURE__ */ n(
478
+ W,
479
+ {
480
+ kind: "error",
481
+ title: e("patientAccountSettings.status.errorTitle"),
482
+ body: d ?? e("patientAccountSettings.status.errorBody"),
483
+ headingLevel: f,
484
+ onRetry: r
485
+ }
486
+ ) : O ? /* @__PURE__ */ n(
487
+ W,
488
+ {
489
+ kind: "empty",
490
+ title: e("patientAccountSettings.status.emptyTitle"),
491
+ body: e("patientAccountSettings.status.emptyBody"),
492
+ headingLevel: f
493
+ }
494
+ ) : /* @__PURE__ */ C(it, { children: [
495
+ F ? (
496
+ // PortalScreen's live region, mounted before the text, says it.
497
+ /* @__PURE__ */ n(z, { variant: "success", announce: "off", children: /* @__PURE__ */ n(z.Description, { children: F }) })
498
+ ) : null,
499
+ t.map((v) => {
500
+ const R = /* @__PURE__ */ n("ul", { className: "ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0", children: v.rows.map((j) => /* @__PURE__ */ n(
501
+ St,
502
+ {
503
+ row: j,
504
+ editing: y === j.id,
505
+ stepUpOpen: a !== null,
506
+ otherOpen: y !== null && y !== j.id,
507
+ privacy: S,
508
+ panelLevel: v.title ? Q + 1 : Q,
509
+ pinLength: u,
510
+ saving: c === j.id,
511
+ error: (p == null ? void 0 : p.rowId) === j.id ? p : null,
512
+ onOpen: () => N(j.id),
513
+ onCancel: () => N(null),
514
+ onSubmitChange: m
515
+ },
516
+ j.id
517
+ )) });
518
+ return v.title ? /* @__PURE__ */ n(
519
+ dt,
520
+ {
521
+ title: v.title,
522
+ headingLevel: f,
523
+ sectionId: v.id,
524
+ children: R
525
+ },
526
+ v.id
527
+ ) : /* @__PURE__ */ n("div", { "data-section-id": v.id, children: R }, v.id);
528
+ }),
529
+ /* @__PURE__ */ n(rt, { children: e("patientSignIn.email.passkeyNote") })
530
+ ] }),
531
+ /* @__PURE__ */ n(
532
+ ut,
533
+ {
534
+ config: et,
535
+ privacy: S,
536
+ defaultSubject: L && L.kind !== "readonly" ? K[L.kind] : void 0
537
+ }
538
+ )
539
+ ]
540
+ }
541
+ );
542
+ }
543
+ export {
544
+ wt as P
545
+ };
546
+ //# sourceMappingURL=patient-account-settings-BkAtIxJW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patient-account-settings-BkAtIxJW.js","sources":["../../src/patterns/patient-account-settings/patient-account-settings-panels.tsx","../../src/patterns/patient-account-settings/patient-account-settings.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Internal change panels of the patient account settings. Not exported */\n/* from the pattern's index. */\n/* */\n/* Each panel holds its own draft in state, so the draft goes when the */\n/* panel unmounts (Cancel, a saved change, or the screen leaving). The */\n/* panels compare nothing: a refusal arrives as `error`. */\n/* -------------------------------------------------------------------- */\n\nimport {\n useEffect,\n useId,\n useRef,\n useState,\n type FormEvent,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Alert } from '../../components/alert';\nimport { Button } from '../../components/button';\nimport { EmailInput } from '../../components/email-input';\nimport { FormField } from '../../components/form-field';\nimport { PhoneInput } from '../../components/phone-input';\nimport { PinEntry, type PinEntryHandle } from '../../components/pin-entry';\nimport { formatNumber } from '../../components/_shared/format-number';\nimport { useAfterResult } from '../patient-sign-in/patient-card';\nimport type {\n PatientAccountSettingsChange,\n PatientAccountSettingsRow,\n PatientAccountSettingsRowError,\n} from './patient-account-settings.types';\n\n/** The heading level of a panel title (always below the section's). */\nexport type PanelHeadingLevel = 2 | 3 | 4;\n\n/** What every change panel takes. */\nexport interface ChangePanelProps {\n /** The row being changed. */\n row: PatientAccountSettingsRow;\n /** The level of the panel title. */\n headingLevel: PanelHeadingLevel;\n /** Number of PIN digits. */\n pinLength: number;\n /** The host is checking the change: Save shows a spinner, fields are off. */\n saving: boolean;\n /** The person opened this panel with Change: focus its first field. */\n focusOnOpen: boolean;\n /** The host's refusal for this row, if any. */\n error: PatientAccountSettingsRowError | null;\n /** Called by Save with the typed values. Never blocked but by \"not empty\". */\n onSubmitChange: (change: PatientAccountSettingsChange) => void;\n /** Called by Cancel. */\n onCancel: () => void;\n}\n\n/**\n * A refusal as a value, so a host that rebuilds an equal `rowError` on every\n * render does not look like a new refusal each time.\n */\nfunction errorKey(error: PatientAccountSettingsRowError | null) {\n return error ? `${error.rowId}|${error.code}|${error.text ?? ''}` : null;\n}\n\n/** The ids a PIN field is described by, in reading order. */\nfunction describedBy(...ids: Array<string | undefined>): string | undefined {\n const list = ids.filter(Boolean).join(' ');\n return list || undefined;\n}\n\n/** The message of a refusal: the host's text, else a short default. */\nfunction useRefusalText(error: PatientAccountSettingsRowError | null) {\n const { t } = useTranslation('ui');\n if (!error) return undefined;\n if (error.text?.trim()) return error.text;\n switch (error.code) {\n case 'invalid-value':\n return t('patientAccountSettings.error.invalidValue');\n case 'wrong-current-pin':\n return t('patientAccountSettings.error.wrongCurrentPin');\n case 'pin-refused':\n return t('patientAccountSettings.error.pinRefused');\n case 'pin-mismatch':\n return t('patientAccountSettings.error.pinMismatch');\n }\n}\n\ninterface PanelFrameProps {\n rowId: string;\n kind: string;\n title: string;\n headingLevel: PanelHeadingLevel;\n /** A line above the title, for example \"Step 2 of 3\". */\n step?: string;\n /** Id of the step line, so a field can be described by it. */\n stepId?: string;\n description?: string;\n /** Id of the description, so a field can be described by it. */\n descriptionId?: string;\n /** An error alert (a refusal that is not a field error). */\n alert?: string;\n alertId?: string;\n saving: boolean;\n /** Whether Save (or Continue) may be pressed: \"not empty\", \"all digits\". */\n canSubmit: boolean;\n submitLabel: string;\n submitAction: string;\n onSubmit: () => void;\n onCancel: () => void;\n children: ReactNode;\n}\n\n/** The frame every panel wears: title, message, fields, Save and Cancel. */\nfunction PanelFrame({\n rowId,\n kind,\n title,\n headingLevel,\n step,\n stepId,\n description,\n descriptionId,\n alert,\n alertId,\n saving,\n canSubmit,\n submitLabel,\n submitAction,\n onSubmit,\n onCancel,\n children,\n}: PanelFrameProps) {\n const { t } = useTranslation('ui');\n const Title = `h${headingLevel}` as 'h2' | 'h3' | 'h4';\n const save = useRef<HTMLButtonElement>(null);\n const submitting = saving && submitAction === 'save-change';\n return (\n <form\n noValidate\n data-component=\"patient-account-settings-panel\"\n data-row-id={rowId}\n data-kind={kind}\n className=\"ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n onSubmit={(event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!canSubmit) return;\n // The fields turn off while the host checks: keep focus on Save,\n // which stays focusable, so it is not lost to the page.\n const active = document.activeElement;\n if (active instanceof HTMLElement && active !== save.current) {\n save.current?.focus();\n }\n onSubmit();\n }}\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n {step ? (\n <p\n id={stepId}\n className=\"type-meta ds:m-0 ds:text-[color:var(--muted-foreground)]\"\n >\n {step}\n </p>\n ) : null}\n <Title className=\"type-title-card ds:m-0 ds:text-foreground\">\n {title}\n </Title>\n {description ? (\n <p\n id={descriptionId}\n className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\"\n >\n {description}\n </p>\n ) : null}\n </div>\n {alert ? (\n <Alert variant=\"error\" id={alertId}>\n <Alert.Description>{alert}</Alert.Description>\n </Alert>\n ) : null}\n {children}\n <div className=\"ds:flex ds:flex-wrap ds:gap-[var(--spacing-sm)]\">\n <Button\n ref={save}\n type=\"submit\"\n intent=\"primary\"\n className=\"ds:min-h-[var(--min-target-size)]\"\n data-action={submitAction}\n disabled={!canSubmit}\n loading={submitting}\n >\n {submitting ? t('patientAccountSettings.panel.saving') : submitLabel}\n </Button>\n <Button\n type=\"button\"\n intent=\"ghost\"\n className=\"ds:min-h-[var(--min-target-size)]\"\n data-action=\"cancel-change\"\n disabled={saving}\n onClick={onCancel}\n >\n {t('patientAccountSettings.panel.cancel')}\n </Button>\n </div>\n </form>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* Email */\n/* -------------------------------------------------------------------- */\n\n/** The panel that changes the login email: one field, then Save. */\nexport function EmailChangePanel({\n row,\n headingLevel,\n saving,\n focusOnOpen,\n error,\n onSubmitChange,\n onCancel,\n}: ChangePanelProps) {\n const { t } = useTranslation('ui');\n const [email, setEmail] = useState('');\n const input = useRef<HTMLInputElement>(null);\n const refusal = useRefusalText(error);\n\n useEffect(() => {\n if (focusOnOpen) input.current?.focus();\n // Mount only: a later change of `focusOnOpen` pulls no focus.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n useAfterResult(errorKey(error), saving, () => input.current?.focus());\n\n return (\n <PanelFrame\n rowId={row.id}\n kind=\"email\"\n title={t('patientAccountSettings.email.title')}\n headingLevel={headingLevel}\n description={t('patientAccountSettings.email.body')}\n saving={saving}\n canSubmit={email.trim().length > 0}\n submitLabel={t('patientAccountSettings.panel.save')}\n submitAction=\"save-change\"\n onSubmit={() => onSubmitChange({ rowId: row.id, kind: 'email', email })}\n onCancel={onCancel}\n >\n <FormField\n label={t('patientAccountSettings.email.label')}\n error={error && !saving ? refusal : undefined}\n >\n <EmailInput\n ref={input}\n value={email}\n onChange={(event) => setEmail(event.target.value)}\n autoComplete=\"email\"\n disableBuiltInValidation\n errorMessage={null}\n disabled={saving}\n data-field=\"email\"\n />\n </FormField>\n </PanelFrame>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* Mobile */\n/* -------------------------------------------------------------------- */\n\n/**\n * The panel that changes the mobile: the current PIN on the keypad and the\n * new number. The SMS code goes to the current mobile, not the new one.\n */\nexport function MobileChangePanel({\n row,\n headingLevel,\n pinLength,\n saving,\n focusOnOpen,\n error,\n onSubmitChange,\n onCancel,\n}: ChangePanelProps) {\n const { t } = useTranslation('ui');\n const [pin, setPin] = useState('');\n const [mobile, setMobile] = useState('');\n const pinEntry = useRef<PinEntryHandle>(null);\n const phone = useRef<HTMLInputElement>(null);\n const alertId = useId();\n const descriptionId = useId();\n const refusal = useRefusalText(error);\n const pinRefused = error !== null && error.code !== 'invalid-value';\n const showAlert = pinRefused && !saving;\n\n useEffect(() => {\n if (focusOnOpen) pinEntry.current?.focus();\n // Mount only: a later change of `focusOnOpen` pulls no focus.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n useAfterResult(errorKey(error), saving, () => {\n if (pinRefused) {\n setPin('');\n pinEntry.current?.focus();\n } else {\n phone.current?.focus();\n }\n });\n\n return (\n <PanelFrame\n rowId={row.id}\n kind=\"mobile\"\n title={t('patientAccountSettings.mobile.title')}\n headingLevel={headingLevel}\n description={t('patientAccountSettings.mobile.pinBody')}\n descriptionId={descriptionId}\n alert={showAlert ? refusal : undefined}\n alertId={alertId}\n saving={saving}\n canSubmit={pin.length === pinLength && mobile.trim().length > 0}\n submitLabel={t('patientAccountSettings.panel.save')}\n submitAction=\"save-change\"\n onSubmit={() =>\n onSubmitChange({\n rowId: row.id,\n kind: 'mobile',\n currentPin: pin,\n mobile,\n })\n }\n onCancel={onCancel}\n >\n <div className=\"ds:flex ds:justify-center\">\n <PinEntry\n ref={pinEntry}\n length={pinLength}\n label={t('patientAccountSettings.pin.currentLabel')}\n value={pin}\n onChange={setPin}\n error={showAlert && pin.length === 0}\n disabled={saving}\n autoComplete=\"current-password\"\n // The instruction is read with the field, then any refusal.\n aria-describedby={describedBy(\n descriptionId,\n showAlert ? alertId : undefined,\n )}\n />\n </div>\n <FormField\n label={t('patientAccountSettings.mobile.newLabel')}\n error={error?.code === 'invalid-value' && !saving ? refusal : undefined}\n >\n <PhoneInput\n ref={phone}\n onChange={(e164) => setMobile(e164)}\n disabled={saving}\n />\n </FormField>\n </PanelFrame>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* PIN */\n/* -------------------------------------------------------------------- */\n\ntype PinStep = 'current' | 'new' | 'confirm';\nconst PIN_STEPS: PinStep[] = ['current', 'new', 'confirm'];\n\n/** The step a refusal concerns: the current PIN, else the new one. */\nfunction stepOfRefusal(error: PatientAccountSettingsRowError | null): PinStep {\n if (!error) return 'current';\n return error.code === 'wrong-current-pin' ? 'current' : 'new';\n}\n\n/**\n * The panel that changes the PIN: the current PIN, the new one and the new\n * one again, one keypad step at a time. Both new entries go to the host in\n * one call; the host compares them and answers with a refusal.\n */\nexport function PinChangePanel({\n row,\n headingLevel,\n pinLength,\n saving,\n focusOnOpen,\n error,\n onSubmitChange,\n onCancel,\n}: ChangePanelProps) {\n const { t, i18n } = useTranslation('ui');\n // A panel that mounts with a refusal already set starts at its step.\n const [step, setStep] = useState<PinStep>(() => stepOfRefusal(error));\n const [currentPin, setCurrentPin] = useState('');\n const [newPin, setNewPin] = useState('');\n const [confirmPin, setConfirmPin] = useState('');\n const pinEntry = useRef<PinEntryHandle>(null);\n const alertId = useId();\n const stepId = useId();\n const refusal = useRefusalText(error);\n // The refusal sits on the step it concerns, not on the steps after it.\n const showAlert = error !== null && !saving && step === stepOfRefusal(error);\n\n // Each step change is a new keypad: focus it. On mount only when the\n // person opened the panel with Change.\n const firstStep = useRef(true);\n useEffect(() => {\n const first = firstStep.current;\n firstStep.current = false;\n if (first && !focusOnOpen) return;\n pinEntry.current?.focus();\n // `focusOnOpen` is read on mount only.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [step]);\n\n // A refusal empties what it concerns and sends the person back to it.\n useAfterResult(errorKey(error), saving, () => {\n setNewPin('');\n setConfirmPin('');\n if (error?.code === 'wrong-current-pin') {\n setCurrentPin('');\n setStep('current');\n } else {\n setStep('new');\n }\n });\n\n const index = PIN_STEPS.indexOf(step);\n const last = step === 'confirm';\n const digits =\n step === 'current' ? currentPin : step === 'new' ? newPin : confirmPin;\n const setDigits =\n step === 'current'\n ? setCurrentPin\n : step === 'new'\n ? setNewPin\n : setConfirmPin;\n const title =\n step === 'current'\n ? t('patientAccountSettings.pin.currentTitle')\n : step === 'new'\n ? t('patientAccountSettings.pin.newTitle')\n : t('patientAccountSettings.pin.confirmTitle');\n const label =\n step === 'current'\n ? t('patientAccountSettings.pin.currentLabel')\n : step === 'new'\n ? t('patientAccountSettings.pin.newLabel')\n : t('patientAccountSettings.pin.confirmLabel');\n\n return (\n <PanelFrame\n rowId={row.id}\n kind=\"pin\"\n title={title}\n headingLevel={headingLevel}\n stepId={stepId}\n step={t('patientAccountSettings.panel.step', {\n current: formatNumber(index + 1, i18n.language),\n total: formatNumber(PIN_STEPS.length, i18n.language),\n })}\n alert={showAlert ? refusal : undefined}\n alertId={alertId}\n saving={saving}\n canSubmit={digits.length === pinLength}\n submitLabel={\n last\n ? t('patientAccountSettings.panel.save')\n : t('patientAccountSettings.panel.continue')\n }\n submitAction={last ? 'save-change' : 'continue-change'}\n onSubmit={() => {\n if (last) {\n onSubmitChange({\n rowId: row.id,\n kind: 'pin',\n currentPin,\n newPin,\n confirmPin,\n });\n } else {\n setStep(PIN_STEPS[index + 1] ?? 'confirm');\n }\n }}\n onCancel={onCancel}\n >\n <div className=\"ds:flex ds:justify-center\">\n <PinEntry\n key={step}\n ref={pinEntry}\n length={pinLength}\n label={label}\n value={digits}\n onChange={setDigits}\n error={showAlert && digits.length === 0}\n disabled={saving}\n autoComplete={\n step === 'current' ? 'current-password' : 'new-password'\n }\n // \"Step 2 of 3\" is read with the field, then any refusal.\n aria-describedby={describedBy(\n stepId,\n showAlert ? alertId : undefined,\n )}\n />\n </div>\n </PanelFrame>\n );\n}\n","import { useEffect, useRef, type ReactNode } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Alert } from '../../components/alert';\nimport { Button } from '../../components/button';\nimport { resolvePinLength } from '../../components/pin-indicator';\nimport {\n PrivacyHiddenLine,\n privacyMask,\n} from '../../components/_shared/privacy-mask';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport {\n PortalLoading,\n PortalMessage,\n PortalNote,\n PortalScreen,\n PortalSection,\n PortalStepUp,\n} from '../patient-portal/portal-parts';\nimport type {\n PortalHeadingLevel,\n PortalListStatus,\n StepUpConfig,\n} from '../patient-portal/portal-types';\nimport {\n EmailChangePanel,\n MobileChangePanel,\n PinChangePanel,\n type ChangePanelProps,\n type PanelHeadingLevel,\n} from './patient-account-settings-panels';\nimport type {\n PatientAccountSettingsChange,\n PatientAccountSettingsRow,\n PatientAccountSettingsRowError,\n PatientAccountSettingsSection,\n} from './patient-account-settings.types';\n\n/* -------------------------------------------------------------------- */\n/* One row */\n/* -------------------------------------------------------------------- */\n\ninterface SettingsRowItemProps {\n row: PatientAccountSettingsRow;\n editing: boolean;\n /** The SMS check is open: focus stays in the dialog, not on the row. */\n stepUpOpen: boolean;\n /** Another row's panel is open: Change must not take focus back. */\n otherOpen: boolean;\n privacy: boolean;\n panelLevel: PanelHeadingLevel;\n pinLength: number;\n saving: boolean;\n error: PatientAccountSettingsRowError | null;\n onOpen: () => void;\n onCancel: () => void;\n onSubmitChange: (change: PatientAccountSettingsChange) => void;\n}\n\n/** A row: label, value, a Change button, and its panel while it is open. */\nfunction SettingsRowItem({\n row,\n editing,\n stepUpOpen,\n otherOpen,\n privacy,\n panelLevel,\n pinLength,\n saving,\n error,\n onOpen,\n onCancel,\n onSubmitChange,\n}: SettingsRowItemProps) {\n const { t } = useTranslation('ui');\n const changeButton = useRef<HTMLButtonElement>(null);\n\n // When the panel closes, focus returns to Change. Never on mount, and not\n // when the person opened another row in the same update: its field has it.\n const wasEditing = useRef(editing);\n useEffect(() => {\n if (wasEditing.current === editing) return;\n wasEditing.current = editing;\n if (!editing && !stepUpOpen && !otherOpen) changeButton.current?.focus();\n }, [editing, stepUpOpen, otherOpen]);\n\n // A panel takes focus only when the person opens it with Change, never\n // when the screen mounts with a panel already open.\n const openedByPerson = useRef(false);\n if (!editing) openedByPerson.current = false;\n\n // The kit's own label for a row kind; a host may still pass its own.\n const label =\n row.label ??\n (row.kind === 'email'\n ? t('patientAccountSettings.row.email')\n : row.kind === 'mobile'\n ? t('patientAccountSettings.row.mobile')\n : row.kind === 'pin'\n ? t('patientAccountSettings.row.pin')\n : undefined);\n\n let value: ReactNode;\n if (row.kind === 'pin') {\n value = t('patientAccountSettings.row.pinHidden');\n } else if (row.value) {\n value = privacy ? (\n privacyMask()\n ) : (\n <bdi\n dir={row.kind === 'mobile' || row.kind === 'email' ? 'ltr' : undefined}\n >\n {row.value}\n </bdi>\n );\n }\n\n // Privacy: no Change button, and an open panel is withheld, so a typed\n // email or number never shows in clear. The draft goes with the panel.\n const changeable = row.kind !== 'readonly' && !privacy;\n const panelOpen = editing && !privacy;\n const panelProps: ChangePanelProps = {\n row,\n headingLevel: panelLevel,\n pinLength,\n saving,\n error,\n focusOnOpen: openedByPerson.current,\n onSubmitChange,\n onCancel,\n };\n\n return (\n <li\n data-component=\"patient-account-settings-row\"\n data-row-id={row.id}\n data-kind={row.kind}\n className={\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)] ' +\n // An open PIN or mobile panel holds a keypad: less padding keeps it\n // inside the row at 320 px, also in the accessible themes.\n (panelOpen && row.kind !== 'email'\n ? 'ds:p-[var(--spacing-sm)]'\n : 'ds:p-[var(--spacing-md)]')\n }\n >\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-xs)]\">\n {label ? (\n <span className=\"type-label ds:text-[color:var(--muted-foreground)]\">\n {label}\n </span>\n ) : null}\n {value ? (\n <span className=\"type-body ds:break-words ds:text-foreground\">\n {value}\n </span>\n ) : null}\n </div>\n {changeable && !panelOpen ? (\n <Button\n ref={changeButton}\n type=\"button\"\n intent=\"secondary\"\n className=\"ds:min-h-[var(--min-target-size)]\"\n data-action={`change-${row.kind}`}\n disabled={row.disabled}\n onClick={() => {\n openedByPerson.current = true;\n onOpen();\n }}\n >\n {row.changeLabel ??\n (row.kind === 'email'\n ? t('patientAccountSettings.change.email')\n : row.kind === 'mobile'\n ? t('patientAccountSettings.change.mobile')\n : t('patientAccountSettings.change.pin'))}\n </Button>\n ) : null}\n </div>\n {panelOpen && row.kind === 'email' ? (\n <EmailChangePanel {...panelProps} />\n ) : null}\n {panelOpen && row.kind === 'mobile' ? (\n <MobileChangePanel {...panelProps} />\n ) : null}\n {panelOpen && row.kind === 'pin' ? (\n <PinChangePanel {...panelProps} />\n ) : null}\n {editing && privacy && row.kind !== 'readonly' ? (\n <div className=\"ds:mt-[var(--spacing-md)] ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-sm)]\">\n <PrivacyHiddenLine block=\"change-panel\" />\n <Button\n type=\"button\"\n intent=\"ghost\"\n className=\"ds:min-h-[var(--min-target-size)]\"\n data-action=\"cancel-change\"\n onClick={onCancel}\n >\n {t('patientAccountSettings.panel.cancel')}\n </Button>\n </div>\n ) : null}\n </li>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* The screen */\n/* -------------------------------------------------------------------- */\n\nexport interface PatientAccountSettingsProps {\n /**\n * The sections and rows to show, and no others. The screen adds no\n * two-factor item, no new-message setting and no password row.\n */\n sections: PatientAccountSettingsSection[];\n /** The state of the read. Default `ready`. */\n status?: PortalListStatus;\n /**\n * Host text that replaces the default error sentence in the `error` state.\n * Rendered as given, also under `privacy`: keep personal data out of it there.\n */\n errorText?: string;\n /** Called by \"Try again\" in the error state. The button shows only when given. */\n onRetry?: () => void;\n /**\n * Called by Save with the typed values. The screen saves nothing, compares\n * nothing and judges nothing: the host checks the change, may ask for an\n * SMS check first (it sets `stepUp`), and answers with `savingRowId`,\n * `rowError` and `savedRowId`. The row keeps its old value until the host\n * reports `savedRowId`.\n */\n onSubmitChange: (change: PatientAccountSettingsChange) => void;\n /** Id of the row whose panel is open, or `null` for none. Controlled; pair with `onEditingRowIdChange`. */\n editingRowId?: string | null;\n /** Initial `editingRowId` when uncontrolled. Default none. */\n defaultEditingRowId?: string | null;\n /**\n * Called with a row id when its Change button opens the panel, and with\n * `null` when Cancel closes it or when `savedRowId` names the open row.\n */\n onEditingRowIdChange?: (rowId: string | null) => void;\n /** The row whose change the host is checking: its Save shows a spinner. */\n savingRowId?: string | null;\n /**\n * The row whose change the host saved: its panel closes and a success\n * message shows. The row's new value comes in through `sections`.\n */\n savedRowId?: string | null;\n /**\n * Replaces the default success sentence for `savedRowId` (for example to\n * add that a notice went to your old email). Shows only while `savedRowId`\n * names a row. Whether it is wanted is to confirm. Rendered as given, also\n * under `privacy`: keep personal data out of it there.\n */\n savedText?: string;\n /** The host's refusal of the last change, for one row. */\n rowError?: PatientAccountSettingsRowError | null;\n /**\n * The SMS check before a change goes through (D95, D122): the dialog is\n * open while this is not null. SMS only, no email option. The host binds\n * the step, sends and checks the code, and reports `error`, `submitting`\n * and `noMobile`; the code goes to the current mobile. An unconfirmed\n * change stays unsaved, and the draft stays when the person cancels.\n *\n * Give `onCancel` and let it set `stepUp` back to `null`: the dialog is\n * forced open, so without it Escape and Cancel cannot close it. Close the\n * dialog and report `savedRowId` in the same update, so focus can return\n * to the row. The default sentence \"The code goes to your current mobile\"\n * shows on a mobile change; `note: null` hides it.\n */\n stepUp?: StepUpConfig | null;\n /**\n * Number of PIN digits, 4 to 12. Default 8. At 320 px a PIN of 12 digits\n * fits: `PinIndicator` shrinks its dots to the width it has.\n */\n pinLength?: number;\n /**\n * Privacy mode: email and mobile values are masked, the Change buttons are\n * hidden, an open panel is withheld (with a Cancel button, and its typed\n * draft is dropped) and the dialog says \"your mobile\".\n */\n privacy?: boolean;\n /** Replaces the heading. Default \"Account settings\". */\n title?: string;\n /** Heading level of the title. Default 1; use 2 inside a page with an h1. */\n headingLevel?: PortalHeadingLevel;\n /** Move focus to the heading when the screen shows. Default false. */\n focusOnMount?: boolean;\n /** Extra classes for the root. */\n className?: string;\n}\n\n/**\n * Account settings (HTP-6917): how the patient signs in. Each editable row\n * (login email, mobile, PIN) opens an inline panel with Save and Cancel. The\n * host does the checking, the SMS code and the saving; this screen sends the\n * typed values out and shows what the host reports. Ends with the passkey\n * note. Drafts and PINs live only in the open panel and go when it closes or\n * the screen unmounts.\n */\nexport function PatientAccountSettings({\n sections,\n status = 'ready',\n errorText,\n onRetry,\n onSubmitChange,\n editingRowId,\n defaultEditingRowId = null,\n onEditingRowIdChange,\n savingRowId = null,\n savedRowId = null,\n savedText,\n rowError = null,\n stepUp = null,\n pinLength,\n privacy = false,\n title,\n headingLevel = 1,\n focusOnMount = false,\n className,\n}: PatientAccountSettingsProps) {\n const { t } = useTranslation('ui');\n const length = resolvePinLength(pinLength);\n const [editingValue, setEditing] = useControllableState<string | null>({\n value: editingRowId,\n defaultValue: defaultEditingRowId,\n onChange: onEditingRowIdChange,\n });\n const editing = editingValue ?? null;\n\n // The host reports the saved row: its panel closes. Only on a change.\n const lastSaved = useRef(savedRowId);\n useEffect(() => {\n if (lastSaved.current === savedRowId) return;\n lastSaved.current = savedRowId;\n if (savedRowId !== null && editing === savedRowId) setEditing(null);\n }, [savedRowId, editing, setEditing]);\n\n const rows = sections.flatMap((section) => section.rows);\n const empty = rows.length === 0;\n const savedRow = savedRowId\n ? rows.find((row) => row.id === savedRowId)\n : undefined;\n const savedByKind = {\n email: t('patientAccountSettings.saved.email'),\n mobile: t('patientAccountSettings.saved.mobile'),\n pin: t('patientAccountSettings.saved.pin'),\n };\n const subjectByKind = {\n email: t('patientAccountSettings.stepUp.subject.email'),\n mobile: t('patientAccountSettings.stepUp.subject.mobile'),\n pin: t('patientAccountSettings.stepUp.subject.pin'),\n };\n // Only a row that is on the screen has been saved: `savedText` alone says\n // nothing.\n const savedMessage = savedRow\n ? (savedText ??\n (savedRow.kind !== 'readonly' ? savedByKind[savedRow.kind] : undefined))\n : undefined;\n const editingRow = editing\n ? rows.find((row) => row.id === editing)\n : undefined;\n\n // The sections sit one level under the title; a panel one under its section.\n const sectionLevel = headingLevel === 1 ? 2 : 3;\n\n // The code goes to the current mobile: the dialog says so for a mobile change.\n const stepUpConfig: StepUpConfig | null = stepUp\n ? {\n ...stepUp,\n // `undefined` takes the default; `null` or `false` hides it.\n note:\n stepUp.note === undefined\n ? editingRow?.kind === 'mobile'\n ? t('patientAccountSettings.stepUp.currentMobileNote')\n : undefined\n : stepUp.note,\n }\n : null;\n\n return (\n <PortalScreen\n component=\"patient-account-settings\"\n title={title ?? t('patientAccountSettings.title')}\n description={t('patientAccountSettings.description')}\n headingLevel={headingLevel}\n focusOnMount={focusOnMount}\n privacy={privacy}\n className={className}\n status={status}\n loadingLabel={t('patientAccountSettings.status.loading')}\n errorLabel={errorText ?? t('patientAccountSettings.status.errorTitle')}\n message={savedMessage}\n >\n {status === 'loading' ? (\n <PortalLoading />\n ) : status === 'error' ? (\n <PortalMessage\n kind=\"error\"\n title={t('patientAccountSettings.status.errorTitle')}\n body={errorText ?? t('patientAccountSettings.status.errorBody')}\n headingLevel={headingLevel}\n onRetry={onRetry}\n />\n ) : empty ? (\n <PortalMessage\n kind=\"empty\"\n title={t('patientAccountSettings.status.emptyTitle')}\n body={t('patientAccountSettings.status.emptyBody')}\n headingLevel={headingLevel}\n />\n ) : (\n <>\n {savedMessage ? (\n // PortalScreen's live region, mounted before the text, says it.\n <Alert variant=\"success\" announce=\"off\">\n <Alert.Description>{savedMessage}</Alert.Description>\n </Alert>\n ) : null}\n {sections.map((section) => {\n const list = (\n <ul className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0\">\n {section.rows.map((row) => (\n <SettingsRowItem\n key={row.id}\n row={row}\n editing={editing === row.id}\n stepUpOpen={stepUp !== null}\n otherOpen={editing !== null && editing !== row.id}\n privacy={privacy}\n panelLevel={\n (section.title\n ? sectionLevel + 1\n : sectionLevel) as PanelHeadingLevel\n }\n pinLength={length}\n saving={savingRowId === row.id}\n error={rowError?.rowId === row.id ? rowError : null}\n onOpen={() => setEditing(row.id)}\n onCancel={() => setEditing(null)}\n onSubmitChange={onSubmitChange}\n />\n ))}\n </ul>\n );\n return section.title ? (\n <PortalSection\n key={section.id}\n title={section.title}\n headingLevel={headingLevel}\n sectionId={section.id}\n >\n {list}\n </PortalSection>\n ) : (\n <div key={section.id} data-section-id={section.id}>\n {list}\n </div>\n );\n })}\n {/* The same sentence as the sign-in screen (D142). */}\n <PortalNote>{t('patientSignIn.email.passkeyNote')}</PortalNote>\n </>\n )}\n\n <PortalStepUp\n config={stepUpConfig}\n privacy={privacy}\n defaultSubject={\n editingRow && editingRow.kind !== 'readonly'\n ? subjectByKind[editingRow.kind]\n : undefined\n }\n />\n </PortalScreen>\n );\n}\n"],"names":["errorKey","error","describedBy","ids","useRefusalText","t","useTranslation","_a","PanelFrame","rowId","kind","title","headingLevel","step","stepId","description","descriptionId","alert","alertId","saving","canSubmit","submitLabel","submitAction","onSubmit","onCancel","children","Title","save","useRef","submitting","jsxs","event","active","jsx","Alert","Button","EmailChangePanel","row","focusOnOpen","onSubmitChange","email","setEmail","useState","input","refusal","useEffect","useAfterResult","FormField","EmailInput","MobileChangePanel","pinLength","pin","setPin","mobile","setMobile","pinEntry","phone","useId","pinRefused","showAlert","_b","PinEntry","PhoneInput","e164","PIN_STEPS","stepOfRefusal","PinChangePanel","i18n","setStep","currentPin","setCurrentPin","newPin","setNewPin","confirmPin","setConfirmPin","firstStep","first","index","last","digits","setDigits","label","formatNumber","SettingsRowItem","editing","stepUpOpen","otherOpen","privacy","panelLevel","onOpen","changeButton","wasEditing","openedByPerson","value","privacyMask","changeable","panelOpen","panelProps","PrivacyHiddenLine","PatientAccountSettings","sections","status","errorText","onRetry","editingRowId","defaultEditingRowId","onEditingRowIdChange","savingRowId","savedRowId","savedText","rowError","stepUp","focusOnMount","className","length","resolvePinLength","editingValue","setEditing","useControllableState","lastSaved","rows","section","empty","savedRow","savedByKind","subjectByKind","savedMessage","editingRow","sectionLevel","stepUpConfig","PortalScreen","PortalLoading","PortalMessage","Fragment","list","PortalSection","PortalNote","PortalStepUp"],"mappings":"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"}