@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.
Files changed (452) hide show
  1. package/dist/_chunks/{agenda-card-B8hV3dZV.js → agenda-card-B9wgX_Ed.js} +2 -2
  2. package/dist/_chunks/{agenda-card-B8hV3dZV.js.map → agenda-card-B9wgX_Ed.js.map} +1 -1
  3. package/dist/_chunks/{agenda-tray-Bu46s3dI.js → agenda-tray-CGcS_qoM.js} +2 -2
  4. package/dist/_chunks/{agenda-tray-Bu46s3dI.js.map → agenda-tray-CGcS_qoM.js.map} +1 -1
  5. package/dist/_chunks/appointment-card-DG3m9yN-.js +504 -0
  6. package/dist/_chunks/appointment-card-DG3m9yN-.js.map +1 -0
  7. package/dist/_chunks/{appointment-peek-DZa6xyUb.js → appointment-peek-BK0tDs4C.js} +2 -2
  8. package/dist/_chunks/{appointment-peek-DZa6xyUb.js.map → appointment-peek-BK0tDs4C.js.map} +1 -1
  9. package/dist/_chunks/{appointment-timeline-DQePqpyH.js → appointment-timeline-BiI2riRZ.js} +2 -2
  10. package/dist/_chunks/{appointment-timeline-DQePqpyH.js.map → appointment-timeline-BiI2riRZ.js.map} +1 -1
  11. package/dist/_chunks/appointment-tray-ClJCtYQj.js +200 -0
  12. package/dist/_chunks/appointment-tray-ClJCtYQj.js.map +1 -0
  13. package/dist/_chunks/{appointment-workflow-status-DMjuIK90.js → appointment-workflow-status-S-lx81Yz.js} +2 -2
  14. package/dist/_chunks/{appointment-workflow-status-DMjuIK90.js.map → appointment-workflow-status-S-lx81Yz.js.map} +1 -1
  15. package/dist/_chunks/ban-CiSCCcOE.js +15 -0
  16. package/dist/_chunks/ban-CiSCCcOE.js.map +1 -0
  17. package/dist/_chunks/{calendar-BIoOeBTT.js → calendar-CyLtLBNP.js} +2 -2
  18. package/dist/_chunks/{calendar-BIoOeBTT.js.map → calendar-CyLtLBNP.js.map} +1 -1
  19. package/dist/_chunks/{calendar-appointment-editor-dialog-BHx6kUhX.js → calendar-appointment-editor-dialog-BSkIYGlW.js} +13 -13
  20. package/dist/_chunks/{calendar-appointment-editor-dialog-BHx6kUhX.js.map → calendar-appointment-editor-dialog-BSkIYGlW.js.map} +1 -1
  21. package/dist/_chunks/{calendar-event-card-BNEzkjm-.js → calendar-event-card-BJifpYZQ.js} +7 -6
  22. package/dist/_chunks/{calendar-event-card-BNEzkjm-.js.map → calendar-event-card-BJifpYZQ.js.map} +1 -1
  23. package/dist/_chunks/{care-plan-card-DKScH9Ss.js → care-plan-card-CjHq6PLo.js} +6 -6
  24. package/dist/_chunks/{care-plan-card-DKScH9Ss.js.map → care-plan-card-CjHq6PLo.js.map} +1 -1
  25. package/dist/_chunks/{care-plan-entry-card-AG1y3nyW.js → care-plan-entry-card-DY1toF6E.js} +2 -2
  26. package/dist/_chunks/{care-plan-entry-card-AG1y3nyW.js.map → care-plan-entry-card-DY1toF6E.js.map} +1 -1
  27. package/dist/_chunks/{care-plan-header-Dx5OMkc9.js → care-plan-header-CeFXUDnL.js} +6 -6
  28. package/dist/_chunks/{care-plan-header-Dx5OMkc9.js.map → care-plan-header-CeFXUDnL.js.map} +1 -1
  29. package/dist/_chunks/check-in-documents-CEVcgcYZ.js +136 -0
  30. package/dist/_chunks/check-in-documents-CEVcgcYZ.js.map +1 -0
  31. package/dist/_chunks/{clinical-note-card-pPaeWWnu.js → clinical-note-card-D--IwbZa.js} +2 -2
  32. package/dist/_chunks/{clinical-note-card-pPaeWWnu.js.map → clinical-note-card-D--IwbZa.js.map} +1 -1
  33. package/dist/_chunks/document-preview-DLVIrOYV.js +385 -0
  34. package/dist/_chunks/document-preview-DLVIrOYV.js.map +1 -0
  35. package/dist/_chunks/{entity-card-fpm-KUKc.js → entity-card-p-LANpYt.js} +18 -17
  36. package/dist/_chunks/{entity-card-fpm-KUKc.js.map → entity-card-p-LANpYt.js.map} +1 -1
  37. package/dist/_chunks/{error-page-B0fGNTRB.js → error-page-WLhmWUTq.js} +100 -115
  38. package/dist/_chunks/error-page-WLhmWUTq.js.map +1 -0
  39. package/dist/_chunks/finished-terminal-unDnXT4j.js +191 -0
  40. package/dist/_chunks/finished-terminal-unDnXT4j.js.map +1 -0
  41. package/dist/_chunks/house-DGCypGTo.js +21 -0
  42. package/dist/_chunks/house-DGCypGTo.js.map +1 -0
  43. package/dist/_chunks/is-safe-url-CEy9CEml.js +8 -0
  44. package/dist/_chunks/is-safe-url-CEy9CEml.js.map +1 -0
  45. package/dist/_chunks/keypad-DBH_keVs.js +152 -0
  46. package/dist/_chunks/keypad-DBH_keVs.js.map +1 -0
  47. package/dist/_chunks/keypad-button-mOaPQRrH.js +114 -0
  48. package/dist/_chunks/keypad-button-mOaPQRrH.js.map +1 -0
  49. package/dist/_chunks/{message-card-BG3_3nN1.js → message-card-Bw_q1qKx.js} +2 -2
  50. package/dist/_chunks/{message-card-BG3_3nN1.js.map → message-card-Bw_q1qKx.js.map} +1 -1
  51. package/dist/_chunks/{message-tray-BjZv0Fsk.js → message-tray-pLGgLmoG.js} +2 -2
  52. package/dist/_chunks/{message-tray-BjZv0Fsk.js.map → message-tray-pLGgLmoG.js.map} +1 -1
  53. package/dist/_chunks/{note-attachment-MNTIqdSz.js → note-attachment-JTIy9iXN.js} +2 -2
  54. package/dist/_chunks/{note-attachment-MNTIqdSz.js.map → note-attachment-JTIy9iXN.js.map} +1 -1
  55. package/dist/_chunks/{note-timeline-BQeW0VZY.js → note-timeline-BbjHMhkL.js} +2 -2
  56. package/dist/_chunks/{note-timeline-BQeW0VZY.js.map → note-timeline-BbjHMhkL.js.map} +1 -1
  57. package/dist/_chunks/{notes-panel-Cm-_pCRJ.js → notes-panel-BAyPOr8N.js} +2 -2
  58. package/dist/_chunks/{notes-panel-Cm-_pCRJ.js.map → notes-panel-BAyPOr8N.js.map} +1 -1
  59. package/dist/_chunks/{operator-hero-CnfWckNQ.js → operator-hero-D4wfVu2l.js} +2 -2
  60. package/dist/_chunks/{operator-hero-CnfWckNQ.js.map → operator-hero-D4wfVu2l.js.map} +1 -1
  61. package/dist/_chunks/otp-input-BNOTlxq3.js +342 -0
  62. package/dist/_chunks/otp-input-BNOTlxq3.js.map +1 -0
  63. package/dist/_chunks/patient-account-settings-BkAtIxJW.js +546 -0
  64. package/dist/_chunks/patient-account-settings-BkAtIxJW.js.map +1 -0
  65. package/dist/_chunks/patient-card-DTh3QTyS.js +125 -0
  66. package/dist/_chunks/patient-card-DTh3QTyS.js.map +1 -0
  67. package/dist/_chunks/patient-check-in-resume-xhqjC6gf.js +742 -0
  68. package/dist/_chunks/patient-check-in-resume-xhqjC6gf.js.map +1 -0
  69. package/dist/_chunks/patient-sign-in-pin-CDBqV254.js +432 -0
  70. package/dist/_chunks/patient-sign-in-pin-CDBqV254.js.map +1 -0
  71. package/dist/_chunks/patient-sign-in-steps-C2JSqlok.js +199 -0
  72. package/dist/_chunks/patient-sign-in-steps-C2JSqlok.js.map +1 -0
  73. package/dist/_chunks/{patient-summary-card-BUcZ-gaL.js → patient-summary-card-Bl2NknPe.js} +2 -2
  74. package/dist/_chunks/{patient-summary-card-BUcZ-gaL.js.map → patient-summary-card-Bl2NknPe.js.map} +1 -1
  75. package/dist/_chunks/{payment-request-card-Dv4WbRBe.js → payment-request-card-CNW00DCx.js} +6 -6
  76. package/dist/_chunks/{payment-request-card-Dv4WbRBe.js.map → payment-request-card-CNW00DCx.js.map} +1 -1
  77. package/dist/_chunks/{pdf-viewer-BnBKdx0y.js → pdf-viewer-TRC5jEm5.js} +472 -425
  78. package/dist/_chunks/pdf-viewer-TRC5jEm5.js.map +1 -0
  79. package/dist/_chunks/pin-entry-BugWQMOS.js +219 -0
  80. package/dist/_chunks/pin-entry-BugWQMOS.js.map +1 -0
  81. package/dist/_chunks/pin-indicator-Cb-n40UI.js +124 -0
  82. package/dist/_chunks/pin-indicator-Cb-n40UI.js.map +1 -0
  83. package/dist/_chunks/portal-details-CTEsm705.js +478 -0
  84. package/dist/_chunks/portal-details-CTEsm705.js.map +1 -0
  85. package/dist/_chunks/portal-documents-D8skew0h.js +902 -0
  86. package/dist/_chunks/portal-documents-D8skew0h.js.map +1 -0
  87. package/dist/_chunks/portal-parts-BdR29P7z.js +285 -0
  88. package/dist/_chunks/portal-parts-BdR29P7z.js.map +1 -0
  89. package/dist/_chunks/{privacy-mask-DJ1gee4c.js → privacy-mask-C19dJFMk.js} +5 -5
  90. package/dist/_chunks/{privacy-mask-DJ1gee4c.js.map → privacy-mask-C19dJFMk.js.map} +1 -1
  91. package/dist/_chunks/{product-hub-panel-a8wdVOUt.js → product-hub-panel-K4QbULG7.js} +2 -2
  92. package/dist/_chunks/{product-hub-panel-a8wdVOUt.js.map → product-hub-panel-K4QbULG7.js.map} +1 -1
  93. package/dist/_chunks/{registration-form-CwbhtKcy.js → registration-form-DS3RuKHu.js} +2 -2
  94. package/dist/_chunks/{registration-form-CwbhtKcy.js.map → registration-form-DS3RuKHu.js.map} +1 -1
  95. package/dist/_chunks/{reserved.agent-W8mR179D.js → reserved.agent-DOzOBUW7.js} +2 -2
  96. package/dist/_chunks/{reserved.agent-W8mR179D.js.map → reserved.agent-DOzOBUW7.js.map} +1 -1
  97. package/dist/_chunks/session-countdown-DOx1IBUB.js +232 -0
  98. package/dist/_chunks/session-countdown-DOx1IBUB.js.map +1 -0
  99. package/dist/_chunks/{sign-document-CQZVzfpk.js → sign-document-DDZbmYHu.js} +2 -2
  100. package/dist/_chunks/{sign-document-CQZVzfpk.js.map → sign-document-DDZbmYHu.js.map} +1 -1
  101. package/dist/_chunks/{signature-field-DjabvRZm.js → signature-field-BjlY_yXH.js} +39 -34
  102. package/dist/_chunks/signature-field-BjlY_yXH.js.map +1 -0
  103. package/dist/_chunks/{signature-request-4pGq3YBe.js → signature-request-CHsM_iWi.js} +2 -2
  104. package/dist/_chunks/{signature-request-4pGq3YBe.js.map → signature-request-CHsM_iWi.js.map} +1 -1
  105. package/dist/_chunks/{signature-status-chip-pIoQjvH8.js → signature-status-chip-DS9hHwIt.js} +66 -69
  106. package/dist/_chunks/signature-status-chip-DS9hHwIt.js.map +1 -0
  107. package/dist/_chunks/signing-end-screen-an9P8DOT.js +1041 -0
  108. package/dist/_chunks/signing-end-screen-an9P8DOT.js.map +1 -0
  109. package/dist/_chunks/sms-code-entry-Dgp4GwlM.js +316 -0
  110. package/dist/_chunks/sms-code-entry-Dgp4GwlM.js.map +1 -0
  111. package/dist/_chunks/step-up-dialog-C2JqJmCA.js +132 -0
  112. package/dist/_chunks/step-up-dialog-C2JqJmCA.js.map +1 -0
  113. package/dist/_chunks/{task-editor-BL2hHxNz.js → task-editor-g1AGfxhr.js} +38 -38
  114. package/dist/_chunks/{task-editor-BL2hHxNz.js.map → task-editor-g1AGfxhr.js.map} +1 -1
  115. package/dist/_chunks/{use-appointment-details-read-_b7FRB1x.js → use-appointment-details-read-Dzc6fEzG.js} +6 -6
  116. package/dist/_chunks/{use-appointment-details-read-_b7FRB1x.js.map → use-appointment-details-read-Dzc6fEzG.js.map} +1 -1
  117. package/dist/_chunks/use-zoom-drilldown-Cr1baU5X.js +221 -0
  118. package/dist/_chunks/use-zoom-drilldown-Cr1baU5X.js.map +1 -0
  119. package/dist/_chunks/{user-x-DYszNtIg.js → user-x-BJZg4kaP.js} +8 -19
  120. package/dist/_chunks/user-x-BJZg4kaP.js.map +1 -0
  121. package/dist/_chunks/{verify-identity-types-CxtrBXsZ.js → verify-identity-types-C6Bam8v6.js} +2 -2
  122. package/dist/_chunks/{verify-identity-types-CxtrBXsZ.js.map → verify-identity-types-C6Bam8v6.js.map} +1 -1
  123. package/dist/agent-catalog.json +723 -364
  124. package/dist/agent-i18n/en.json +75 -18
  125. package/dist/browser-support.js +1 -1
  126. package/dist/components/_shared/is-safe-url.d.ts +3 -1
  127. package/dist/components/_shared/is-safe-url.d.ts.map +1 -1
  128. package/dist/components/agenda-card/index.js +2 -2
  129. package/dist/components/agenda-tray/index.js +1 -1
  130. package/dist/components/appointment-card/appointment-card.d.ts +45 -0
  131. package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
  132. package/dist/components/appointment-card/appointment-tray.agent.d.ts.map +1 -1
  133. package/dist/components/appointment-card/appointment-tray.d.ts +11 -0
  134. package/dist/components/appointment-card/appointment-tray.d.ts.map +1 -1
  135. package/dist/components/appointment-card/index.js +3 -3
  136. package/dist/components/appointment-details-panel/index.js +1 -1
  137. package/dist/components/appointment-peek/index.js +1 -1
  138. package/dist/components/appointment-timeline/index.js +1 -1
  139. package/dist/components/booking/index.js +1 -1
  140. package/dist/components/calendar/index.js +1 -1
  141. package/dist/components/calendar-event-card/index.js +1 -1
  142. package/dist/components/care-plan-card/index.js +1 -1
  143. package/dist/components/care-plan-entry-card/index.js +1 -1
  144. package/dist/components/care-plan-header/index.js +1 -1
  145. package/dist/components/clinical-note-card/index.js +1 -1
  146. package/dist/components/document-preview/document-preview.agent.d.ts.map +1 -1
  147. package/dist/components/document-preview/document-preview.d.ts +61 -7
  148. package/dist/components/document-preview/document-preview.d.ts.map +1 -1
  149. package/dist/components/document-preview/index.js +1 -1
  150. package/dist/components/finished-terminal/finished-terminal.d.ts +63 -6
  151. package/dist/components/finished-terminal/finished-terminal.d.ts.map +1 -1
  152. package/dist/components/finished-terminal/index.d.ts +1 -1
  153. package/dist/components/finished-terminal/index.d.ts.map +1 -1
  154. package/dist/components/finished-terminal/index.js +1 -1
  155. package/dist/components/index.d.ts +12 -0
  156. package/dist/components/index.d.ts.map +1 -1
  157. package/dist/components/keypad/index.d.ts +3 -0
  158. package/dist/components/keypad/index.d.ts.map +1 -0
  159. package/dist/components/keypad/index.js +6 -0
  160. package/dist/components/keypad/index.js.map +1 -0
  161. package/dist/components/keypad/keypad.d.ts +54 -0
  162. package/dist/components/keypad/keypad.d.ts.map +1 -0
  163. package/dist/components/keypad-button/index.d.ts +3 -0
  164. package/dist/components/keypad-button/index.d.ts.map +1 -0
  165. package/dist/components/keypad-button/index.js +6 -0
  166. package/dist/components/keypad-button/index.js.map +1 -0
  167. package/dist/components/keypad-button/keypad-button.d.ts +33 -0
  168. package/dist/components/keypad-button/keypad-button.d.ts.map +1 -0
  169. package/dist/components/message-card/index.js +2 -2
  170. package/dist/components/message-tray/index.js +1 -1
  171. package/dist/components/note-timeline/index.js +1 -1
  172. package/dist/components/notes-panel/index.js +1 -1
  173. package/dist/components/operator-hero/index.js +1 -1
  174. package/dist/components/otp-input/index.js +1 -1
  175. package/dist/components/otp-input/otp-input.d.ts +11 -0
  176. package/dist/components/otp-input/otp-input.d.ts.map +1 -1
  177. package/dist/components/patient-summary-card/index.js +1 -1
  178. package/dist/components/payment-card/index.js +1 -1
  179. package/dist/components/pdf-viewer/index.js +1 -1
  180. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
  181. package/dist/components/pdf-viewer/pdf-viewer.d.ts +7 -0
  182. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  183. package/dist/components/pin-entry/index.d.ts +3 -0
  184. package/dist/components/pin-entry/index.d.ts.map +1 -0
  185. package/dist/components/pin-entry/index.js +5 -0
  186. package/dist/components/pin-entry/index.js.map +1 -0
  187. package/dist/components/pin-entry/pin-entry.agent.d.ts +4 -0
  188. package/dist/components/pin-entry/pin-entry.agent.d.ts.map +1 -0
  189. package/dist/components/pin-entry/pin-entry.d.ts +64 -0
  190. package/dist/components/pin-entry/pin-entry.d.ts.map +1 -0
  191. package/dist/components/pin-indicator/index.d.ts +3 -0
  192. package/dist/components/pin-indicator/index.d.ts.map +1 -0
  193. package/dist/components/pin-indicator/index.js +9 -0
  194. package/dist/components/pin-indicator/index.js.map +1 -0
  195. package/dist/components/pin-indicator/pin-indicator.d.ts +34 -0
  196. package/dist/components/pin-indicator/pin-indicator.d.ts.map +1 -0
  197. package/dist/components/product-hub-tray/index.js +2 -2
  198. package/dist/components/session-countdown/index.js +1 -1
  199. package/dist/components/session-countdown/session-countdown.d.ts +19 -0
  200. package/dist/components/session-countdown/session-countdown.d.ts.map +1 -1
  201. package/dist/components/sign-document/index.js +1 -1
  202. package/dist/components/signature-field/index.js +1 -1
  203. package/dist/components/signature-field/signature-field.d.ts +17 -6
  204. package/dist/components/signature-field/signature-field.d.ts.map +1 -1
  205. package/dist/components/signature-status-chip/index.js +1 -1
  206. package/dist/components/signature-status-chip/signature-status-chip.d.ts +3 -2
  207. package/dist/components/signature-status-chip/signature-status-chip.d.ts.map +1 -1
  208. package/dist/components/sms-code-entry/index.d.ts +3 -0
  209. package/dist/components/sms-code-entry/index.d.ts.map +1 -0
  210. package/dist/components/sms-code-entry/index.js +5 -0
  211. package/dist/components/sms-code-entry/index.js.map +1 -0
  212. package/dist/components/sms-code-entry/sms-code-entry.agent.d.ts +4 -0
  213. package/dist/components/sms-code-entry/sms-code-entry.agent.d.ts.map +1 -0
  214. package/dist/components/sms-code-entry/sms-code-entry.d.ts +156 -0
  215. package/dist/components/sms-code-entry/sms-code-entry.d.ts.map +1 -0
  216. package/dist/components/step-up-dialog/index.d.ts +3 -0
  217. package/dist/components/step-up-dialog/index.d.ts.map +1 -0
  218. package/dist/components/step-up-dialog/index.js +5 -0
  219. package/dist/components/step-up-dialog/index.js.map +1 -0
  220. package/dist/components/step-up-dialog/step-up-dialog.d.ts +108 -0
  221. package/dist/components/step-up-dialog/step-up-dialog.d.ts.map +1 -0
  222. package/dist/components/task-editor/index.js +1 -1
  223. package/dist/components/workflow-status/index.js +1 -1
  224. package/dist/core.css +1 -1
  225. package/dist/hooks/index.js +1 -1
  226. package/dist/hooks/use-signing-session.d.ts +7 -2
  227. package/dist/hooks/use-signing-session.d.ts.map +1 -1
  228. package/dist/host-compat.css +10 -1
  229. package/dist/i18n/locales/ar.d.ts +512 -1
  230. package/dist/i18n/locales/ar.d.ts.map +1 -1
  231. package/dist/i18n/locales/ar.js +509 -3
  232. package/dist/i18n/locales/ar.js.map +1 -1
  233. package/dist/i18n/locales/de.d.ts +512 -1
  234. package/dist/i18n/locales/de.d.ts.map +1 -1
  235. package/dist/i18n/locales/de.js +517 -4
  236. package/dist/i18n/locales/de.js.map +1 -1
  237. package/dist/i18n/locales/el.d.ts +512 -1
  238. package/dist/i18n/locales/el.d.ts.map +1 -1
  239. package/dist/i18n/locales/el.js +512 -4
  240. package/dist/i18n/locales/el.js.map +1 -1
  241. package/dist/i18n/locales/en.d.ts +514 -1
  242. package/dist/i18n/locales/en.d.ts.map +1 -1
  243. package/dist/i18n/locales/en.js +520 -4
  244. package/dist/i18n/locales/en.js.map +1 -1
  245. package/dist/i18n/locales/es.d.ts +512 -1
  246. package/dist/i18n/locales/es.d.ts.map +1 -1
  247. package/dist/i18n/locales/es.js +510 -4
  248. package/dist/i18n/locales/es.js.map +1 -1
  249. package/dist/i18n/locales/fr.d.ts +512 -1
  250. package/dist/i18n/locales/fr.d.ts.map +1 -1
  251. package/dist/i18n/locales/fr.js +510 -4
  252. package/dist/i18n/locales/fr.js.map +1 -1
  253. package/dist/i18n/locales/hi.d.ts +512 -1
  254. package/dist/i18n/locales/hi.d.ts.map +1 -1
  255. package/dist/i18n/locales/hi.js +510 -4
  256. package/dist/i18n/locales/hi.js.map +1 -1
  257. package/dist/i18n/locales/it.d.ts +512 -1
  258. package/dist/i18n/locales/it.d.ts.map +1 -1
  259. package/dist/i18n/locales/it.js +517 -4
  260. package/dist/i18n/locales/it.js.map +1 -1
  261. package/dist/i18n/locales/ja.d.ts +512 -1
  262. package/dist/i18n/locales/ja.d.ts.map +1 -1
  263. package/dist/i18n/locales/ja.js +510 -4
  264. package/dist/i18n/locales/ja.js.map +1 -1
  265. package/dist/i18n/locales/nl.d.ts +512 -1
  266. package/dist/i18n/locales/nl.d.ts.map +1 -1
  267. package/dist/i18n/locales/nl.js +517 -4
  268. package/dist/i18n/locales/nl.js.map +1 -1
  269. package/dist/i18n/locales/pl.d.ts +512 -1
  270. package/dist/i18n/locales/pl.d.ts.map +1 -1
  271. package/dist/i18n/locales/pl.js +517 -4
  272. package/dist/i18n/locales/pl.js.map +1 -1
  273. package/dist/i18n/locales/pt.d.ts +512 -1
  274. package/dist/i18n/locales/pt.d.ts.map +1 -1
  275. package/dist/i18n/locales/pt.js +517 -4
  276. package/dist/i18n/locales/pt.js.map +1 -1
  277. package/dist/i18n/locales/ro.d.ts +512 -1
  278. package/dist/i18n/locales/ro.d.ts.map +1 -1
  279. package/dist/i18n/locales/ro.js +517 -4
  280. package/dist/i18n/locales/ro.js.map +1 -1
  281. package/dist/i18n/locales/ru.d.ts +512 -1
  282. package/dist/i18n/locales/ru.d.ts.map +1 -1
  283. package/dist/i18n/locales/ru.js +509 -3
  284. package/dist/i18n/locales/ru.js.map +1 -1
  285. package/dist/i18n/locales/sq.d.ts +512 -1
  286. package/dist/i18n/locales/sq.d.ts.map +1 -1
  287. package/dist/i18n/locales/sq.js +510 -4
  288. package/dist/i18n/locales/sq.js.map +1 -1
  289. package/dist/i18n/locales/sv.d.ts +512 -1
  290. package/dist/i18n/locales/sv.d.ts.map +1 -1
  291. package/dist/i18n/locales/sv.js +510 -4
  292. package/dist/i18n/locales/sv.js.map +1 -1
  293. package/dist/i18n/locales/tr.d.ts +512 -1
  294. package/dist/i18n/locales/tr.d.ts.map +1 -1
  295. package/dist/i18n/locales/tr.js +512 -4
  296. package/dist/i18n/locales/tr.js.map +1 -1
  297. package/dist/i18n/locales/zh.d.ts +512 -1
  298. package/dist/i18n/locales/zh.d.ts.map +1 -1
  299. package/dist/i18n/locales/zh.js +510 -4
  300. package/dist/i18n/locales/zh.js.map +1 -1
  301. package/dist/index.js +1271 -1204
  302. package/dist/index.js.map +1 -1
  303. package/dist/locales/ar.json +513 -2
  304. package/dist/locales/de.json +514 -3
  305. package/dist/locales/el.json +514 -3
  306. package/dist/locales/en.json +514 -3
  307. package/dist/locales/es.json +514 -3
  308. package/dist/locales/fr.json +514 -3
  309. package/dist/locales/hi.json +514 -3
  310. package/dist/locales/it.json +514 -3
  311. package/dist/locales/ja.json +514 -3
  312. package/dist/locales/nl.json +514 -3
  313. package/dist/locales/pl.json +514 -3
  314. package/dist/locales/pt.json +514 -3
  315. package/dist/locales/ro.json +514 -3
  316. package/dist/locales/ru.json +513 -2
  317. package/dist/locales/sq.json +514 -3
  318. package/dist/locales/sv.json +514 -3
  319. package/dist/locales/tr.json +514 -3
  320. package/dist/locales/zh.json +514 -3
  321. package/dist/patterns/calendar/index.js +1 -1
  322. package/dist/patterns/check-in-documents/check-in-documents.d.ts +61 -0
  323. package/dist/patterns/check-in-documents/check-in-documents.d.ts.map +1 -0
  324. package/dist/patterns/check-in-documents/check-in-signable-document.d.ts +32 -0
  325. package/dist/patterns/check-in-documents/check-in-signable-document.d.ts.map +1 -0
  326. package/dist/patterns/check-in-documents/index.d.ts +4 -0
  327. package/dist/patterns/check-in-documents/index.d.ts.map +1 -0
  328. package/dist/patterns/check-in-documents/index.js +5 -0
  329. package/dist/patterns/check-in-documents/index.js.map +1 -0
  330. package/dist/patterns/error-page/index.js +1 -1
  331. package/dist/patterns/patient-account-settings/index.d.ts +4 -0
  332. package/dist/patterns/patient-account-settings/index.d.ts.map +1 -0
  333. package/dist/patterns/patient-account-settings/index.js +5 -0
  334. package/dist/patterns/patient-account-settings/index.js.map +1 -0
  335. package/dist/patterns/patient-account-settings/patient-account-settings-panels.d.ts +36 -0
  336. package/dist/patterns/patient-account-settings/patient-account-settings-panels.d.ts.map +1 -0
  337. package/dist/patterns/patient-account-settings/patient-account-settings.d.ts +94 -0
  338. package/dist/patterns/patient-account-settings/patient-account-settings.d.ts.map +1 -0
  339. package/dist/patterns/patient-account-settings/patient-account-settings.types.d.ts +91 -0
  340. package/dist/patterns/patient-account-settings/patient-account-settings.types.d.ts.map +1 -0
  341. package/dist/patterns/patient-check-in/index.d.ts +20 -0
  342. package/dist/patterns/patient-check-in/index.d.ts.map +1 -0
  343. package/dist/patterns/patient-check-in/index.js +13 -0
  344. package/dist/patterns/patient-check-in/index.js.map +1 -0
  345. package/dist/patterns/patient-check-in/patient-check-in-changed.d.ts +33 -0
  346. package/dist/patterns/patient-check-in/patient-check-in-changed.d.ts.map +1 -0
  347. package/dist/patterns/patient-check-in/patient-check-in-connection-notice.d.ts +29 -0
  348. package/dist/patterns/patient-check-in/patient-check-in-connection-notice.d.ts.map +1 -0
  349. package/dist/patterns/patient-check-in/patient-check-in-done.d.ts +25 -0
  350. package/dist/patterns/patient-check-in/patient-check-in-done.d.ts.map +1 -0
  351. package/dist/patterns/patient-check-in/patient-check-in-entry.d.ts +29 -0
  352. package/dist/patterns/patient-check-in/patient-check-in-entry.d.ts.map +1 -0
  353. package/dist/patterns/patient-check-in/patient-check-in-hub-empty.d.ts +23 -0
  354. package/dist/patterns/patient-check-in/patient-check-in-hub-empty.d.ts.map +1 -0
  355. package/dist/patterns/patient-check-in/patient-check-in-hub.d.ts +61 -0
  356. package/dist/patterns/patient-check-in/patient-check-in-hub.d.ts.map +1 -0
  357. package/dist/patterns/patient-check-in/patient-check-in-personal-data.d.ts +73 -0
  358. package/dist/patterns/patient-check-in/patient-check-in-personal-data.d.ts.map +1 -0
  359. package/dist/patterns/patient-check-in/patient-check-in-privacy.d.ts +9 -0
  360. package/dist/patterns/patient-check-in/patient-check-in-privacy.d.ts.map +1 -0
  361. package/dist/patterns/patient-check-in/patient-check-in-resume.d.ts +29 -0
  362. package/dist/patterns/patient-check-in/patient-check-in-resume.d.ts.map +1 -0
  363. package/dist/patterns/patient-check-in/patient-check-in-shell.d.ts +60 -0
  364. package/dist/patterns/patient-check-in/patient-check-in-shell.d.ts.map +1 -0
  365. package/dist/patterns/patient-check-in/patient-check-in-types.d.ts +92 -0
  366. package/dist/patterns/patient-check-in/patient-check-in-types.d.ts.map +1 -0
  367. package/dist/patterns/patient-portal/index.d.ts +12 -0
  368. package/dist/patterns/patient-portal/index.d.ts.map +1 -0
  369. package/dist/patterns/patient-portal/index.js +13 -0
  370. package/dist/patterns/patient-portal/index.js.map +1 -0
  371. package/dist/patterns/patient-portal/portal-appointments.d.ts +70 -0
  372. package/dist/patterns/patient-portal/portal-appointments.d.ts.map +1 -0
  373. package/dist/patterns/patient-portal/portal-details.d.ts +148 -0
  374. package/dist/patterns/patient-portal/portal-details.d.ts.map +1 -0
  375. package/dist/patterns/patient-portal/portal-documents.d.ts +74 -0
  376. package/dist/patterns/patient-portal/portal-documents.d.ts.map +1 -0
  377. package/dist/patterns/patient-portal/portal-format.d.ts +14 -0
  378. package/dist/patterns/patient-portal/portal-format.d.ts.map +1 -0
  379. package/dist/patterns/patient-portal/portal-home.d.ts +71 -0
  380. package/dist/patterns/patient-portal/portal-home.d.ts.map +1 -0
  381. package/dist/patterns/patient-portal/portal-parts.d.ts +107 -0
  382. package/dist/patterns/patient-portal/portal-parts.d.ts.map +1 -0
  383. package/dist/patterns/patient-portal/portal-shell.d.ts +84 -0
  384. package/dist/patterns/patient-portal/portal-shell.d.ts.map +1 -0
  385. package/dist/patterns/patient-portal/portal-types.d.ts +157 -0
  386. package/dist/patterns/patient-portal/portal-types.d.ts.map +1 -0
  387. package/dist/patterns/patient-sign-in/index.d.ts +7 -0
  388. package/dist/patterns/patient-sign-in/index.d.ts.map +1 -0
  389. package/dist/patterns/patient-sign-in/index.js +15 -0
  390. package/dist/patterns/patient-sign-in/index.js.map +1 -0
  391. package/dist/patterns/patient-sign-in/patient-card.d.ts +74 -0
  392. package/dist/patterns/patient-sign-in/patient-card.d.ts.map +1 -0
  393. package/dist/patterns/patient-sign-in/patient-sign-in-email.d.ts +109 -0
  394. package/dist/patterns/patient-sign-in/patient-sign-in-email.d.ts.map +1 -0
  395. package/dist/patterns/patient-sign-in/patient-sign-in-pin.d.ts +157 -0
  396. package/dist/patterns/patient-sign-in/patient-sign-in-pin.d.ts.map +1 -0
  397. package/dist/patterns/patient-sign-in/patient-sign-in-steps.d.ts +143 -0
  398. package/dist/patterns/patient-sign-in/patient-sign-in-steps.d.ts.map +1 -0
  399. package/dist/patterns/registration-form/index.js +1 -1
  400. package/dist/patterns/signature-request/index.js +1 -1
  401. package/dist/patterns/signing/index.d.ts +25 -0
  402. package/dist/patterns/signing/index.d.ts.map +1 -0
  403. package/dist/patterns/signing/index.js +16 -0
  404. package/dist/patterns/signing/index.js.map +1 -0
  405. package/dist/patterns/signing/multi-field-signer.d.ts +117 -0
  406. package/dist/patterns/signing/multi-field-signer.d.ts.map +1 -0
  407. package/dist/patterns/signing/signing-awaiting-screen.d.ts +25 -0
  408. package/dist/patterns/signing/signing-awaiting-screen.d.ts.map +1 -0
  409. package/dist/patterns/signing/signing-chrome.d.ts +30 -0
  410. package/dist/patterns/signing/signing-chrome.d.ts.map +1 -0
  411. package/dist/patterns/signing/signing-document-screen.d.ts +87 -0
  412. package/dist/patterns/signing/signing-document-screen.d.ts.map +1 -0
  413. package/dist/patterns/signing/signing-end-screen.d.ts +27 -0
  414. package/dist/patterns/signing/signing-end-screen.d.ts.map +1 -0
  415. package/dist/patterns/signing/signing-finished-screen.d.ts +34 -0
  416. package/dist/patterns/signing/signing-finished-screen.d.ts.map +1 -0
  417. package/dist/patterns/signing/signing-footer.d.ts +56 -0
  418. package/dist/patterns/signing/signing-footer.d.ts.map +1 -0
  419. package/dist/patterns/signing/signing-handoff-screen.d.ts +37 -0
  420. package/dist/patterns/signing/signing-handoff-screen.d.ts.map +1 -0
  421. package/dist/patterns/signing/signing-message-dialog.d.ts +29 -0
  422. package/dist/patterns/signing/signing-message-dialog.d.ts.map +1 -0
  423. package/dist/patterns/signing/signing-progress-chip.d.ts +27 -0
  424. package/dist/patterns/signing/signing-progress-chip.d.ts.map +1 -0
  425. package/dist/patterns/signing/signing-roster.d.ts +44 -0
  426. package/dist/patterns/signing/signing-roster.d.ts.map +1 -0
  427. package/dist/patterns/signing/signing-staff-id-confirmation.d.ts +49 -0
  428. package/dist/patterns/signing/signing-staff-id-confirmation.d.ts.map +1 -0
  429. package/dist/patterns/verify-identity/index.js +1 -1
  430. package/dist/tokens.css +1 -1
  431. package/package.json +49 -1
  432. package/dist/_chunks/appointment-card-OAOur8lH.js +0 -434
  433. package/dist/_chunks/appointment-card-OAOur8lH.js.map +0 -1
  434. package/dist/_chunks/appointment-tray-DSFqO5Rm.js +0 -193
  435. package/dist/_chunks/appointment-tray-DSFqO5Rm.js.map +0 -1
  436. package/dist/_chunks/document-preview-_kQ9QvZV.js +0 -291
  437. package/dist/_chunks/document-preview-_kQ9QvZV.js.map +0 -1
  438. package/dist/_chunks/error-page-B0fGNTRB.js.map +0 -1
  439. package/dist/_chunks/finished-terminal-FR8uc_Ws.js +0 -122
  440. package/dist/_chunks/finished-terminal-FR8uc_Ws.js.map +0 -1
  441. package/dist/_chunks/is-safe-url-DkETxeHz.js +0 -7
  442. package/dist/_chunks/is-safe-url-DkETxeHz.js.map +0 -1
  443. package/dist/_chunks/otp-input-gV1446Dw.js +0 -301
  444. package/dist/_chunks/otp-input-gV1446Dw.js.map +0 -1
  445. package/dist/_chunks/pdf-viewer-BnBKdx0y.js.map +0 -1
  446. package/dist/_chunks/session-countdown-C4tzbJVc.js +0 -223
  447. package/dist/_chunks/session-countdown-C4tzbJVc.js.map +0 -1
  448. package/dist/_chunks/signature-field-DjabvRZm.js.map +0 -1
  449. package/dist/_chunks/signature-status-chip-pIoQjvH8.js.map +0 -1
  450. package/dist/_chunks/use-zoom-drilldown-qCX34w9I.js +0 -210
  451. package/dist/_chunks/use-zoom-drilldown-qCX34w9I.js.map +0 -1
  452. package/dist/_chunks/user-x-DYszNtIg.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"care-plan-entry-card-AG1y3nyW.js","sources":["../../src/components/care-plan-entry-card/care-plan-entry-card.agent.ts","../../src/components/care-plan-entry-card/care-plan-entry-card.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CarePlanEntryCard. */\n/* */\n/* Read-only surface: expose the execution flag and phase-progress */\n/* counts so an agent can introspect a treatment line's status. Counts + */\n/* booleans only — never the treatment name, operator, or any patient */\n/* identity. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CarePlanEntryCardHandle } from './care-plan-entry-card';\n\nexport const carePlanEntryCardAgent: AgentAdapter<CarePlanEntryCardHandle> = {\n id: 'care-plan-entry-card',\n // `expand` is host-delegated: the per-phase breakdown is an in-component\n // Collapsible the user (or a host) drives directly — there is no handle\n // method for it, so no backing action is registered. `view_change` was\n // dropped: the card has no view modes to switch between.\n capabilities: ['expand'],\n state: {\n done: {\n type: 'boolean',\n descriptionKey: 'ui.agent.carePlanEntryCard.state.done',\n description: 'Whether the treatment line is marked executed.',\n read: (handle) => handle.isDone(),\n },\n phaseProgress: {\n type: '{ executed: number; total: number }',\n descriptionKey: 'ui.agent.carePlanEntryCard.state.phaseProgress',\n description:\n 'Phase progress as executed / total counts. Counts only — never phase labels or operator identity.',\n read: (handle) => handle.getPhaseProgress(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'care-plan-entry-card',\n description: 'Marks the CarePlanEntryCard root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop. Addresses a specific line.',\n },\n },\n};\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown } from 'lucide-react';\nimport { Badge } from '../badge/badge';\nimport { Progress } from '../progress/progress';\nimport { Tag } from '../tag/tag';\nimport { Timestamp } from '../timestamp/timestamp';\nimport { TransactionChip } from '../transaction-chip/transaction-chip';\nimport { ToothScheme } from '../tooth-scheme/tooth-scheme';\nimport type { FdiId, ToothCondition } from '../tooth-scheme/tooth-data';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../collapsible/collapsible';\nimport { entitySurfaceVariants } from '../_shared/entity-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { carePlanEntryCardAgent } from './care-plan-entry-card.agent';\n\n/* -------------------------------------------------------------------- */\n/* CarePlanEntryCard */\n/* */\n/* A single granular treatment line within a care plan / estimate */\n/* (\"voce di preventivo\"). Replaces the hand-rolled platform treatment */\n/* row that interleaves the treatment label, FDI tooth codes, an */\n/* execution badge, a phase-progress bar, a price chip, and an */\n/* expandable per-phase breakdown. */\n/* */\n/* Composes: entitySurfaceVariants (shared card surface) + Tag / ToothScheme*/\n/* (elements) + Badge (lifecycle flags) + Timestamp (execution / planned) */\n/* + Progress (phases) + TransactionChip (price) + Collapsible (per-phase */\n/* detail). */\n/* */\n/* All visible text flows through useTranslation('ui') against the */\n/* `carePlanEntryCard.*` namespace. Identifiers + structural state only */\n/* reach the agent layer — never patient identity. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/** A planned (not-yet-executed) appointment the line is scheduled into. */\nexport interface CarePlanEntryPlannedAppointment {\n /** ISO-8601 date / datetime string. */\n dateIso: string;\n /** Stable appointment id (identifier only — never PHI). */\n appointmentId: string;\n /** Optional deep link to the appointment. */\n url?: string;\n}\n\n/** Price breakdown for the line, all amounts in integer cents. */\nexport interface CarePlanEntryPrice {\n /** List price in cents (non-negative). */\n priceCents?: number;\n /** Discounted price in cents (non-negative), when a discount applies. */\n discountedPriceCents?: number;\n /** Discount percentage (0–100), for the discount label. */\n discountPercentage?: number;\n}\n\n/** One row of the per-phase execution breakdown. */\nexport interface CarePlanEntryPhaseDetail {\n /** Short localised phase label (consumer-localised). */\n label: string;\n /** Whether this phase has been executed. */\n executed: boolean;\n /** ISO-8601 execution date, when executed. */\n executionDateIso?: string;\n /** Operator display name for the phase. */\n operator?: string;\n /** Unique Device Identifier / lot string for traceable materials. */\n udi?: string;\n}\n\n/** Phase progress summary + optional drill-down detail. */\nexport interface CarePlanEntryPhases {\n /** Number of executed phases. */\n executed: number;\n /** Total number of phases. */\n total: number;\n /** Optional per-phase breakdown rendered inside the Collapsible. */\n detail?: CarePlanEntryPhaseDetail[];\n}\n\n/** Operator the line is assigned to. */\nexport interface CarePlanEntryOperator {\n /** Operator display name (consumer-localised). */\n name: string;\n}\n\n/** Curated read-only handle exposed to the agent registry. */\nexport interface CarePlanEntryCardHandle {\n /** Whether the line is marked executed. */\n isDone: () => boolean;\n /** Phase progress as `{ executed, total }` — counts only, no PHI. */\n getPhaseProgress: () => { executed: number; total: number };\n}\n\nexport interface CarePlanEntryCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'aria-label' | 'title' | 'children'\n> {\n /**\n * Stable instance id — surfaced as `data-component-id` for the agent\n * registry and used to wire up the heading ↔ region relationship.\n */\n id?: string;\n /** Treatment / service name. Rendered as the line heading. */\n careName: string;\n /** Optional treatment code (e.g. tariff code) shown beside the name. */\n code?: string;\n /** Optional secondary label (e.g. category) under the name. */\n label?: string;\n /** FDI tooth codes the line applies to (e.g. `['16', '36']`). */\n elements?: string[];\n /** Whether the line has been executed / completed. */\n done?: boolean;\n /** ISO-8601 execution date — rendered next to the \"done\" badge. */\n executionDateIso?: string;\n /** A planned appointment the line is scheduled into, when not yet done. */\n plannedAppointment?: CarePlanEntryPlannedAppointment;\n /** Operator the line is assigned to. */\n operator?: CarePlanEntryOperator;\n /** Price breakdown (list / discounted). */\n price?: CarePlanEntryPrice;\n /** Phase progress + optional drill-down detail. */\n phases?: CarePlanEntryPhases;\n /** Whether the line has been billed / invoiced. */\n billed?: boolean;\n /** Whether the line falls outside the accepted estimate. */\n outsideOfEstimate?: boolean;\n /** Count of attached notes — rendered as a neutral count badge when > 0. */\n notesCount?: number;\n /**\n * How to render `elements`: `'chips'` (default) lists each FDI code as a\n * Tag; `'scheme'` renders a read-only `ToothScheme` highlighting them.\n */\n toothDisplay?: 'scheme' | 'chips';\n /** BCP 47 locale override for dates / currency. Defaults to i18n.language. */\n locale?: string;\n /** ISO 4217 currency code for the price chip. Defaults to `EUR`. */\n currency?: string;\n /**\n * `elevated` (default) paints the kit card chrome; `flat` drops it for use\n * inside an existing Card / Sheet.\n */\n surface?: 'flat' | 'elevated';\n /** Accessible label override for the line region. */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\nconst DEFAULT_CURRENCY = 'EUR';\n\n/**\n * Map the FDI element codes to a `ToothScheme` conditions shortcut. Codes\n * outside the FDI vocabulary are dropped (the scheme ignores unknown ids).\n * Every applied tooth is flagged `filled` so the display-mode chart marks\n * them with both colour and pattern — colour-not-alone.\n */\nfunction elementsToConditions(\n elements: string[],\n): Partial<Record<FdiId, ToothCondition[]>> {\n const conditions: Partial<Record<FdiId, ToothCondition[]>> = {};\n for (const code of elements) {\n conditions[code as FdiId] = ['filled'];\n }\n return conditions;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const CarePlanEntryCard = forwardRef<\n HTMLDivElement,\n CarePlanEntryCardProps\n>(\n (\n {\n id,\n careName,\n code,\n label,\n elements,\n done = false,\n executionDateIso,\n plannedAppointment,\n operator,\n price,\n phases,\n billed = false,\n outsideOfEstimate = false,\n notesCount,\n toothDisplay = 'chips',\n locale,\n currency = DEFAULT_CURRENCY,\n surface = 'elevated',\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const headingId = useId();\n const phasesLabelId = useId();\n const detailTriggerId = useId();\n const detailContentId = useId();\n const activeLocale = locale ?? i18n.language ?? 'en';\n\n useAgentRegistration(\n carePlanEntryCardAgent,\n {\n isDone: () => done,\n getPhaseProgress: () => ({\n executed: phases?.executed ?? 0,\n total: phases?.total ?? 0,\n }),\n },\n id,\n );\n\n const hasElements = !!elements && elements.length > 0;\n const hasPhaseDetail = !!phases?.detail && phases.detail.length > 0;\n\n // Price: prefer the discounted amount when present; show the list price\n // struck through beside it. Both are \"to-invoice\" until billed, then\n // settled.\n const priceState = billed ? 'settled' : 'to-invoice';\n const listCents = price?.priceCents;\n const discountedCents = price?.discountedPriceCents;\n const hasDiscount =\n discountedCents !== undefined &&\n listCents !== undefined &&\n discountedCents < listCents;\n const payableCents = discountedCents ?? listCents;\n\n const formatMoney = (cents: number): string =>\n new Intl.NumberFormat(activeLocale, {\n style: 'currency',\n currency,\n }).format(cents / 100);\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : headingId}\n data-component=\"care-plan-entry-card\"\n data-component-id={id}\n data-done={done ? 'true' : 'false'}\n id={id}\n className={entitySurfaceVariants({ surface, className })}\n {...rest}\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {/* Heading row: name + code + trailing status flags */}\n <div className=\"ds:flex ds:items-start ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <div className=\"ds:flex ds:flex-wrap ds:items-baseline ds:gap-[var(--spacing-xs)]\">\n <h3\n id={headingId}\n className=\"type-title-item ds:m-0 ds:text-[color:var(--foreground)]\"\n >\n {careName}\n </h3>\n {code ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:tabular-nums\">\n {code}\n </span>\n ) : null}\n </div>\n {label ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {label}\n </span>\n ) : null}\n </div>\n\n <div className=\"ds:flex ds:shrink-0 ds:flex-wrap ds:items-center ds:justify-end ds:gap-[var(--spacing-2xs)]\">\n {done ? (\n <Badge variant=\"success\" size=\"sm\" withDot>\n {t('carePlanEntryCard.flag.done', 'Done')}\n </Badge>\n ) : null}\n {outsideOfEstimate ? (\n <Badge variant=\"warning\" size=\"sm\" withDot>\n {t(\n 'carePlanEntryCard.flag.outsideOfEstimate',\n 'Outside estimate',\n )}\n </Badge>\n ) : null}\n {billed ? (\n <Badge variant=\"neutral\" size=\"sm\">\n {t('carePlanEntryCard.flag.billed', 'Billed')}\n </Badge>\n ) : null}\n {typeof notesCount === 'number' && notesCount > 0 ? (\n <Badge\n variant=\"neutral\"\n size=\"sm\"\n aria-label={t('carePlanEntryCard.notesLabel', {\n count: notesCount,\n defaultValue: '{{count}} notes',\n })}\n >\n {notesCount}\n </Badge>\n ) : null}\n </div>\n </div>\n\n {/* Elements: tooth scheme (display mode) or FDI tag chips */}\n {hasElements ? (\n toothDisplay === 'scheme' ? (\n <ToothScheme\n mode=\"display\"\n conditions={elementsToConditions(elements)}\n ariaLabel={t('carePlanEntryCard.toothSchemeLabel', {\n count: elements.length,\n defaultValue: 'Teeth involved: {{count}}',\n })}\n />\n ) : (\n <div\n role=\"list\"\n aria-label={t(\n 'carePlanEntryCard.elementsLabel',\n 'Teeth involved',\n )}\n className=\"ds:flex ds:flex-wrap ds:gap-[var(--spacing-2xs)]\"\n >\n {elements.map((element) => (\n <div role=\"listitem\" key={element}>\n <Tag label={element} variant=\"info\" size=\"sm\" />\n </div>\n ))}\n </div>\n )\n ) : null}\n\n {/* Schedule / execution line */}\n {done && executionDateIso ? (\n <p className=\"type-body-sm ds:m-0 ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]\">\n <span>{t('carePlanEntryCard.executedOn', 'Executed on')}</span>\n <Timestamp\n value={executionDateIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n {operator ? (\n <span>\n {t('carePlanEntryCard.byOperator', {\n operator: operator.name,\n defaultValue: 'by {{operator}}',\n })}\n </span>\n ) : null}\n </p>\n ) : plannedAppointment ? (\n <p className=\"type-body-sm ds:m-0 ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]\">\n <span>{t('carePlanEntryCard.plannedFor', 'Planned for')}</span>\n <Timestamp\n value={plannedAppointment.dateIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n {operator ? (\n <span>\n {t('carePlanEntryCard.byOperator', {\n operator: operator.name,\n defaultValue: 'by {{operator}}',\n })}\n </span>\n ) : null}\n </p>\n ) : operator ? (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {t('carePlanEntryCard.assignedTo', {\n operator: operator.name,\n defaultValue: 'Assigned to {{operator}}',\n })}\n </p>\n ) : null}\n\n {/* Phase progress */}\n {phases && phases.total > 0 ? (\n <Progress\n value={phases.executed}\n max={phases.total}\n size=\"sm\"\n aria-label={t('carePlanEntryCard.phasesLabel', {\n executed: phases.executed,\n total: phases.total,\n defaultValue: 'Phases: {{executed}} of {{total}} executed',\n })}\n >\n <div className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <Progress.Label id={phasesLabelId}>\n {t('carePlanEntryCard.phasesHeading', 'Phases')}\n </Progress.Label>\n <span className=\"type-body-sm ds:tabular-nums ds:text-[color:var(--muted-foreground)]\">\n {t('carePlanEntryCard.phasesCount', {\n executed: phases.executed,\n total: phases.total,\n defaultValue: '{{executed}} / {{total}}',\n })}\n </span>\n </div>\n </Progress>\n ) : null}\n\n {/* Footer: price + (optional) phase-detail disclosure */}\n {payableCents !== undefined || hasPhaseDetail ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n {payableCents !== undefined ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <TransactionChip\n state={priceState}\n amount={payableCents / 100}\n currency={currency}\n locale={activeLocale}\n size=\"md\"\n />\n {hasDiscount && listCents !== undefined ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:line-through ds:tabular-nums\">\n {formatMoney(listCents)}\n </span>\n ) : null}\n {hasDiscount && price?.discountPercentage !== undefined ? (\n <Badge variant=\"success\" size=\"sm\">\n {t('carePlanEntryCard.discountLabel', {\n percentage: price.discountPercentage,\n defaultValue: '-{{percentage}}%',\n })}\n </Badge>\n ) : null}\n </div>\n ) : null}\n\n {hasPhaseDetail ? (\n <Collapsible\n variant=\"default\"\n className=\"ds:ms-auto ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n >\n <CollapsibleTrigger asChild>\n <button\n type=\"button\"\n id={detailTriggerId}\n aria-controls={detailContentId}\n className=\"ds:group ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:rounded-[var(--radius-sm)] ds:border-0 ds:bg-transparent type-body-sm ds:text-[color:var(--foreground)] ds:cursor-pointer ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]\"\n >\n <span>\n {t(\n 'carePlanEntryCard.phaseDetail.toggle',\n 'Phase detail',\n )}\n </span>\n <ChevronDown\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-[color:var(--muted-foreground)] ds:transition-transform ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none ds:group-data-[state=open]:rotate-180\"\n />\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent\n id={detailContentId}\n aria-labelledby={detailTriggerId}\n >\n <ul className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-xs)] ds:p-0\">\n {phases?.detail?.map((phase, index) => (\n <PhaseDetailRow\n key={`${phase.label}-${index}`}\n phase={phase}\n locale={activeLocale}\n />\n ))}\n </ul>\n </CollapsibleContent>\n </Collapsible>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n );\n },\n);\n\nCarePlanEntryCard.displayName = 'CarePlanEntryCard';\n\n/* -------------------------------------------------------------------- */\n/* PhaseDetailRow — one row inside the per-phase Collapsible */\n/* -------------------------------------------------------------------- */\n\nfunction PhaseDetailRow({\n phase,\n locale,\n}: {\n phase: CarePlanEntryPhaseDetail;\n locale: string;\n}): ReactNode {\n const { t } = useTranslation('ui');\n return (\n <li className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n <Badge variant={phase.executed ? 'success' : 'neutral'} size=\"sm\" withDot>\n {phase.executed\n ? t('carePlanEntryCard.phaseDetail.executed', 'Executed')\n : t('carePlanEntryCard.phaseDetail.pending', 'Pending')}\n </Badge>\n <span className=\"type-body-sm ds:text-[color:var(--foreground)]\">\n {phase.label}\n </span>\n {phase.executed && phase.executionDateIso ? (\n <Timestamp\n value={phase.executionDateIso}\n format=\"absolute\"\n locale={locale}\n />\n ) : null}\n {phase.operator ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)]\">\n {t('carePlanEntryCard.byOperator', {\n operator: phase.operator,\n defaultValue: 'by {{operator}}',\n })}\n </span>\n ) : null}\n {phase.udi ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:tabular-nums\">\n {t('carePlanEntryCard.phaseDetail.udi', {\n udi: phase.udi,\n defaultValue: 'UDI {{udi}}',\n })}\n </span>\n ) : null}\n </li>\n );\n}\n\nexport type CarePlanEntryCardSurface = NonNullable<\n VariantProps<typeof entitySurfaceVariants>['surface']\n>;\n"],"names":["carePlanEntryCardAgent","handle","DEFAULT_CURRENCY","elementsToConditions","elements","conditions","code","CarePlanEntryCard","forwardRef","id","careName","label","done","executionDateIso","plannedAppointment","operator","price","phases","billed","outsideOfEstimate","notesCount","toothDisplay","locale","currency","surface","ariaLabel","className","rest","ref","t","i18n","useTranslation","headingId","useId","phasesLabelId","detailTriggerId","detailContentId","activeLocale","useAgentRegistration","hasElements","hasPhaseDetail","priceState","listCents","discountedCents","hasDiscount","payableCents","formatMoney","cents","jsx","entitySurfaceVariants","jsxs","Badge","ToothScheme","element","Tag","Timestamp","Progress","TransactionChip","Collapsible","CollapsibleTrigger","ChevronDown","CollapsibleContent","phase","index","PhaseDetailRow"],"mappings":"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"}
