@alfadocs/ui-kit-debug 1.133.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.
- package/dist/_chunks/{agenda-card-B8hV3dZV.js → agenda-card-B9wgX_Ed.js} +2 -2
- package/dist/_chunks/{agenda-card-B8hV3dZV.js.map → agenda-card-B9wgX_Ed.js.map} +1 -1
- package/dist/_chunks/{agenda-tray-Bu46s3dI.js → agenda-tray-CGcS_qoM.js} +2 -2
- package/dist/_chunks/{agenda-tray-Bu46s3dI.js.map → agenda-tray-CGcS_qoM.js.map} +1 -1
- package/dist/_chunks/appointment-card-DG3m9yN-.js +504 -0
- package/dist/_chunks/appointment-card-DG3m9yN-.js.map +1 -0
- package/dist/_chunks/{appointment-peek-DZa6xyUb.js → appointment-peek-BK0tDs4C.js} +2 -2
- package/dist/_chunks/{appointment-peek-DZa6xyUb.js.map → appointment-peek-BK0tDs4C.js.map} +1 -1
- package/dist/_chunks/{appointment-timeline-DQePqpyH.js → appointment-timeline-BiI2riRZ.js} +2 -2
- package/dist/_chunks/{appointment-timeline-DQePqpyH.js.map → appointment-timeline-BiI2riRZ.js.map} +1 -1
- package/dist/_chunks/appointment-tray-ClJCtYQj.js +200 -0
- package/dist/_chunks/appointment-tray-ClJCtYQj.js.map +1 -0
- package/dist/_chunks/{appointment-workflow-status-DMjuIK90.js → appointment-workflow-status-S-lx81Yz.js} +2 -2
- package/dist/_chunks/{appointment-workflow-status-DMjuIK90.js.map → appointment-workflow-status-S-lx81Yz.js.map} +1 -1
- package/dist/_chunks/ban-CiSCCcOE.js +15 -0
- package/dist/_chunks/ban-CiSCCcOE.js.map +1 -0
- package/dist/_chunks/{calendar-BIoOeBTT.js → calendar-CyLtLBNP.js} +2 -2
- package/dist/_chunks/{calendar-BIoOeBTT.js.map → calendar-CyLtLBNP.js.map} +1 -1
- package/dist/_chunks/{calendar-appointment-editor-dialog-BHx6kUhX.js → calendar-appointment-editor-dialog-BSkIYGlW.js} +13 -13
- package/dist/_chunks/{calendar-appointment-editor-dialog-BHx6kUhX.js.map → calendar-appointment-editor-dialog-BSkIYGlW.js.map} +1 -1
- package/dist/_chunks/{calendar-event-card-BNEzkjm-.js → calendar-event-card-BJifpYZQ.js} +7 -6
- package/dist/_chunks/{calendar-event-card-BNEzkjm-.js.map → calendar-event-card-BJifpYZQ.js.map} +1 -1
- package/dist/_chunks/{care-plan-card-DKScH9Ss.js → care-plan-card-CjHq6PLo.js} +6 -6
- package/dist/_chunks/{care-plan-card-DKScH9Ss.js.map → care-plan-card-CjHq6PLo.js.map} +1 -1
- package/dist/_chunks/{care-plan-entry-card-AG1y3nyW.js → care-plan-entry-card-DY1toF6E.js} +2 -2
- package/dist/_chunks/{care-plan-entry-card-AG1y3nyW.js.map → care-plan-entry-card-DY1toF6E.js.map} +1 -1
- package/dist/_chunks/{care-plan-header-Dx5OMkc9.js → care-plan-header-CeFXUDnL.js} +6 -6
- package/dist/_chunks/{care-plan-header-Dx5OMkc9.js.map → care-plan-header-CeFXUDnL.js.map} +1 -1
- package/dist/_chunks/check-in-documents-CEVcgcYZ.js +136 -0
- package/dist/_chunks/check-in-documents-CEVcgcYZ.js.map +1 -0
- package/dist/_chunks/{clinical-note-card-pPaeWWnu.js → clinical-note-card-D--IwbZa.js} +2 -2
- package/dist/_chunks/{clinical-note-card-pPaeWWnu.js.map → clinical-note-card-D--IwbZa.js.map} +1 -1
- package/dist/_chunks/document-preview-DLVIrOYV.js +385 -0
- package/dist/_chunks/document-preview-DLVIrOYV.js.map +1 -0
- package/dist/_chunks/{entity-card-fpm-KUKc.js → entity-card-p-LANpYt.js} +18 -17
- package/dist/_chunks/{entity-card-fpm-KUKc.js.map → entity-card-p-LANpYt.js.map} +1 -1
- package/dist/_chunks/{error-page-B0fGNTRB.js → error-page-WLhmWUTq.js} +100 -115
- package/dist/_chunks/error-page-WLhmWUTq.js.map +1 -0
- package/dist/_chunks/finished-terminal-unDnXT4j.js +191 -0
- package/dist/_chunks/finished-terminal-unDnXT4j.js.map +1 -0
- package/dist/_chunks/house-DGCypGTo.js +21 -0
- package/dist/_chunks/house-DGCypGTo.js.map +1 -0
- package/dist/_chunks/is-safe-url-CEy9CEml.js +8 -0
- package/dist/_chunks/is-safe-url-CEy9CEml.js.map +1 -0
- package/dist/_chunks/keypad-DBH_keVs.js +152 -0
- package/dist/_chunks/keypad-DBH_keVs.js.map +1 -0
- package/dist/_chunks/keypad-button-mOaPQRrH.js +114 -0
- package/dist/_chunks/keypad-button-mOaPQRrH.js.map +1 -0
- package/dist/_chunks/{message-card-BG3_3nN1.js → message-card-Bw_q1qKx.js} +2 -2
- package/dist/_chunks/{message-card-BG3_3nN1.js.map → message-card-Bw_q1qKx.js.map} +1 -1
- package/dist/_chunks/{message-tray-BjZv0Fsk.js → message-tray-pLGgLmoG.js} +2 -2
- package/dist/_chunks/{message-tray-BjZv0Fsk.js.map → message-tray-pLGgLmoG.js.map} +1 -1
- package/dist/_chunks/{note-attachment-MNTIqdSz.js → note-attachment-JTIy9iXN.js} +2 -2
- package/dist/_chunks/{note-attachment-MNTIqdSz.js.map → note-attachment-JTIy9iXN.js.map} +1 -1
- package/dist/_chunks/{note-timeline-BQeW0VZY.js → note-timeline-BbjHMhkL.js} +2 -2
- package/dist/_chunks/{note-timeline-BQeW0VZY.js.map → note-timeline-BbjHMhkL.js.map} +1 -1
- package/dist/_chunks/{notes-panel-Cm-_pCRJ.js → notes-panel-BAyPOr8N.js} +2 -2
- package/dist/_chunks/{notes-panel-Cm-_pCRJ.js.map → notes-panel-BAyPOr8N.js.map} +1 -1
- package/dist/_chunks/{operator-hero-CnfWckNQ.js → operator-hero-D4wfVu2l.js} +2 -2
- package/dist/_chunks/{operator-hero-CnfWckNQ.js.map → operator-hero-D4wfVu2l.js.map} +1 -1
- package/dist/_chunks/otp-input-BNOTlxq3.js +342 -0
- package/dist/_chunks/otp-input-BNOTlxq3.js.map +1 -0
- package/dist/_chunks/patient-account-settings-BkAtIxJW.js +546 -0
- package/dist/_chunks/patient-account-settings-BkAtIxJW.js.map +1 -0
- package/dist/_chunks/patient-card-DTh3QTyS.js +125 -0
- package/dist/_chunks/patient-card-DTh3QTyS.js.map +1 -0
- package/dist/_chunks/patient-check-in-resume-xhqjC6gf.js +742 -0
- package/dist/_chunks/patient-check-in-resume-xhqjC6gf.js.map +1 -0
- package/dist/_chunks/patient-sign-in-pin-CDBqV254.js +432 -0
- package/dist/_chunks/patient-sign-in-pin-CDBqV254.js.map +1 -0
- package/dist/_chunks/patient-sign-in-steps-C2JSqlok.js +199 -0
- package/dist/_chunks/patient-sign-in-steps-C2JSqlok.js.map +1 -0
- package/dist/_chunks/{patient-summary-card-BUcZ-gaL.js → patient-summary-card-Bl2NknPe.js} +2 -2
- package/dist/_chunks/{patient-summary-card-BUcZ-gaL.js.map → patient-summary-card-Bl2NknPe.js.map} +1 -1
- package/dist/_chunks/{payment-request-card-Dv4WbRBe.js → payment-request-card-CNW00DCx.js} +6 -6
- package/dist/_chunks/{payment-request-card-Dv4WbRBe.js.map → payment-request-card-CNW00DCx.js.map} +1 -1
- package/dist/_chunks/{pdf-viewer-BnBKdx0y.js → pdf-viewer-TRC5jEm5.js} +472 -425
- package/dist/_chunks/pdf-viewer-TRC5jEm5.js.map +1 -0
- package/dist/_chunks/pin-entry-BugWQMOS.js +219 -0
- package/dist/_chunks/pin-entry-BugWQMOS.js.map +1 -0
- package/dist/_chunks/pin-indicator-Cb-n40UI.js +124 -0
- package/dist/_chunks/pin-indicator-Cb-n40UI.js.map +1 -0
- package/dist/_chunks/portal-details-CTEsm705.js +478 -0
- package/dist/_chunks/portal-details-CTEsm705.js.map +1 -0
- package/dist/_chunks/portal-documents-D8skew0h.js +902 -0
- package/dist/_chunks/portal-documents-D8skew0h.js.map +1 -0
- package/dist/_chunks/portal-parts-BdR29P7z.js +285 -0
- package/dist/_chunks/portal-parts-BdR29P7z.js.map +1 -0
- package/dist/_chunks/{privacy-mask-DJ1gee4c.js → privacy-mask-C19dJFMk.js} +5 -5
- package/dist/_chunks/{privacy-mask-DJ1gee4c.js.map → privacy-mask-C19dJFMk.js.map} +1 -1
- package/dist/_chunks/{product-hub-panel-a8wdVOUt.js → product-hub-panel-K4QbULG7.js} +2 -2
- package/dist/_chunks/{product-hub-panel-a8wdVOUt.js.map → product-hub-panel-K4QbULG7.js.map} +1 -1
- package/dist/_chunks/{registration-form-CwbhtKcy.js → registration-form-DS3RuKHu.js} +2 -2
- package/dist/_chunks/{registration-form-CwbhtKcy.js.map → registration-form-DS3RuKHu.js.map} +1 -1
- package/dist/_chunks/{reserved.agent-W8mR179D.js → reserved.agent-DOzOBUW7.js} +2 -2
- package/dist/_chunks/{reserved.agent-W8mR179D.js.map → reserved.agent-DOzOBUW7.js.map} +1 -1
- package/dist/_chunks/session-countdown-DOx1IBUB.js +232 -0
- package/dist/_chunks/session-countdown-DOx1IBUB.js.map +1 -0
- package/dist/_chunks/{sign-document-CQZVzfpk.js → sign-document-DDZbmYHu.js} +2 -2
- package/dist/_chunks/{sign-document-CQZVzfpk.js.map → sign-document-DDZbmYHu.js.map} +1 -1
- package/dist/_chunks/{signature-field-DjabvRZm.js → signature-field-BjlY_yXH.js} +39 -34
- package/dist/_chunks/signature-field-BjlY_yXH.js.map +1 -0
- package/dist/_chunks/{signature-request-4pGq3YBe.js → signature-request-CHsM_iWi.js} +2 -2
- package/dist/_chunks/{signature-request-4pGq3YBe.js.map → signature-request-CHsM_iWi.js.map} +1 -1
- package/dist/_chunks/{signature-status-chip-pIoQjvH8.js → signature-status-chip-DS9hHwIt.js} +66 -69
- package/dist/_chunks/signature-status-chip-DS9hHwIt.js.map +1 -0
- package/dist/_chunks/signing-end-screen-an9P8DOT.js +1041 -0
- package/dist/_chunks/signing-end-screen-an9P8DOT.js.map +1 -0
- package/dist/_chunks/sms-code-entry-Dgp4GwlM.js +316 -0
- package/dist/_chunks/sms-code-entry-Dgp4GwlM.js.map +1 -0
- package/dist/_chunks/step-up-dialog-C2JqJmCA.js +132 -0
- package/dist/_chunks/step-up-dialog-C2JqJmCA.js.map +1 -0
- package/dist/_chunks/{task-editor-BL2hHxNz.js → task-editor-g1AGfxhr.js} +38 -38
- package/dist/_chunks/{task-editor-BL2hHxNz.js.map → task-editor-g1AGfxhr.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-_b7FRB1x.js → use-appointment-details-read-Dzc6fEzG.js} +6 -6
- package/dist/_chunks/{use-appointment-details-read-_b7FRB1x.js.map → use-appointment-details-read-Dzc6fEzG.js.map} +1 -1
- package/dist/_chunks/use-zoom-drilldown-Cr1baU5X.js +221 -0
- package/dist/_chunks/use-zoom-drilldown-Cr1baU5X.js.map +1 -0
- package/dist/_chunks/{user-x-DYszNtIg.js → user-x-BJZg4kaP.js} +8 -19
- package/dist/_chunks/user-x-BJZg4kaP.js.map +1 -0
- package/dist/_chunks/{verify-identity-types-CxtrBXsZ.js → verify-identity-types-C6Bam8v6.js} +2 -2
- package/dist/_chunks/{verify-identity-types-CxtrBXsZ.js.map → verify-identity-types-C6Bam8v6.js.map} +1 -1
- package/dist/agent-catalog.json +723 -364
- package/dist/agent-i18n/en.json +75 -18
- package/dist/browser-support.js +1 -1
- package/dist/components/_shared/is-safe-url.d.ts +3 -1
- package/dist/components/_shared/is-safe-url.d.ts.map +1 -1
- package/dist/components/agenda-card/index.js +2 -2
- package/dist/components/agenda-tray/index.js +1 -1
- package/dist/components/appointment-card/appointment-card.d.ts +45 -0
- package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
- package/dist/components/appointment-card/appointment-tray.agent.d.ts.map +1 -1
- package/dist/components/appointment-card/appointment-tray.d.ts +11 -0
- package/dist/components/appointment-card/appointment-tray.d.ts.map +1 -1
- package/dist/components/appointment-card/index.js +3 -3
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/appointment-peek/index.js +1 -1
- package/dist/components/appointment-timeline/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/calendar/index.js +1 -1
- package/dist/components/calendar-event-card/index.js +1 -1
- package/dist/components/care-plan-card/index.js +1 -1
- package/dist/components/care-plan-entry-card/index.js +1 -1
- package/dist/components/care-plan-header/index.js +1 -1
- package/dist/components/clinical-note-card/index.js +1 -1
- package/dist/components/document-preview/document-preview.agent.d.ts.map +1 -1
- package/dist/components/document-preview/document-preview.d.ts +61 -7
- package/dist/components/document-preview/document-preview.d.ts.map +1 -1
- package/dist/components/document-preview/index.js +1 -1
- package/dist/components/finished-terminal/finished-terminal.d.ts +63 -6
- package/dist/components/finished-terminal/finished-terminal.d.ts.map +1 -1
- package/dist/components/finished-terminal/index.d.ts +1 -1
- package/dist/components/finished-terminal/index.d.ts.map +1 -1
- package/dist/components/finished-terminal/index.js +1 -1
- package/dist/components/index.d.ts +12 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/keypad/index.d.ts +3 -0
- package/dist/components/keypad/index.d.ts.map +1 -0
- package/dist/components/keypad/index.js +6 -0
- package/dist/components/keypad/index.js.map +1 -0
- package/dist/components/keypad/keypad.d.ts +54 -0
- package/dist/components/keypad/keypad.d.ts.map +1 -0
- package/dist/components/keypad-button/index.d.ts +3 -0
- package/dist/components/keypad-button/index.d.ts.map +1 -0
- package/dist/components/keypad-button/index.js +6 -0
- package/dist/components/keypad-button/index.js.map +1 -0
- package/dist/components/keypad-button/keypad-button.d.ts +33 -0
- package/dist/components/keypad-button/keypad-button.d.ts.map +1 -0
- package/dist/components/message-card/index.js +2 -2
- package/dist/components/message-tray/index.js +1 -1
- package/dist/components/note-timeline/index.js +1 -1
- package/dist/components/notes-panel/index.js +1 -1
- package/dist/components/operator-hero/index.js +1 -1
- package/dist/components/otp-input/index.js +1 -1
- package/dist/components/otp-input/otp-input.d.ts +11 -0
- package/dist/components/otp-input/otp-input.d.ts.map +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/payment-card/index.js +1 -1
- package/dist/components/pdf-viewer/index.js +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
- package/dist/components/pdf-viewer/pdf-viewer.d.ts +7 -0
- package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
- package/dist/components/pin-entry/index.d.ts +3 -0
- package/dist/components/pin-entry/index.d.ts.map +1 -0
- package/dist/components/pin-entry/index.js +5 -0
- package/dist/components/pin-entry/index.js.map +1 -0
- package/dist/components/pin-entry/pin-entry.agent.d.ts +4 -0
- package/dist/components/pin-entry/pin-entry.agent.d.ts.map +1 -0
- package/dist/components/pin-entry/pin-entry.d.ts +64 -0
- package/dist/components/pin-entry/pin-entry.d.ts.map +1 -0
- package/dist/components/pin-indicator/index.d.ts +3 -0
- package/dist/components/pin-indicator/index.d.ts.map +1 -0
- package/dist/components/pin-indicator/index.js +9 -0
- package/dist/components/pin-indicator/index.js.map +1 -0
- package/dist/components/pin-indicator/pin-indicator.d.ts +34 -0
- package/dist/components/pin-indicator/pin-indicator.d.ts.map +1 -0
- package/dist/components/product-hub-tray/index.js +2 -2
- package/dist/components/session-countdown/index.js +1 -1
- package/dist/components/session-countdown/session-countdown.d.ts +19 -0
- package/dist/components/session-countdown/session-countdown.d.ts.map +1 -1
- package/dist/components/sign-document/index.js +1 -1
- package/dist/components/signature-field/index.js +1 -1
- package/dist/components/signature-field/signature-field.d.ts +17 -6
- package/dist/components/signature-field/signature-field.d.ts.map +1 -1
- package/dist/components/signature-status-chip/index.js +1 -1
- package/dist/components/signature-status-chip/signature-status-chip.d.ts +3 -2
- package/dist/components/signature-status-chip/signature-status-chip.d.ts.map +1 -1
- package/dist/components/sms-code-entry/index.d.ts +3 -0
- package/dist/components/sms-code-entry/index.d.ts.map +1 -0
- package/dist/components/sms-code-entry/index.js +5 -0
- package/dist/components/sms-code-entry/index.js.map +1 -0
- package/dist/components/sms-code-entry/sms-code-entry.agent.d.ts +4 -0
- package/dist/components/sms-code-entry/sms-code-entry.agent.d.ts.map +1 -0
- package/dist/components/sms-code-entry/sms-code-entry.d.ts +156 -0
- package/dist/components/sms-code-entry/sms-code-entry.d.ts.map +1 -0
- package/dist/components/step-up-dialog/index.d.ts +3 -0
- package/dist/components/step-up-dialog/index.d.ts.map +1 -0
- package/dist/components/step-up-dialog/index.js +5 -0
- package/dist/components/step-up-dialog/index.js.map +1 -0
- package/dist/components/step-up-dialog/step-up-dialog.d.ts +108 -0
- package/dist/components/step-up-dialog/step-up-dialog.d.ts.map +1 -0
- package/dist/components/task-editor/index.js +1 -1
- package/dist/components/workflow-status/index.js +1 -1
- package/dist/core.css +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/use-signing-session.d.ts +7 -2
- package/dist/hooks/use-signing-session.d.ts.map +1 -1
- package/dist/host-compat.css +10 -1
- package/dist/i18n/locales/ar.d.ts +512 -1
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +509 -3
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +512 -1
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +517 -4
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +512 -1
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +512 -4
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +514 -1
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +520 -4
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +512 -1
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +510 -4
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +512 -1
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +510 -4
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +512 -1
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +510 -4
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +512 -1
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +517 -4
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +512 -1
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +510 -4
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +512 -1
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +517 -4
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +512 -1
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +517 -4
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +512 -1
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +517 -4
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +512 -1
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +517 -4
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +512 -1
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +509 -3
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +512 -1
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +510 -4
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +512 -1
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +510 -4
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +512 -1
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +512 -4
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +512 -1
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +510 -4
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +1271 -1204
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +513 -2
- package/dist/locales/de.json +514 -3
- package/dist/locales/el.json +514 -3
- package/dist/locales/en.json +514 -3
- package/dist/locales/es.json +514 -3
- package/dist/locales/fr.json +514 -3
- package/dist/locales/hi.json +514 -3
- package/dist/locales/it.json +514 -3
- package/dist/locales/ja.json +514 -3
- package/dist/locales/nl.json +514 -3
- package/dist/locales/pl.json +514 -3
- package/dist/locales/pt.json +514 -3
- package/dist/locales/ro.json +514 -3
- package/dist/locales/ru.json +513 -2
- package/dist/locales/sq.json +514 -3
- package/dist/locales/sv.json +514 -3
- package/dist/locales/tr.json +514 -3
- package/dist/locales/zh.json +514 -3
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/check-in-documents/check-in-documents.d.ts +61 -0
- package/dist/patterns/check-in-documents/check-in-documents.d.ts.map +1 -0
- package/dist/patterns/check-in-documents/check-in-signable-document.d.ts +32 -0
- package/dist/patterns/check-in-documents/check-in-signable-document.d.ts.map +1 -0
- package/dist/patterns/check-in-documents/index.d.ts +4 -0
- package/dist/patterns/check-in-documents/index.d.ts.map +1 -0
- package/dist/patterns/check-in-documents/index.js +5 -0
- package/dist/patterns/check-in-documents/index.js.map +1 -0
- package/dist/patterns/error-page/index.js +1 -1
- package/dist/patterns/patient-account-settings/index.d.ts +4 -0
- package/dist/patterns/patient-account-settings/index.d.ts.map +1 -0
- package/dist/patterns/patient-account-settings/index.js +5 -0
- package/dist/patterns/patient-account-settings/index.js.map +1 -0
- package/dist/patterns/patient-account-settings/patient-account-settings-panels.d.ts +36 -0
- package/dist/patterns/patient-account-settings/patient-account-settings-panels.d.ts.map +1 -0
- package/dist/patterns/patient-account-settings/patient-account-settings.d.ts +94 -0
- package/dist/patterns/patient-account-settings/patient-account-settings.d.ts.map +1 -0
- package/dist/patterns/patient-account-settings/patient-account-settings.types.d.ts +91 -0
- package/dist/patterns/patient-account-settings/patient-account-settings.types.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/index.d.ts +20 -0
- package/dist/patterns/patient-check-in/index.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/index.js +13 -0
- package/dist/patterns/patient-check-in/index.js.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-changed.d.ts +33 -0
- package/dist/patterns/patient-check-in/patient-check-in-changed.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-connection-notice.d.ts +29 -0
- package/dist/patterns/patient-check-in/patient-check-in-connection-notice.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-done.d.ts +25 -0
- package/dist/patterns/patient-check-in/patient-check-in-done.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-entry.d.ts +29 -0
- package/dist/patterns/patient-check-in/patient-check-in-entry.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-hub-empty.d.ts +23 -0
- package/dist/patterns/patient-check-in/patient-check-in-hub-empty.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-hub.d.ts +61 -0
- package/dist/patterns/patient-check-in/patient-check-in-hub.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-personal-data.d.ts +73 -0
- package/dist/patterns/patient-check-in/patient-check-in-personal-data.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-privacy.d.ts +9 -0
- package/dist/patterns/patient-check-in/patient-check-in-privacy.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-resume.d.ts +29 -0
- package/dist/patterns/patient-check-in/patient-check-in-resume.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-shell.d.ts +60 -0
- package/dist/patterns/patient-check-in/patient-check-in-shell.d.ts.map +1 -0
- package/dist/patterns/patient-check-in/patient-check-in-types.d.ts +92 -0
- package/dist/patterns/patient-check-in/patient-check-in-types.d.ts.map +1 -0
- package/dist/patterns/patient-portal/index.d.ts +12 -0
- package/dist/patterns/patient-portal/index.d.ts.map +1 -0
- package/dist/patterns/patient-portal/index.js +13 -0
- package/dist/patterns/patient-portal/index.js.map +1 -0
- package/dist/patterns/patient-portal/portal-appointments.d.ts +70 -0
- package/dist/patterns/patient-portal/portal-appointments.d.ts.map +1 -0
- package/dist/patterns/patient-portal/portal-details.d.ts +148 -0
- package/dist/patterns/patient-portal/portal-details.d.ts.map +1 -0
- package/dist/patterns/patient-portal/portal-documents.d.ts +74 -0
- package/dist/patterns/patient-portal/portal-documents.d.ts.map +1 -0
- package/dist/patterns/patient-portal/portal-format.d.ts +14 -0
- package/dist/patterns/patient-portal/portal-format.d.ts.map +1 -0
- package/dist/patterns/patient-portal/portal-home.d.ts +71 -0
- package/dist/patterns/patient-portal/portal-home.d.ts.map +1 -0
- package/dist/patterns/patient-portal/portal-parts.d.ts +107 -0
- package/dist/patterns/patient-portal/portal-parts.d.ts.map +1 -0
- package/dist/patterns/patient-portal/portal-shell.d.ts +84 -0
- package/dist/patterns/patient-portal/portal-shell.d.ts.map +1 -0
- package/dist/patterns/patient-portal/portal-types.d.ts +157 -0
- package/dist/patterns/patient-portal/portal-types.d.ts.map +1 -0
- package/dist/patterns/patient-sign-in/index.d.ts +7 -0
- package/dist/patterns/patient-sign-in/index.d.ts.map +1 -0
- package/dist/patterns/patient-sign-in/index.js +15 -0
- package/dist/patterns/patient-sign-in/index.js.map +1 -0
- package/dist/patterns/patient-sign-in/patient-card.d.ts +74 -0
- package/dist/patterns/patient-sign-in/patient-card.d.ts.map +1 -0
- package/dist/patterns/patient-sign-in/patient-sign-in-email.d.ts +109 -0
- package/dist/patterns/patient-sign-in/patient-sign-in-email.d.ts.map +1 -0
- package/dist/patterns/patient-sign-in/patient-sign-in-pin.d.ts +157 -0
- package/dist/patterns/patient-sign-in/patient-sign-in-pin.d.ts.map +1 -0
- package/dist/patterns/patient-sign-in/patient-sign-in-steps.d.ts +143 -0
- package/dist/patterns/patient-sign-in/patient-sign-in-steps.d.ts.map +1 -0
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/signature-request/index.js +1 -1
- package/dist/patterns/signing/index.d.ts +25 -0
- package/dist/patterns/signing/index.d.ts.map +1 -0
- package/dist/patterns/signing/index.js +16 -0
- package/dist/patterns/signing/index.js.map +1 -0
- package/dist/patterns/signing/multi-field-signer.d.ts +117 -0
- package/dist/patterns/signing/multi-field-signer.d.ts.map +1 -0
- package/dist/patterns/signing/signing-awaiting-screen.d.ts +25 -0
- package/dist/patterns/signing/signing-awaiting-screen.d.ts.map +1 -0
- package/dist/patterns/signing/signing-chrome.d.ts +30 -0
- package/dist/patterns/signing/signing-chrome.d.ts.map +1 -0
- package/dist/patterns/signing/signing-document-screen.d.ts +87 -0
- package/dist/patterns/signing/signing-document-screen.d.ts.map +1 -0
- package/dist/patterns/signing/signing-end-screen.d.ts +27 -0
- package/dist/patterns/signing/signing-end-screen.d.ts.map +1 -0
- package/dist/patterns/signing/signing-finished-screen.d.ts +34 -0
- package/dist/patterns/signing/signing-finished-screen.d.ts.map +1 -0
- package/dist/patterns/signing/signing-footer.d.ts +56 -0
- package/dist/patterns/signing/signing-footer.d.ts.map +1 -0
- package/dist/patterns/signing/signing-handoff-screen.d.ts +37 -0
- package/dist/patterns/signing/signing-handoff-screen.d.ts.map +1 -0
- package/dist/patterns/signing/signing-message-dialog.d.ts +29 -0
- package/dist/patterns/signing/signing-message-dialog.d.ts.map +1 -0
- package/dist/patterns/signing/signing-progress-chip.d.ts +27 -0
- package/dist/patterns/signing/signing-progress-chip.d.ts.map +1 -0
- package/dist/patterns/signing/signing-roster.d.ts +44 -0
- package/dist/patterns/signing/signing-roster.d.ts.map +1 -0
- package/dist/patterns/signing/signing-staff-id-confirmation.d.ts +49 -0
- package/dist/patterns/signing/signing-staff-id-confirmation.d.ts.map +1 -0
- package/dist/patterns/verify-identity/index.js +1 -1
- package/dist/tokens.css +1 -1
- package/package.json +49 -1
- package/dist/_chunks/appointment-card-OAOur8lH.js +0 -434
- package/dist/_chunks/appointment-card-OAOur8lH.js.map +0 -1
- package/dist/_chunks/appointment-tray-DSFqO5Rm.js +0 -193
- package/dist/_chunks/appointment-tray-DSFqO5Rm.js.map +0 -1
- package/dist/_chunks/document-preview-_kQ9QvZV.js +0 -291
- package/dist/_chunks/document-preview-_kQ9QvZV.js.map +0 -1
- package/dist/_chunks/error-page-B0fGNTRB.js.map +0 -1
- package/dist/_chunks/finished-terminal-FR8uc_Ws.js +0 -122
- package/dist/_chunks/finished-terminal-FR8uc_Ws.js.map +0 -1
- package/dist/_chunks/is-safe-url-DkETxeHz.js +0 -7
- package/dist/_chunks/is-safe-url-DkETxeHz.js.map +0 -1
- package/dist/_chunks/otp-input-gV1446Dw.js +0 -301
- package/dist/_chunks/otp-input-gV1446Dw.js.map +0 -1
- package/dist/_chunks/pdf-viewer-BnBKdx0y.js.map +0 -1
- package/dist/_chunks/session-countdown-C4tzbJVc.js +0 -223
- package/dist/_chunks/session-countdown-C4tzbJVc.js.map +0 -1
- package/dist/_chunks/signature-field-DjabvRZm.js.map +0 -1
- package/dist/_chunks/signature-status-chip-pIoQjvH8.js.map +0 -1
- package/dist/_chunks/use-zoom-drilldown-qCX34w9I.js +0 -210
- package/dist/_chunks/use-zoom-drilldown-qCX34w9I.js.map +0 -1
- 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":";;;;;;;;;;;;;;;;AA2DA,SAASA,EAASC,GAA8C;AAC9D,SAAOA,IAAQ,GAAGA,EAAM,KAAK,IAAIA,EAAM,IAAI,IAAIA,EAAM,QAAQ,EAAE,KAAK;AACtE;AAGA,SAASC,MAAeC,GAAoD;AAE1E,SADaA,EAAI,OAAO,OAAO,EAAE,KAAK,GAAG,KAC1B;AACjB;AAGA,SAASC,EAAeH,GAA8C;;AACpE,QAAM,EAAE,GAAAI,EAAA,IAAMC,EAAe,IAAI;AACjC,MAAKL,GACL;AAAA,SAAIM,IAAAN,EAAM,SAAN,QAAAM,EAAY,eAAeN,EAAM;AACrC,YAAQA,EAAM,MAAA;AAAA,MACZ,KAAK;AACH,eAAOI,EAAE,2CAA2C;AAAA,MACtD,KAAK;AACH,eAAOA,EAAE,8CAA8C;AAAA,MACzD,KAAK;AACH,eAAOA,EAAE,yCAAyC;AAAA,MACpD,KAAK;AACH,eAAOA,EAAE,0CAA0C;AAAA,IAAA;AAAA;AAEzD;AA4BA,SAASG,EAAW;AAAA,EAClB,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,eAAAC;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AACF,GAAoB;AAClB,QAAM,EAAE,GAAApB,EAAA,IAAMC,EAAe,IAAI,GAC3BoB,IAAQ,IAAId,CAAY,IACxBe,IAAOC,EAA0B,IAAI,GACrCC,IAAaV,KAAUG,MAAiB;AAC9C,SACE,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,kBAAe;AAAA,MACf,eAAarB;AAAA,MACb,aAAWC;AAAA,MACX,WAAU;AAAA,MACV,UAAU,CAACqB,MAAsC;;AAE/C,YADAA,EAAM,eAAA,GACF,CAACX,EAAW;AAGhB,cAAMY,IAAS,SAAS;AACxB,QAAIA,aAAkB,eAAeA,MAAWL,EAAK,aACnDpB,IAAAoB,EAAK,YAAL,QAAApB,EAAc,UAEhBgB,EAAA;AAAA,MACF;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAO,EAAC,OAAA,EAAI,WAAU,kDACZ,UAAA;AAAA,UAAAjB,IACC,gBAAAoB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAInB;AAAA,cACJ,WAAU;AAAA,cAET,UAAAD;AAAA,YAAA;AAAA,UAAA,IAED;AAAA,UACJ,gBAAAoB,EAACP,GAAA,EAAM,WAAU,6CACd,UAAAf,GACH;AAAA,UACCI,IACC,gBAAAkB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAIjB;AAAA,cACJ,WAAU;AAAA,cAET,UAAAD;AAAA,YAAA;AAAA,UAAA,IAED;AAAA,QAAA,GACN;AAAA,QACCE,IACC,gBAAAgB,EAACC,GAAA,EAAM,SAAQ,SAAQ,IAAIhB,GACzB,UAAA,gBAAAe,EAACC,EAAM,aAAN,EAAmB,UAAAjB,EAAA,CAAM,GAC5B,IACE;AAAA,QACHQ;AAAA,QACD,gBAAAK,EAAC,OAAA,EAAI,WAAU,mDACb,UAAA;AAAA,UAAA,gBAAAG;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,KAAKR;AAAA,cACL,MAAK;AAAA,cACL,QAAO;AAAA,cACP,WAAU;AAAA,cACV,eAAaL;AAAA,cACb,UAAU,CAACF;AAAA,cACX,SAASS;AAAA,cAER,UAAAA,IAAaxB,EAAE,qCAAqC,IAAIgB;AAAA,YAAA;AAAA,UAAA;AAAA,UAE3D,gBAAAY;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,QAAO;AAAA,cACP,WAAU;AAAA,cACV,eAAY;AAAA,cACZ,UAAUhB;AAAA,cACV,SAASK;AAAA,cAER,YAAE,qCAAqC;AAAA,YAAA;AAAA,UAAA;AAAA,QAC1C,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGN;AAOO,SAASY,GAAiB;AAAA,EAC/B,KAAAC;AAAA,EACA,cAAAzB;AAAA,EACA,QAAAO;AAAA,EACA,aAAAmB;AAAA,EACA,OAAArC;AAAA,EACA,gBAAAsC;AAAA,EACA,UAAAf;AACF,GAAqB;AACnB,QAAM,EAAE,GAAAnB,EAAA,IAAMC,EAAe,IAAI,GAC3B,CAACkC,GAAOC,CAAQ,IAAIC,EAAS,EAAE,GAC/BC,IAAQf,EAAyB,IAAI,GACrCgB,IAAUxC,EAAeH,CAAK;AAEpC,SAAA4C,EAAU,MAAM;;AACd,IAAIP,OAAa/B,IAAAoC,EAAM,YAAN,QAAApC,EAAe;AAAA,EAGlC,GAAG,CAAA,CAAE,GACLuC,EAAe9C,EAASC,CAAK,GAAGkB,GAAQ,MAAA;;AAAM,YAAAZ,IAAAoC,EAAM,YAAN,gBAAApC,EAAe;AAAA,GAAO,GAGlE,gBAAA0B;AAAA,IAACzB;AAAA,IAAA;AAAA,MACC,OAAO6B,EAAI;AAAA,MACX,MAAK;AAAA,MACL,OAAOhC,EAAE,oCAAoC;AAAA,MAC7C,cAAAO;AAAA,MACA,aAAaP,EAAE,mCAAmC;AAAA,MAClD,QAAAc;AAAA,MACA,WAAWqB,EAAM,KAAA,EAAO,SAAS;AAAA,MACjC,aAAanC,EAAE,mCAAmC;AAAA,MAClD,cAAa;AAAA,MACb,UAAU,MAAMkC,EAAe,EAAE,OAAOF,EAAI,IAAI,MAAM,SAAS,OAAAG,GAAO;AAAA,MACtE,UAAAhB;AAAA,MAEA,UAAA,gBAAAS;AAAA,QAACc;AAAA,QAAA;AAAA,UACC,OAAO1C,EAAE,oCAAoC;AAAA,UAC7C,OAAOJ,KAAS,CAACkB,IAASyB,IAAU;AAAA,UAEpC,UAAA,gBAAAX;AAAA,YAACe;AAAA,YAAA;AAAA,cACC,KAAKL;AAAA,cACL,OAAOH;AAAA,cACP,UAAU,CAACT,MAAUU,EAASV,EAAM,OAAO,KAAK;AAAA,cAChD,cAAa;AAAA,cACb,0BAAwB;AAAA,cACxB,cAAc;AAAA,cACd,UAAUZ;AAAA,cACV,cAAW;AAAA,YAAA;AAAA,UAAA;AAAA,QACb;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAGN;AAUO,SAAS8B,GAAkB;AAAA,EAChC,KAAAZ;AAAA,EACA,cAAAzB;AAAA,EACA,WAAAsC;AAAA,EACA,QAAA/B;AAAA,EACA,aAAAmB;AAAA,EACA,OAAArC;AAAA,EACA,gBAAAsC;AAAA,EACA,UAAAf;AACF,GAAqB;AACnB,QAAM,EAAE,GAAAnB,EAAA,IAAMC,EAAe,IAAI,GAC3B,CAAC6C,GAAKC,CAAM,IAAIV,EAAS,EAAE,GAC3B,CAACW,GAAQC,CAAS,IAAIZ,EAAS,EAAE,GACjCa,IAAW3B,EAAuB,IAAI,GACtC4B,IAAQ5B,EAAyB,IAAI,GACrCV,IAAUuC,EAAA,GACVzC,IAAgByC,EAAA,GAChBb,IAAUxC,EAAeH,CAAK,GAC9ByD,IAAazD,MAAU,QAAQA,EAAM,SAAS,iBAC9C0D,IAAYD,KAAc,CAACvC;AAEjC,SAAA0B,EAAU,MAAM;;AACd,IAAIP,OAAa/B,IAAAgD,EAAS,YAAT,QAAAhD,EAAkB;AAAA,EAGrC,GAAG,CAAA,CAAE,GACLuC,EAAe9C,EAASC,CAAK,GAAGkB,GAAQ,MAAM;;AAC5C,IAAIuC,KACFN,EAAO,EAAE,IACT7C,IAAAgD,EAAS,YAAT,QAAAhD,EAAkB,YAElBqD,IAAAJ,EAAM,YAAN,QAAAI,EAAe;AAAA,EAEnB,CAAC,GAGC,gBAAA9B;AAAA,IAACtB;AAAA,IAAA;AAAA,MACC,OAAO6B,EAAI;AAAA,MACX,MAAK;AAAA,MACL,OAAOhC,EAAE,qCAAqC;AAAA,MAC9C,cAAAO;AAAA,MACA,aAAaP,EAAE,uCAAuC;AAAA,MACtD,eAAAW;AAAA,MACA,OAAO2C,IAAYf,IAAU;AAAA,MAC7B,SAAA1B;AAAA,MACA,QAAAC;AAAA,MACA,WAAWgC,EAAI,WAAWD,KAAaG,EAAO,KAAA,EAAO,SAAS;AAAA,MAC9D,aAAahD,EAAE,mCAAmC;AAAA,MAClD,cAAa;AAAA,MACb,UAAU,MACRkC,EAAe;AAAA,QACb,OAAOF,EAAI;AAAA,QACX,MAAM;AAAA,QACN,YAAYc;AAAA,QACZ,QAAAE;AAAA,MAAA,CACD;AAAA,MAEH,UAAA7B;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAS,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAA;AAAA,UAAC4B;AAAA,UAAA;AAAA,YACC,KAAKN;AAAA,YACL,QAAQL;AAAA,YACR,OAAO7C,EAAE,yCAAyC;AAAA,YAClD,OAAO8C;AAAA,YACP,UAAUC;AAAA,YACV,OAAOO,KAAaR,EAAI,WAAW;AAAA,YACnC,UAAUhC;AAAA,YACV,cAAa;AAAA,YAEb,oBAAkBjB;AAAA,cAChBc;AAAA,cACA2C,IAAYzC,IAAU;AAAA,YAAA;AAAA,UACxB;AAAA,QAAA,GAEJ;AAAA,QACA,gBAAAe;AAAA,UAACc;AAAA,UAAA;AAAA,YACC,OAAO1C,EAAE,wCAAwC;AAAA,YACjD,QAAOJ,KAAA,gBAAAA,EAAO,UAAS,mBAAmB,CAACkB,IAASyB,IAAU;AAAA,YAE9D,UAAA,gBAAAX;AAAA,cAAC6B;AAAA,cAAA;AAAA,gBACC,KAAKN;AAAA,gBACL,UAAU,CAACO,MAAST,EAAUS,CAAI;AAAA,gBAClC,UAAU5C;AAAA,cAAA;AAAA,YAAA;AAAA,UACZ;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAOA,MAAM6C,IAAuB,CAAC,WAAW,OAAO,SAAS;AAGzD,SAASC,EAAchE,GAAuD;AAC5E,SAAKA,IACEA,EAAM,SAAS,sBAAsB,YAAY,QADrC;AAErB;AAOO,SAASiE,GAAe;AAAA,EAC7B,KAAA7B;AAAA,EACA,cAAAzB;AAAA,EACA,WAAAsC;AAAA,EACA,QAAA/B;AAAA,EACA,aAAAmB;AAAA,EACA,OAAArC;AAAA,EACA,gBAAAsC;AAAA,EACA,UAAAf;AACF,GAAqB;AACnB,QAAM,EAAE,GAAAnB,GAAG,MAAA8D,MAAS7D,EAAe,IAAI,GAEjC,CAACO,GAAMuD,CAAO,IAAI1B,EAAkB,MAAMuB,EAAchE,CAAK,CAAC,GAC9D,CAACoE,GAAYC,CAAa,IAAI5B,EAAS,EAAE,GACzC,CAAC6B,GAAQC,CAAS,IAAI9B,EAAS,EAAE,GACjC,CAAC+B,GAAYC,CAAa,IAAIhC,EAAS,EAAE,GACzCa,IAAW3B,EAAuB,IAAI,GACtCV,IAAUuC,EAAA,GACV3C,IAAS2C,EAAA,GACTb,IAAUxC,EAAeH,CAAK,GAE9B0D,IAAY1D,MAAU,QAAQ,CAACkB,KAAUN,MAASoD,EAAchE,CAAK,GAIrE0E,IAAY/C,EAAO,EAAI;AAC7B,EAAAiB,EAAU,MAAM;;AACd,UAAM+B,IAAQD,EAAU;AAExB,IADAA,EAAU,UAAU,IAChB,EAAAC,KAAS,CAACtC,QACd/B,IAAAgD,EAAS,YAAT,QAAAhD,EAAkB;AAAA,EAGpB,GAAG,CAACM,CAAI,CAAC,GAGTiC,EAAe9C,EAASC,CAAK,GAAGkB,GAAQ,MAAM;AAC5C,IAAAqD,EAAU,EAAE,GACZE,EAAc,EAAE,IACZzE,KAAA,gBAAAA,EAAO,UAAS,uBAClBqE,EAAc,EAAE,GAChBF,EAAQ,SAAS,KAEjBA,EAAQ,KAAK;AAAA,EAEjB,CAAC;AAED,QAAMS,IAAQb,EAAU,QAAQnD,CAAI,GAC9BiE,IAAOjE,MAAS,WAChBkE,IACJlE,MAAS,YAAYwD,IAAaxD,MAAS,QAAQ0D,IAASE,GACxDO,IACJnE,MAAS,YACLyD,IACAzD,MAAS,QACP2D,IACAE,GACF/D,IAEAN,EADJQ,MAAS,YACH,4CACFA,MAAS,QACL,wCACA,yCAHuC,GAI3CoE,IAEA5E,EADJQ,MAAS,YACH,4CACFA,MAAS,QACL,wCACA,yCAHuC;AAKjD,SACE,gBAAAoB;AAAA,IAACzB;AAAA,IAAA;AAAA,MACC,OAAO6B,EAAI;AAAA,MACX,MAAK;AAAA,MACL,OAAA1B;AAAA,MACA,cAAAC;AAAA,MACA,QAAAE;AAAA,MACA,MAAMT,EAAE,qCAAqC;AAAA,QAC3C,SAAS6E,EAAaL,IAAQ,GAAGV,EAAK,QAAQ;AAAA,QAC9C,OAAOe,EAAalB,EAAU,QAAQG,EAAK,QAAQ;AAAA,MAAA,CACpD;AAAA,MACD,OAAOR,IAAYf,IAAU;AAAA,MAC7B,SAAA1B;AAAA,MACA,QAAAC;AAAA,MACA,WAAW4D,EAAO,WAAW7B;AAAA,MAC7B,aAEM7C,EADJyE,IACM,sCACA,uCADmC;AAAA,MAG3C,cAAcA,IAAO,gBAAgB;AAAA,MACrC,UAAU,MAAM;AACd,QAAIA,IACFvC,EAAe;AAAA,UACb,OAAOF,EAAI;AAAA,UACX,MAAM;AAAA,UACN,YAAAgC;AAAA,UACA,QAAAE;AAAA,UACA,YAAAE;AAAA,QAAA,CACD,IAEDL,EAAQJ,EAAUa,IAAQ,CAAC,KAAK,SAAS;AAAA,MAE7C;AAAA,MACA,UAAArD;AAAA,MAEA,UAAA,gBAAAS,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA,gBAAAA;AAAA,QAAC4B;AAAA,QAAA;AAAA,UAEC,KAAKN;AAAA,UACL,QAAQL;AAAA,UACR,OAAA+B;AAAA,UACA,OAAOF;AAAA,UACP,UAAUC;AAAA,UACV,OAAOrB,KAAaoB,EAAO,WAAW;AAAA,UACtC,UAAU5D;AAAA,UACV,cACEN,MAAS,YAAY,qBAAqB;AAAA,UAG5C,oBAAkBX;AAAA,YAChBY;AAAA,YACA6C,IAAYzC,IAAU;AAAA,UAAA;AAAA,QACxB;AAAA,QAfKL;AAAA,MAAA,EAgBP,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;ACpcA,SAASsE,GAAgB;AAAA,EACvB,KAAA9C;AAAA,EACA,SAAA+C;AAAA,EACA,YAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,YAAAC;AAAA,EACA,WAAAtC;AAAA,EACA,QAAA/B;AAAA,EACA,OAAAlB;AAAA,EACA,QAAAwF;AAAA,EACA,UAAAjE;AAAA,EACA,gBAAAe;AACF,GAAyB;AACvB,QAAM,EAAE,GAAAlC,EAAA,IAAMC,EAAe,IAAI,GAC3BoF,IAAe9D,EAA0B,IAAI,GAI7C+D,IAAa/D,EAAOwD,CAAO;AACjC,EAAAvC,EAAU,MAAM;;AACd,IAAI8C,EAAW,YAAYP,MAC3BO,EAAW,UAAUP,GACjB,CAACA,KAAW,CAACC,KAAc,CAACC,OAAW/E,IAAAmF,EAAa,YAAb,QAAAnF,EAAsB;AAAA,EACnE,GAAG,CAAC6E,GAASC,GAAYC,CAAS,CAAC;AAInC,QAAMM,IAAiBhE,EAAO,EAAK;AACnC,EAAKwD,MAASQ,EAAe,UAAU;AAGvC,QAAMX,IACJ5C,EAAI,UACHA,EAAI,SAAS,UACVhC,EAAE,kCAAkC,IACpCgC,EAAI,SAAS,WACXhC,EAAE,mCAAmC,IACrCgC,EAAI,SAAS,QACXhC,EAAE,gCAAgC,IAClC;AAEV,MAAIwF;AACJ,EAAIxD,EAAI,SAAS,QACfwD,IAAQxF,EAAE,sCAAsC,IACvCgC,EAAI,UACbwD,IAAQN,IACNO,OAEA,gBAAA7D;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKI,EAAI,SAAS,YAAYA,EAAI,SAAS,UAAU,QAAQ;AAAA,MAE5D,UAAAA,EAAI;AAAA,IAAA;AAAA,EAAA;AAOX,QAAM0D,IAAa1D,EAAI,SAAS,cAAc,CAACkD,GACzCS,IAAYZ,KAAW,CAACG,GACxBU,IAA+B;AAAA,IACnC,KAAA5D;AAAA,IACA,cAAcmD;AAAA,IACd,WAAAtC;AAAA,IACA,QAAA/B;AAAA,IACA,OAAAlB;AAAA,IACA,aAAa2F,EAAe;AAAA,IAC5B,gBAAArD;AAAA,IACA,UAAAf;AAAA,EAAA;AAGF,SACE,gBAAAM;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,kBAAe;AAAA,MACf,eAAaO,EAAI;AAAA,MACjB,aAAWA,EAAI;AAAA,MACf,WACE;AAAA;AAAA,OAGC2D,KAAa3D,EAAI,SAAS,UACvB,6BACA;AAAA,MAGN,UAAA;AAAA,QAAA,gBAAAP,EAAC,OAAA,EAAI,WAAU,sFACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6DACZ,UAAA;AAAA,YAAAmD,IACC,gBAAAhD,EAAC,QAAA,EAAK,WAAU,sDACb,aACH,IACE;AAAA,YACH4D,IACC,gBAAA5D,EAAC,QAAA,EAAK,WAAU,+CACb,aACH,IACE;AAAA,UAAA,GACN;AAAA,UACC8D,KAAc,CAACC,IACd,gBAAA/D;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,KAAKuD;AAAA,cACL,MAAK;AAAA,cACL,QAAO;AAAA,cACP,WAAU;AAAA,cACV,eAAa,UAAUrD,EAAI,IAAI;AAAA,cAC/B,UAAUA,EAAI;AAAA,cACd,SAAS,MAAM;AACb,gBAAAuD,EAAe,UAAU,IACzBH,EAAA;AAAA,cACF;AAAA,cAEC,UAAApD,EAAI,gBACFA,EAAI,SAAS,UACVhC,EAAE,qCAAqC,IACvCgC,EAAI,SAAS,WACXhC,EAAE,sCAAsC,IACxCA,EAAE,mCAAmC;AAAA,YAAA;AAAA,UAAA,IAE7C;AAAA,QAAA,GACN;AAAA,QACC2F,KAAa3D,EAAI,SAAS,4BACxBD,IAAA,EAAkB,GAAG6D,GAAY,IAChC;AAAA,QACHD,KAAa3D,EAAI,SAAS,6BACxBY,IAAA,EAAmB,GAAGgD,GAAY,IACjC;AAAA,QACHD,KAAa3D,EAAI,SAAS,0BACxB6B,IAAA,EAAgB,GAAG+B,GAAY,IAC9B;AAAA,QACHb,KAAWG,KAAWlD,EAAI,SAAS,aAClC,gBAAAP,EAAC,OAAA,EAAI,WAAU,2FACb,UAAA;AAAA,UAAA,gBAAAG,EAACiE,IAAA,EAAkB,OAAM,eAAA,CAAe;AAAA,UACxC,gBAAAjE;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,QAAO;AAAA,cACP,WAAU;AAAA,cACV,eAAY;AAAA,cACZ,SAASX;AAAA,cAER,YAAE,qCAAqC;AAAA,YAAA;AAAA,UAAA;AAAA,QAC1C,EAAA,CACF,IACE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGV;AAiGO,SAAS2E,GAAuB;AAAA,EACrC,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,gBAAAhE;AAAA,EACA,cAAAiE;AAAA,EACA,qBAAAC,IAAsB;AAAA,EACtB,sBAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,YAAAC,IAAa;AAAA,EACb,WAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,QAAAC,IAAS;AAAA,EACT,WAAA7D;AAAA,EACA,SAAAqC,IAAU;AAAA,EACV,OAAA5E;AAAA,EACA,cAAAC,IAAe;AAAA,EACf,cAAAoG,IAAe;AAAA,EACf,WAAAC;AACF,GAAgC;AAC9B,QAAM,EAAE,GAAA5G,EAAA,IAAMC,EAAe,IAAI,GAC3B4G,IAASC,GAAiBjE,CAAS,GACnC,CAACkE,GAAcC,CAAU,IAAIC,GAAoC;AAAA,IACrE,OAAOd;AAAA,IACP,cAAcC;AAAA,IACd,UAAUC;AAAA,EAAA,CACX,GACKtB,IAAUgC,KAAgB,MAG1BG,IAAY3F,EAAOgF,CAAU;AACnC,EAAA/D,EAAU,MAAM;AACd,IAAI0E,EAAU,YAAYX,MAC1BW,EAAU,UAAUX,GAChBA,MAAe,QAAQxB,MAAYwB,OAAuB,IAAI;AAAA,EACpE,GAAG,CAACA,GAAYxB,GAASiC,CAAU,CAAC;AAEpC,QAAMG,IAAOpB,EAAS,QAAQ,CAACqB,MAAYA,EAAQ,IAAI,GACjDC,IAAQF,EAAK,WAAW,GACxBG,IAAWf,IACbY,EAAK,KAAK,CAACnF,MAAQA,EAAI,OAAOuE,CAAU,IACxC,QACEgB,IAAc;AAAA,IAClB,OAAOvH,EAAE,oCAAoC;AAAA,IAC7C,QAAQA,EAAE,qCAAqC;AAAA,IAC/C,KAAKA,EAAE,kCAAkC;AAAA,EAAA,GAErCwH,IAAgB;AAAA,IACpB,OAAOxH,EAAE,6CAA6C;AAAA,IACtD,QAAQA,EAAE,8CAA8C;AAAA,IACxD,KAAKA,EAAE,2CAA2C;AAAA,EAAA,GAI9CyH,IAAeH,IAChBd,MACAc,EAAS,SAAS,aAAaC,EAAYD,EAAS,IAAI,IAAI,UAC7D,QACEI,IAAa3C,IACfoC,EAAK,KAAK,CAACnF,MAAQA,EAAI,OAAO+C,CAAO,IACrC,QAGE4C,IAAepH,MAAiB,IAAI,IAAI,GAGxCqH,KAAoClB,IACtC;AAAA,IACE,GAAGA;AAAA;AAAA,IAEH,MACEA,EAAO,SAAS,UACZgB,KAAA,gBAAAA,EAAY,UAAS,WACnB1H,EAAE,iDAAiD,IACnD,SACF0G,EAAO;AAAA,EAAA,IAEf;AAEJ,SACE,gBAAAjF;AAAA,IAACoG;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAOvH,KAASN,EAAE,8BAA8B;AAAA,MAChD,aAAaA,EAAE,oCAAoC;AAAA,MACnD,cAAAO;AAAA,MACA,cAAAoG;AAAA,MACA,SAAAzB;AAAA,MACA,WAAA0B;AAAA,MACA,QAAAZ;AAAA,MACA,cAAchG,EAAE,uCAAuC;AAAA,MACvD,YAAYiG,KAAajG,EAAE,0CAA0C;AAAA,MACrE,SAASyH;AAAA,MAER,UAAA;AAAA,QAAAzB,MAAW,YACV,gBAAApE,EAACkG,IAAA,CAAA,CAAc,IACb9B,MAAW,UACb,gBAAApE;AAAA,UAACmG;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAO/H,EAAE,0CAA0C;AAAA,YACnD,MAAMiG,KAAajG,EAAE,yCAAyC;AAAA,YAC9D,cAAAO;AAAA,YACA,SAAA2F;AAAA,UAAA;AAAA,QAAA,IAEAmB,IACF,gBAAAzF;AAAA,UAACmG;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAO/H,EAAE,0CAA0C;AAAA,YACnD,MAAMA,EAAE,yCAAyC;AAAA,YACjD,cAAAO;AAAA,UAAA;AAAA,QAAA,IAGF,gBAAAkB,EAAAuG,IAAA,EACG,UAAA;AAAA,UAAAP;AAAA;AAAA,YAEC,gBAAA7F,EAACC,GAAA,EAAM,SAAQ,WAAU,UAAS,OAChC,UAAA,gBAAAD,EAACC,EAAM,aAAN,EAAmB,UAAA4F,EAAA,CAAa,EAAA,CACnC;AAAA,cACE;AAAA,UACH1B,EAAS,IAAI,CAACqB,MAAY;AACzB,kBAAMa,sBACH,MAAA,EAAG,WAAU,6EACX,UAAAb,EAAQ,KAAK,IAAI,CAACpF,MACjB,gBAAAJ;AAAA,cAACkD;AAAA,cAAA;AAAA,gBAEC,KAAA9C;AAAA,gBACA,SAAS+C,MAAY/C,EAAI;AAAA,gBACzB,YAAY0E,MAAW;AAAA,gBACvB,WAAW3B,MAAY,QAAQA,MAAY/C,EAAI;AAAA,gBAC/C,SAAAkD;AAAA,gBACA,YACGkC,EAAQ,QACLO,IAAe,IACfA;AAAA,gBAEN,WAAWd;AAAA,gBACX,QAAQP,MAAgBtE,EAAI;AAAA,gBAC5B,QAAOyE,KAAA,gBAAAA,EAAU,WAAUzE,EAAI,KAAKyE,IAAW;AAAA,gBAC/C,QAAQ,MAAMO,EAAWhF,EAAI,EAAE;AAAA,gBAC/B,UAAU,MAAMgF,EAAW,IAAI;AAAA,gBAC/B,gBAAA9E;AAAA,cAAA;AAAA,cAhBKF,EAAI;AAAA,YAAA,CAkBZ,GACH;AAEF,mBAAOoF,EAAQ,QACb,gBAAAxF;AAAA,cAACsG;AAAA,cAAA;AAAA,gBAEC,OAAOd,EAAQ;AAAA,gBACf,cAAA7G;AAAA,gBACA,WAAW6G,EAAQ;AAAA,gBAElB,UAAAa;AAAA,cAAA;AAAA,cALIb,EAAQ;AAAA,YAAA,sBAQd,OAAA,EAAqB,mBAAiBA,EAAQ,IAC5C,UAAAa,EAAA,GADOb,EAAQ,EAElB;AAAA,UAEJ,CAAC;AAAA,UAED,gBAAAxF,EAACuG,IAAA,EAAY,UAAAnI,EAAE,iCAAiC,EAAA,CAAE;AAAA,QAAA,GACpD;AAAA,QAGF,gBAAA4B;AAAA,UAACwG;AAAA,UAAA;AAAA,YACC,QAAQR;AAAA,YACR,SAAA1C;AAAA,YACA,gBACEwC,KAAcA,EAAW,SAAS,aAC9BF,EAAcE,EAAW,IAAI,IAC7B;AAAA,UAAA;AAAA,QAAA;AAAA,MAER;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|