1
+ {"version":3,"file":"care-plan-entry-card-DY1toF6E.js","sources":["../../src/components/care-plan-entry-card/care-plan-entry-card.agent.ts","../../src/components/care-plan-entry-card/care-plan-entry-card.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CarePlanEntryCard. */\n/* */\n/* Read-only surface: expose the execution flag and phase-progress */\n/* counts so an agent can introspect a treatment line's status. Counts + */\n/* booleans only — never the treatment name, operator, or any patient */\n/* identity. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CarePlanEntryCardHandle } from './care-plan-entry-card';\n\nexport const carePlanEntryCardAgent: AgentAdapter<CarePlanEntryCardHandle> = {\n id: 'care-plan-entry-card',\n // `expand` is host-delegated: the per-phase breakdown is an in-component\n // Collapsible the user (or a host) drives directly — there is no handle\n // method for it, so no backing action is registered. `view_change` was\n // dropped: the card has no view modes to switch between.\n capabilities: ['expand'],\n state: {\n done: {\n type: 'boolean',\n descriptionKey: 'ui.agent.carePlanEntryCard.state.done',\n description: 'Whether the treatment line is marked executed.',\n read: (handle) => handle.isDone(),\n },\n phaseProgress: {\n type: '{ executed: number; total: number }',\n descriptionKey: 'ui.agent.carePlanEntryCard.state.phaseProgress',\n description:\n 'Phase progress as executed / total counts. Counts only — never phase labels or operator identity.',\n read: (handle) => handle.getPhaseProgress(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'care-plan-entry-card',\n description: 'Marks the CarePlanEntryCard root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop. Addresses a specific line.',\n },\n },\n};\n","import { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown } from 'lucide-react';\nimport { Badge } from '../badge/badge';\nimport { Progress } from '../progress/progress';\nimport { Tag } from '../tag/tag';\nimport { Timestamp } from '../timestamp/timestamp';\nimport { TransactionChip } from '../transaction-chip/transaction-chip';\nimport { ToothScheme } from '../tooth-scheme/tooth-scheme';\nimport type { FdiId, ToothCondition } from '../tooth-scheme/tooth-data';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../collapsible/collapsible';\nimport { entitySurfaceVariants } from '../_shared/entity-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { carePlanEntryCardAgent } from './care-plan-entry-card.agent';\n\n/* -------------------------------------------------------------------- */\n/* CarePlanEntryCard */\n/* */\n/* A single granular treatment line within a care plan / estimate */\n/* (\"voce di preventivo\"). Replaces the hand-rolled platform treatment */\n/* row that interleaves the treatment label, FDI tooth codes, an */\n/* execution badge, a phase-progress bar, a price chip, and an */\n/* expandable per-phase breakdown. */\n/* */\n/* Composes: entitySurfaceVariants (shared card surface) + Tag / ToothScheme*/\n/* (elements) + Badge (lifecycle flags) + Timestamp (execution / planned) */\n/* + Progress (phases) + TransactionChip (price) + Collapsible (per-phase */\n/* detail). */\n/* */\n/* All visible text flows through useTranslation('ui') against the */\n/* `carePlanEntryCard.*` namespace. Identifiers + structural state only */\n/* reach the agent layer — never patient identity. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/** A planned (not-yet-executed) appointment the line is scheduled into. */\nexport interface CarePlanEntryPlannedAppointment {\n /** ISO-8601 date / datetime string. */\n dateIso: string;\n /** Stable appointment id (identifier only — never PHI). */\n appointmentId: string;\n /** Optional deep link to the appointment. */\n url?: string;\n}\n\n/** Price breakdown for the line, all amounts in integer cents. */\nexport interface CarePlanEntryPrice {\n /** List price in cents (non-negative). */\n priceCents?: number;\n /** Discounted price in cents (non-negative), when a discount applies. */\n discountedPriceCents?: number;\n /** Discount percentage (0–100), for the discount label. */\n discountPercentage?: number;\n}\n\n/** One row of the per-phase execution breakdown. */\nexport interface CarePlanEntryPhaseDetail {\n /** Short localised phase label (consumer-localised). */\n label: string;\n /** Whether this phase has been executed. */\n executed: boolean;\n /** ISO-8601 execution date, when executed. */\n executionDateIso?: string;\n /** Operator display name for the phase. */\n operator?: string;\n /** Unique Device Identifier / lot string for traceable materials. */\n udi?: string;\n}\n\n/** Phase progress summary + optional drill-down detail. */\nexport interface CarePlanEntryPhases {\n /** Number of executed phases. */\n executed: number;\n /** Total number of phases. */\n total: number;\n /** Optional per-phase breakdown rendered inside the Collapsible. */\n detail?: CarePlanEntryPhaseDetail[];\n}\n\n/** Operator the line is assigned to. */\nexport interface CarePlanEntryOperator {\n /** Operator display name (consumer-localised). */\n name: string;\n}\n\n/** Curated read-only handle exposed to the agent registry. */\nexport interface CarePlanEntryCardHandle {\n /** Whether the line is marked executed. */\n isDone: () => boolean;\n /** Phase progress as `{ executed, total }` — counts only, no PHI. */\n getPhaseProgress: () => { executed: number; total: number };\n}\n\nexport interface CarePlanEntryCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'aria-label' | 'title' | 'children'\n> {\n /**\n * Stable instance id — surfaced as `data-component-id` for the agent\n * registry and used to wire up the heading ↔ region relationship.\n */\n id?: string;\n /** Treatment / service name. Rendered as the line heading. */\n careName: string;\n /** Optional treatment code (e.g. tariff code) shown beside the name. */\n code?: string;\n /** Optional secondary label (e.g. category) under the name. */\n label?: string;\n /** FDI tooth codes the line applies to (e.g. `['16', '36']`). */\n elements?: string[];\n /** Whether the line has been executed / completed. */\n done?: boolean;\n /** ISO-8601 execution date — rendered next to the \"done\" badge. */\n executionDateIso?: string;\n /** A planned appointment the line is scheduled into, when not yet done. */\n plannedAppointment?: CarePlanEntryPlannedAppointment;\n /** Operator the line is assigned to. */\n operator?: CarePlanEntryOperator;\n /** Price breakdown (list / discounted). */\n price?: CarePlanEntryPrice;\n /** Phase progress + optional drill-down detail. */\n phases?: CarePlanEntryPhases;\n /** Whether the line has been billed / invoiced. */\n billed?: boolean;\n /** Whether the line falls outside the accepted estimate. */\n outsideOfEstimate?: boolean;\n /** Count of attached notes — rendered as a neutral count badge when > 0. */\n notesCount?: number;\n /**\n * How to render `elements`: `'chips'` (default) lists each FDI code as a\n * Tag; `'scheme'` renders a read-only `ToothScheme` highlighting them.\n */\n toothDisplay?: 'scheme' | 'chips';\n /** BCP 47 locale override for dates / currency. Defaults to i18n.language. */\n locale?: string;\n /** ISO 4217 currency code for the price chip. Defaults to `EUR`. */\n currency?: string;\n /**\n * `elevated` (default) paints the kit card chrome; `flat` drops it for use\n * inside an existing Card / Sheet.\n */\n surface?: 'flat' | 'elevated';\n /** Accessible label override for the line region. */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\nconst DEFAULT_CURRENCY = 'EUR';\n\n/**\n * Map the FDI element codes to a `ToothScheme` conditions shortcut. Codes\n * outside the FDI vocabulary are dropped (the scheme ignores unknown ids).\n * Every applied tooth is flagged `filled` so the display-mode chart marks\n * them with both colour and pattern — colour-not-alone.\n */\nfunction elementsToConditions(\n elements: string[],\n): Partial<Record<FdiId, ToothCondition[]>> {\n const conditions: Partial<Record<FdiId, ToothCondition[]>> = {};\n for (const code of elements) {\n conditions[code as FdiId] = ['filled'];\n }\n return conditions;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const CarePlanEntryCard = forwardRef<\n HTMLDivElement,\n CarePlanEntryCardProps\n>(\n (\n {\n id,\n careName,\n code,\n label,\n elements,\n done = false,\n executionDateIso,\n plannedAppointment,\n operator,\n price,\n phases,\n billed = false,\n outsideOfEstimate = false,\n notesCount,\n toothDisplay = 'chips',\n locale,\n currency = DEFAULT_CURRENCY,\n surface = 'elevated',\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const headingId = useId();\n const phasesLabelId = useId();\n const detailTriggerId = useId();\n const detailContentId = useId();\n const activeLocale = locale ?? i18n.language ?? 'en';\n\n useAgentRegistration(\n carePlanEntryCardAgent,\n {\n isDone: () => done,\n getPhaseProgress: () => ({\n executed: phases?.executed ?? 0,\n total: phases?.total ?? 0,\n }),\n },\n id,\n );\n\n const hasElements = !!elements && elements.length > 0;\n const hasPhaseDetail = !!phases?.detail && phases.detail.length > 0;\n\n // Price: prefer the discounted amount when present; show the list price\n // struck through beside it. Both are \"to-invoice\" until billed, then\n // settled.\n const priceState = billed ? 'settled' : 'to-invoice';\n const listCents = price?.priceCents;\n const discountedCents = price?.discountedPriceCents;\n const hasDiscount =\n discountedCents !== undefined &&\n listCents !== undefined &&\n discountedCents < listCents;\n const payableCents = discountedCents ?? listCents;\n\n const formatMoney = (cents: number): string =>\n new Intl.NumberFormat(activeLocale, {\n style: 'currency',\n currency,\n }).format(cents / 100);\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : headingId}\n data-component=\"care-plan-entry-card\"\n data-component-id={id}\n data-done={done ? 'true' : 'false'}\n id={id}\n className={entitySurfaceVariants({ surface, className })}\n {...rest}\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {/* Heading row: name + code + trailing status flags */}\n <div className=\"ds:flex ds:items-start ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <div className=\"ds:flex ds:flex-wrap ds:items-baseline ds:gap-[var(--spacing-xs)]\">\n <h3\n id={headingId}\n className=\"type-title-item ds:m-0 ds:text-[color:var(--foreground)]\"\n >\n {careName}\n </h3>\n {code ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:tabular-nums\">\n {code}\n </span>\n ) : null}\n </div>\n {label ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {label}\n </span>\n ) : null}\n </div>\n\n <div className=\"ds:flex ds:shrink-0 ds:flex-wrap ds:items-center ds:justify-end ds:gap-[var(--spacing-2xs)]\">\n {done ? (\n <Badge variant=\"success\" size=\"sm\" withDot>\n {t('carePlanEntryCard.flag.done', 'Done')}\n </Badge>\n ) : null}\n {outsideOfEstimate ? (\n <Badge variant=\"warning\" size=\"sm\" withDot>\n {t(\n 'carePlanEntryCard.flag.outsideOfEstimate',\n 'Outside estimate',\n )}\n </Badge>\n ) : null}\n {billed ? (\n <Badge variant=\"neutral\" size=\"sm\">\n {t('carePlanEntryCard.flag.billed', 'Billed')}\n </Badge>\n ) : null}\n {typeof notesCount === 'number' && notesCount > 0 ? (\n <Badge\n variant=\"neutral\"\n size=\"sm\"\n aria-label={t('carePlanEntryCard.notesLabel', {\n count: notesCount,\n defaultValue: '{{count}} notes',\n })}\n >\n {notesCount}\n </Badge>\n ) : null}\n </div>\n </div>\n\n {/* Elements: tooth scheme (display mode) or FDI tag chips */}\n {hasElements ? (\n toothDisplay === 'scheme' ? (\n <ToothScheme\n mode=\"display\"\n conditions={elementsToConditions(elements)}\n ariaLabel={t('carePlanEntryCard.toothSchemeLabel', {\n count: elements.length,\n defaultValue: 'Teeth involved: {{count}}',\n })}\n />\n ) : (\n <div\n role=\"list\"\n aria-label={t(\n 'carePlanEntryCard.elementsLabel',\n 'Teeth involved',\n )}\n className=\"ds:flex ds:flex-wrap ds:gap-[var(--spacing-2xs)]\"\n >\n {elements.map((element) => (\n <div role=\"listitem\" key={element}>\n <Tag label={element} variant=\"info\" size=\"sm\" />\n </div>\n ))}\n </div>\n )\n ) : null}\n\n {/* Schedule / execution line */}\n {done && executionDateIso ? (\n <p className=\"type-body-sm ds:m-0 ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]\">\n <span>{t('carePlanEntryCard.executedOn', 'Executed on')}</span>\n <Timestamp\n value={executionDateIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n {operator ? (\n <span>\n {t('carePlanEntryCard.byOperator', {\n operator: operator.name,\n defaultValue: 'by {{operator}}',\n })}\n </span>\n ) : null}\n </p>\n ) : plannedAppointment ? (\n <p className=\"type-body-sm ds:m-0 ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)] ds:text-[color:var(--muted-foreground)]\">\n <span>{t('carePlanEntryCard.plannedFor', 'Planned for')}</span>\n <Timestamp\n value={plannedAppointment.dateIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n {operator ? (\n <span>\n {t('carePlanEntryCard.byOperator', {\n operator: operator.name,\n defaultValue: 'by {{operator}}',\n })}\n </span>\n ) : null}\n </p>\n ) : operator ? (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {t('carePlanEntryCard.assignedTo', {\n operator: operator.name,\n defaultValue: 'Assigned to {{operator}}',\n })}\n </p>\n ) : null}\n\n {/* Phase progress */}\n {phases && phases.total > 0 ? (\n <Progress\n value={phases.executed}\n max={phases.total}\n size=\"sm\"\n aria-label={t('carePlanEntryCard.phasesLabel', {\n executed: phases.executed,\n total: phases.total,\n defaultValue: 'Phases: {{executed}} of {{total}} executed',\n })}\n >\n <div className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <Progress.Label id={phasesLabelId}>\n {t('carePlanEntryCard.phasesHeading', 'Phases')}\n </Progress.Label>\n <span className=\"type-body-sm ds:tabular-nums ds:text-[color:var(--muted-foreground)]\">\n {t('carePlanEntryCard.phasesCount', {\n executed: phases.executed,\n total: phases.total,\n defaultValue: '{{executed}} / {{total}}',\n })}\n </span>\n </div>\n </Progress>\n ) : null}\n\n {/* Footer: price + (optional) phase-detail disclosure */}\n {payableCents !== undefined || hasPhaseDetail ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n {payableCents !== undefined ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <TransactionChip\n state={priceState}\n amount={payableCents / 100}\n currency={currency}\n locale={activeLocale}\n size=\"md\"\n />\n {hasDiscount && listCents !== undefined ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:line-through ds:tabular-nums\">\n {formatMoney(listCents)}\n </span>\n ) : null}\n {hasDiscount && price?.discountPercentage !== undefined ? (\n <Badge variant=\"success\" size=\"sm\">\n {t('carePlanEntryCard.discountLabel', {\n percentage: price.discountPercentage,\n defaultValue: '-{{percentage}}%',\n })}\n </Badge>\n ) : null}\n </div>\n ) : null}\n\n {hasPhaseDetail ? (\n <Collapsible\n variant=\"default\"\n className=\"ds:ms-auto ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\"\n >\n <CollapsibleTrigger asChild>\n <button\n type=\"button\"\n id={detailTriggerId}\n aria-controls={detailContentId}\n className=\"ds:group ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:rounded-[var(--radius-sm)] ds:border-0 ds:bg-transparent type-body-sm ds:text-[color:var(--foreground)] ds:cursor-pointer ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]\"\n >\n <span>\n {t(\n 'carePlanEntryCard.phaseDetail.toggle',\n 'Phase detail',\n )}\n </span>\n <ChevronDown\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:text-[color:var(--muted-foreground)] ds:transition-transform ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none ds:group-data-[state=open]:rotate-180\"\n />\n </button>\n </CollapsibleTrigger>\n <CollapsibleContent\n id={detailContentId}\n aria-labelledby={detailTriggerId}\n >\n <ul className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-xs)] ds:p-0\">\n {phases?.detail?.map((phase, index) => (\n <PhaseDetailRow\n key={`${phase.label}-${index}`}\n phase={phase}\n locale={activeLocale}\n />\n ))}\n </ul>\n </CollapsibleContent>\n </Collapsible>\n ) : null}\n </div>\n ) : null}\n </div>\n </div>\n );\n },\n);\n\nCarePlanEntryCard.displayName = 'CarePlanEntryCard';\n\n/* -------------------------------------------------------------------- */\n/* PhaseDetailRow — one row inside the per-phase Collapsible */\n/* -------------------------------------------------------------------- */\n\nfunction PhaseDetailRow({\n phase,\n locale,\n}: {\n phase: CarePlanEntryPhaseDetail;\n locale: string;\n}): ReactNode {\n const { t } = useTranslation('ui');\n return (\n <li className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n <Badge variant={phase.executed ? 'success' : 'neutral'} size=\"sm\" withDot>\n {phase.executed\n ? t('carePlanEntryCard.phaseDetail.executed', 'Executed')\n : t('carePlanEntryCard.phaseDetail.pending', 'Pending')}\n </Badge>\n <span className=\"type-body-sm ds:text-[color:var(--foreground)]\">\n {phase.label}\n </span>\n {phase.executed && phase.executionDateIso ? (\n <Timestamp\n value={phase.executionDateIso}\n format=\"absolute\"\n locale={locale}\n />\n ) : null}\n {phase.operator ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)]\">\n {t('carePlanEntryCard.byOperator', {\n operator: phase.operator,\n defaultValue: 'by {{operator}}',\n })}\n </span>\n ) : null}\n {phase.udi ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:tabular-nums\">\n {t('carePlanEntryCard.phaseDetail.udi', {\n udi: phase.udi,\n defaultValue: 'UDI {{udi}}',\n })}\n </span>\n ) : null}\n </li>\n );\n}\n\nexport type CarePlanEntryCardSurface = NonNullable<\n VariantProps<typeof entitySurfaceVariants>['surface']\n>;\n"],"names":["carePlanEntryCardAgent","handle","DEFAULT_CURRENCY","elementsToConditions","elements","conditions","code","CarePlanEntryCard","forwardRef","id","careName","label","done","executionDateIso","plannedAppointment","operator","price","phases","billed","outsideOfEstimate","notesCount","toothDisplay","locale","currency","surface","ariaLabel","className","rest","ref","t","i18n","useTranslation","headingId","useId","phasesLabelId","detailTriggerId","detailContentId","activeLocale","useAgentRegistration","hasElements","hasPhaseDetail","priceState","listCents","discountedCents","hasDiscount","payableCents","formatMoney","cents","jsx","entitySurfaceVariants","jsxs","Badge","ToothScheme","element","Tag","Timestamp","Progress","TransactionChip","Collapsible","CollapsibleTrigger","ChevronDown","CollapsibleContent","phase","index","PhaseDetailRow"],"mappings":"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"}
@@ -7,8 +7,8 @@ import { L as O } from "./link-CeV7FoI6.js";
7
7
  import { S as $ } from "./separator-Bdc9bqoJ.js";
8
8
  import { T as A } from "./timestamp-DPLDWdxA.js";
9
9
  import { u as q } from "./registry-DvAUVLHh.js";
10
- import { C as J, e as Q } from "./entity-card-fpm-KUKc.js";
11
- import { i as W } from "./is-safe-url-DkETxeHz.js";
10
+ import { i as J } from "./is-safe-url-CEy9CEml.js";
11
+ import { C as Q, e as W } from "./entity-card-p-LANpYt.js";
12
12
  const X = {
13
13
  id: "care-plan-header",
14
14
  capabilities: [],
@@ -83,7 +83,7 @@ const X = {
83
83
  defaultValue: "Care plan {{number}}"
84
84
  }), B = l(`carePlanCard.state.${s}`, {
85
85
  defaultValue: Y[s]
86
- }), R = t != null && t !== "", V = !!p && W(p), z = !!d && d.length > 0, x = !!m && m.length > 0, y = s === "accepted" ? e == null ? void 0 : e.acceptedIso : s === "closed" ? e == null ? void 0 : e.closedIso : s === "discarded" ? e == null ? void 0 : e.discardedIso : void 0, i = [];
86
+ }), R = t != null && t !== "", V = !!p && J(p), z = !!d && d.length > 0, x = !!m && m.length > 0, y = s === "accepted" ? e == null ? void 0 : e.acceptedIso : s === "closed" ? e == null ? void 0 : e.closedIso : s === "discarded" ? e == null ? void 0 : e.discardedIso : void 0, i = [];
87
87
  e != null && e.acceptedIso && s !== "accepted" && i.push({
88
88
  key: "accepted",
89
89
  label: l("carePlanCard.date.accepted", "Accepted on"),
@@ -125,7 +125,7 @@ const X = {
125
125
  "data-component-id": c,
126
126
  "data-state": s,
127
127
  id: c,
128
- className: Q({ surface: L, density: T, className: S }),
128
+ className: W({ surface: L, density: T, className: S }),
129
129
  ...k,
130
130
  children: /* @__PURE__ */ n("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: [
131
131
  /* @__PURE__ */ n("div", { className: "ds:flex ds:items-start ds:gap-[var(--spacing-sm)]", children: [
@@ -143,7 +143,7 @@ const X = {
143
143
  f ? /* @__PURE__ */ r("div", { className: "ds:flex ds:shrink-0 ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]", children: f }) : null
144
144
  ] }),
145
145
  /* @__PURE__ */ n("div", { className: "ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]", children: [
146
- /* @__PURE__ */ n(P, { variant: J[s], size: "md", withDot: !0, children: [
146
+ /* @__PURE__ */ n(P, { variant: Q[s], size: "md", withDot: !0, children: [
147
147
  B,
148
148
  y ? /* @__PURE__ */ n(N, { children: [
149
149
  " · ",
@@ -195,4 +195,4 @@ export {
195
195
  ee as C,
196
196
  X as c
197
197
  };
198
- //# sourceMappingURL=care-plan-header-Dx5OMkc9.js.map
198
+ //# sourceMappingURL=care-plan-header-CeFXUDnL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"care-plan-header-Dx5OMkc9.js","sources":["../../src/components/care-plan-header/care-plan-header.agent.ts","../../src/components/care-plan-header/care-plan-header.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CarePlanHeader. */\n/* */\n/* Read-only surface: expose the plan's lifecycle state and the count of */\n/* attention alerts so an agent can introspect a plan header's status. */\n/* Enum + count only — never the plan name, the meta values (operator, */\n/* price list, …), or any patient identity. The actions slot is */\n/* consumer-provided, so no backing action is registered. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CarePlanHeaderHandle } from './care-plan-header';\n\nexport const carePlanHeaderAgent: AgentAdapter<CarePlanHeaderHandle> = {\n id: 'care-plan-header',\n capabilities: [],\n state: {\n state: {\n type: \"'estimate' | 'accepted' | 'discarded' | 'closed'\",\n descriptionKey: 'ui.agent.carePlanHeader.state.state',\n description:\n 'The plan lifecycle state. Enum value only — never the localised label or any PHI.',\n read: (handle) => handle.getState(),\n },\n alertCount: {\n type: 'number',\n descriptionKey: 'ui.agent.carePlanHeader.state.alertCount',\n description:\n 'How many attention alerts (e.g. missing signature) are showing. Count only — never the alert labels.',\n read: (handle) => handle.getAlertCount(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'care-plan-header',\n description: 'Marks the CarePlanHeader root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Addresses a specific plan header.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Badge, type BadgeProps } from '../badge/badge';\nimport { KeyValuePair } from '../key-value-pair/key-value-pair';\nimport { Link } from '../link/link';\nimport { Separator } from '../separator/separator';\nimport { Timestamp } from '../timestamp/timestamp';\nimport {\n entitySurfaceVariants,\n CARE_PLAN_STATE_BADGE,\n isSafeEntityUrl,\n type CarePlanState,\n} from '../_shared/entity-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { carePlanHeaderAgent } from './care-plan-header.agent';\n\n/* -------------------------------------------------------------------- */\n/* CarePlanHeader */\n/* */\n/* The identity + meta BANNER for a care plan / estimate — the header */\n/* that crowns an editor or a detail view. The lighter sibling of */\n/* `CarePlanCard`: where that card is the read-only WHOLE-plan summary */\n/* (financials + a phase-progress bar + an entries accordion), */\n/* CarePlanHeader is just the plan's identity (number, name, lifecycle */\n/* badge), its attention alerts (e.g. a missing signature), a consumer- */\n/* labelled meta strip (operator, price list, …), lifecycle dates, and an */\n/* actions slot. It carries NO entries / financials, so it sits cleanly */\n/* atop an EDITABLE surface (odontogram + treatments table) without */\n/* duplicating it. */\n/* */\n/* Composes: entitySurfaceVariants (the shared entity-card surface) + */\n/* Badge (lifecycle state + alerts) + Timestamp (dates) + Link (deep */\n/* link) + KeyValuePair (meta). Reuses the `carePlanCard.*` lifecycle / */\n/* number / date vocabulary, so the header and the summary card speak the */\n/* SAME localised plan language. Identifiers + structural state only reach */\n/* the agent layer — never patient identity. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\nexport type { CarePlanState } from '../_shared/entity-card';\n\n/** Heading element the plan name / number renders as. */\nexport type CarePlanHeaderHeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n/** Tone of an attention alert chip → the Badge variant it paints with. */\nexport type CarePlanHeaderAlertTone = 'warning' | 'error' | 'info';\n\n/**\n * One attention alert shown as a chip beneath the heading — e.g. a missing\n * signature, an expired estimate. The kit owns the chip; the consumer owns the\n * (already-localised) label and the meaning.\n */\nexport interface CarePlanHeaderAlert {\n /** Stable key — identifier only, never PHI. Keys the chip + agent count. */\n id: string;\n /** Already-localised label (consumer-provided). */\n label: ReactNode;\n /** Severity tone. Defaults to `warning`. */\n tone?: CarePlanHeaderAlertTone;\n /** Optional leading glyph (a single lucide element). */\n icon?: ReactElement;\n}\n\n/**\n * One meta fact in the footer strip — operator, price list, referrer, …. The\n * label is consumer-localised; the value is any node (text, an Avatar + name,\n * a Link). Rendered through the shared `KeyValuePair`.\n */\nexport interface CarePlanHeaderMetaItem {\n /** Stable key — identifier only, never PHI. */\n id: string;\n /** Already-localised label (consumer-provided). */\n label: string;\n /** Value node. */\n value: ReactNode;\n /** Optional leading glyph for the pair (a single lucide element). */\n icon?: ReactElement | null;\n}\n\n/** Lifecycle dates — each an ISO-8601 string, rendered via `Timestamp`. */\nexport interface CarePlanHeaderDates {\n /** Acceptance date. */\n acceptedIso?: string;\n /** Closure date. */\n closedIso?: string;\n /** Discard date. */\n discardedIso?: string;\n}\n\n/**\n * Imperative handle the agent adapter drives. Reads only structural state —\n * the lifecycle enum and the count of alerts. Never the plan name, the meta\n * values, or any patient identity.\n */\nexport interface CarePlanHeaderHandle {\n /** The plan lifecycle state (enum, never the localised label). */\n getState: () => CarePlanState;\n /** How many attention alerts are showing. */\n getAlertCount: () => number;\n}\n\nexport interface CarePlanHeaderProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n /** Agent-readiness instance id, surfaced as `data-component-id`. */\n id?: string;\n /**\n * Plan number — used as the heading when no `name` is given (matching\n * platform's `getPresentationName()`, which falls back to `Piano #{number}`)\n * and as the plan's structural identity for the agent layer.\n */\n number: string | number;\n /**\n * Override the number-as-heading label (e.g. a consumer's own `Plan #15`),\n * used ONLY when no `name` is given. Defaults to the localised\n * `Care plan {{number}}` shared with `CarePlanCard`, so the two surfaces read\n * alike unless a consumer opts out. With a `name` present the number is not\n * shown — platform draws no separate plan-number eyebrow.\n */\n numberLabel?: ReactNode;\n /** Plan name — the title heading. Omit for a number-only header. */\n name?: ReactNode;\n /** Lifecycle state — drives the badge variant + localised label. */\n state: CarePlanState;\n /** Deep link for the heading. Rendered only when it passes the safe-URL gate. */\n url?: string;\n /** Attention alerts (e.g. signature missing) shown as chips under the heading. */\n alerts?: CarePlanHeaderAlert[];\n /** Consumer-labelled meta facts (operator, price list, …) in the footer. */\n meta?: CarePlanHeaderMetaItem[];\n /**\n * Lifecycle dates. The date matching the current `state` is folded into the\n * lifecycle badge (e.g. \"Accepted · {date}\"), making the badge self-describing;\n * any other date (e.g. the acceptance date of a now-closed plan) renders as a\n * muted `Timestamp` line beneath the meta.\n */\n dates?: CarePlanHeaderDates;\n /** Inline-end actions slot (e.g. Share / Print). */\n actions?: ReactNode;\n /** Heading element the name / number renders as. Defaults to `h3`. */\n headingTag?: CarePlanHeaderHeadingTag;\n /** `elevated` (default) paints the kit card chrome; `flat` drops it. */\n surface?: 'flat' | 'elevated';\n /** Internal padding density. Defaults to `comfortable`. */\n density?: 'comfortable' | 'compact';\n /** BCP-47 locale override for the dates. Defaults to `i18n.language`. */\n locale?: string;\n /** Fires when the plan deep link / heading is activated. */\n onActivate?: () => void;\n /** Accessible name override for the plan region (defaults to the heading). */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\n/** English fallbacks for the (reused) lifecycle-state labels. */\nconst STATE_LABEL_FALLBACK: Record<CarePlanState, string> = {\n estimate: 'Estimate',\n accepted: 'Accepted',\n discarded: 'Discarded',\n closed: 'Closed',\n};\n\nconst ALERT_TONE_VARIANT: Record<\n CarePlanHeaderAlertTone,\n NonNullable<BadgeProps['variant']>\n> = {\n warning: 'warning',\n error: 'error',\n info: 'info',\n};\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const CarePlanHeader = forwardRef<HTMLElement, CarePlanHeaderProps>(\n function CarePlanHeader(\n {\n id,\n number,\n numberLabel,\n name,\n state,\n url,\n alerts,\n meta,\n dates,\n actions,\n headingTag = 'h3',\n surface = 'elevated',\n density = 'comfortable',\n locale,\n onActivate,\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) {\n const { t, i18n } = useTranslation('ui');\n const headingId = useId();\n const activeLocale = locale ?? i18n.language ?? 'en';\n\n useAgentRegistration(\n carePlanHeaderAgent,\n {\n getState: () => state,\n getAlertCount: () => alerts?.length ?? 0,\n },\n id,\n );\n\n const resolvedNumberLabel =\n numberLabel ??\n t('carePlanCard.number', {\n number,\n defaultValue: 'Care plan {{number}}',\n });\n const stateLabel = t(`carePlanCard.state.${state}`, {\n defaultValue: STATE_LABEL_FALLBACK[state],\n });\n\n const hasName = name != null && name !== '';\n const hasSafeUrl = !!url && isSafeEntityUrl(url);\n const hasAlerts = !!alerts && alerts.length > 0;\n const hasMeta = !!meta && meta.length > 0;\n\n // The date that matches the CURRENT lifecycle state rides INSIDE the state\n // badge (e.g. \"Accepted · {date}\") — the badge becomes self-describing. Any\n // OTHER dates (e.g. the acceptance date of a now-closed plan) remain in the\n // muted footer line below.\n const stateDateIso =\n state === 'accepted'\n ? dates?.acceptedIso\n : state === 'closed'\n ? dates?.closedIso\n : state === 'discarded'\n ? dates?.discardedIso\n : undefined;\n\n const footerDates: Array<{ key: string; label: string; iso: string }> = [];\n if (dates?.acceptedIso && state !== 'accepted') {\n footerDates.push({\n key: 'accepted',\n label: t('carePlanCard.date.accepted', 'Accepted on'),\n iso: dates.acceptedIso,\n });\n }\n if (dates?.closedIso && state !== 'closed') {\n footerDates.push({\n key: 'closed',\n label: t('carePlanCard.date.closed', 'Closed on'),\n iso: dates.closedIso,\n });\n }\n if (dates?.discardedIso && state !== 'discarded') {\n footerDates.push({\n key: 'discarded',\n label: t('carePlanCard.date.discarded', 'Discarded on'),\n iso: dates.discardedIso,\n });\n }\n const hasDates = footerDates.length > 0;\n\n const Heading = headingTag;\n const headingNode = (\n <Heading\n id={headingId}\n className=\"type-title-card ds:m-0 ds:text-[color:var(--foreground)]\"\n >\n {hasName ? name : resolvedNumberLabel}\n </Heading>\n );\n\n const datesLine = hasDates ? (\n <div className=\"type-body-sm ds:flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-2xs)] ds:text-[color:var(--muted-foreground)]\">\n {footerDates.map((d) => (\n <span\n key={d.key}\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\"\n >\n <span>{d.label}</span>\n <Timestamp value={d.iso} format=\"absolute\" locale={activeLocale} />\n </span>\n ))}\n </div>\n ) : null;\n\n return (\n <section\n ref={ref}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : headingId}\n data-component=\"care-plan-header\"\n data-component-id={id}\n data-state={state}\n id={id}\n className={entitySurfaceVariants({ surface, density, className })}\n {...rest}\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {/* Heading row: the plan's single title (name, or the number label as\n a fallback when unnamed — platform's `getPresentationName()`) on\n the inline-start, the document actions docked inline-end. */}\n <div className=\"ds:flex ds:items-start ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:min-w-0 ds:flex-1\">\n {hasSafeUrl ? (\n <Link\n href={url as string}\n weight=\"strong\"\n onClick={(event) => {\n if (\n event.defaultPrevented ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey\n ) {\n return;\n }\n onActivate?.();\n }}\n >\n {headingNode}\n </Link>\n ) : (\n headingNode\n )}\n </div>\n {actions ? (\n <div className=\"ds:flex ds:shrink-0 ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n {actions}\n </div>\n ) : null}\n </div>\n\n {/* Lifecycle state + attention alerts — chips beneath the title. The\n state badge always leads the row; consumer alerts (e.g. a missing\n signature) follow. Size + gap match the shared metadata-chip strip\n (Badge `md` default + `gap-xs`) used by PatientSummaryCard and the\n PatientDetails header, so every card on a patient screen reads with\n one chip rhythm. */}\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n <Badge variant={CARE_PLAN_STATE_BADGE[state]} size=\"md\" withDot>\n {stateLabel}\n {stateDateIso ? (\n <>\n {' · '}\n <Timestamp\n value={stateDateIso}\n format=\"absolute\"\n locale={activeLocale}\n shape=\"bare\"\n />\n </>\n ) : null}\n </Badge>\n {hasAlerts\n ? alerts!.map((alert) => (\n <Badge\n key={alert.id}\n variant={ALERT_TONE_VARIANT[alert.tone ?? 'warning']}\n size=\"md\"\n leading={alert.icon}\n >\n {alert.label}\n </Badge>\n ))\n : null}\n </div>\n\n {/* Footer: meta (operator, price list, …) + lifecycle dates. */}\n {hasMeta || hasDates ? (\n <>\n <Separator orientation=\"horizontal\" />\n <div className=\"ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-xs)]\">\n {hasMeta ? (\n <div className=\"ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-xs)]\">\n {meta!.map((item) => (\n <KeyValuePair\n key={item.id}\n label={item.label}\n value={item.value}\n icon={item.icon ?? undefined}\n data-field-id={item.id}\n />\n ))}\n </div>\n ) : null}\n {datesLine}\n </div>\n </>\n ) : null}\n </div>\n </section>\n );\n },\n);\n\nCarePlanHeader.displayName = 'CarePlanHeader';\n\n/** Surface variant union re-exported for downstream typing. */\nexport type CarePlanHeaderSurface = NonNullable<\n VariantProps<typeof entitySurfaceVariants>['surface']\n>;\n"],"names":["carePlanHeaderAgent","handle","STATE_LABEL_FALLBACK","ALERT_TONE_VARIANT","CarePlanHeader","forwardRef","id","number","numberLabel","name","state","url","alerts","meta","dates","actions","headingTag","surface","density","locale","onActivate","ariaLabel","className","rest","ref","t","i18n","useTranslation","headingId","useId","activeLocale","useAgentRegistration","resolvedNumberLabel","stateLabel","hasName","hasSafeUrl","isSafeEntityUrl","hasAlerts","hasMeta","stateDateIso","footerDates","hasDates","headingNode","jsx","datesLine","d","jsxs","Timestamp","entitySurfaceVariants","Link","event","Badge","CARE_PLAN_STATE_BADGE","Fragment","alert","Separator","item","KeyValuePair"],"mappings":";;;;;;;;;;;AAaO,MAAMA,IAA0D;AAAA,EACrE,IAAI;AAAA,EACJ,cAAc,CAAA;AAAA,EACd,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,IAEpC,YAAY;AAAA,MACV,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,cAAA;AAAA,IAAc;AAAA,EACzC;AAAA,EAEF,SAAS,CAAA;AAAA,EACT,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GC2HMC,IAAsD;AAAA,EAC1D,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,QAAQ;AACV,GAEMC,IAGF;AAAA,EACF,SAAS;AAAA,EACT,OAAO;AAAA,EACP,MAAM;AACR,GAMaC,KAAiBC;AAAA,EAC5B,SACE;AAAA,IACE,IAAAC;AAAA,IACA,QAAAC;AAAA,IACA,aAAAC;AAAA,IACA,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,KAAAC;AAAA,IACA,QAAAC;AAAA,IACA,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,SAAAC,IAAU;AAAA,IACV,SAAAC,IAAU;AAAA,IACV,QAAAC;AAAA,IACA,YAAAC;AAAA,IACA,cAAcC;AAAA,IACd,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,GACA;AACA,UAAM,EAAE,GAAAC,GAAG,MAAAC,MAASC,EAAe,IAAI,GACjCC,IAAYC,EAAA,GACZC,IAAeX,KAAUO,EAAK,YAAY;AAEhD,IAAAK;AAAA,MACE/B;AAAA,MACA;AAAA,QACE,UAAU,MAAMU;AAAA,QAChB,eAAe,OAAME,KAAA,gBAAAA,EAAQ,WAAU;AAAA,MAAA;AAAA,MAEzCN;AAAA,IAAA;AAGF,UAAM0B,IACJxB,KACAiB,EAAE,uBAAuB;AAAA,MACvB,QAAAlB;AAAA,MACA,cAAc;AAAA,IAAA,CACf,GACG0B,IAAaR,EAAE,sBAAsBf,CAAK,IAAI;AAAA,MAClD,cAAcR,EAAqBQ,CAAK;AAAA,IAAA,CACzC,GAEKwB,IAAUzB,KAAQ,QAAQA,MAAS,IACnC0B,IAAa,CAAC,CAACxB,KAAOyB,EAAgBzB,CAAG,GACzC0B,IAAY,CAAC,CAACzB,KAAUA,EAAO,SAAS,GACxC0B,IAAU,CAAC,CAACzB,KAAQA,EAAK,SAAS,GAMlC0B,IACJ7B,MAAU,aACNI,KAAA,gBAAAA,EAAO,cACPJ,MAAU,WACRI,KAAA,gBAAAA,EAAO,YACPJ,MAAU,cACRI,KAAA,gBAAAA,EAAO,eACP,QAEJ0B,IAAkE,CAAA;AACxE,IAAI1B,KAAA,QAAAA,EAAO,eAAeJ,MAAU,cAClC8B,EAAY,KAAK;AAAA,MACf,KAAK;AAAA,MACL,OAAOf,EAAE,8BAA8B,aAAa;AAAA,MACpD,KAAKX,EAAM;AAAA,IAAA,CACZ,GAECA,KAAA,QAAAA,EAAO,aAAaJ,MAAU,YAChC8B,EAAY,KAAK;AAAA,MACf,KAAK;AAAA,MACL,OAAOf,EAAE,4BAA4B,WAAW;AAAA,MAChD,KAAKX,EAAM;AAAA,IAAA,CACZ,GAECA,KAAA,QAAAA,EAAO,gBAAgBJ,MAAU,eACnC8B,EAAY,KAAK;AAAA,MACf,KAAK;AAAA,MACL,OAAOf,EAAE,+BAA+B,cAAc;AAAA,MACtD,KAAKX,EAAM;AAAA,IAAA,CACZ;AAEH,UAAM2B,IAAWD,EAAY,SAAS,GAGhCE,IACJ,gBAAAC;AAAA,MAFc3B;AAAA,MAEb;AAAA,QACC,IAAIY;AAAA,QACJ,WAAU;AAAA,QAET,cAAUnB,IAAOuB;AAAA,MAAA;AAAA,IAAA,GAIhBY,IAAYH,IAChB,gBAAAE,EAAC,OAAA,EAAI,WAAU,wJACZ,UAAAH,EAAY,IAAI,CAACK,MAChB,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAEV,UAAA;AAAA,UAAA,gBAAAH,EAAC,QAAA,EAAM,YAAE,MAAA,CAAM;AAAA,UACf,gBAAAA,EAACI,KAAU,OAAOF,EAAE,KAAK,QAAO,YAAW,QAAQf,EAAA,CAAc;AAAA,QAAA;AAAA,MAAA;AAAA,MAJ5De,EAAE;AAAA,IAAA,CAMV,GACH,IACE;AAEJ,WACE,gBAAAF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAnB;AAAA,QACA,cAAYH;AAAA,QACZ,mBAAiBA,IAAY,SAAYO;AAAA,QACzC,kBAAe;AAAA,QACf,qBAAmBtB;AAAA,QACnB,cAAYI;AAAA,QACZ,IAAAJ;AAAA,QACA,WAAW0C,EAAsB,EAAE,SAAA/B,GAAS,SAAAC,GAAS,WAAAI,GAAW;AAAA,QAC/D,GAAGC;AAAA,QAEJ,UAAA,gBAAAuB,EAAC,OAAA,EAAI,WAAU,kDAIb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,qDACb,UAAA;AAAA,YAAA,gBAAAH,EAAC,OAAA,EAAI,WAAU,wBACZ,UAAAR,IACC,gBAAAQ;AAAA,cAACM;AAAA,cAAA;AAAA,gBACC,MAAMtC;AAAA,gBACN,QAAO;AAAA,gBACP,SAAS,CAACuC,MAAU;AAClB,kBACEA,EAAM,oBACNA,EAAM,WACNA,EAAM,WACNA,EAAM,YAIR9B,KAAA,QAAAA;AAAA,gBACF;AAAA,gBAEC,UAAAsB;AAAA,cAAA;AAAA,YAAA,IAGHA,EAAA,CAEJ;AAAA,YACC3B,IACC,gBAAA4B,EAAC,OAAA,EAAI,WAAU,+EACZ,aACH,IACE;AAAA,UAAA,GACN;AAAA,UAQA,gBAAAG,EAAC,OAAA,EAAI,WAAU,mEACb,UAAA;AAAA,YAAA,gBAAAA,EAACK,GAAA,EAAM,SAASC,EAAsB1C,CAAK,GAAG,MAAK,MAAK,SAAO,IAC5D,UAAA;AAAA,cAAAuB;AAAA,cACAM,IACC,gBAAAO,EAAAO,GAAA,EACG,UAAA;AAAA,gBAAA;AAAA,gBACD,gBAAAV;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,OAAOR;AAAA,oBACP,QAAO;AAAA,oBACP,QAAQT;AAAA,oBACR,OAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACR,EAAA,CACF,IACE;AAAA,YAAA,GACN;AAAA,YACCO,IACGzB,EAAQ,IAAI,CAAC0C,MACX,gBAAAX;AAAA,cAACQ;AAAA,cAAA;AAAA,gBAEC,SAAShD,EAAmBmD,EAAM,QAAQ,SAAS;AAAA,gBACnD,MAAK;AAAA,gBACL,SAASA,EAAM;AAAA,gBAEd,UAAAA,EAAM;AAAA,cAAA;AAAA,cALFA,EAAM;AAAA,YAAA,CAOd,IACD;AAAA,UAAA,GACN;AAAA,UAGChB,KAAWG,IACV,gBAAAK,EAAAO,GAAA,EACE,UAAA;AAAA,YAAA,gBAAAV,EAACY,GAAA,EAAU,aAAY,aAAA,CAAa;AAAA,YACpC,gBAAAT,EAAC,OAAA,EAAI,WAAU,6DACZ,UAAA;AAAA,cAAAR,sBACE,OAAA,EAAI,WAAU,kFACZ,UAAAzB,EAAM,IAAI,CAAC2C,MACV,gBAAAb;AAAA,gBAACc;AAAA,gBAAA;AAAA,kBAEC,OAAOD,EAAK;AAAA,kBACZ,OAAOA,EAAK;AAAA,kBACZ,MAAMA,EAAK,QAAQ;AAAA,kBACnB,iBAAeA,EAAK;AAAA,gBAAA;AAAA,gBAJfA,EAAK;AAAA,cAAA,CAMb,GACH,IACE;AAAA,cACHZ;AAAA,YAAA,EAAA,CACH;AAAA,UAAA,EAAA,CACF,IACE;AAAA,QAAA,EAAA,CACN;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAxC,GAAe,cAAc;"}
1
+ {"version":3,"file":"care-plan-header-CeFXUDnL.js","sources":["../../src/components/care-plan-header/care-plan-header.agent.ts","../../src/components/care-plan-header/care-plan-header.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CarePlanHeader. */\n/* */\n/* Read-only surface: expose the plan's lifecycle state and the count of */\n/* attention alerts so an agent can introspect a plan header's status. */\n/* Enum + count only — never the plan name, the meta values (operator, */\n/* price list, …), or any patient identity. The actions slot is */\n/* consumer-provided, so no backing action is registered. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CarePlanHeaderHandle } from './care-plan-header';\n\nexport const carePlanHeaderAgent: AgentAdapter<CarePlanHeaderHandle> = {\n id: 'care-plan-header',\n capabilities: [],\n state: {\n state: {\n type: \"'estimate' | 'accepted' | 'discarded' | 'closed'\",\n descriptionKey: 'ui.agent.carePlanHeader.state.state',\n description:\n 'The plan lifecycle state. Enum value only — never the localised label or any PHI.',\n read: (handle) => handle.getState(),\n },\n alertCount: {\n type: 'number',\n descriptionKey: 'ui.agent.carePlanHeader.state.alertCount',\n description:\n 'How many attention alerts (e.g. missing signature) are showing. Count only — never the alert labels.',\n read: (handle) => handle.getAlertCount(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'care-plan-header',\n description: 'Marks the CarePlanHeader root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Addresses a specific plan header.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Badge, type BadgeProps } from '../badge/badge';\nimport { KeyValuePair } from '../key-value-pair/key-value-pair';\nimport { Link } from '../link/link';\nimport { Separator } from '../separator/separator';\nimport { Timestamp } from '../timestamp/timestamp';\nimport {\n entitySurfaceVariants,\n CARE_PLAN_STATE_BADGE,\n isSafeEntityUrl,\n type CarePlanState,\n} from '../_shared/entity-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { carePlanHeaderAgent } from './care-plan-header.agent';\n\n/* -------------------------------------------------------------------- */\n/* CarePlanHeader */\n/* */\n/* The identity + meta BANNER for a care plan / estimate — the header */\n/* that crowns an editor or a detail view. The lighter sibling of */\n/* `CarePlanCard`: where that card is the read-only WHOLE-plan summary */\n/* (financials + a phase-progress bar + an entries accordion), */\n/* CarePlanHeader is just the plan's identity (number, name, lifecycle */\n/* badge), its attention alerts (e.g. a missing signature), a consumer- */\n/* labelled meta strip (operator, price list, …), lifecycle dates, and an */\n/* actions slot. It carries NO entries / financials, so it sits cleanly */\n/* atop an EDITABLE surface (odontogram + treatments table) without */\n/* duplicating it. */\n/* */\n/* Composes: entitySurfaceVariants (the shared entity-card surface) + */\n/* Badge (lifecycle state + alerts) + Timestamp (dates) + Link (deep */\n/* link) + KeyValuePair (meta). Reuses the `carePlanCard.*` lifecycle / */\n/* number / date vocabulary, so the header and the summary card speak the */\n/* SAME localised plan language. Identifiers + structural state only reach */\n/* the agent layer — never patient identity. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\nexport type { CarePlanState } from '../_shared/entity-card';\n\n/** Heading element the plan name / number renders as. */\nexport type CarePlanHeaderHeadingTag = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n/** Tone of an attention alert chip → the Badge variant it paints with. */\nexport type CarePlanHeaderAlertTone = 'warning' | 'error' | 'info';\n\n/**\n * One attention alert shown as a chip beneath the heading — e.g. a missing\n * signature, an expired estimate. The kit owns the chip; the consumer owns the\n * (already-localised) label and the meaning.\n */\nexport interface CarePlanHeaderAlert {\n /** Stable key — identifier only, never PHI. Keys the chip + agent count. */\n id: string;\n /** Already-localised label (consumer-provided). */\n label: ReactNode;\n /** Severity tone. Defaults to `warning`. */\n tone?: CarePlanHeaderAlertTone;\n /** Optional leading glyph (a single lucide element). */\n icon?: ReactElement;\n}\n\n/**\n * One meta fact in the footer strip — operator, price list, referrer, …. The\n * label is consumer-localised; the value is any node (text, an Avatar + name,\n * a Link). Rendered through the shared `KeyValuePair`.\n */\nexport interface CarePlanHeaderMetaItem {\n /** Stable key — identifier only, never PHI. */\n id: string;\n /** Already-localised label (consumer-provided). */\n label: string;\n /** Value node. */\n value: ReactNode;\n /** Optional leading glyph for the pair (a single lucide element). */\n icon?: ReactElement | null;\n}\n\n/** Lifecycle dates — each an ISO-8601 string, rendered via `Timestamp`. */\nexport interface CarePlanHeaderDates {\n /** Acceptance date. */\n acceptedIso?: string;\n /** Closure date. */\n closedIso?: string;\n /** Discard date. */\n discardedIso?: string;\n}\n\n/**\n * Imperative handle the agent adapter drives. Reads only structural state —\n * the lifecycle enum and the count of alerts. Never the plan name, the meta\n * values, or any patient identity.\n */\nexport interface CarePlanHeaderHandle {\n /** The plan lifecycle state (enum, never the localised label). */\n getState: () => CarePlanState;\n /** How many attention alerts are showing. */\n getAlertCount: () => number;\n}\n\nexport interface CarePlanHeaderProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n /** Agent-readiness instance id, surfaced as `data-component-id`. */\n id?: string;\n /**\n * Plan number — used as the heading when no `name` is given (matching\n * platform's `getPresentationName()`, which falls back to `Piano #{number}`)\n * and as the plan's structural identity for the agent layer.\n */\n number: string | number;\n /**\n * Override the number-as-heading label (e.g. a consumer's own `Plan #15`),\n * used ONLY when no `name` is given. Defaults to the localised\n * `Care plan {{number}}` shared with `CarePlanCard`, so the two surfaces read\n * alike unless a consumer opts out. With a `name` present the number is not\n * shown — platform draws no separate plan-number eyebrow.\n */\n numberLabel?: ReactNode;\n /** Plan name — the title heading. Omit for a number-only header. */\n name?: ReactNode;\n /** Lifecycle state — drives the badge variant + localised label. */\n state: CarePlanState;\n /** Deep link for the heading. Rendered only when it passes the safe-URL gate. */\n url?: string;\n /** Attention alerts (e.g. signature missing) shown as chips under the heading. */\n alerts?: CarePlanHeaderAlert[];\n /** Consumer-labelled meta facts (operator, price list, …) in the footer. */\n meta?: CarePlanHeaderMetaItem[];\n /**\n * Lifecycle dates. The date matching the current `state` is folded into the\n * lifecycle badge (e.g. \"Accepted · {date}\"), making the badge self-describing;\n * any other date (e.g. the acceptance date of a now-closed plan) renders as a\n * muted `Timestamp` line beneath the meta.\n */\n dates?: CarePlanHeaderDates;\n /** Inline-end actions slot (e.g. Share / Print). */\n actions?: ReactNode;\n /** Heading element the name / number renders as. Defaults to `h3`. */\n headingTag?: CarePlanHeaderHeadingTag;\n /** `elevated` (default) paints the kit card chrome; `flat` drops it. */\n surface?: 'flat' | 'elevated';\n /** Internal padding density. Defaults to `comfortable`. */\n density?: 'comfortable' | 'compact';\n /** BCP-47 locale override for the dates. Defaults to `i18n.language`. */\n locale?: string;\n /** Fires when the plan deep link / heading is activated. */\n onActivate?: () => void;\n /** Accessible name override for the plan region (defaults to the heading). */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\n/** English fallbacks for the (reused) lifecycle-state labels. */\nconst STATE_LABEL_FALLBACK: Record<CarePlanState, string> = {\n estimate: 'Estimate',\n accepted: 'Accepted',\n discarded: 'Discarded',\n closed: 'Closed',\n};\n\nconst ALERT_TONE_VARIANT: Record<\n CarePlanHeaderAlertTone,\n NonNullable<BadgeProps['variant']>\n> = {\n warning: 'warning',\n error: 'error',\n info: 'info',\n};\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const CarePlanHeader = forwardRef<HTMLElement, CarePlanHeaderProps>(\n function CarePlanHeader(\n {\n id,\n number,\n numberLabel,\n name,\n state,\n url,\n alerts,\n meta,\n dates,\n actions,\n headingTag = 'h3',\n surface = 'elevated',\n density = 'comfortable',\n locale,\n onActivate,\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) {\n const { t, i18n } = useTranslation('ui');\n const headingId = useId();\n const activeLocale = locale ?? i18n.language ?? 'en';\n\n useAgentRegistration(\n carePlanHeaderAgent,\n {\n getState: () => state,\n getAlertCount: () => alerts?.length ?? 0,\n },\n id,\n );\n\n const resolvedNumberLabel =\n numberLabel ??\n t('carePlanCard.number', {\n number,\n defaultValue: 'Care plan {{number}}',\n });\n const stateLabel = t(`carePlanCard.state.${state}`, {\n defaultValue: STATE_LABEL_FALLBACK[state],\n });\n\n const hasName = name != null && name !== '';\n const hasSafeUrl = !!url && isSafeEntityUrl(url);\n const hasAlerts = !!alerts && alerts.length > 0;\n const hasMeta = !!meta && meta.length > 0;\n\n // The date that matches the CURRENT lifecycle state rides INSIDE the state\n // badge (e.g. \"Accepted · {date}\") — the badge becomes self-describing. Any\n // OTHER dates (e.g. the acceptance date of a now-closed plan) remain in the\n // muted footer line below.\n const stateDateIso =\n state === 'accepted'\n ? dates?.acceptedIso\n : state === 'closed'\n ? dates?.closedIso\n : state === 'discarded'\n ? dates?.discardedIso\n : undefined;\n\n const footerDates: Array<{ key: string; label: string; iso: string }> = [];\n if (dates?.acceptedIso && state !== 'accepted') {\n footerDates.push({\n key: 'accepted',\n label: t('carePlanCard.date.accepted', 'Accepted on'),\n iso: dates.acceptedIso,\n });\n }\n if (dates?.closedIso && state !== 'closed') {\n footerDates.push({\n key: 'closed',\n label: t('carePlanCard.date.closed', 'Closed on'),\n iso: dates.closedIso,\n });\n }\n if (dates?.discardedIso && state !== 'discarded') {\n footerDates.push({\n key: 'discarded',\n label: t('carePlanCard.date.discarded', 'Discarded on'),\n iso: dates.discardedIso,\n });\n }\n const hasDates = footerDates.length > 0;\n\n const Heading = headingTag;\n const headingNode = (\n <Heading\n id={headingId}\n className=\"type-title-card ds:m-0 ds:text-[color:var(--foreground)]\"\n >\n {hasName ? name : resolvedNumberLabel}\n </Heading>\n );\n\n const datesLine = hasDates ? (\n <div className=\"type-body-sm ds:flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-2xs)] ds:text-[color:var(--muted-foreground)]\">\n {footerDates.map((d) => (\n <span\n key={d.key}\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\"\n >\n <span>{d.label}</span>\n <Timestamp value={d.iso} format=\"absolute\" locale={activeLocale} />\n </span>\n ))}\n </div>\n ) : null;\n\n return (\n <section\n ref={ref}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : headingId}\n data-component=\"care-plan-header\"\n data-component-id={id}\n data-state={state}\n id={id}\n className={entitySurfaceVariants({ surface, density, className })}\n {...rest}\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {/* Heading row: the plan's single title (name, or the number label as\n a fallback when unnamed — platform's `getPresentationName()`) on\n the inline-start, the document actions docked inline-end. */}\n <div className=\"ds:flex ds:items-start ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:min-w-0 ds:flex-1\">\n {hasSafeUrl ? (\n <Link\n href={url as string}\n weight=\"strong\"\n onClick={(event) => {\n if (\n event.defaultPrevented ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey\n ) {\n return;\n }\n onActivate?.();\n }}\n >\n {headingNode}\n </Link>\n ) : (\n headingNode\n )}\n </div>\n {actions ? (\n <div className=\"ds:flex ds:shrink-0 ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n {actions}\n </div>\n ) : null}\n </div>\n\n {/* Lifecycle state + attention alerts — chips beneath the title. The\n state badge always leads the row; consumer alerts (e.g. a missing\n signature) follow. Size + gap match the shared metadata-chip strip\n (Badge `md` default + `gap-xs`) used by PatientSummaryCard and the\n PatientDetails header, so every card on a patient screen reads with\n one chip rhythm. */}\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n <Badge variant={CARE_PLAN_STATE_BADGE[state]} size=\"md\" withDot>\n {stateLabel}\n {stateDateIso ? (\n <>\n {' · '}\n <Timestamp\n value={stateDateIso}\n format=\"absolute\"\n locale={activeLocale}\n shape=\"bare\"\n />\n </>\n ) : null}\n </Badge>\n {hasAlerts\n ? alerts!.map((alert) => (\n <Badge\n key={alert.id}\n variant={ALERT_TONE_VARIANT[alert.tone ?? 'warning']}\n size=\"md\"\n leading={alert.icon}\n >\n {alert.label}\n </Badge>\n ))\n : null}\n </div>\n\n {/* Footer: meta (operator, price list, …) + lifecycle dates. */}\n {hasMeta || hasDates ? (\n <>\n <Separator orientation=\"horizontal\" />\n <div className=\"ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-xs)]\">\n {hasMeta ? (\n <div className=\"ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-xs)]\">\n {meta!.map((item) => (\n <KeyValuePair\n key={item.id}\n label={item.label}\n value={item.value}\n icon={item.icon ?? undefined}\n data-field-id={item.id}\n />\n ))}\n </div>\n ) : null}\n {datesLine}\n </div>\n </>\n ) : null}\n </div>\n </section>\n );\n },\n);\n\nCarePlanHeader.displayName = 'CarePlanHeader';\n\n/** Surface variant union re-exported for downstream typing. */\nexport type CarePlanHeaderSurface = NonNullable<\n VariantProps<typeof entitySurfaceVariants>['surface']\n>;\n"],"names":["carePlanHeaderAgent","handle","STATE_LABEL_FALLBACK","ALERT_TONE_VARIANT","CarePlanHeader","forwardRef","id","number","numberLabel","name","state","url","alerts","meta","dates","actions","headingTag","surface","density","locale","onActivate","ariaLabel","className","rest","ref","t","i18n","useTranslation","headingId","useId","activeLocale","useAgentRegistration","resolvedNumberLabel","stateLabel","hasName","hasSafeUrl","isSafeEntityUrl","hasAlerts","hasMeta","stateDateIso","footerDates","hasDates","headingNode","jsx","datesLine","d","jsxs","Timestamp","entitySurfaceVariants","Link","event","Badge","CARE_PLAN_STATE_BADGE","Fragment","alert","Separator","item","KeyValuePair"],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ import { jsx as e, jsxs as i } from "react/jsx-runtime";
2
+ import { useRef as y, useEffect as b } from "react";
3
+ import { useTranslation as w, Trans as T } from "react-i18next";
4
+ import { A as c } from "./alert-C4WKViaS.js";
5
+ import { B as g } from "./badge-BUk4RjTS.js";
6
+ import { B as p } from "./button-DohK_Ak_.js";
7
+ import { C as v } from "./card-n6W6LW-N.js";
8
+ import { f as C } from "./intl-locale-FWh-Y5_3.js";
9
+ function B(t, l) {
10
+ const r = new Date(t);
11
+ if (Number.isNaN(r.getTime())) return t;
12
+ try {
13
+ return new Intl.DateTimeFormat(C(l), {
14
+ dateStyle: "long",
15
+ timeZone: "UTC"
16
+ }).format(r);
17
+ } catch {
18
+ return t;
19
+ }
20
+ }
21
+ function K({
22
+ documents: t,
23
+ onSign: l,
24
+ onContinue: r,
25
+ noMobile: u = !1,
26
+ noMobileMessage: x,
27
+ headingLevel: m = 1,
28
+ focusOnMount: D = !1,
29
+ className: k
30
+ }) {
31
+ const { t: s, i18n: N } = w("ui"), f = y(null);
32
+ b(() => {
33
+ var n;
34
+ D && ((n = f.current) == null || n.focus({ preventScroll: !0 }));
35
+ }, []);
36
+ const a = t.length, h = t.filter((n) => n.signed).length, d = a > 0 && h === a, I = m === 1 ? "h1" : "h2";
37
+ return /* @__PURE__ */ e("div", { "data-component": "check-in-documents", className: k, children: /* @__PURE__ */ e(v, { variant: "elevated", className: "ds:w-full", children: /* @__PURE__ */ e(v.Body, { children: /* @__PURE__ */ i("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: [
38
+ /* @__PURE__ */ i("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
39
+ /* @__PURE__ */ e(
40
+ I,
41
+ {
42
+ ref: f,
43
+ tabIndex: -1,
44
+ className: m === 1 ? "type-title-page ds:m-0 ds:text-foreground ds:outline-none" : "type-title-card ds:m-0 ds:text-foreground ds:outline-none",
45
+ children: s("checkInDocuments.title")
46
+ }
47
+ ),
48
+ /* @__PURE__ */ e("p", { className: "type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]", children: s("checkInDocuments.intro") })
49
+ ] }),
50
+ a > 0 ? /* @__PURE__ */ e("span", { role: "status", "aria-live": "polite", className: "ds:self-start", children: /* @__PURE__ */ e(g, { variant: d ? "success" : "neutral", children: s("checkInDocuments.progress", {
51
+ signed: h,
52
+ total: a
53
+ }) }) }) : null,
54
+ a > 0 ? (
55
+ // eslint-disable-next-line jsx-a11y/no-redundant-roles -- role="list" restores list semantics that ds:list-none strips in Safari/VoiceOver
56
+ /* @__PURE__ */ e(
57
+ "ul",
58
+ {
59
+ role: "list",
60
+ "aria-label": s("checkInDocuments.listLabel"),
61
+ className: "ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0",
62
+ children: t.map((n) => {
63
+ const o = n.signed ? void 0 : n.changedOn;
64
+ return /* @__PURE__ */ i(
65
+ "li",
66
+ {
67
+ "data-document-id": n.id,
68
+ className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)] ds:p-[var(--spacing-md)]",
69
+ children: [
70
+ /* @__PURE__ */ i("div", { className: "ds:flex ds:flex-wrap ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]", children: [
71
+ /* @__PURE__ */ e(
72
+ "span",
73
+ {
74
+ dir: "auto",
75
+ className: "type-title-item ds:min-w-0 ds:break-words",
76
+ children: n.title
77
+ }
78
+ ),
79
+ /* @__PURE__ */ e(
80
+ g,
81
+ {
82
+ variant: n.signed ? "success" : o ? "error" : "warning",
83
+ children: n.signed ? s("checkInDocuments.statusSigned") : s(o ? "checkInDocuments.statusSignAgain" : "checkInDocuments.statusToSign")
84
+ }
85
+ )
86
+ ] }),
87
+ o ? /* @__PURE__ */ e(c, { variant: "warning", announce: "off", children: /* @__PURE__ */ e(c.Description, { children: /* @__PURE__ */ e(
88
+ T,
89
+ {
90
+ t: s,
91
+ ns: "ui",
92
+ i18nKey: "checkInDocuments.reSignNotice",
93
+ values: {
94
+ title: n.title,
95
+ date: B(o, N.language)
96
+ },
97
+ components: { title: /* @__PURE__ */ e("bdi", {}) }
98
+ }
99
+ ) }) }) : null
100
+ ]
101
+ },
102
+ n.id
103
+ );
104
+ })
105
+ }
106
+ )
107
+ ) : null,
108
+ u && !d && a > 0 ? /* @__PURE__ */ i(c, { variant: "warning", announce: "off", children: [
109
+ /* @__PURE__ */ e(c.Title, { as: m === 1 ? "h2" : "h3", children: s("checkInDocuments.noMobileTitle") }),
110
+ /* @__PURE__ */ e(c.Description, { children: x ?? s("checkInDocuments.noMobileBody") })
111
+ ] }) : null,
112
+ d && r ? /* @__PURE__ */ e(
113
+ p,
114
+ {
115
+ intent: "primary",
116
+ className: "ds:min-h-[var(--min-target-size)] ds:w-full",
117
+ "data-action": "documents-continue",
118
+ onClick: r,
119
+ children: s("checkInDocuments.continue")
120
+ }
121
+ ) : !d && a > 0 && !u && l ? /* @__PURE__ */ e(
122
+ p,
123
+ {
124
+ intent: "primary",
125
+ className: "ds:min-h-[var(--min-target-size)] ds:w-full",
126
+ "data-action": "sign-all",
127
+ onClick: l,
128
+ children: s("checkInDocuments.signAll")
129
+ }
130
+ ) : null
131
+ ] }) }) }) });
132
+ }
133
+ export {
134
+ K as C
135
+ };
136
+ //# sourceMappingURL=check-in-documents-CEVcgcYZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-in-documents-CEVcgcYZ.js","sources":["../../src/patterns/check-in-documents/check-in-documents.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* CheckInDocuments (HTP-6925): the documents step of check-in. */\n/* */\n/* Lists exactly the documents the host gives it, each with its status, */\n/* the \"N of M signed\" count and one action: \"Read and sign\" while any */\n/* is unsigned, \"Continue\" once every one is signed. It decides nothing, */\n/* fetches nothing and keeps no state: the signing round (one round, */\n/* D121, ending with a Sign button and no code of its own, D133) is the */\n/* signing pattern's, mounted by the host. */\n/* ------------------------------------------------------------------ */\n\nimport { useEffect, useRef, type ReactNode } from 'react';\nimport { Trans, useTranslation } from 'react-i18next';\nimport { Alert } from '../../components/alert';\nimport { Badge } from '../../components/badge';\nimport { Button } from '../../components/button';\nimport { Card } from '../../components/card';\nimport { formatLocale } from '../../components/_shared/intl-locale';\n\n/** One document in the check-in list. */\nexport interface CheckInDocumentItem {\n /**\n * Stable id. An opaque id, never built from patient data (no name, birth\n * date or file name): it is written to the DOM as `data-document-id` on the\n * row, and privacy mode does not mask it.\n */\n id: string;\n /** Title, already translated by the host. It wraps, however long. */\n title: string;\n /** The patient has signed the current version. */\n signed: boolean;\n /**\n * ISO date-only (`2026-10-01`) on which the document changed since the\n * patient last signed it. Read only while `signed` is false: the row then\n * says \"Sign again\" and a notice names the document and the date. The date\n * is written in the active language, as the calendar day given (no zone\n * shift): provisional, the zone and format are to confirm. Whether this is\n * the only changed field the platform returns is also to confirm.\n */\n changedOn?: string;\n}\n\nexport interface CheckInDocumentsProps {\n /**\n * The documents due, one to many, in the order to show. The screen lists\n * exactly these and adds none. Required.\n */\n documents: CheckInDocumentItem[];\n /**\n * Called by \"Read and sign\". The host opens the signing round for every\n * unsigned document. The button shows only when this is given, and never\n * while `noMobile` is set.\n */\n onSign?: () => void;\n /**\n * Called by \"Continue\". The button shows only when this is given and every\n * listed document is signed.\n */\n onContinue?: () => void;\n /**\n * The patient has no verified mobile, so no SMS check can go out before\n * the round. Hides \"Read and sign\" and shows \"Contact the practice\"\n * instead. There is no tick box and no code by email.\n */\n noMobile?: boolean;\n /** Replaces the text under \"Contact the practice\". Host text. */\n noMobileMessage?: ReactNode;\n /** Heading level. Default 1; use 2 inside a page that has an h1. */\n headingLevel?: 1 | 2;\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// Provisional (zone and format are to confirm). A date-only value is a\n// calendar day, not an instant: format it in UTC so no zone can move it to\n// the day before or after. The language is the kit's formatting tag (base\n// English is British).\nfunction formatDay(iso: string, language: string): string {\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) return iso;\n try {\n return new Intl.DateTimeFormat(formatLocale(language), {\n dateStyle: 'long',\n timeZone: 'UTC',\n }).format(date);\n } catch {\n return iso;\n }\n}\n\n/**\n * The documents step of check-in: what is due, what is signed, and the one\n * action that moves on. Props in, callbacks out; no state of its own.\n */\nexport function CheckInDocuments({\n documents,\n onSign,\n onContinue,\n noMobile = false,\n noMobileMessage,\n headingLevel = 1,\n focusOnMount = false,\n className,\n}: CheckInDocumentsProps) {\n const { t, i18n } = useTranslation('ui');\n const headingRef = useRef<HTMLHeadingElement>(null);\n useEffect(() => {\n if (focusOnMount) headingRef.current?.focus({ preventScroll: true });\n // Mount only; later changes of `focusOnMount` pull no focus.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const total = documents.length;\n const signedCount = documents.filter((doc) => doc.signed).length;\n // Defensive only: an empty list is to confirm. It never offers Continue.\n const allSigned = total > 0 && signedCount === total;\n const Heading = headingLevel === 1 ? 'h1' : 'h2';\n\n return (\n <div data-component=\"check-in-documents\" className={className}>\n <Card variant=\"elevated\" className=\"ds:w-full\">\n <Card.Body>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <Heading\n ref={headingRef}\n tabIndex={-1}\n className={\n headingLevel === 1\n ? 'type-title-page ds:m-0 ds:text-foreground ds:outline-none'\n : 'type-title-card ds:m-0 ds:text-foreground ds:outline-none'\n }\n >\n {t('checkInDocuments.title')}\n </Heading>\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {t('checkInDocuments.intro')}\n </p>\n </div>\n\n {total > 0 ? (\n <span role=\"status\" aria-live=\"polite\" className=\"ds:self-start\">\n <Badge variant={allSigned ? 'success' : 'neutral'}>\n {t('checkInDocuments.progress', {\n signed: signedCount,\n total,\n })}\n </Badge>\n </span>\n ) : null}\n\n {total > 0 ? (\n // eslint-disable-next-line jsx-a11y/no-redundant-roles -- role=\"list\" restores list semantics that ds:list-none strips in Safari/VoiceOver\n <ul\n role=\"list\"\n aria-label={t('checkInDocuments.listLabel')}\n className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0\"\n >\n {documents.map((doc) => {\n const changed = !doc.signed ? doc.changedOn : undefined;\n return (\n <li\n key={doc.id}\n data-document-id={doc.id}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:rounded-[var(--radius-md)] ds:border ds:border-[color:var(--border)] ds:p-[var(--spacing-md)]\"\n >\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span\n dir=\"auto\"\n className=\"type-title-item ds:min-w-0 ds:break-words\"\n >\n {doc.title}\n </span>\n <Badge\n variant={\n doc.signed\n ? 'success'\n : changed\n ? 'error'\n : 'warning'\n }\n >\n {doc.signed\n ? t('checkInDocuments.statusSigned')\n : changed\n ? t('checkInDocuments.statusSignAgain')\n : t('checkInDocuments.statusToSign')}\n </Badge>\n </div>\n {changed ? (\n <Alert variant=\"warning\" announce=\"off\">\n <Alert.Description>\n <Trans\n t={t}\n ns=\"ui\"\n i18nKey=\"checkInDocuments.reSignNotice\"\n values={{\n title: doc.title,\n date: formatDay(changed, i18n.language),\n }}\n components={{ title: <bdi /> }}\n />\n </Alert.Description>\n </Alert>\n ) : null}\n </li>\n );\n })}\n </ul>\n ) : null}\n\n {noMobile && !allSigned && total > 0 ? (\n <Alert variant=\"warning\" announce=\"off\">\n <Alert.Title as={headingLevel === 1 ? 'h2' : 'h3'}>\n {t('checkInDocuments.noMobileTitle')}\n </Alert.Title>\n <Alert.Description>\n {noMobileMessage ?? t('checkInDocuments.noMobileBody')}\n </Alert.Description>\n </Alert>\n ) : null}\n\n {allSigned && onContinue ? (\n <Button\n intent=\"primary\"\n className=\"ds:min-h-[var(--min-target-size)] ds:w-full\"\n data-action=\"documents-continue\"\n onClick={onContinue}\n >\n {t('checkInDocuments.continue')}\n </Button>\n ) : !allSigned && total > 0 && !noMobile && onSign ? (\n <Button\n intent=\"primary\"\n className=\"ds:min-h-[var(--min-target-size)] ds:w-full\"\n data-action=\"sign-all\"\n onClick={onSign}\n >\n {t('checkInDocuments.signAll')}\n </Button>\n ) : null}\n </div>\n </Card.Body>\n </Card>\n </div>\n );\n}\n"],"names":["formatDay","iso","language","date","formatLocale","CheckInDocuments","documents","onSign","onContinue","noMobile","noMobileMessage","headingLevel","focusOnMount","className","t","i18n","useTranslation","headingRef","useRef","useEffect","_a","total","signedCount","doc","allSigned","Heading","jsx","Card","jsxs","Badge","changed","Alert","Trans","Button"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { B as b } from "./badge-BUk4RjTS.js";
7
7
  import { C as S } from "./card-n6W6LW-N.js";
8
8
  import { T as B } from "./timestamp-DPLDWdxA.js";
9
9
  import { SafeHtml as ie } from "../safe-html/index.js";
10
- import { n as te, P as I, F as O, N as re } from "./note-attachment-MNTIqdSz.js";
10
+ import { n as te, P as I, F as O, N as re } from "./note-attachment-JTIy9iXN.js";
11
11
  import { u as de } from "./use-clamp-overflow-DQE2kwZ9.js";
12
12
  import { u as ne } from "./registry-DvAUVLHh.js";
13
13
  const oe = {
@@ -337,4 +337,4 @@ export {
337
337
  ue as C,
338
338
  oe as c
339
339
  };
340
- //# sourceMappingURL=clinical-note-card-pPaeWWnu.js.map
340
+ //# sourceMappingURL=clinical-note-card-D--IwbZa.js.map