@alfadocs/ui-kit-debug 1.38.0 → 1.40.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 (511) hide show
  1. package/dist/_chunks/{actions-cell-renderer-CUn1pqEq.js → actions-cell-renderer-BXBy9c0f.js} +3 -3
  2. package/dist/_chunks/{actions-cell-renderer-CUn1pqEq.js.map → actions-cell-renderer-BXBy9c0f.js.map} +1 -1
  3. package/dist/_chunks/{agenda-tray-CG6jUjKc.js → agenda-tray-CBaJASb5.js} +3 -3
  4. package/dist/_chunks/{agenda-tray-CG6jUjKc.js.map → agenda-tray-CBaJASb5.js.map} +1 -1
  5. package/dist/_chunks/{ai-consent-banner-De4gzSBZ.js → ai-consent-banner-D7I2U-cz.js} +37 -36
  6. package/dist/_chunks/ai-consent-banner-D7I2U-cz.js.map +1 -0
  7. package/dist/_chunks/{ai-prompt-input-DdxlaI7q.js → ai-prompt-input-DXknpQCB.js} +2 -2
  8. package/dist/_chunks/{ai-prompt-input-DdxlaI7q.js.map → ai-prompt-input-DXknpQCB.js.map} +1 -1
  9. package/dist/_chunks/{alia-sidebar-B6bXlZZk.js → alia-sidebar-CUqaJNPQ.js} +7 -7
  10. package/dist/_chunks/{alia-sidebar-B6bXlZZk.js.map → alia-sidebar-CUqaJNPQ.js.map} +1 -1
  11. package/dist/_chunks/{anamnesis-card-DGwINeNn.js → anamnesis-card-xtEhyojD.js} +2 -2
  12. package/dist/_chunks/{anamnesis-card-DGwINeNn.js.map → anamnesis-card-xtEhyojD.js.map} +1 -1
  13. package/dist/_chunks/{anamnesis-summary-rows-Cxtgo2ok.js → anamnesis-summary-rows-DQUqwWc1.js} +7 -7
  14. package/dist/_chunks/{anamnesis-summary-rows-Cxtgo2ok.js.map → anamnesis-summary-rows-DQUqwWc1.js.map} +1 -1
  15. package/dist/_chunks/{appointment-card-WsDGBBut.js → appointment-card-TgR_2GKS.js} +134 -102
  16. package/dist/_chunks/appointment-card-TgR_2GKS.js.map +1 -0
  17. package/dist/_chunks/{appointment-peek-5S4O1VQP.js → appointment-peek-abiR0T9e.js} +3 -3
  18. package/dist/_chunks/{appointment-peek-5S4O1VQP.js.map → appointment-peek-abiR0T9e.js.map} +1 -1
  19. package/dist/_chunks/{appointment-timeline-D-rNwKpS.js → appointment-timeline-CCnyUYKz.js} +67 -63
  20. package/dist/_chunks/appointment-timeline-CCnyUYKz.js.map +1 -0
  21. package/dist/_chunks/{appointment-tray-CK2CULg_.js → appointment-tray-N0yEI8UF.js} +4 -4
  22. package/dist/_chunks/{appointment-tray-CK2CULg_.js.map → appointment-tray-N0yEI8UF.js.map} +1 -1
  23. package/dist/_chunks/{audio-recorder-BlQBC7N_.js → audio-recorder-B7dT-Y3v.js} +3 -3
  24. package/dist/_chunks/{audio-recorder-BlQBC7N_.js.map → audio-recorder-B7dT-Y3v.js.map} +1 -1
  25. package/dist/_chunks/{balance-badge-cell-DHs5p0bA.js → balance-badge-cell-o6LldMUA.js} +5 -5
  26. package/dist/_chunks/{balance-badge-cell-DHs5p0bA.js.map → balance-badge-cell-o6LldMUA.js.map} +1 -1
  27. package/dist/_chunks/{bishop-score-D5b8tktp.js → bishop-score-Cu70iv9C.js} +2 -2
  28. package/dist/_chunks/{bishop-score-D5b8tktp.js.map → bishop-score-Cu70iv9C.js.map} +1 -1
  29. package/dist/_chunks/{bmi-calculator-dOKP-vW4.js → bmi-calculator-C9N19aLX.js} +2 -2
  30. package/dist/_chunks/{bmi-calculator-dOKP-vW4.js.map → bmi-calculator-C9N19aLX.js.map} +1 -1
  31. package/dist/_chunks/{booking-x3J7sS2G.js → booking-D43ASl8y.js} +1110 -1104
  32. package/dist/_chunks/booking-D43ASl8y.js.map +1 -0
  33. package/dist/_chunks/{button-nJaPh_HC.js → button-CaUe1uyd.js} +11 -7
  34. package/dist/_chunks/button-CaUe1uyd.js.map +1 -0
  35. package/dist/_chunks/{button-group-QmN1VdUW.js → button-group-R32U7SyV.js} +2 -2
  36. package/dist/_chunks/{button-group-QmN1VdUW.js.map → button-group-R32U7SyV.js.map} +1 -1
  37. package/dist/_chunks/{calendar-7GAUlsNO.js → calendar-ChJQzRw-.js} +2 -2
  38. package/dist/_chunks/{calendar-7GAUlsNO.js.map → calendar-ChJQzRw-.js.map} +1 -1
  39. package/dist/_chunks/calendar-workspace-SN23GsXX.js +11378 -0
  40. package/dist/_chunks/calendar-workspace-SN23GsXX.js.map +1 -0
  41. package/dist/_chunks/{care-plan-card-COFOI-fI.js → care-plan-card-BOv0NRle.js} +3 -3
  42. package/dist/_chunks/{care-plan-card-COFOI-fI.js.map → care-plan-card-BOv0NRle.js.map} +1 -1
  43. package/dist/_chunks/{care-plan-entry-card-BOKn0KW-.js → care-plan-entry-card-d-rZD4li.js} +3 -3
  44. package/dist/_chunks/{care-plan-entry-card-BOKn0KW-.js.map → care-plan-entry-card-d-rZD4li.js.map} +1 -1
  45. package/dist/_chunks/{care-plan-header-CbuOuVBw.js → care-plan-header-CEmBXn6-.js} +2 -2
  46. package/dist/_chunks/{care-plan-header-CbuOuVBw.js.map → care-plan-header-CEmBXn6-.js.map} +1 -1
  47. package/dist/_chunks/{carousel.agent-Dv4a4M8L.js → carousel.agent-z1yLBpyC.js} +2 -2
  48. package/dist/_chunks/{carousel.agent-Dv4a4M8L.js.map → carousel.agent-z1yLBpyC.js.map} +1 -1
  49. package/dist/_chunks/{chart-iWl76PXv.js → chart-PF2krCZC.js} +3 -3
  50. package/dist/_chunks/{chart-iWl76PXv.js.map → chart-PF2krCZC.js.map} +1 -1
  51. package/dist/_chunks/{chat-input-qM5QpUSq.js → chat-input-Cj7ZYQr5.js} +2 -2
  52. package/dist/_chunks/{chat-input-qM5QpUSq.js.map → chat-input-Cj7ZYQr5.js.map} +1 -1
  53. package/dist/_chunks/{chat-message-RniXtrCH.js → chat-message-BMVxiUIX.js} +3 -3
  54. package/dist/_chunks/{chat-message-RniXtrCH.js.map → chat-message-BMVxiUIX.js.map} +1 -1
  55. package/dist/_chunks/{code-block-uVjNSI9g.js → code-block-BB-viuTn.js} +2 -2
  56. package/dist/_chunks/{code-block-uVjNSI9g.js.map → code-block-BB-viuTn.js.map} +1 -1
  57. package/dist/_chunks/{connection-status-OEsWjmRk.js → connection-status-BmA9T0UO.js} +3 -3
  58. package/dist/_chunks/{connection-status-OEsWjmRk.js.map → connection-status-BmA9T0UO.js.map} +1 -1
  59. package/dist/_chunks/{contact-profile-card--My1H2UD.js → contact-profile-card-Zt6WNg1u.js} +2 -2
  60. package/dist/_chunks/{contact-profile-card--My1H2UD.js.map → contact-profile-card-Zt6WNg1u.js.map} +1 -1
  61. package/dist/_chunks/{control-room-rail-DQoHdE1U.js → control-room-rail-CnNZusR5.js} +3 -3
  62. package/dist/_chunks/{control-room-rail-DQoHdE1U.js.map → control-room-rail-CnNZusR5.js.map} +1 -1
  63. package/dist/_chunks/{copy-field-fYKpl6aN.js → copy-field-B8XRVmQv.js} +2 -2
  64. package/dist/_chunks/{copy-field-fYKpl6aN.js.map → copy-field-B8XRVmQv.js.map} +1 -1
  65. package/dist/_chunks/credit-card-D9XZsHGA.js +15 -0
  66. package/dist/_chunks/credit-card-D9XZsHGA.js.map +1 -0
  67. package/dist/_chunks/{cycle-calculator-BJeaXiZv.js → cycle-calculator-BH2StWoT.js} +2 -2
  68. package/dist/_chunks/{cycle-calculator-BJeaXiZv.js.map → cycle-calculator-BH2StWoT.js.map} +1 -1
  69. package/dist/_chunks/{dashboard-grid-B23BFzRl.js → dashboard-grid-BcXWL5S9.js} +2 -2
  70. package/dist/_chunks/{dashboard-grid-B23BFzRl.js.map → dashboard-grid-BcXWL5S9.js.map} +1 -1
  71. package/dist/_chunks/{data-table-Dy1lyumT.js → data-table-CcAx_I1w.js} +6 -6
  72. package/dist/_chunks/{data-table-Dy1lyumT.js.map → data-table-CcAx_I1w.js.map} +1 -1
  73. package/dist/_chunks/{data-table-tabs-BMR0zsVQ.js → data-table-tabs-B9SXA5VP.js} +3 -3
  74. package/dist/_chunks/{data-table-tabs-BMR0zsVQ.js.map → data-table-tabs-B9SXA5VP.js.map} +1 -1
  75. package/dist/_chunks/{description-list-C1RXMDZ_.js → description-list-BsJ_6CQE.js} +2 -2
  76. package/dist/_chunks/{description-list-C1RXMDZ_.js.map → description-list-BsJ_6CQE.js.map} +1 -1
  77. package/dist/_chunks/{document-preview-DsEyRcNd.js → document-preview-COV0BC6n.js} +2 -2
  78. package/dist/_chunks/{document-preview-DsEyRcNd.js.map → document-preview-COV0BC6n.js.map} +1 -1
  79. package/dist/_chunks/{document-scanner-CbWVtm7u.js → document-scanner-B1abl-A4.js} +2 -2
  80. package/dist/_chunks/{document-scanner-CbWVtm7u.js.map → document-scanner-B1abl-A4.js.map} +1 -1
  81. package/dist/_chunks/{due-date-calculator-Dhc9Ljkb.js → due-date-calculator-Buh_mVHq.js} +2 -2
  82. package/dist/_chunks/{due-date-calculator-Dhc9Ljkb.js.map → due-date-calculator-Buh_mVHq.js.map} +1 -1
  83. package/dist/_chunks/{editable-currency-cell-renderer-D7blbDFY.js → editable-currency-cell-renderer-Psb6XKHR.js} +3 -3
  84. package/dist/_chunks/{editable-currency-cell-renderer-D7blbDFY.js.map → editable-currency-cell-renderer-Psb6XKHR.js.map} +1 -1
  85. package/dist/_chunks/{editable-description-7ptNpJEg.js → editable-description-ADMVFPUz.js} +3 -3
  86. package/dist/_chunks/{editable-description-7ptNpJEg.js.map → editable-description-ADMVFPUz.js.map} +1 -1
  87. package/dist/_chunks/{editor-overlay-8fKAcRsm.js → editor-overlay-9tcPXNWt.js} +2 -2
  88. package/dist/_chunks/{editor-overlay-8fKAcRsm.js.map → editor-overlay-9tcPXNWt.js.map} +1 -1
  89. package/dist/_chunks/{empty-state-X0sVPfVo.js → empty-state-BUN_UAWf.js} +2 -2
  90. package/dist/_chunks/{empty-state-X0sVPfVo.js.map → empty-state-BUN_UAWf.js.map} +1 -1
  91. package/dist/_chunks/{entity-summary-BbW0mIzU.js → entity-summary-DXejuQ8i.js} +3 -3
  92. package/dist/_chunks/{entity-summary-BbW0mIzU.js.map → entity-summary-DXejuQ8i.js.map} +1 -1
  93. package/dist/_chunks/{error-boundary-ayXFCcq4.js → error-boundary-BNT2iQ1w.js} +2 -2
  94. package/dist/_chunks/{error-boundary-ayXFCcq4.js.map → error-boundary-BNT2iQ1w.js.map} +1 -1
  95. package/dist/_chunks/{face-scheme-uFvhqz6h.js → face-scheme-Dg6ZyLKb.js} +5 -5
  96. package/dist/_chunks/{face-scheme-uFvhqz6h.js.map → face-scheme-Dg6ZyLKb.js.map} +1 -1
  97. package/dist/_chunks/{fetal-weight-C6SxchOv.js → fetal-weight-wx4ycKc6.js} +2 -2
  98. package/dist/_chunks/{fetal-weight-C6SxchOv.js.map → fetal-weight-wx4ycKc6.js.map} +1 -1
  99. package/dist/_chunks/{field-array-C9dmRaIM.js → field-array-BW9KeeXG.js} +3 -3
  100. package/dist/_chunks/{field-array-C9dmRaIM.js.map → field-array-BW9KeeXG.js.map} +1 -1
  101. package/dist/_chunks/{file-manager-UlcYQv8n.js → file-manager-BfLQxF5t.js} +136 -150
  102. package/dist/_chunks/file-manager-BfLQxF5t.js.map +1 -0
  103. package/dist/_chunks/{finished-terminal-Br61Ip4e.js → finished-terminal-DJd7Z_po.js} +2 -2
  104. package/dist/_chunks/{finished-terminal-Br61Ip4e.js.map → finished-terminal-DJd7Z_po.js.map} +1 -1
  105. package/dist/_chunks/{fiscal-code-input-CkwIdB1y.js → fiscal-code-input-ODQRd_Sw.js} +2 -2
  106. package/dist/_chunks/{fiscal-code-input-CkwIdB1y.js.map → fiscal-code-input-ODQRd_Sw.js.map} +1 -1
  107. package/dist/_chunks/folder-BghC8_S2.js +20 -0
  108. package/dist/_chunks/folder-BghC8_S2.js.map +1 -0
  109. package/dist/_chunks/{freemium-paywall-BqGk_SBU.js → freemium-paywall-Cz-O9lQD.js} +2 -2
  110. package/dist/_chunks/{freemium-paywall-BqGk_SBU.js.map → freemium-paywall-Cz-O9lQD.js.map} +1 -1
  111. package/dist/_chunks/{gestational-age-calculator-DDOGaPvg.js → gestational-age-calculator-CwbecTul.js} +2 -2
  112. package/dist/_chunks/{gestational-age-calculator-DDOGaPvg.js.map → gestational-age-calculator-CwbecTul.js.map} +1 -1
  113. package/dist/_chunks/{hcg-doubling-Bb_n6tEa.js → hcg-doubling-BcXriXJe.js} +2 -2
  114. package/dist/_chunks/{hcg-doubling-Bb_n6tEa.js.map → hcg-doubling-BcXriXJe.js.map} +1 -1
  115. package/dist/_chunks/{header-BZ4pZlJV.js → header-3o9o9v_T.js} +2 -2
  116. package/dist/_chunks/{header-BZ4pZlJV.js.map → header-3o9o9v_T.js.map} +1 -1
  117. package/dist/_chunks/{header-settings-B8mLc03Q.js → header-settings-CTe45iDy.js} +4 -4
  118. package/dist/_chunks/{header-settings-B8mLc03Q.js.map → header-settings-CTe45iDy.js.map} +1 -1
  119. package/dist/_chunks/{hover-card-Bcku1GQu.js → hover-card-BMJBVqIf.js} +2 -2
  120. package/dist/_chunks/{hover-card-Bcku1GQu.js.map → hover-card-BMJBVqIf.js.map} +1 -1
  121. package/dist/_chunks/{icon-button-8xqRnkdG.js → icon-button-CehAeZoP.js} +2 -2
  122. package/dist/_chunks/{icon-button-8xqRnkdG.js.map → icon-button-CehAeZoP.js.map} +1 -1
  123. package/dist/_chunks/{icon-button-group-Dj6CRoYR.js → icon-button-group-DkkdIygu.js} +2 -2
  124. package/dist/_chunks/{icon-button-group-Dj6CRoYR.js.map → icon-button-group-DkkdIygu.js.map} +1 -1
  125. package/dist/_chunks/{icon-picker-CTWzlHJr.js → icon-picker-DMEelg9v.js} +3 -3
  126. package/dist/_chunks/{icon-picker-CTWzlHJr.js.map → icon-picker-DMEelg9v.js.map} +1 -1
  127. package/dist/_chunks/{image-cropper-C84NDTB7.js → image-cropper-BjPjT7wU.js} +2 -2
  128. package/dist/_chunks/{image-cropper-C84NDTB7.js.map → image-cropper-BjPjT7wU.js.map} +1 -1
  129. package/dist/_chunks/{info-tip-ey_Pon2y.js → info-tip-iP2Pm9dh.js} +2 -2
  130. package/dist/_chunks/{info-tip-ey_Pon2y.js.map → info-tip-iP2Pm9dh.js.map} +1 -1
  131. package/dist/_chunks/{insert-result-LCNTskNJ.js → insert-result-DPnOBD85.js} +2 -2
  132. package/dist/_chunks/{insert-result-LCNTskNJ.js.map → insert-result-DPnOBD85.js.map} +1 -1
  133. package/dist/_chunks/{key-value-pair-DczGb4yz.js → key-value-pair-DaQI_LZB.js} +2 -2
  134. package/dist/_chunks/{key-value-pair-DczGb4yz.js.map → key-value-pair-DaQI_LZB.js.map} +1 -1
  135. package/dist/_chunks/{link-cell-renderer-BNa8x6oJ.js → link-cell-renderer-s3oHzOwi.js} +2 -2
  136. package/dist/_chunks/{link-cell-renderer-BNa8x6oJ.js.map → link-cell-renderer-s3oHzOwi.js.map} +1 -1
  137. package/dist/_chunks/{locale-picker-BLeHbFSc.js → locale-picker-CH3kfrIG.js} +3 -3
  138. package/dist/_chunks/{locale-picker-BLeHbFSc.js.map → locale-picker-CH3kfrIG.js.map} +1 -1
  139. package/dist/_chunks/{map-view-CCAlC9IL.js → map-view-CHw4RL6w.js} +2 -2
  140. package/dist/_chunks/{map-view-CCAlC9IL.js.map → map-view-CHw4RL6w.js.map} +1 -1
  141. package/dist/_chunks/{marketplace-app-shell-BwH6Aruw.js → marketplace-app-shell-d2EtcUbe.js} +4 -4
  142. package/dist/_chunks/{marketplace-app-shell-BwH6Aruw.js.map → marketplace-app-shell-d2EtcUbe.js.map} +1 -1
  143. package/dist/_chunks/{message-card-Dm5Xshup.js → message-card-V3sFPiQI.js} +3 -3
  144. package/dist/_chunks/{message-card-Dm5Xshup.js.map → message-card-V3sFPiQI.js.map} +1 -1
  145. package/dist/_chunks/{message-tray-CXjVsKqp.js → message-tray-CrRIHfiQ.js} +4 -4
  146. package/dist/_chunks/{message-tray-CXjVsKqp.js.map → message-tray-CrRIHfiQ.js.map} +1 -1
  147. package/dist/_chunks/{note-timeline-D2oPuQP6.js → note-timeline-Dn_XTo1s.js} +131 -90
  148. package/dist/_chunks/note-timeline-Dn_XTo1s.js.map +1 -0
  149. package/dist/_chunks/{notes-panel-CkbfDDzj.js → notes-panel-CmTqIWlS.js} +277 -241
  150. package/dist/_chunks/notes-panel-CmTqIWlS.js.map +1 -0
  151. package/dist/_chunks/{notification-card-ChcK9Wat.js → notification-card-B2gLO6dK.js} +3 -3
  152. package/dist/_chunks/{notification-card-ChcK9Wat.js.map → notification-card-B2gLO6dK.js.map} +1 -1
  153. package/dist/_chunks/{notification-tray-_NoChRKi.js → notification-tray-BOEKegVV.js} +4 -4
  154. package/dist/_chunks/{notification-tray-_NoChRKi.js.map → notification-tray-BOEKegVV.js.map} +1 -1
  155. package/dist/_chunks/{optical-prescription-cphK41eP.js → optical-prescription-LGgmtcST.js} +2 -2
  156. package/dist/_chunks/{optical-prescription-cphK41eP.js.map → optical-prescription-LGgmtcST.js.map} +1 -1
  157. package/dist/_chunks/{panel-subview-BNXN8OEL.js → panel-subview-Cc2Wtt7D.js} +52 -52
  158. package/dist/_chunks/panel-subview-Cc2Wtt7D.js.map +1 -0
  159. package/dist/_chunks/{patient-details-2cIaL-Zb.js → patient-details-C8ImUrVg.js} +3 -3
  160. package/dist/_chunks/{patient-details-2cIaL-Zb.js.map → patient-details-C8ImUrVg.js.map} +1 -1
  161. package/dist/_chunks/{patient-field-row-IHb2VFc2.js → patient-field-row-BRSOKvme.js} +7 -7
  162. package/dist/_chunks/{patient-field-row-IHb2VFc2.js.map → patient-field-row-BRSOKvme.js.map} +1 -1
  163. package/dist/_chunks/{patient-search-D08b6jgj.js → patient-search-5QcmQKJD.js} +2 -2
  164. package/dist/_chunks/{patient-search-D08b6jgj.js.map → patient-search-5QcmQKJD.js.map} +1 -1
  165. package/dist/_chunks/{patient-summary-card-B131Q7Bp.js → patient-summary-card-BhmKB2KR.js} +7 -7
  166. package/dist/_chunks/patient-summary-card-BhmKB2KR.js.map +1 -0
  167. package/dist/_chunks/{payment-automation-upsell-BLTdE2em.js → payment-automation-upsell-BKmBXU4i.js} +17 -16
  168. package/dist/_chunks/{payment-automation-upsell-BLTdE2em.js.map → payment-automation-upsell-BKmBXU4i.js.map} +1 -1
  169. package/dist/_chunks/{payment-request-card-BxcdvxKR.js → payment-request-card-Cer6XXCn.js} +6 -5
  170. package/dist/_chunks/{payment-request-card-BxcdvxKR.js.map → payment-request-card-Cer6XXCn.js.map} +1 -1
  171. package/dist/_chunks/{periodontal-chart-BF_e3wZp.js → periodontal-chart-DJoZS_o7.js} +2 -2
  172. package/dist/_chunks/{periodontal-chart-BF_e3wZp.js.map → periodontal-chart-DJoZS_o7.js.map} +1 -1
  173. package/dist/_chunks/{periodontal-chart-card-BJEuJuzh.js → periodontal-chart-card-Nd1ZoYWb.js} +2 -2
  174. package/dist/_chunks/{periodontal-chart-card-BJEuJuzh.js.map → periodontal-chart-card-Nd1ZoYWb.js.map} +1 -1
  175. package/dist/_chunks/{popover-DzR5QYxp.js → popover-DO-pssF3.js} +2 -2
  176. package/dist/_chunks/{popover-DzR5QYxp.js.map → popover-DO-pssF3.js.map} +1 -1
  177. package/dist/_chunks/{practice-results-CBNRJNnY.js → practice-results-D_jjzwgf.js} +5 -5
  178. package/dist/_chunks/{practice-results-CBNRJNnY.js.map → practice-results-D_jjzwgf.js.map} +1 -1
  179. package/dist/_chunks/{pregnancy-dating-nV1_S6w0.js → pregnancy-dating-DcyV9ZRD.js} +2 -2
  180. package/dist/_chunks/{pregnancy-dating-nV1_S6w0.js.map → pregnancy-dating-DcyV9ZRD.js.map} +1 -1
  181. package/dist/_chunks/{pregnancy-weight-gain-tRecShAD.js → pregnancy-weight-gain-Bfq4Kwt5.js} +2 -2
  182. package/dist/_chunks/{pregnancy-weight-gain-tRecShAD.js.map → pregnancy-weight-gain-Bfq4Kwt5.js.map} +1 -1
  183. package/dist/_chunks/{privacy-lock-Be39vQUN.js → privacy-lock-CbFCAMM3.js} +3 -3
  184. package/dist/_chunks/{privacy-lock-Be39vQUN.js.map → privacy-lock-CbFCAMM3.js.map} +1 -1
  185. package/dist/_chunks/{product-hub-panel-C3bMjscm.js → product-hub-panel-w40-_-1s.js} +3 -3
  186. package/dist/_chunks/{product-hub-panel-C3bMjscm.js.map → product-hub-panel-w40-_-1s.js.map} +1 -1
  187. package/dist/_chunks/{public-header.agent-Bl1KFwSE.js → public-header.agent-D-EBVskf.js} +3 -3
  188. package/dist/_chunks/{public-header.agent-Bl1KFwSE.js.map → public-header.agent-D-EBVskf.js.map} +1 -1
  189. package/dist/_chunks/{radiograph-panel.agent-k0G7JuoM.js → radiograph-panel.agent-LrILY2lN.js} +4 -4
  190. package/dist/_chunks/{radiograph-panel.agent-k0G7JuoM.js.map → radiograph-panel.agent-LrILY2lN.js.map} +1 -1
  191. package/dist/_chunks/{receipt-euro-C6k4Gzhr.js → receipt-euro-B1cLM_TN.js} +3 -14
  192. package/dist/_chunks/receipt-euro-B1cLM_TN.js.map +1 -0
  193. package/dist/_chunks/{reviews-panel-Cy969x7q.js → reviews-panel-2GVuxGeT.js} +4 -4
  194. package/dist/_chunks/{reviews-panel-Cy969x7q.js.map → reviews-panel-2GVuxGeT.js.map} +1 -1
  195. package/dist/_chunks/{rich-text-editor-BTXlorm5.js → rich-text-editor-BJ1-Lkao.js} +1024 -932
  196. package/dist/_chunks/rich-text-editor-BJ1-Lkao.js.map +1 -0
  197. package/dist/_chunks/{session-countdown-QMsnRa1x.js → session-countdown-BqppPrw6.js} +2 -2
  198. package/dist/_chunks/{session-countdown-QMsnRa1x.js.map → session-countdown-BqppPrw6.js.map} +1 -1
  199. package/dist/_chunks/{sheet-hm04DGFd.js → sheet-C8WIDFS8.js} +2 -2
  200. package/dist/_chunks/{sheet-hm04DGFd.js.map → sheet-C8WIDFS8.js.map} +1 -1
  201. package/dist/_chunks/{sign-in-with-alfadocs-button-BLe_quy5.js → sign-in-with-alfadocs-button-DWwBJtyE.js} +2 -2
  202. package/dist/_chunks/{sign-in-with-alfadocs-button-BLe_quy5.js.map → sign-in-with-alfadocs-button-DWwBJtyE.js.map} +1 -1
  203. package/dist/_chunks/{signature-request-b-86AGlT.js → signature-request-D_j2aQu1.js} +359 -370
  204. package/dist/_chunks/signature-request-D_j2aQu1.js.map +1 -0
  205. package/dist/_chunks/{slot-grid-Bk3GZL1p.js → slot-grid-B3eOPkKD.js} +4 -4
  206. package/dist/_chunks/{slot-grid-Bk3GZL1p.js.map → slot-grid-B3eOPkKD.js.map} +1 -1
  207. package/dist/_chunks/{streaming-text-DjFqLSt_.js → streaming-text-CE1u_oGa.js} +2 -2
  208. package/dist/_chunks/{streaming-text-DjFqLSt_.js.map → streaming-text-CE1u_oGa.js.map} +1 -1
  209. package/dist/_chunks/{task-tray-5co9Jr2L.js → task-tray-DIwjAIes.js} +3 -3
  210. package/dist/_chunks/{task-tray-5co9Jr2L.js.map → task-tray-DIwjAIes.js.map} +1 -1
  211. package/dist/_chunks/{tasks-panel-BpH-x7U3.js → tasks-panel-CpcikOeY.js} +5 -5
  212. package/dist/_chunks/{tasks-panel-BpH-x7U3.js.map → tasks-panel-CpcikOeY.js.map} +1 -1
  213. package/dist/_chunks/{theme-toggle-CMz8YfC1.js → theme-toggle-bI0pgDDv.js} +3 -3
  214. package/dist/_chunks/{theme-toggle-CMz8YfC1.js.map → theme-toggle-bI0pgDDv.js.map} +1 -1
  215. package/dist/_chunks/{toast-8jqtbfAB.js → toast-ZZfhA5u0.js} +2 -2
  216. package/dist/_chunks/{toast-8jqtbfAB.js.map → toast-ZZfhA5u0.js.map} +1 -1
  217. package/dist/_chunks/{token-insert-menu-9Um0JinI.js → token-insert-menu-A9B5AJw6.js} +2 -2
  218. package/dist/_chunks/{token-insert-menu-9Um0JinI.js.map → token-insert-menu-A9B5AJw6.js.map} +1 -1
  219. package/dist/_chunks/tool-rail-D89USYE6.js +799 -0
  220. package/dist/_chunks/tool-rail-D89USYE6.js.map +1 -0
  221. package/dist/_chunks/{tooth-scheme-BWkYxxjR.js → tooth-scheme-DPAq0vQK.js} +3 -3
  222. package/dist/_chunks/{tooth-scheme-BWkYxxjR.js.map → tooth-scheme-DPAq0vQK.js.map} +1 -1
  223. package/dist/_chunks/{transaction-chip-Dth1nThY.js → transaction-chip-CwgcJiqF.js} +47 -46
  224. package/dist/_chunks/{transaction-chip-Dth1nThY.js.map → transaction-chip-CwgcJiqF.js.map} +1 -1
  225. package/dist/_chunks/{unit-converter-BTgU50gk.js → unit-converter-C-LpGzrN.js} +2 -2
  226. package/dist/_chunks/{unit-converter-BTgU50gk.js.map → unit-converter-C-LpGzrN.js.map} +1 -1
  227. package/dist/_chunks/user-plus-BtcOLgNU.js +17 -0
  228. package/dist/_chunks/user-plus-BtcOLgNU.js.map +1 -0
  229. package/dist/_chunks/{warning-stack-BW5Dwb3z.js → warning-stack-C0glSB7p.js} +3 -3
  230. package/dist/_chunks/{warning-stack-BW5Dwb3z.js.map → warning-stack-C0glSB7p.js.map} +1 -1
  231. package/dist/_chunks/{workflow-map-CXdsxvUj.js → workflow-map-DhR_h5yw.js} +5 -5
  232. package/dist/_chunks/{workflow-map-CXdsxvUj.js.map → workflow-map-DhR_h5yw.js.map} +1 -1
  233. package/dist/agent-catalog.json +3 -418
  234. package/dist/agent-i18n/en.json +2 -18
  235. package/dist/components/agenda-tray/index.js +1 -1
  236. package/dist/components/ai-consent-banner/ai-consent-banner.d.ts +9 -0
  237. package/dist/components/ai-consent-banner/ai-consent-banner.d.ts.map +1 -1
  238. package/dist/components/ai-consent-banner/index.d.ts +1 -1
  239. package/dist/components/ai-consent-banner/index.d.ts.map +1 -1
  240. package/dist/components/ai-consent-banner/index.js +1 -1
  241. package/dist/components/ai-prompt-input/index.js +1 -1
  242. package/dist/components/anamnesis-card/index.js +1 -1
  243. package/dist/components/appointment-card/appointment-card.d.ts +24 -0
  244. package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
  245. package/dist/components/appointment-card/index.js +2 -2
  246. package/dist/components/appointment-peek/index.js +1 -1
  247. package/dist/components/appointment-timeline/appointment-timeline.d.ts +15 -1
  248. package/dist/components/appointment-timeline/appointment-timeline.d.ts.map +1 -1
  249. package/dist/components/appointment-timeline/index.js +1 -1
  250. package/dist/components/audio-recorder/index.js +1 -1
  251. package/dist/components/bishop-score/index.js +1 -1
  252. package/dist/components/bmi-calculator/index.js +1 -1
  253. package/dist/components/booking/booking-types.d.ts +6 -0
  254. package/dist/components/booking/booking-types.d.ts.map +1 -1
  255. package/dist/components/booking/booking.d.ts.map +1 -1
  256. package/dist/components/booking/cascade.d.ts +6 -0
  257. package/dist/components/booking/cascade.d.ts.map +1 -1
  258. package/dist/components/booking/index.js +1 -1
  259. package/dist/components/button/button.d.ts +1 -1
  260. package/dist/components/button/button.d.ts.map +1 -1
  261. package/dist/components/button/index.js +2 -2
  262. package/dist/components/button-group/index.js +1 -1
  263. package/dist/components/calendar/index.js +1 -1
  264. package/dist/components/care-plan-card/index.js +1 -1
  265. package/dist/components/care-plan-entry-card/index.js +1 -1
  266. package/dist/components/care-plan-header/index.js +1 -1
  267. package/dist/components/carousel/index.js +1 -1
  268. package/dist/components/chart/index.js +1 -1
  269. package/dist/components/chat-input/index.js +1 -1
  270. package/dist/components/chat-message/index.js +1 -1
  271. package/dist/components/connection-status/index.js +1 -1
  272. package/dist/components/contact-profile-card/index.js +1 -1
  273. package/dist/components/control-room-rail/index.js +1 -1
  274. package/dist/components/copy-field/index.js +1 -1
  275. package/dist/components/cycle-calculator/index.js +1 -1
  276. package/dist/components/dashboard-grid/index.js +1 -1
  277. package/dist/components/data-table/index.js +4 -4
  278. package/dist/components/data-table-tabs/index.js +1 -1
  279. package/dist/components/description-list/index.js +1 -1
  280. package/dist/components/document-preview/index.js +1 -1
  281. package/dist/components/document-scanner/index.js +1 -1
  282. package/dist/components/due-date-calculator/index.js +1 -1
  283. package/dist/components/editable-description/index.js +1 -1
  284. package/dist/components/editor-overlay/index.js +1 -1
  285. package/dist/components/empty-state/index.js +1 -1
  286. package/dist/components/entity-summary/index.js +1 -1
  287. package/dist/components/error-boundary/index.js +1 -1
  288. package/dist/components/face-scheme/index.js +1 -1
  289. package/dist/components/fetal-weight/index.js +1 -1
  290. package/dist/components/field-array/index.js +1 -1
  291. package/dist/components/file-manager/index.js +1 -1
  292. package/dist/components/finished-terminal/index.js +1 -1
  293. package/dist/components/fiscal-code-input/index.js +1 -1
  294. package/dist/components/freemium-paywall/index.js +1 -1
  295. package/dist/components/gestational-age-calculator/index.js +1 -1
  296. package/dist/components/hcg-doubling/index.js +1 -1
  297. package/dist/components/header/index.js +1 -1
  298. package/dist/components/header-settings/index.js +1 -1
  299. package/dist/components/hover-card/index.js +1 -1
  300. package/dist/components/icon-button/index.js +1 -1
  301. package/dist/components/icon-button-group/index.js +1 -1
  302. package/dist/components/icon-picker/index.js +1 -1
  303. package/dist/components/image-cropper/index.js +1 -1
  304. package/dist/components/info-tip/index.js +1 -1
  305. package/dist/components/key-value-pair/index.js +1 -1
  306. package/dist/components/locale-picker/index.js +1 -1
  307. package/dist/components/map-view/index.js +1 -1
  308. package/dist/components/message-card/index.js +1 -1
  309. package/dist/components/message-tray/index.js +1 -1
  310. package/dist/components/note-timeline/index.js +1 -1
  311. package/dist/components/note-timeline/note-timeline.d.ts +9 -0
  312. package/dist/components/note-timeline/note-timeline.d.ts.map +1 -1
  313. package/dist/components/notes-panel/index.d.ts +1 -0
  314. package/dist/components/notes-panel/index.d.ts.map +1 -1
  315. package/dist/components/notes-panel/index.js +1 -1
  316. package/dist/components/notes-panel/notes-panel.d.ts +13 -5
  317. package/dist/components/notes-panel/notes-panel.d.ts.map +1 -1
  318. package/dist/components/notification-card/index.js +1 -1
  319. package/dist/components/notification-tray/index.js +1 -1
  320. package/dist/components/optical-prescription/index.js +1 -1
  321. package/dist/components/panel-subview/index.js +1 -1
  322. package/dist/components/panel-subview/panel-subview.d.ts.map +1 -1
  323. package/dist/components/patient-details/index.js +1 -1
  324. package/dist/components/patient-search/index.js +1 -1
  325. package/dist/components/patient-summary-card/index.js +1 -1
  326. package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -1
  327. package/dist/components/patient-table/index.js +1 -1
  328. package/dist/components/payment-card/index.js +1 -1
  329. package/dist/components/periodontal-chart/index.js +1 -1
  330. package/dist/components/periodontal-chart-card/index.js +1 -1
  331. package/dist/components/popover/index.js +1 -1
  332. package/dist/components/practice-results/index.js +1 -1
  333. package/dist/components/pregnancy-dating/index.js +1 -1
  334. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  335. package/dist/components/privacy-lock/index.js +1 -1
  336. package/dist/components/product-hub-tray/index.js +1 -1
  337. package/dist/components/public-header/index.js +1 -1
  338. package/dist/components/radiograph-panel/index.js +1 -1
  339. package/dist/components/reviews-panel/index.js +1 -1
  340. package/dist/components/rich-text-editor/index.d.ts +1 -1
  341. package/dist/components/rich-text-editor/index.d.ts.map +1 -1
  342. package/dist/components/rich-text-editor/index.js +1 -1
  343. package/dist/components/rich-text-editor/rich-text-editor.d.ts +48 -0
  344. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  345. package/dist/components/session-countdown/index.js +1 -1
  346. package/dist/components/sheet/index.js +1 -1
  347. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  348. package/dist/components/slot-grid/index.js +1 -1
  349. package/dist/components/streaming-text/index.js +1 -1
  350. package/dist/components/task-tray/index.js +1 -1
  351. package/dist/components/tasks-panel/index.js +1 -1
  352. package/dist/components/theme-toggle/index.js +1 -1
  353. package/dist/components/toast/index.js +1 -1
  354. package/dist/components/token-insert-menu/index.js +1 -1
  355. package/dist/components/tool-rail/index.js +1 -1
  356. package/dist/components/tool-rail/tool-rail.d.ts.map +1 -1
  357. package/dist/components/tooth-scheme/index.js +1 -1
  358. package/dist/components/transaction-chip/index.js +1 -1
  359. package/dist/components/transaction-chip/transaction-chip.d.ts +7 -0
  360. package/dist/components/transaction-chip/transaction-chip.d.ts.map +1 -1
  361. package/dist/components/unit-converter/index.js +1 -1
  362. package/dist/components/warning-stack/index.js +1 -1
  363. package/dist/components/workflow/index.js +1 -1
  364. package/dist/host-compat.css +13 -4
  365. package/dist/i18n/locales/ar.d.ts +248 -194
  366. package/dist/i18n/locales/ar.d.ts.map +1 -1
  367. package/dist/i18n/locales/ar.js +253 -199
  368. package/dist/i18n/locales/ar.js.map +1 -1
  369. package/dist/i18n/locales/de.d.ts +232 -178
  370. package/dist/i18n/locales/de.d.ts.map +1 -1
  371. package/dist/i18n/locales/de.js +237 -183
  372. package/dist/i18n/locales/de.js.map +1 -1
  373. package/dist/i18n/locales/el.d.ts +247 -193
  374. package/dist/i18n/locales/el.d.ts.map +1 -1
  375. package/dist/i18n/locales/el.js +252 -198
  376. package/dist/i18n/locales/el.js.map +1 -1
  377. package/dist/i18n/locales/en.d.ts +54 -0
  378. package/dist/i18n/locales/en.d.ts.map +1 -1
  379. package/dist/i18n/locales/en.js +59 -5
  380. package/dist/i18n/locales/en.js.map +1 -1
  381. package/dist/i18n/locales/es.d.ts +240 -186
  382. package/dist/i18n/locales/es.d.ts.map +1 -1
  383. package/dist/i18n/locales/es.js +245 -191
  384. package/dist/i18n/locales/es.js.map +1 -1
  385. package/dist/i18n/locales/fr.d.ts +234 -180
  386. package/dist/i18n/locales/fr.d.ts.map +1 -1
  387. package/dist/i18n/locales/fr.js +239 -185
  388. package/dist/i18n/locales/fr.js.map +1 -1
  389. package/dist/i18n/locales/hi.d.ts +248 -194
  390. package/dist/i18n/locales/hi.d.ts.map +1 -1
  391. package/dist/i18n/locales/hi.js +257 -199
  392. package/dist/i18n/locales/hi.js.map +1 -1
  393. package/dist/i18n/locales/it.d.ts +192 -138
  394. package/dist/i18n/locales/it.d.ts.map +1 -1
  395. package/dist/i18n/locales/it.js +197 -143
  396. package/dist/i18n/locales/it.js.map +1 -1
  397. package/dist/i18n/locales/ja.d.ts +246 -192
  398. package/dist/i18n/locales/ja.d.ts.map +1 -1
  399. package/dist/i18n/locales/ja.js +251 -197
  400. package/dist/i18n/locales/ja.js.map +1 -1
  401. package/dist/i18n/locales/nl.d.ts +237 -183
  402. package/dist/i18n/locales/nl.d.ts.map +1 -1
  403. package/dist/i18n/locales/nl.js +242 -188
  404. package/dist/i18n/locales/nl.js.map +1 -1
  405. package/dist/i18n/locales/pl.d.ts +242 -188
  406. package/dist/i18n/locales/pl.d.ts.map +1 -1
  407. package/dist/i18n/locales/pl.js +247 -193
  408. package/dist/i18n/locales/pl.js.map +1 -1
  409. package/dist/i18n/locales/pt.d.ts +242 -188
  410. package/dist/i18n/locales/pt.d.ts.map +1 -1
  411. package/dist/i18n/locales/pt.js +247 -193
  412. package/dist/i18n/locales/pt.js.map +1 -1
  413. package/dist/i18n/locales/ro.d.ts +241 -187
  414. package/dist/i18n/locales/ro.d.ts.map +1 -1
  415. package/dist/i18n/locales/ro.js +246 -192
  416. package/dist/i18n/locales/ro.js.map +1 -1
  417. package/dist/i18n/locales/ru.d.ts +247 -193
  418. package/dist/i18n/locales/ru.d.ts.map +1 -1
  419. package/dist/i18n/locales/ru.js +252 -198
  420. package/dist/i18n/locales/ru.js.map +1 -1
  421. package/dist/i18n/locales/sq.d.ts +241 -187
  422. package/dist/i18n/locales/sq.d.ts.map +1 -1
  423. package/dist/i18n/locales/sq.js +246 -192
  424. package/dist/i18n/locales/sq.js.map +1 -1
  425. package/dist/i18n/locales/sv.d.ts +242 -188
  426. package/dist/i18n/locales/sv.d.ts.map +1 -1
  427. package/dist/i18n/locales/sv.js +247 -193
  428. package/dist/i18n/locales/sv.js.map +1 -1
  429. package/dist/i18n/locales/tr.d.ts +248 -194
  430. package/dist/i18n/locales/tr.d.ts.map +1 -1
  431. package/dist/i18n/locales/tr.js +253 -199
  432. package/dist/i18n/locales/tr.js.map +1 -1
  433. package/dist/i18n/locales/zh.d.ts +241 -187
  434. package/dist/i18n/locales/zh.d.ts.map +1 -1
  435. package/dist/i18n/locales/zh.js +246 -192
  436. package/dist/i18n/locales/zh.js.map +1 -1
  437. package/dist/index.js +107 -107
  438. package/dist/locales/ar.json +253 -199
  439. package/dist/locales/de.json +237 -183
  440. package/dist/locales/el.json +252 -198
  441. package/dist/locales/en.json +59 -5
  442. package/dist/locales/es.json +245 -191
  443. package/dist/locales/fr.json +239 -185
  444. package/dist/locales/hi.json +253 -199
  445. package/dist/locales/it.json +197 -143
  446. package/dist/locales/ja.json +251 -197
  447. package/dist/locales/nl.json +242 -188
  448. package/dist/locales/pl.json +247 -193
  449. package/dist/locales/pt.json +247 -193
  450. package/dist/locales/ro.json +246 -192
  451. package/dist/locales/ru.json +252 -198
  452. package/dist/locales/sq.json +246 -192
  453. package/dist/locales/sv.json +247 -193
  454. package/dist/locales/tr.json +253 -199
  455. package/dist/locales/zh.json +246 -192
  456. package/dist/patterns/alia-assistant/index.js +1 -1
  457. package/dist/patterns/anamnesis/index.js +1 -1
  458. package/dist/patterns/calendar/calendar-appointment-details.d.ts +7 -0
  459. package/dist/patterns/calendar/calendar-appointment-details.d.ts.map +1 -1
  460. package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts +10 -5
  461. package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts.map +1 -1
  462. package/dist/patterns/calendar/calendar-bookings-panel.d.ts +31 -0
  463. package/dist/patterns/calendar/calendar-bookings-panel.d.ts.map +1 -0
  464. package/dist/patterns/calendar/calendar-info-hover.d.ts +15 -1
  465. package/dist/patterns/calendar/calendar-info-hover.d.ts.map +1 -1
  466. package/dist/patterns/calendar/calendar-privacy.d.ts +23 -0
  467. package/dist/patterns/calendar/calendar-privacy.d.ts.map +1 -0
  468. package/dist/patterns/calendar/calendar-rail-settle.d.ts +14 -0
  469. package/dist/patterns/calendar/calendar-rail-settle.d.ts.map +1 -0
  470. package/dist/patterns/calendar/calendar-upcoming-panel.d.ts +32 -0
  471. package/dist/patterns/calendar/calendar-upcoming-panel.d.ts.map +1 -0
  472. package/dist/patterns/calendar/calendar-waiting-list-panel.d.ts +62 -0
  473. package/dist/patterns/calendar/calendar-waiting-list-panel.d.ts.map +1 -0
  474. package/dist/patterns/calendar/calendar-workspace.d.ts +14 -1
  475. package/dist/patterns/calendar/calendar-workspace.d.ts.map +1 -1
  476. package/dist/patterns/calendar/calendar-workspace.model.d.ts +37 -1
  477. package/dist/patterns/calendar/calendar-workspace.model.d.ts.map +1 -1
  478. package/dist/patterns/calendar/calendar.journey.d.ts +9 -1
  479. package/dist/patterns/calendar/calendar.journey.d.ts.map +1 -1
  480. package/dist/patterns/calendar/calendar.model.d.ts +8 -2
  481. package/dist/patterns/calendar/calendar.model.d.ts.map +1 -1
  482. package/dist/patterns/calendar/calendar.sheets.d.ts +49 -28
  483. package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
  484. package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
  485. package/dist/patterns/calendar/calendar.types.d.ts +6 -0
  486. package/dist/patterns/calendar/calendar.types.d.ts.map +1 -1
  487. package/dist/patterns/calendar/index.d.ts +2 -2
  488. package/dist/patterns/calendar/index.d.ts.map +1 -1
  489. package/dist/patterns/calendar/index.js +1 -1
  490. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  491. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  492. package/dist/patterns/signature-request/index.js +1 -1
  493. package/dist/tokens.css +1 -1
  494. package/package.json +3 -1
  495. package/dist/_chunks/ai-consent-banner-De4gzSBZ.js.map +0 -1
  496. package/dist/_chunks/appointment-card-WsDGBBut.js.map +0 -1
  497. package/dist/_chunks/appointment-timeline-D-rNwKpS.js.map +0 -1
  498. package/dist/_chunks/booking-x3J7sS2G.js.map +0 -1
  499. package/dist/_chunks/button-nJaPh_HC.js.map +0 -1
  500. package/dist/_chunks/calendar-workspace-Cc1LRVWY.js +0 -9900
  501. package/dist/_chunks/calendar-workspace-Cc1LRVWY.js.map +0 -1
  502. package/dist/_chunks/file-manager-UlcYQv8n.js.map +0 -1
  503. package/dist/_chunks/note-timeline-D2oPuQP6.js.map +0 -1
  504. package/dist/_chunks/notes-panel-CkbfDDzj.js.map +0 -1
  505. package/dist/_chunks/panel-subview-BNXN8OEL.js.map +0 -1
  506. package/dist/_chunks/patient-summary-card-B131Q7Bp.js.map +0 -1
  507. package/dist/_chunks/receipt-euro-C6k4Gzhr.js.map +0 -1
  508. package/dist/_chunks/rich-text-editor-BTXlorm5.js.map +0 -1
  509. package/dist/_chunks/signature-request-b-86AGlT.js.map +0 -1
  510. package/dist/_chunks/tool-rail-BP8sjxCw.js +0 -667
  511. package/dist/_chunks/tool-rail-BP8sjxCw.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"notes-panel-CkbfDDzj.js","sources":["../../src/components/_shared/get-error-message.ts","../../src/components/notes-panel/notes-panel.agent.ts","../../src/components/notes-panel/notes-panel.tsx"],"sourcesContent":["/** Read host error messages without relying on the host's JavaScript realm. */\nexport function getErrorMessage(error: unknown, fallback: string): string {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'message' in error &&\n typeof error.message === 'string' &&\n error.message.trim()\n ) {\n return error.message;\n }\n return fallback;\n}\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — NotesPanel. */\n/* */\n/* The Notes tool: a composer over a note timeline. The agent reads the */\n/* timeline STRUCTURE (note ids + pinned / flagged / clinical flags — */\n/* never the note body or author, both PHI), composes and commits a new */\n/* note, and toggles a note's pinned / flagged state. `add_note` carries */\n/* the `phi` safety class: a note body is patient-identifiable clinical */\n/* content, so the host gates it behind the same confirm-before-act as a */\n/* destructive write and never auto-confirms. A clinical submission also */\n/* requires the host's `practice_add_clinical_note` permission (the */\n/* handle drops it when the gate is closed). Host-owned per-note */\n/* `noteActions` (edit, delete…) sit outside this handle — an agent */\n/* reaches them through the host's own adapters. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { NotesPanelHandle } from './notes-panel';\n\nexport const notesPanelAgent: AgentAdapter<NotesPanelHandle> = {\n id: 'notes-panel',\n // 'submit' backs add_note (compose + commit a note). pin / flag are toggles\n // with no dedicated capability in the closed vocabulary.\n capabilities: ['submit'],\n state: {\n notes: {\n type: 'Array<{ id?: string; pinned: boolean; flagged: boolean; clinical: boolean }>',\n descriptionKey: 'ui.agent.notesPanel.state.notes',\n description:\n 'Timeline note ids + pinned / flagged / clinical flags. Never the note body or author (both PHI).',\n read: (handle) => handle.getNotes(),\n },\n canAddClinical: {\n type: 'boolean',\n descriptionKey: 'ui.agent.notesPanel.state.canAddClinical',\n description:\n 'Whether the current user may write clinical notes (the practice_add_clinical_note permission gate).',\n read: (handle) => handle.canAddClinical(),\n },\n currentNoteId: {\n type: 'string | null',\n descriptionKey: 'ui.agent.notesPanel.state.currentNoteId',\n description:\n 'Id of the note the host has addressed — the one marked, scrolled to and focused. Null when none is. An id only, never note content.',\n read: (handle) => handle.getCurrentNoteId(),\n },\n },\n actions: {\n add_note: {\n // Writes a clinical/admin note body — patient-identifiable content. PHI.\n safety: 'phi',\n argsType: '{ content: string; clinical: boolean }',\n argsSchema: {\n type: 'object',\n properties: {\n content: {\n type: 'string',\n description:\n 'Note body. Rich HTML for the rich composer, else plain text.',\n },\n clinical: {\n type: 'boolean',\n description:\n 'Whether the note is clinical. Requires the clinical-note permission; the submission is dropped when the gate is closed.',\n },\n },\n required: ['content', 'clinical'],\n },\n openWorld: true,\n descriptionKey: 'ui.agent.notesPanel.actions.addNote',\n description:\n 'Compose and commit a new note. A clinical note requires the clinical-note permission (read canAddClinical first).',\n examples: [\n {\n args: { content: 'Patient reported improvement.', clinical: true },\n note: 'Add a clinical note.',\n },\n ],\n invoke: (handle, args: { content: string; clinical: boolean }) => {\n return handle.addNote(args);\n },\n },\n toggle_pin: {\n // Re-orders the timeline (pinned notes lead) — reversible view write.\n safety: 'write',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: { id: { type: 'string' } },\n required: ['id'],\n },\n idempotent: false,\n descriptionKey: 'ui.agent.notesPanel.actions.togglePin',\n description:\n 'Toggle the pinned state of the note with the given id. Refused for a deleted note or one whose actions.pin is false.',\n invoke: (handle, args: { id: string }) => {\n handle.togglePin(args.id);\n },\n },\n toggle_flag: {\n safety: 'write',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: { id: { type: 'string' } },\n required: ['id'],\n },\n idempotent: false,\n descriptionKey: 'ui.agent.notesPanel.actions.toggleFlag',\n description: 'Toggle the flagged state of the note with the given id.',\n invoke: (handle, args: { id: string }) => {\n handle.toggleFlag(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'notes-panel',\n description: 'Marks the NotesPanel region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific notes panel from the agent.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { getErrorMessage } from '../_shared/get-error-message';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { notesPanelAgent } from './notes-panel.agent';\nimport { ClinicalNoteCard } from '../clinical-note-card';\nimport type { ClinicalNoteCardProps } from '../clinical-note-card';\nimport { RichTextEditor } from '../rich-text-editor';\nimport type {\n RichTextEditorHandle,\n RichTextEditorProps,\n RichTextEditorToolbar,\n RedactorFactory,\n} from '../rich-text-editor';\nimport { TextArea } from '../text-area';\nimport { Alert } from '../alert';\nimport { Button, IconButton } from '../button';\nimport { Checkbox } from '../checkbox';\nimport { Card } from '../card/card';\nimport { CONTENT_ENTER_CLASS, Skeleton } from '../skeleton/skeleton';\nimport { Dialog } from '../dialog';\nimport { NotebookPen, Pencil, Trash2 } from 'lucide-react';\nimport { PanelHeader } from '../panel-header';\nimport { REFLOW_ROW_CLASS, useListReflow } from '../../hooks/use-list-reflow';\nimport { useExitTransition } from '../../hooks/use-exit-transition';\nimport { useTheme } from '../../hooks/use-theme';\n\n/* ------------------------------------------------------------------ */\n/* NotesPanel — the Notes tool for the Control Room rail. */\n/* */\n/* A composer over an elevated ClinicalNoteCard timeline. Drops */\n/* into a ControlRoomRail tool `panel`, the patient profile, or the */\n/* care-plan editor — anywhere notes about the open entity belong. */\n/* The composer is the kit RichTextEditor by default (degrades to a */\n/* textarea where Redactor is absent), carries a permission-gated */\n/* \"clinical note\" toggle, and forwards the editor's AI affordances. */\n/* The note attaches to whatever entity the host is showing — the */\n/* host owns the attachment; the panel only emits content + clinical. */\n/* Pinned notes lead; pin / flag are inline per-note toggles. */\n/* ------------------------------------------------------------------ */\n\n/**\n * One note in the panel — the data subset of `ClinicalNoteCard`.\n *\n * `aria-label` names the card for assistive tech. Set it whenever a row is not\n * a clinical note: the card's fallback name is \"Clinical note\", so an entry\n * that is something else (a dated event, an import) is announced as one.\n */\nexport type NotesPanelNote = Pick<\n ClinicalNoteCardProps,\n | 'id'\n | 'dateIso'\n | 'createdAtIso'\n | 'author'\n | 'clinical'\n | 'attachedTo'\n | 'content'\n | 'contentFormat'\n | 'pinned'\n | 'flagged'\n | 'aria-label'\n | 'deleted'\n | 'operatorName'\n> & {\n /** What the host lets the reader do with this note. */\n actions?: NotesPanelNoteActions;\n};\n\n/** Per-note write permissions; an absent key means allowed. The panel hides\n * the pin toggle on `pin: false` and on a deleted note. */\nexport type NotesPanelNoteActions = {\n edit?: boolean;\n delete?: boolean;\n pin?: boolean;\n};\n\n/**\n * Curated agent handle for NotesPanel. Reads the note timeline's STRUCTURE\n * (ids + pinned / flagged / clinical flags — never the note body or author,\n * both PHI) and drives the composer + per-note toggles. See\n * `notes-panel.agent.ts`.\n */\nexport interface NotesPanelHandle {\n /** Timeline snapshot — ids + flags only, never note content (PHI). */\n getNotes: () => Array<{\n id?: string;\n pinned: boolean;\n flagged: boolean;\n clinical: boolean;\n }>;\n /** Whether the composer is mounted (onAddNote is wired). */\n canAddNote: () => boolean;\n /** Whether clinical notes may be written (the permission gate). */\n canAddClinical: () => boolean;\n /** Id of the note the host has addressed, or null when none is. */\n getCurrentNoteId: () => string | null;\n /** Commit a new note with explicit content (mirrors the composer's submit). */\n addNote: (submission: NotesPanelSubmission) => void | Promise<void>;\n /** Toggle a note's pinned state (mirrors onTogglePin, with its gate). */\n togglePin: (id: string) => void;\n /** Toggle a note's flagged state (mirrors onToggleFlag). */\n toggleFlag: (id: string) => void;\n}\n\n/** Payload handed to `onAddNote` when the composer commits. */\nexport interface NotesPanelSubmission {\n /** The note body — rich HTML (`composer='rich'`) or plain text. */\n content: string;\n /** Whether the \"clinical note\" toggle was set. */\n clinical: boolean;\n}\n\nexport interface NotesPanelProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title' | 'children'\n> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so an\n * agent / MCP UI bridge can address this specific notes panel.\n */\n id?: string;\n /** Notes to render, newest-first by convention. Pinned notes lead. */\n notes: NotesPanelNote[];\n /**\n * Commit a new note. Omit to hide the composer (read-only timeline). Return\n * a promise to keep the draft until the host has saved it: the draft clears\n * when it resolves, and a rejection keeps it and shows the error's message.\n */\n onAddNote?: (submission: NotesPanelSubmission) => void | Promise<void>;\n /** The host's notes read. `'loading'` and `'error'` never show the empty\n * text; notes already held still render. Default `'ready'`. */\n status?: 'ready' | 'loading' | 'error';\n /** Retry a failed read. Renders a retry button in the error state. */\n onRetry?: () => void;\n /**\n * The note the reader ASKED for, addressed by id from somewhere else in the\n * record — a marker in a chart, a row in a grid, an agent. The panel marks\n * it, scrolls it to the middle of its own scroll region and moves focus to\n * it, and renders it unclamped so the thing that was asked for is readable\n * in full without a second click.\n *\n * Opening a panel is not the same as answering a question: a rail's\n * `setActiveTool` moves no focus and announces nothing, so a control whose\n * name promises \"in the notes panel\" produces no perceivable change for a\n * keyboard or screen-reader reader unless the panel lands them on the note.\n * That is what this prop is for; without it, a host has to reach into the\n * panel's DOM to do the same job.\n *\n * Marked on three channels, never colour alone (WCAG 1.4.1): a solid\n * inline-start bar the other notes do not have, a tinted gutter, and\n * `aria-current` plus a visually-hidden sentence naming the mark.\n *\n * Ids that match no note are ignored. To address the SAME note twice — the\n * reader pressing the same marker again after scrolling away — bump\n * `currentNoteKey` alongside it; this prop alone is a value, not a request.\n */\n currentNoteId?: string;\n /**\n * Bump on every address to re-scroll and re-focus the note in `currentNoteId`\n * even when the id has not changed.\n *\n * Addressing is a request, not a value: a reader who presses the same marker\n * a second time (having scrolled away, or having moved focus off the note) is\n * asking to be taken back, and a control whose name promises the notes panel\n * must do something perceivable every time it is pressed. Without this the\n * second press is inert — the panel is already showing that note, so nothing\n * re-runs. Hosts increment a counter in the same handler that opens the tool.\n */\n currentNoteKey?: string | number;\n\n /* ----- Composer ----- */\n /**\n * `'rich'` (default) mounts the kit `RichTextEditor` (Redactor; degrades to a\n * textarea where Redactor is absent). `'plain'` keeps a simple `TextArea` for\n * lightweight surfaces / deterministic tests.\n */\n composer?: 'rich' | 'plain';\n /** Toolbar preset for the rich composer. Defaults to `'standard'`. */\n editorToolbar?: RichTextEditorToolbar;\n /** Inject the Redactor factory for the rich composer (else `window.$R`). */\n redactor?: RedactorFactory;\n /** Consumer image-upload endpoint for the rich composer. */\n imageUploadUrl?: string;\n\n /* ----- Clinical flag (permission-gated) ----- */\n /** Show the \"clinical note\" toggle in the composer. Default `true`. */\n showClinicalToggle?: boolean;\n /**\n * Permission gate — when `false` the clinical toggle is disabled and shows\n * `clinicalGatedReason` on hover/focus. Mirrors platform's\n * `practice_add_clinical_note` permission. Default `true`.\n */\n canAddClinicalNote?: boolean;\n /** Tooltip shown when the clinical toggle is gated off. */\n clinicalGatedReason?: string;\n /** Initial state of the clinical toggle. Default `false`. */\n defaultClinical?: boolean;\n\n /* ----- AI assistance (forwarded to RichTextEditor) ----- */\n onRequestAiDraft?: RichTextEditorProps['onRequestAiDraft'];\n aiDraftFormat?: RichTextEditorProps['aiDraftFormat'];\n aiPrivacyNotice?: RichTextEditorProps['aiPrivacyNotice'];\n onDictate?: RichTextEditorProps['onDictate'];\n onProofread?: RichTextEditorProps['onProofread'];\n onAutoFormat?: RichTextEditorProps['onAutoFormat'];\n\n /* ----- Per-note actions ----- */\n /** Toggle a note's pinned state — renders an inline pin button per note. */\n onTogglePin?: (id: string) => void;\n /** Toggle a note's flagged state — renders an inline flag button per note. */\n onToggleFlag?: (id: string) => void;\n /**\n * Host-owned actions for each note (edit, delete, share…), rendered by\n * the note card beside its pin and flag,\n * aligned to the inline end. The host supplies labelled controls and owns\n * what they do — the panel stays a timeline and never edits a note itself.\n */\n noteActions?: (note: NotesPanelNote) => ReactNode;\n /**\n * Save an edit to an existing note. When provided, each note the reader may\n * edit gets a pencil; it loads the note into the SAME composer that writes\n * new notes, in place, so a rich note is edited as rich text and keeps its\n * formatting. Return a promise to hold the pending state; a rejection keeps\n * the draft. Hidden on `actions.edit: false` and on a deleted note.\n */\n onEditNote?: (\n id: string,\n submission: NotesPanelSubmission,\n ) => void | Promise<void>;\n /**\n * Let an edit change a note's clinical flag. Default `false`: the \"Clinical\n * note\" toggle is hidden while editing and the submission carries the\n * note's existing flag. Most hosts save a note's content only, and a live\n * toggle that changes nothing is a lie. Set `true` only when the host\n * persists `submission.clinical` on edit.\n */\n editClinical?: boolean;\n /**\n * Request the host to delete a note. When provided, the panel holds the\n * row on screen long enough to fade it out before calling this, so the\n * removal reads as a removal rather than a vanish. Omit to let the host\n * own the timing entirely (the reflow animation still closes the gap).\n */\n onDeleteNote?: (id: string) => void;\n /**\n * Show a confirmation dialog before calling `onDeleteNote`. When `true`\n * (the default when `onDeleteNote` is provided), the built-in delete\n * button opens an alert dialog first; the exit fade only starts after\n * the user confirms. Pass `false` to delete immediately on click.\n */\n confirmDelete?: boolean;\n\n /* ----- Labels / chrome ----- */\n /** Panel heading. Defaults to the localised \"Notes\". */\n title?: string;\n /** Composer placeholder. */\n composerPlaceholder?: string;\n /** Save-button label. */\n addNoteLabel?: string;\n /** Rendered when there are no notes. */\n emptyState?: ReactNode;\n /** Accessible name for the panel region (defaults to `title`). */\n 'aria-label'?: string;\n}\n\n/* The timeline row. The addressed note wears a solid inline-start bar the\n others do not — a shape channel, so the mark is not colour alone. Every row\n reserves the bar's width in `transparent`, so marking one shifts nothing. */\nconst noteItemVariants = cva(\n 'ds:flex ds:flex-col ds:rounded-[var(--radius-md)] ds:border-s-2 ds:ps-[var(--spacing-sm)]',\n {\n variants: {\n current: {\n true: 'ds:border-[color:var(--info)] ds:bg-[color:var(--info)]/10 ds:focus:outline-[length:var(--focus-ring-width)] ds:focus:outline-solid ds:focus:outline-[color:var(--ring)] ds:focus:outline-offset-[length:var(--focus-ring-offset)]',\n false: 'ds:border-transparent',\n },\n },\n defaultVariants: { current: false },\n },\n);\n\n/* A row on its way out fades in place; the reflow hook then slides the\n rows below up to close the gap. Declared at rest so the transition has\n a value to animate from the moment the leaving class lands. */\nconst noteLeavingClass = 'ds:opacity-0';\nconst noteElevationClass = [\n 'ds:transition-opacity ds:duration-[var(--animation-duration)]',\n 'ds:ease-[var(--ease-out)] ds:motion-reduce:transition-none',\n].join(' ');\n\n/* Body lines per placeholder note. Uneven, so three cards do not read as one\n repeated stamp. */\nconst NOTE_SKELETON_LINES = [3, 2, 3] as const;\n\n/** Strip tags / entities to test whether a rich draft holds real content. */\nfunction hasRichContent(html: string): boolean {\n if (!html) return false;\n if (/<img\\b/i.test(html)) return true;\n return (\n html\n .replace(/<[^>]*>/g, '')\n .replace(/&nbsp;/gi, ' ')\n .trim().length > 0\n );\n}\n\nexport const NotesPanel = forwardRef<HTMLElement, NotesPanelProps>(\n function NotesPanel(\n {\n id,\n notes,\n onAddNote,\n status = 'ready',\n onRetry,\n currentNoteId,\n currentNoteKey,\n composer = 'rich',\n editorToolbar = 'standard',\n redactor,\n imageUploadUrl,\n showClinicalToggle = true,\n canAddClinicalNote = true,\n clinicalGatedReason,\n defaultClinical = false,\n onRequestAiDraft,\n aiDraftFormat,\n aiPrivacyNotice,\n onDictate,\n onProofread,\n onAutoFormat,\n onTogglePin,\n onToggleFlag,\n noteActions,\n onEditNote,\n editClinical = false,\n onDeleteNote,\n confirmDelete = true,\n title,\n composerPlaceholder,\n addNoteLabel,\n emptyState,\n className,\n 'aria-label': ariaLabel,\n ...rest\n },\n ref,\n ) {\n const { t, i18n } = useTranslation();\n const editorRef = useRef<RichTextEditorHandle>(null);\n const [draft, setDraft] = useState('');\n const [clinical, setClinical] = useState(defaultClinical);\n const [pending, setPending] = useState(false);\n const [addError, setAddError] = useState<string | null>(null);\n // The note loaded into the composer for editing, or null when composing.\n const [editingId, setEditingId] = useState<string | null>(null);\n /* Settle in only when this content REPLACES a skeleton. Content that was\n simply there from the start must not fade: it would read as invisible\n for one animation to any test or reader that looks at once. */\n const followedLoading = useRef(false);\n if (status === 'loading') followedLoading.current = true;\n const enterClass = followedLoading.current ? CONTENT_ENTER_CLASS : '';\n\n const heading = title ?? t('notesPanel.title', { defaultValue: 'Notes' });\n const headingId = useId();\n const placeholder =\n composerPlaceholder ??\n t('notesPanel.placeholder', { defaultValue: 'Add a note…' });\n const composerLabel =\n editingId !== null\n ? t('notesPanel.edit', { defaultValue: 'Edit note' })\n : t('notesPanel.composerLabel', { defaultValue: 'New note' });\n\n // Live content check: plain reads the draft directly; rich strips the draft\n // (debounced) for the disabled state but commits from the editor handle.\n const hasContent =\n composer === 'rich' ? hasRichContent(draft) : draft.trim().length > 0;\n\n const commit = useCallback(() => {\n const save = editingId !== null ? onEditNote : onAddNote;\n if (!save || pending) return;\n const rich = composer === 'rich';\n const content = rich\n ? (editorRef.current?.getHTML() ?? draft)\n : draft.trim();\n if (rich ? !hasRichContent(content) : !content) return;\n const reset = () => {\n if (rich) editorRef.current?.clear();\n setDraft('');\n setClinical(defaultClinical);\n setEditingId(null);\n };\n setAddError(null);\n let result: void | Promise<void>;\n try {\n result =\n editingId !== null && onEditNote\n ? onEditNote(editingId, { content, clinical })\n : onAddNote?.({ content, clinical });\n } catch (error: unknown) {\n setAddError(getErrorMessage(error, t('notesPanel.addFailed')));\n return;\n }\n if (!result || typeof result.then !== 'function') return reset();\n // A failed save keeps the draft, so nothing typed is lost.\n setPending(true);\n Promise.resolve(result)\n .then(reset, (error: unknown) =>\n setAddError(getErrorMessage(error, t('notesPanel.addFailed'))),\n )\n .finally(() => setPending(false));\n }, [\n composer,\n draft,\n clinical,\n defaultClinical,\n editingId,\n onAddNote,\n onEditNote,\n pending,\n t,\n ]);\n\n const clinicalToggleShown =\n showClinicalToggle && (editingId === null || editClinical);\n\n /* Every row carries the SAME action words, so each accessible name adds\n the note's own date: otherwise a screen reader hears a list of\n identical \"Edit note\" buttons. The tooltip keeps the short words. */\n const noteStamp = useCallback(\n (note: NotesPanelNote): string => {\n try {\n return new Intl.DateTimeFormat(i18n.language, {\n day: 'numeric',\n month: 'long',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n }).format(new Date(note.dateIso));\n } catch {\n return note.dateIso;\n }\n },\n [i18n.language],\n );\n\n /* ----- Edit in place: the composer takes the note, and gives it back ----- */\n const startEdit = useCallback(\n (note: NotesPanelNote) => {\n if (!note.id || pending) return;\n const content = note.content ?? '';\n setAddError(null);\n setEditingId(note.id);\n setClinical(note.clinical ?? false);\n setDraft(content);\n if (composer === 'rich') {\n editorRef.current?.clear();\n editorRef.current?.insertAtCursor(content, { asHtml: true });\n }\n editorRef.current?.focus();\n },\n [composer, pending],\n );\n const cancelEdit = useCallback(() => {\n if (composer === 'rich') editorRef.current?.clear();\n setDraft('');\n setClinical(defaultClinical);\n setAddError(null);\n setEditingId(null);\n }, [composer, defaultClinical]);\n // The note being edited went away (deleted, or another patient's notes\n // arrived): its draft must not be saved against whatever comes next.\n const editingStillThere =\n editingId === null ||\n notes.some((note) => note.id === editingId && !note.deleted);\n useEffect(() => {\n if (!editingStillThere) cancelEdit();\n }, [editingStillThere, cancelEdit]);\n\n // Pinned notes lead; order within each group is preserved.\n const ordered = [...notes].sort(\n (a, b) => Number(b.pinned ?? false) - Number(a.pinned ?? false),\n );\n\n /* The accessible theme zeroes `--animation-duration`, so its CSS plays\n nothing — the JS must agree, or a row would sit still for the delay\n and then vanish anyway. `undefined` leaves the media query in charge. */\n const { resolvedTheme } = useTheme();\n const reduceMotion = resolvedTheme.endsWith('-accessible') || undefined;\n\n /* Closing the gap a removed row leaves: the rows below slide up rather\n than jumping, so the eye keeps its place in the list. Fires on add,\n delete, and re-order (pinning) — any change to the visible id\n sequence. */\n const { containerRef: reflowRef } = useListReflow<HTMLUListElement>({\n key: ordered.map((n) => n.id).join(),\n reduceMotion,\n });\n\n /* A note leaving the list fades out before the host drops it, so the\n removal reads as a removal rather than a vanish. The reflow hook\n then slides the rows below up to close the gap. */\n const deleteExit = useExitTransition({ reduceMotion });\n const [pendingDelete, setPendingDelete] = useState<string | null>(null);\n const handleDeleteNote = useCallback(\n (noteId: string) => {\n if (!onDeleteNote) return;\n if (confirmDelete) {\n setPendingDelete(noteId);\n } else {\n deleteExit.leave(noteId, () => onDeleteNote(noteId));\n }\n },\n [confirmDelete, deleteExit, onDeleteNote],\n );\n const confirmDeleteNote = useCallback(() => {\n if (!pendingDelete || !onDeleteNote) return;\n const noteId = pendingDelete;\n setPendingDelete(null);\n deleteExit.leave(noteId, () => onDeleteNote(noteId));\n }, [pendingDelete, onDeleteNote, deleteExit]);\n\n /* ----- The addressed note (see `currentNoteId`) ----- */\n const currentItemRef = useRef<HTMLLIElement>(null);\n useEffect(() => {\n if (!currentNoteId) return;\n // `center`, not `nearest`: nearest parks the note flush against the edge\n // of the scroll region, which is the least readable place to land.\n currentItemRef.current?.scrollIntoView({ block: 'center' });\n currentItemRef.current?.focus();\n // `currentNoteKey` is in the deps so a REPEAT address of the same note\n // re-runs — see the prop doc. Addressing is a request, not a value.\n }, [currentNoteId, currentNoteKey]);\n\n /* ----- Agent handle (structural reads + composer / toggles) ----- */\n const notesRef = useRef(notes);\n notesRef.current = notes;\n const onAddNoteRef = useRef(onAddNote);\n onAddNoteRef.current = onAddNote;\n const onTogglePinRef = useRef(onTogglePin);\n onTogglePinRef.current = onTogglePin;\n const onToggleFlagRef = useRef(onToggleFlag);\n onToggleFlagRef.current = onToggleFlag;\n const canAddClinicalRef = useRef(canAddClinicalNote);\n canAddClinicalRef.current = canAddClinicalNote;\n const currentNoteIdRef = useRef(currentNoteId);\n currentNoteIdRef.current = currentNoteId;\n\n const rootRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => rootRef.current as HTMLElement, []);\n\n const handle = useMemo<NotesPanelHandle>(\n () => ({\n // Ids + flags only — never the note body or author (both PHI).\n getNotes: () =>\n notesRef.current.map((n) => ({\n id: n.id,\n pinned: !!n.pinned,\n flagged: !!n.flagged,\n clinical: !!n.clinical,\n })),\n canAddNote: () => !!onAddNoteRef.current,\n canAddClinical: () => canAddClinicalRef.current,\n getCurrentNoteId: () => currentNoteIdRef.current ?? null,\n addNote: (submission) => {\n // A clinical submission requires the permission gate to be open.\n if (submission.clinical && !canAddClinicalRef.current) return;\n return onAddNoteRef.current?.(submission);\n },\n togglePin: (noteId) => {\n const note = notesRef.current.find((n) => n.id === noteId);\n if (note && (note.deleted || note.actions?.pin === false)) return;\n onTogglePinRef.current?.(noteId);\n },\n toggleFlag: (noteId) => onToggleFlagRef.current?.(noteId),\n }),\n [],\n );\n useAgentRegistration(notesPanelAgent, handle, id);\n\n return (\n <section\n ref={rootRef}\n data-component=\"notes-panel\"\n data-component-id={id}\n aria-labelledby={ariaLabel ? undefined : headingId}\n aria-label={ariaLabel}\n className={['ds:flex ds:flex-col', className].filter(Boolean).join(' ')}\n {...rest}\n >\n {/* Shared rail header — pins to the top of the panel's scroll region\n while the composer + note timeline scroll beneath it. The rail\n injects the favourite / close actions via PanelHeaderActionsProvider. */}\n <PanelHeader\n title={heading}\n icon={<NotebookPen aria-hidden=\"true\" />}\n headingId={ariaLabel ? undefined : headingId}\n sticky\n divider\n />\n\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-md)]\">\n {onAddNote || editingId !== null ? (\n <div\n data-notes-panel-composer={editingId !== null ? 'edit' : 'add'}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n {composer === 'rich' ? (\n <RichTextEditor\n ref={editorRef}\n ariaLabel={composerLabel}\n placeholder={placeholder}\n toolbar={editorToolbar}\n minHeight=\"fill\"\n redactor={redactor}\n imageUploadUrl={imageUploadUrl}\n readOnly={pending}\n onChange={({ html }) => setDraft(html)}\n onRequestAiDraft={onRequestAiDraft}\n aiDraftFormat={aiDraftFormat}\n aiPrivacyNotice={aiPrivacyNotice}\n onDictate={onDictate}\n onProofread={onProofread}\n onAutoFormat={onAutoFormat}\n />\n ) : (\n <TextArea\n value={draft}\n readOnly={pending}\n onChange={(event) => setDraft(event.target.value)}\n placeholder={placeholder}\n autoResize\n minRows={2}\n maxRows={6}\n aria-label={composerLabel}\n />\n )}\n <div\n className={[\n 'ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]',\n clinicalToggleShown ? 'ds:justify-between' : 'ds:justify-end',\n ].join(' ')}\n >\n {clinicalToggleShown ? (\n <Checkbox\n size=\"sm\"\n label={t('notesPanel.clinicalToggle', {\n defaultValue: 'Clinical note',\n })}\n checked={clinical}\n onCheckedChange={(next) => setClinical(next === true)}\n disabled={pending || !canAddClinicalNote}\n disabledReason={\n canAddClinicalNote\n ? undefined\n : (clinicalGatedReason ??\n t('notesPanel.clinicalGated', {\n defaultValue:\n 'You do not have permission to write clinical notes.',\n }))\n }\n />\n ) : null}\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {editingId !== null ? (\n <Button\n type=\"button\"\n size=\"sm\"\n intent=\"ghost\"\n onClick={cancelEdit}\n disabled={pending}\n >\n {t('notesPanel.cancelEdit', { defaultValue: 'Cancel' })}\n </Button>\n ) : null}\n <Button\n type=\"button\"\n size=\"sm\"\n onClick={commit}\n disabled={!hasContent}\n loading={pending}\n >\n {editingId !== null\n ? t('notesPanel.saveEdit', { defaultValue: 'Save note' })\n : (addNoteLabel ??\n t('notesPanel.add', { defaultValue: 'Add note' }))}\n </Button>\n </span>\n </div>\n {addError ? (\n <Alert variant=\"error\">\n <Alert.Description>{addError}</Alert.Description>\n </Alert>\n ) : null}\n </div>\n ) : null}\n\n {status === 'loading' && ordered.length === 0 ? (\n /* Note-shaped placeholders, not a spinner: the reader sees where\n the notes will land and how many to expect. The status text is\n for assistive tech only; sighted readers get the motion. */\n <div\n data-notes-panel-loading=\"\"\n aria-busy=\"true\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n <span role=\"status\" className=\"ds:sr-only\">\n {t('notesPanel.loading')}\n </span>\n {NOTE_SKELETON_LINES.map((lines, index) => (\n <Card key={index} variant=\"elevated\" aria-hidden=\"true\">\n <Card.Body>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Skeleton\n variant=\"circular\"\n size=\"sm\"\n stagger={index * 2}\n />\n <div className=\"ds:flex ds:flex-1 ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <Skeleton\n variant=\"text\"\n size=\"sm\"\n stagger={index * 2}\n width=\"40%\"\n />\n <Skeleton\n variant=\"text\"\n size=\"sm\"\n stagger={index * 2}\n width=\"25%\"\n />\n </div>\n </div>\n <Skeleton\n variant=\"text\"\n size=\"sm\"\n lines={lines}\n stagger={index * 2 + 1}\n />\n </div>\n </Card.Body>\n </Card>\n ))}\n </div>\n ) : status === 'error' ? (\n <Alert variant=\"error\">\n <Alert.Description>{t('notesPanel.loadError')}</Alert.Description>\n {onRetry ? (\n <Alert.Action>\n <Button intent=\"secondary\" size=\"sm\" onClick={onRetry}>\n {t('notesPanel.retry')}\n </Button>\n </Alert.Action>\n ) : null}\n </Alert>\n ) : null}\n\n {/* A refresh keeps the notes it has: real notes never give way to\n placeholders. The list is marked busy and says so to a reader. */}\n {status === 'loading' && ordered.length > 0 ? (\n <span role=\"status\" className=\"ds:sr-only\">\n {t('notesPanel.loading')}\n </span>\n ) : null}\n {ordered.length > 0 ? (\n <ul\n ref={reflowRef}\n aria-busy={status === 'loading' || undefined}\n className={`ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0 ${enterClass}`.trim()}\n >\n {ordered.map(({ actions, ...note }, index) => {\n const isCurrent =\n currentNoteId != null && note.id === currentNoteId;\n const noteId = note.id as string | undefined;\n const leaving = noteId != null && deleteExit.isLeaving(noteId);\n return (\n <li\n key={note.id ?? index}\n ref={isCurrent ? currentItemRef : undefined}\n // Focus lands on the row, not inside the card, so the\n // sentence below and `aria-current` are read out before the\n // note — and the rail's own Escape still bubbles.\n tabIndex={isCurrent ? -1 : undefined}\n aria-current={isCurrent ? 'true' : undefined}\n data-reflow-id={noteId}\n data-leaving={leaving ? '' : undefined}\n data-editing={editingId === noteId ? '' : undefined}\n className={[\n noteItemVariants({\n current: isCurrent || editingId === noteId,\n }),\n noteElevationClass,\n REFLOW_ROW_CLASS,\n leaving ? noteLeavingClass : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {isCurrent ? (\n <span className=\"ds:sr-only\">\n {t('notesPanel.current', {\n defaultValue: 'Current note',\n })}\n </span>\n ) : null}\n {/* Elevated card per note; the list gap (not a separator)\n spaces them. Bodies clamp to five lines with read-more —\n except the addressed one, which is what the reader came\n for and opens in full. */}\n <ClinicalNoteCard\n surface=\"elevated\"\n truncate={!isCurrent}\n headerActions={\n <>\n {noteActions\n ? noteActions({ ...note, actions })\n : null}\n {onEditNote &&\n noteId &&\n !note.deleted &&\n actions?.edit !== false ? (\n <IconButton\n icon={<Pencil />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('notesPanel.editNamed', {\n date: noteStamp(note),\n defaultValue: 'Edit note · {{date}}',\n })}\n tooltip={t('notesPanel.edit', {\n defaultValue: 'Edit note',\n })}\n aria-pressed={editingId === noteId}\n disabled={pending}\n data-notes-panel-edit=\"\"\n onClick={() =>\n editingId === noteId\n ? cancelEdit()\n : startEdit(note)\n }\n />\n ) : null}\n {onDeleteNote && noteId && !note.deleted ? (\n <IconButton\n icon={<Trash2 />}\n intent=\"ghost\"\n size=\"sm\"\n aria-label={t('notesPanel.deleteNamed', {\n date: noteStamp(note),\n defaultValue: 'Delete note · {{date}}',\n })}\n tooltip={t('notesPanel.delete', {\n defaultValue: 'Delete note',\n })}\n onClick={() => handleDeleteNote(noteId)}\n />\n ) : null}\n </>\n }\n {...note}\n onTogglePin={\n onTogglePin &&\n note.id &&\n actions?.pin !== false &&\n !note.deleted\n ? () => onTogglePin(note.id as string)\n : undefined\n }\n onToggleFlag={\n onToggleFlag && note.id\n ? () => onToggleFlag(note.id as string)\n : undefined\n }\n />\n </li>\n );\n })}\n </ul>\n ) : status !== 'ready' ? null : (\n (emptyState ?? (\n <p className=\"ds:m-0 type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {t('notesPanel.empty', { defaultValue: 'No notes yet.' })}\n </p>\n ))\n )}\n </div>\n\n {onDeleteNote && confirmDelete ? (\n <Dialog\n open={pendingDelete !== null}\n onOpenChange={(next) => !next && setPendingDelete(null)}\n >\n <Dialog.Content variant=\"alert\" size=\"sm\">\n <Dialog.Header>\n <Dialog.Title>\n {t('notesPanel.deleteConfirmTitle', {\n defaultValue: 'Delete this note?',\n })}\n </Dialog.Title>\n </Dialog.Header>\n <Dialog.Body>\n <Dialog.Description>\n {t('notesPanel.deleteConfirmBody', {\n defaultValue: 'The note will be removed from the record.',\n })}\n </Dialog.Description>\n </Dialog.Body>\n <Dialog.Footer>\n <Dialog.Close asChild>\n <Button\n intent=\"secondary\"\n size=\"sm\"\n onClick={() => setPendingDelete(null)}\n >\n {t('notesPanel.deleteConfirmCancel', {\n defaultValue: 'Cancel',\n })}\n </Button>\n </Dialog.Close>\n <Button\n intent=\"destructive\"\n size=\"sm\"\n onClick={confirmDeleteNote}\n >\n {t('notesPanel.deleteConfirmAction', {\n defaultValue: 'Delete',\n })}\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog>\n ) : null}\n </section>\n );\n },\n);\n"],"names":["getErrorMessage","error","fallback","notesPanelAgent","handle","args","noteItemVariants","cva","noteLeavingClass","noteElevationClass","NOTE_SKELETON_LINES","hasRichContent","html","NotesPanel","forwardRef","id","notes","onAddNote","status","onRetry","currentNoteId","currentNoteKey","composer","editorToolbar","redactor","imageUploadUrl","showClinicalToggle","canAddClinicalNote","clinicalGatedReason","defaultClinical","onRequestAiDraft","aiDraftFormat","aiPrivacyNotice","onDictate","onProofread","onAutoFormat","onTogglePin","onToggleFlag","noteActions","onEditNote","editClinical","onDeleteNote","confirmDelete","title","composerPlaceholder","addNoteLabel","emptyState","className","ariaLabel","rest","ref","t","i18n","useTranslation","editorRef","useRef","draft","setDraft","useState","clinical","setClinical","pending","setPending","addError","setAddError","editingId","setEditingId","followedLoading","enterClass","CONTENT_ENTER_CLASS","heading","headingId","useId","placeholder","composerLabel","hasContent","commit","useCallback","rich","content","_a","reset","result","clinicalToggleShown","noteStamp","note","startEdit","_b","_c","cancelEdit","editingStillThere","useEffect","ordered","a","b","resolvedTheme","useTheme","reduceMotion","reflowRef","useListReflow","n","deleteExit","useExitTransition","pendingDelete","setPendingDelete","handleDeleteNote","noteId","confirmDeleteNote","currentItemRef","notesRef","onAddNoteRef","onTogglePinRef","onToggleFlagRef","canAddClinicalRef","currentNoteIdRef","rootRef","useImperativeHandle","useMemo","submission","useAgentRegistration","jsxs","jsx","PanelHeader","NotebookPen","RichTextEditor","TextArea","event","Checkbox","next","Button","Alert","lines","index","Card","Skeleton","actions","isCurrent","leaving","REFLOW_ROW_CLASS","ClinicalNoteCard","Fragment","IconButton","Pencil","Trash2","Dialog"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"panel-subview-BNXN8OEL.js","sources":["../../node_modules/lucide-react/dist/esm/icons/arrow-left.mjs","../../src/components/panel-subview/panel-subview.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m12 19-7-7 7-7\", key: \"1l729n\" }],\n [\"path\", { d: \"M19 12H5\", key: \"x3x0zl\" }]\n];\nconst ArrowLeft = createLucideIcon(\"arrow-left\", __iconNode);\n\nexport { __iconNode, ArrowLeft as default };\n//# sourceMappingURL=arrow-left.mjs.map\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { ArrowLeft } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { PanelHeader } from '../panel-header/panel-header';\nimport { ScrollArea } from '../scroll-area/scroll-area';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { usePresenceTransition } from '../../hooks/use-presence-transition';\n\n/* -------------------------------------------------------------------- */\n/* PanelSubview */\n/* */\n/* A panel inside a panel: a second view that slides over a rail panel's */\n/* own body and hands it back. An edit form, a history, a detail drilled */\n/* into from a list. The panel underneath stays mounted, so its scroll */\n/* position and state are there when the reader comes back. */\n/* */\n/* Use it instead of a Dialog when the task belongs to the panel. A modal */\n/* blanks out the calendar the rail sits beside, and the list the item */\n/* came from; a subview covers only the panel. */\n/* */\n/* It exists because the shape was being hand-built per tool: a view */\n/* flag, a PanelHeader with a back arrow, a scroll body, a pinned footer, */\n/* and focus moved by hand. Hand-built, none of them animated and each */\n/* forgot a different part of the focus contract. */\n/* */\n/* The host must be a positioned, clipped box. Wrap the panel in */\n/* `PanelSubview.Host` and render the subview as its LAST child. */\n/* -------------------------------------------------------------------- */\n\nconst hostVariants = cva(\n 'ds:relative ds:flex ds:h-full ds:min-h-0 ds:flex-col ds:overflow-hidden',\n);\n\nconst subviewVariants = cva(\n [\n 'ds:absolute ds:inset-0 ds:z-[2] ds:flex ds:min-h-0 ds:flex-col',\n 'ds:bg-[var(--background)] ds:focus-visible:outline-none',\n // Slides in from the inline end, and back out the same way. Declared at\n // rest so both directions have a value to move from.\n 'ds:transition-[opacity,translate] ds:duration-[var(--animation-duration)]',\n 'ds:ease-[var(--ease-out)] ds:motion-reduce:transition-none',\n 'ds:data-[presence=entering]:opacity-0 ds:data-[presence=leaving]:opacity-0',\n 'ds:data-[presence=entering]:translate-x-full ds:data-[presence=leaving]:translate-x-full',\n 'ds:rtl:data-[presence=entering]:-translate-x-full ds:rtl:data-[presence=leaving]:-translate-x-full',\n 'ds:data-[presence=leaving]:pointer-events-none',\n ].join(' '),\n);\n\nconst footerVariants = cva(\n [\n 'ds:flex ds:shrink-0 ds:items-center ds:justify-end',\n 'ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-md)]',\n 'ds:border-t ds:border-[color:var(--border)]',\n ].join(' '),\n);\n\n/* -------------------------------------------------------------------- */\n/* Host */\n/* -------------------------------------------------------------------- */\n\nexport type PanelSubviewHostProps = HTMLAttributes<HTMLDivElement>;\n\n/** The positioned, clipped box a subview slides inside. Fills its parent. */\nconst PanelSubviewHost = forwardRef<HTMLDivElement, PanelSubviewHostProps>(\n ({ className, children, ...rest }, ref) => (\n <div\n ref={ref}\n data-component=\"panel-subview-host\"\n className={[hostVariants(), className].filter(Boolean).join(' ')}\n {...rest}\n >\n {children}\n </div>\n ),\n);\nPanelSubviewHost.displayName = 'PanelSubview.Host';\n\n/* -------------------------------------------------------------------- */\n/* Subview */\n/* -------------------------------------------------------------------- */\n\nexport interface PanelSubviewProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n /** Whether the subview is showing. It animates in and out around this. */\n open: boolean;\n /** Fires from the back button and from Escape. Set `open` false in reply. */\n onBack: () => void;\n /** The subview's heading. Already translated upstream. */\n title: ReactNode;\n /** Accessible name and tooltip of the back button. Already translated. */\n backLabel: string;\n /** Optional leading glyph for the heading. */\n icon?: ReactNode;\n /** Heading level. Default `2`; pass `3` to read as subordinate to the host. */\n headingLevel?: 2 | 3;\n /** Extra header actions, rendered after the back button. */\n headerActions?: ReactNode;\n /** Pinned below the scroll body: the form's cancel and save, typically. */\n footer?: ReactNode;\n /** Fires once the exit has played and the subview has unmounted. */\n onExited?: () => void;\n /**\n * Focus this on open instead of the subview itself: a form's first field,\n * say. The subview is still announced through its heading.\n */\n initialFocusRef?: RefObject<HTMLElement | null>;\n children: ReactNode;\n}\n\nconst PanelSubviewRoot = forwardRef<HTMLElement, PanelSubviewProps>(\n (\n {\n open,\n onBack,\n title,\n backLabel,\n icon,\n headingLevel,\n headerActions,\n footer,\n onExited,\n initialFocusRef,\n className,\n children,\n ...rest\n },\n ref,\n ) => {\n const headingId = useId();\n const presence = usePresenceTransition<HTMLElement>(open, { onExited });\n const nodeRef = useRef<HTMLElement | null>(null);\n const returnFocusRef = useRef<HTMLElement | null>(null);\n const onBackRef = useRef(onBack);\n onBackRef.current = onBack;\n\n const { ref: presenceRef } = presence;\n const setNode = useCallback(\n (node: HTMLElement | null) => {\n nodeRef.current = node;\n presenceRef(node);\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n },\n [presenceRef, ref],\n );\n\n // Remember where focus was BEFORE the subview takes it, during render of\n // the opening pass, so the trigger is still the active element.\n const wasOpenRef = useRef(open);\n if (open && !wasOpenRef.current && typeof document !== 'undefined') {\n returnFocusRef.current =\n document.activeElement instanceof HTMLElement\n ? document.activeElement\n : null;\n }\n wasOpenRef.current = open;\n\n /* The panel underneath is covered, so it leaves the tab order and the\n accessibility tree for as long as the subview is open. */\n useIsomorphicLayoutEffect(() => {\n const node = nodeRef.current;\n const parent = node?.parentElement;\n if (!open || !node || !parent) return undefined;\n const covered = Array.from(parent.children).filter(\n (child) => child !== node && !child.hasAttribute('inert'),\n );\n covered.forEach((child) => child.setAttribute('inert', ''));\n // `preventScroll`: the subview is still off to the side at this point,\n // and a clipped Host would otherwise scroll sideways to reveal it.\n (initialFocusRef?.current ?? node).focus({ preventScroll: true });\n return () => {\n covered.forEach((child) => child.removeAttribute('inert'));\n };\n }, [open, presence.mounted, initialFocusRef]);\n\n /* A leaving subview is already closed to the user: `aria-hidden` alone\n would leave its controls focusable, so it goes `inert` while it fades.\n Set on the node, not as a prop: React 18 has no boolean for it. */\n const leaving = !open;\n useIsomorphicLayoutEffect(() => {\n const node = nodeRef.current;\n if (!node) return;\n // Blur first: nothing focused may sit inside a hidden subtree, even for\n // the moment before the passive effect below hands focus back.\n const active = document.activeElement;\n if (leaving && active instanceof HTMLElement && node.contains(active)) {\n active.blur();\n }\n node.toggleAttribute('inert', leaving);\n }, [leaving, presence.mounted]);\n\n /* Hand focus back to whatever opened the subview. A PASSIVE effect: React\n restores the pre-commit focus at the end of a commit, so a return made\n from a layout cleanup is overwritten by the closing subview itself. */\n useEffect(() => {\n if (!open) return undefined;\n return () => {\n const target = returnFocusRef.current;\n returnFocusRef.current = null;\n if (target?.isConnected) target.focus();\n };\n }, [open]);\n\n /* Escape goes back one level. A NATIVE listener: the rail collapses on\n Escape through its own native listener further up, and only a native\n stopPropagation here keeps one key press from doing both. */\n useEffect(() => {\n const node = nodeRef.current;\n if (!open || !node) return undefined;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || event.defaultPrevented) return;\n event.preventDefault();\n event.stopPropagation();\n onBackRef.current();\n };\n node.addEventListener('keydown', onKeyDown);\n return () => node.removeEventListener('keydown', onKeyDown);\n }, [open, presence.mounted]);\n\n if (!presence.mounted) return null;\n\n return (\n <section\n {...rest}\n ref={setNode}\n tabIndex={-1}\n aria-labelledby={headingId}\n aria-hidden={leaving || undefined}\n data-component=\"panel-subview\"\n data-presence={presence.phase}\n className={[subviewVariants(), className].filter(Boolean).join(' ')}\n >\n <PanelHeader\n icon={icon}\n title={title}\n headingId={headingId}\n headingLevel={headingLevel}\n sticky\n divider\n actions={\n <>\n <IconButton\n icon={<ArrowLeft aria-hidden=\"true\" />}\n intent=\"ghost\"\n size=\"sm\"\n flipIconInRtl\n aria-label={backLabel}\n tooltip={backLabel}\n data-panel-subview-back=\"\"\n onClick={onBack}\n />\n {headerActions}\n </>\n }\n />\n <ScrollArea orientation=\"vertical\" className=\"ds:min-h-0 ds:flex-1\">\n {children}\n </ScrollArea>\n {footer ? (\n <div data-panel-subview-footer=\"\" className={footerVariants()}>\n {footer}\n </div>\n ) : null}\n </section>\n );\n },\n);\nPanelSubviewRoot.displayName = 'PanelSubview';\n\nexport const PanelSubview = Object.assign(PanelSubviewRoot, {\n Host: PanelSubviewHost,\n});\n"],"names":["__iconNode","ArrowLeft","createLucideIcon","hostVariants","cva","subviewVariants","footerVariants","PanelSubviewHost","forwardRef","className","children","rest","ref","jsx","PanelSubviewRoot","open","onBack","title","backLabel","icon","headingLevel","headerActions","footer","onExited","initialFocusRef","headingId","useId","presence","usePresenceTransition","nodeRef","useRef","returnFocusRef","onBackRef","presenceRef","setNode","useCallback","node","wasOpenRef","useIsomorphicLayoutEffect","parent","covered","child","leaving","active","useEffect","target","onKeyDown","event","jsxs","PanelHeader","Fragment","IconButton","ScrollArea","PanelSubview"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"patient-summary-card-B131Q7Bp.js","sources":["../../node_modules/lucide-react/dist/esm/icons/file-exclamation-point.mjs","../../node_modules/lucide-react/dist/esm/icons/message-square-warning.mjs","../../src/components/patient-summary-card/patient-summary-card.agent.ts","../../src/components/patient-summary-card/patient-summary-card.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst FileExclamationPoint = createLucideIcon(\"file-exclamation-point\", __iconNode);\n\nexport { __iconNode, FileExclamationPoint as default };\n//# sourceMappingURL=file-exclamation-point.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\",\n key: \"18887p\"\n }\n ],\n [\"path\", { d: \"M12 15h.01\", key: \"q59x07\" }],\n [\"path\", { d: \"M12 7v4\", key: \"xawao1\" }]\n];\nconst MessageSquareWarning = createLucideIcon(\"message-square-warning\", __iconNode);\n\nexport { __iconNode, MessageSquareWarning as default };\n//# sourceMappingURL=message-square-warning.mjs.map\n","import type { AgentAdapter } from '../../agent/types';\nimport type { PatientSummaryCardHandle } from './patient-summary-card';\n\n/* -------------------------------------------------------------------- */\n/* Agent adapter — PatientSummaryCard */\n/* */\n/* Read-only adapter. Surfaces a STRUCTURAL snapshot of the patient */\n/* overview — counts, flags, and the consumer id only. Never the patient */\n/* name, age, contact details, or any clinical content, so an agent / */\n/* MCP runtime can answer \"does this patient have unpaid balances / */\n/* unsigned documents / AI consent?\" without re-parsing the DOM and */\n/* without leaking PHI (PRS §Security). */\n/* -------------------------------------------------------------------- */\n\nexport const patientSummaryCardAgent: AgentAdapter<PatientSummaryCardHandle> = {\n id: 'patient-summary-card',\n // The agent surface is a structural snapshot only — the single handle method\n // is a getSummary projection. The card MAY be human-customized (the optional\n // per-context \"Customize fields\" cog), but that field reordering is a UI\n // concern and is deliberately NOT exposed as an agent action; programmatic\n // field-set control lives on PatientDetails' adapter (set_field_order).\n capabilities: [],\n state: {\n summary: {\n type: '{ id?: string; hasUnpaid: boolean; unsignedDocumentsCount: number; highlightedAnamnesisCount: number; aiConsentGranted: boolean }',\n descriptionKey: 'ui.agent.patientSummaryCard.state.summary',\n description:\n 'Structural summary of the patient card — identifiers, counts, and consent flags only. Never patient identity or clinical content.',\n read: (handle) => handle.getSummary(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'patient-summary-card',\n description: 'Marks the PatientSummaryCard root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useId,\n useMemo,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n ArrowUpRight,\n CalendarDays,\n FileExclamationPoint,\n Mail,\n MapPin,\n MessageSquareWarning,\n Phone,\n ShieldCheck,\n Astroid,\n Users,\n type LucideIcon,\n} from 'lucide-react';\nimport { Avatar } from '../avatar/avatar';\nimport { Badge } from '../badge/badge';\nimport { IconButton } from '../button/icon-button';\nimport { Card } from '../card/card';\nimport { KeyValueList, KeyValuePair } from '../key-value-pair/key-value-pair';\nimport { Link } from '../link/link';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { Tag } from '../tag/tag';\nimport { TransactionChip } from '../transaction-chip/transaction-chip';\nimport { Tooltip } from '../tooltip';\nimport { HoverCard } from '../hover-card';\nimport { isSafeEntityUrl } from '../_shared/is-safe-url';\nimport {\n resolveVisibleFields,\n type PatientField,\n type PatientFieldSection,\n} from '../_shared/patient-fields';\nimport { usePatientFieldVisibility } from '../_shared/field-visibility';\nimport { FieldVisibilityCog } from '../_shared/field-visibility-cog';\nimport { AgeChip, NeutralChip, SexChip } from '../_shared/field-value';\nimport {\n PatientFieldLabel,\n PatientFieldValueCell,\n} from '../_shared/patient-field-row';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { patientSummaryCardAgent } from './patient-summary-card.agent';\n\n/** A section list reference that stays stable across renders (legacy mode). */\nconst NO_SECTIONS: PatientFieldSection[] = [];\n\n/* -------------------------------------------------------------------- */\n/* PatientSummaryCard */\n/* */\n/* The patient-overview profile card every AlfaDocs in-app surface */\n/* composes by hand today (platform patient header, alfascribe patient */\n/* sidebar, check-in landing). Templated on ContactProfileCard: composes */\n/* Card + Avatar + KeyValueList + KeyValuePair + Badge + Tag + */\n/* TransactionChip + Link so the contact rows share a column and every */\n/* row uses the same lucide icon family. */\n/* */\n/* The kit owns the ORDER, ICONS, and LABELS — consumers pass data. No */\n/* free-text clinical content (anamnesis notes, diagnoses) ever lives */\n/* here: only counts/flags/relations are surfaced, so the card stays */\n/* PHI-light and the agent state can be derived without leaking patient */\n/* identity. */\n/* */\n/* All visible text flows through `useTranslation('ui')` against the */\n/* `patientSummaryCard.*` namespace. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA — root */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva('ds:w-full ds:text-[color:var(--foreground)]', {\n variants: {\n // Matches the kit's other `surface` props (ContactProfileCard,\n // OperatorHero). `'elevated'` wraps the content in `<Card>`.\n surface: {\n flat: '',\n elevated: '',\n },\n // Density tunes the avatar size + body padding. `comfortable` reads\n // as a page header; `compact` fits an embedded sidebar / aside.\n density: {\n comfortable: '',\n compact: '',\n },\n },\n defaultVariants: {\n surface: 'elevated',\n density: 'comfortable',\n },\n});\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/** Patient phone number — already formatted for display by the consumer. */\nexport interface PatientSummaryCardPhone {\n /** Display string, e.g. `\"+39 055 123 4567\"`. Compiled into a `tel:` link. */\n prefixAndNumber: string;\n /** Optional label that distinguishes this number (e.g. \"Mobile\"). */\n label?: string;\n /** Whether SMS is enabled for this number — shows a small \"SMS\" chip. */\n smsEnabled?: boolean;\n}\n\n/** A family relation row — links one patient to another. */\nexport interface PatientSummaryCardFamilyRelation {\n /** Localised relation label, consumer-supplied (e.g. \"Mother\", \"Child\"). */\n relation: string;\n /** The related patient — name + optional in-app profile URL. */\n relatedPatient: {\n name: string;\n url?: string;\n };\n}\n\n/** Operator the patient is assigned to. */\nexport interface PatientSummaryCardAssignee {\n name: string;\n avatarUrl?: string;\n}\n\n/** AI-consent grant metadata — structural only, never the consented content. */\nexport interface PatientSummaryCardAiConsent {\n /** ISO-8601 / display string of when consent was granted. */\n grantedAt: string;\n /** Optional name of who recorded the grant. */\n grantedBy?: string;\n}\n\n/** Addressable attention flags — the keys `onFlagActivate` accepts. */\nexport type PatientSummaryCardFlagId =\n | 'highlightedAnamnesis'\n | 'unsignedDocuments'\n | 'unpaid';\n\n/** Status flags rendered as glyph badges (counts / amounts only — no PHI). */\nexport interface PatientSummaryCardFlags {\n /** Number of anamnesis answers highlighted for clinical attention. */\n highlightedAnamnesisCount?: number;\n /** Outstanding balance in the smallest currency unit (cents). */\n unpaidAmountCents?: number;\n /** Number of documents awaiting the patient's signature. */\n unsignedDocumentsCount?: number;\n}\n\n/** Marketing-consent tri-state. */\nexport type PatientSummaryCardMarketingConsent = 'no' | 'yes' | 'not_specified';\n\nexport interface PatientSummaryCardHandle {\n /** Structural snapshot — identifiers and counts only, never patient identity. */\n getSummary: () => {\n id?: string;\n hasUnpaid: boolean;\n unsignedDocumentsCount: number;\n highlightedAnamnesisCount: number;\n aiConsentGranted: boolean;\n };\n}\n\nexport interface PatientSummaryCardProps extends Omit<\n ComponentPropsWithoutRef<'div'>,\n 'aria-label' | 'children'\n> {\n /** Patient display name. Rendered as the heading. */\n name: string;\n /** Honorific — `'mr'` / `'ms'`. Prepended to the name in the heading. */\n title?: 'mr' | 'ms';\n /** Patient age in whole years — rendered in the identity line. */\n ageYears?: number;\n /** Date of birth — already formatted for display by the consumer. */\n dateOfBirth?: string;\n /** Biological sex marker — `'m'` / `'f'`. Drives the identity-line glyph copy. */\n gender?: 'm' | 'f';\n /** Optional avatar / photo URL. Falls back to initials. */\n avatarUrl?: string;\n /**\n * In-app patient profile URL. When safe, the heading becomes a link.\n * Guarded by the shared `isSafeEntityUrl` allow-list — unsafe URLs are\n * dropped and the heading renders as plain text.\n */\n patientUrl?: string;\n\n /* ----- Shared field model (preferred) ----- */\n\n /**\n * Patient fields in the shared model — the SAME `sections` shape\n * `PatientDetails` consumes (`@alfadocs/ui-kit` `PatientFieldSection`).\n * When provided, the card renders these (honouring `visibleFieldOrder`)\n * instead of the legacy contact props, so a consumer defines its patient-\n * field registry once and reuses it across every patient surface.\n *\n * The card renders each field's `label`, `value`, and `icon` only — it is\n * flat (section headings are not shown in the body) and never inline-edits;\n * `sensitive` / `copyable` / `mono` / `editable` are honoured by\n * `PatientDetails`, not the card (so the PHI lock glyph does not appear here).\n *\n * Pass `onVisibleFieldsChange` alongside `sections` to make THIS placement\n * self-curating (a \"Customize fields\" cog appears — show/hide + drag-and-drop\n * reorder).\n */\n sections?: PatientFieldSection[];\n /**\n * Ordered visible field ids for THIS placement. The order is a\n * per-INSTANCE, per-CONTEXT preference the kit never persists — wire it to\n * whatever scope the consumer wants (e.g. a global per-user setting, or a\n * different config in the care-plan view vs the patient folder). The same\n * field vocabulary can therefore display differently in different parts of\n * the app. Omit (`undefined`) ⇒ show every field; an explicit empty array\n * `[]` ⇒ show none (a card that starts collapsed to name + identity chips and\n * reveals fields via the cog). Also applied to the legacy contact rows (ids\n * `email` / `phone` / `cityProvince` / `marketingConsent` / `aiConsent` /\n * `assignedTo`).\n */\n visibleFieldOrder?: string[];\n /**\n * Make this card's field set user-customizable. When provided alongside\n * `sections`, a \"Customize fields\" cog renders in the header (show/hide +\n * drag-and-drop / Alt+Arrow reorder), and this fires with the next ordered\n * visible set. The consumer owns persistence + its scope — editing here\n * writes only THIS context's preference, never a shared/global one.\n */\n onVisibleFieldsChange?: (orderedIds: string[]) => void;\n\n /* ----- Contact rows (legacy — prefer `sections`) ----- */\n\n /** @deprecated Pass via `sections`. Patient email — `mailto:` link when `emailEnabled`. */\n email?: string;\n /** Whether email contact is enabled — gates the `mailto:` link. */\n emailEnabled?: boolean;\n /** Phone number block. Compiled into a `tel:` link. */\n phone?: PatientSummaryCardPhone;\n /** City / province display string. */\n cityProvince?: string;\n\n /* ----- Consent ----- */\n\n /** Marketing-consent tri-state. */\n marketingConsent?: PatientSummaryCardMarketingConsent;\n /** AI-consent grant metadata. When present, an \"AI consent\" row renders. */\n aiConsent?: PatientSummaryCardAiConsent;\n\n /* ----- Status flags ----- */\n\n /** Counts / amounts surfaced as glyph badges. */\n flags?: PatientSummaryCardFlags;\n\n /* ----- Relations & assignment ----- */\n\n /** Family relations — rendered as `<Tag>` chips, optionally linked. */\n familyRelations?: PatientSummaryCardFamilyRelation[];\n /** Operator the patient is assigned to. */\n assignedTo?: PatientSummaryCardAssignee;\n\n /* ----- Formatting ----- */\n\n /** ISO-4217 currency code for the unpaid-amount chip. Defaults to `EUR`. */\n currency?: string;\n /** BCP-47 locale override. Defaults to the active i18next language. */\n locale?: string;\n\n /* ----- States ----- */\n\n /** Render the skeleton loading placeholder. */\n loading?: boolean;\n\n /* ----- Slots & callbacks ----- */\n\n /** Rendered at the inline-end of the heading row (e.g. an action menu). */\n actionSlot?: ReactNode;\n\n /**\n * Make an attention chip actionable. A handler turns that chip into a\n * button — \"2 unsigned documents\" opens the signing flow, the unpaid\n * balance opens invoicing. Without a handler the chip stays a read-only\n * badge, which is the default: most surfaces have nowhere to send the\n * reader.\n */\n onFlagActivate?: Partial<Record<PatientSummaryCardFlagId, () => void>>;\n /**\n * Explain a chip on hover / focus. The chip states WHAT (\"2 unsigned\n * documents\"); this states what the reader cannot see — how the signature\n * was requested, why the balance is outstanding.\n *\n * A string renders a `Tooltip`; a node renders a `HoverCard` with that node\n * as its content, for a host that wants the fuller card grammar (an eyebrow,\n * fact rows, a hint line). Either way the chip's own text stays the\n * accessible name and the surface only describes it.\n */\n flagHover?: Partial<Record<PatientSummaryCardFlagId, ReactNode>>;\n /**\n * Accessible name for the open button a hover CARD shows in its top-end\n * corner. The button appears only where the flag has BOTH a card and an\n * `onFlagActivate` handler — it mirrors the chip's own click so a pointer\n * that has travelled into the card can still act. Name the destination\n * (\"Open signing\"), not the gesture.\n *\n * Without a label there is no button: a card that merely describes should\n * not sprout an affordance the chip does not have.\n */\n flagOpenLabel?: Partial<Record<PatientSummaryCardFlagId, string>>;\n /**\n * Extra chips appended to the attention row, for signals the CARD cannot\n * model because they do not belong to the patient. An appointment panel\n * adds its own to-invoice and paid-online chips here; the card keeps its\n * patient-level flags and does not grow an appointment vocabulary.\n */\n extraChips?: ReactNode;\n\n /* ----- Inline editing (kit-owned controls, consumer-owned write) ----- */\n\n /**\n * Master switch — show the edit affordance on fields marked `editable` in\n * `sections`. The card edits through the SAME shared control as\n * `PatientDetails`, so a field offers the same affordance and the same\n * validation wherever it is shown.\n */\n editable?: boolean;\n /**\n * The single write channel. A rejected promise keeps the row in edit mode\n * and shows the message inline — the card never optimistically mutates the\n * value it was given.\n */\n onFieldSave?: (fieldId: string, value: unknown) => Promise<void>;\n /** Return a message to block the save and keep the row in edit mode. */\n validateField?: (fieldId: string, value: unknown) => string | null;\n /** Fires when the whole card / heading is activated. */\n onActivate?: () => void;\n\n /* ----- Styling ----- */\n\n /** `'elevated'` (default) wraps in `<Card>`; `'flat'` drops the chrome. */\n surface?: 'flat' | 'elevated';\n /** `'comfortable'` (default) reads as a header; `'compact'` for asides. */\n density?: 'comfortable' | 'compact';\n\n /* ----- a11y ----- */\n\n /** Override the default region aria-label. */\n 'aria-label'?: string;\n /** Agent-readiness consumer id, surfaced as `data-component-id`. */\n id?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\n/** Strip everything except digits + leading `+` for `tel:` URLs. */\nfunction normalisePhone(raw: string): string {\n return raw.replace(/[^\\d+]/g, '');\n}\n\n/* -------------------------------------------------------------------- */\n/* Flag glyphs — the closed set of status indicators */\n/* -------------------------------------------------------------------- */\n\n/** The closed set of status-flag keys (icon + tonal variant defined below). */\ntype FlagKey = 'highlightedAnamnesis' | 'unsignedDocuments';\n\nconst FLAG_ICON: Record<FlagKey, LucideIcon> = {\n highlightedAnamnesis: MessageSquareWarning,\n unsignedDocuments: FileExclamationPoint,\n};\n\nconst FLAG_VARIANT: Record<FlagKey, 'warning' | 'error'> = {\n highlightedAnamnesis: 'warning',\n unsignedDocuments: 'error',\n};\n\n/** English fallbacks for the flag badge accessible names (count-interpolated). */\nconst FLAG_LABEL_DEFAULTS: Record<FlagKey, string> = {\n highlightedAnamnesis: '{{count}} highlighted anamnesis answers',\n unsignedDocuments: '{{count}} unsigned documents',\n};\n\n/** English fallbacks for the marketing-consent tri-state chip. */\nconst MARKETING_CONSENT_DEFAULTS: Record<\n PatientSummaryCardMarketingConsent,\n string\n> = {\n yes: 'Yes',\n no: 'No',\n not_specified: 'Not specified',\n};\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const PatientSummaryCard = forwardRef<\n HTMLDivElement,\n PatientSummaryCardProps\n>(\n (\n {\n name,\n title,\n ageYears,\n dateOfBirth,\n gender,\n avatarUrl,\n patientUrl,\n sections,\n visibleFieldOrder,\n onVisibleFieldsChange,\n email,\n emailEnabled = false,\n phone,\n cityProvince,\n marketingConsent,\n aiConsent,\n flags,\n familyRelations,\n assignedTo,\n currency = 'EUR',\n locale,\n loading = false,\n actionSlot,\n onFlagActivate,\n flagHover,\n flagOpenLabel,\n extraChips,\n editable = false,\n onFieldSave,\n validateField,\n onActivate,\n surface = 'elevated',\n density = 'comfortable',\n 'aria-label': ariaLabel,\n id,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const headingId = useId();\n const activeLocale = locale ?? i18n.language ?? 'en';\n\n const unpaidAmountCents = flags?.unpaidAmountCents;\n const unsignedDocumentsCount = flags?.unsignedDocumentsCount ?? 0;\n const highlightedAnamnesisCount = flags?.highlightedAnamnesisCount ?? 0;\n const hasUnpaid = unpaidAmountCents != null && unpaidAmountCents > 0;\n\n // Imperative handle — structural snapshot only (counts/flags/ids),\n // never the patient name or any clinical content.\n const handle = useMemo<PatientSummaryCardHandle>(\n () => ({\n getSummary: () => ({\n id,\n hasUnpaid,\n unsignedDocumentsCount,\n highlightedAnamnesisCount,\n aiConsentGranted: aiConsent != null,\n }),\n }),\n [\n id,\n hasUnpaid,\n unsignedDocumentsCount,\n highlightedAnamnesisCount,\n aiConsent,\n ],\n );\n useAgentRegistration(patientSummaryCardAgent, handle, id);\n\n // Per-context field visibility. The cog (and live reordering) only engages\n // with the shared `sections` model AND an `onVisibleFieldsChange` handler;\n // legacy contact-prop cards stay read-only. The order is this placement's\n // own preference — never shared across surfaces.\n const customizable = !!sections && !!onVisibleFieldsChange;\n const fieldVisibility = usePatientFieldVisibility(sections ?? NO_SECTIONS, {\n value: visibleFieldOrder,\n onChange: onVisibleFieldsChange,\n });\n\n const resolvedAriaLabel =\n ariaLabel ??\n t('patientSummaryCard.regionLabel', { defaultValue: 'Patient overview' });\n\n // Heading text: optional honorific prefix + name.\n const TITLE_DEFAULTS: Record<'mr' | 'ms', string> = {\n mr: 'Mr.',\n ms: 'Ms.',\n };\n const honorific = title\n ? t(`patientSummaryCard.title.${title}`, {\n defaultValue: TITLE_DEFAULTS[title],\n })\n : undefined;\n const headingText = honorific ? `${honorific} ${name}` : name;\n\n // Identity line: the canonical sex / age / dob chips below the name — the\n // SAME chips the field model renders, so the header and the field rows\n // agree. Each chip is added only when its prop is present. (`dateOfBirth`\n // is a consumer-preformatted display string, so it goes through NeutralChip\n // directly rather than the date-parsing `dob` kind.)\n const identityChips: ReactNode[] = [];\n if (gender) {\n identityChips.push(<SexChip key=\"sex\" code={gender} />);\n }\n if (ageYears != null) {\n identityChips.push(<AgeChip key=\"age\" years={ageYears} />);\n }\n if (dateOfBirth) {\n identityChips.push(\n <NeutralChip key=\"dob\" icon={<CalendarDays />}>\n {dateOfBirth}\n </NeutralChip>,\n );\n }\n\n const isUrlSafe = !!patientUrl && isSafeEntityUrl(patientUrl);\n\n const avatarSize = density === 'comfortable' ? 'xl' : 'lg';\n const headingClass =\n density === 'comfortable' ? 'type-title-card' : 'type-title-item';\n const bodyGapClass =\n density === 'comfortable'\n ? 'ds:gap-[var(--spacing-md)]'\n : 'ds:gap-[var(--spacing-sm)]';\n\n /* ---------------------------------------------------------------- */\n /* Contact rows */\n /* ---------------------------------------------------------------- */\n\n const rows: Array<{\n key: string;\n icon: ReactElement;\n label: string;\n value: ReactNode;\n }> = [];\n\n if (email) {\n rows.push({\n key: 'email',\n icon: <Mail aria-hidden=\"true\" />,\n label: t('patientSummaryCard.label.email', { defaultValue: 'Email' }),\n value: emailEnabled ? (\n <Link href={`mailto:${email}`} intent=\"default\" onClick={onActivate}>\n {email}\n </Link>\n ) : (\n <span className=\"ds:text-[color:var(--muted-foreground)]\">\n {email}\n </span>\n ),\n });\n }\n\n if (phone) {\n rows.push({\n key: 'phone',\n icon: <Phone aria-hidden=\"true\" />,\n label:\n phone.label ??\n t('patientSummaryCard.label.phone', { defaultValue: 'Phone' }),\n value: (\n <span className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <Link\n href={`tel:${normalisePhone(phone.prefixAndNumber)}`}\n intent=\"default\"\n >\n {phone.prefixAndNumber}\n </Link>\n {phone.smsEnabled ? (\n <Badge variant=\"success\" size=\"sm\">\n {t('patientSummaryCard.value.smsEnabled', {\n defaultValue: 'SMS',\n })}\n </Badge>\n ) : null}\n </span>\n ),\n });\n }\n\n if (cityProvince) {\n rows.push({\n key: 'cityProvince',\n icon: <MapPin aria-hidden=\"true\" />,\n label: t('patientSummaryCard.label.cityProvince', {\n defaultValue: 'City / province',\n }),\n value: cityProvince,\n });\n }\n\n if (marketingConsent) {\n rows.push({\n key: 'marketingConsent',\n icon: <ShieldCheck aria-hidden=\"true\" />,\n label: t('patientSummaryCard.label.marketingConsent', {\n defaultValue: 'Marketing consent',\n }),\n value: (\n <Badge\n variant={\n marketingConsent === 'yes'\n ? 'success'\n : marketingConsent === 'no'\n ? 'error'\n : 'neutral'\n }\n size=\"sm\"\n withDot\n >\n {t(`patientSummaryCard.marketingConsent.${marketingConsent}`, {\n defaultValue: MARKETING_CONSENT_DEFAULTS[marketingConsent],\n })}\n </Badge>\n ),\n });\n }\n\n if (aiConsent) {\n rows.push({\n key: 'aiConsent',\n icon: <Astroid aria-hidden=\"true\" />,\n label: t('patientSummaryCard.label.aiConsent', {\n defaultValue: 'AI consent',\n }),\n value: aiConsent.grantedBy\n ? t('patientSummaryCard.value.aiConsentGrantedBy', {\n date: aiConsent.grantedAt,\n by: aiConsent.grantedBy,\n defaultValue: 'Granted {{date}} by {{by}}',\n })\n : t('patientSummaryCard.value.aiConsentGrantedAt', {\n date: aiConsent.grantedAt,\n defaultValue: 'Granted {{date}}',\n }),\n });\n }\n\n if (assignedTo) {\n rows.push({\n key: 'assignedTo',\n icon: <Users aria-hidden=\"true\" />,\n label: t('patientSummaryCard.label.assignedTo', {\n defaultValue: 'Assigned to',\n }),\n value: (\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <Avatar\n size=\"xs\"\n name={assignedTo.name}\n src={assignedTo.avatarUrl}\n />\n <span>{assignedTo.name}</span>\n </span>\n ),\n });\n }\n\n /* ---------------------------------------------------------------- */\n /* Attention-flag chips (VERBOSE — shown in the identity line) */\n /* */\n /* The unpaid balance + warning counts sit in the chip row under the */\n /* name, BEFORE the sex / age chips, each as a self-describing chip */\n /* (\"2 unsigned documents\") rather than a collapsed count badge in a */\n /* separate strip — the attention signals lead the patient's chips. */\n /* ---------------------------------------------------------------- */\n\n const flagBadges: Array<{ key: FlagKey; count: number }> = [];\n if (highlightedAnamnesisCount > 0) {\n flagBadges.push({\n key: 'highlightedAnamnesis',\n count: highlightedAnamnesisCount,\n });\n }\n if (unsignedDocumentsCount > 0) {\n flagBadges.push({\n key: 'unsignedDocuments',\n count: unsignedDocumentsCount,\n });\n }\n\n /* A chip becomes a BUTTON only when the host gave it somewhere to go.\n The chip's own text is already its accessible name, so the wrapper adds\n no label of its own and contributes no padding — the strip's rhythm is\n identical whether or not a chip is actionable. */\n /* A chip becomes a CONTROL when it has something to reveal or somewhere\n to go, and the trigger is always a real <button> — `asChild` on a bare\n <span> badge stamps `aria-haspopup` onto something a keyboard can never\n reach, which is both a dead end and an axe violation.\n\n The division of labour is the same on every chip: the chip opens its\n card (hover, or click / Enter for keyboard and touch), and the card's\n own top-end button performs the action. One gesture to learn, and no\n chip that acts differently from its neighbour. */\n const asAction = (id: PatientSummaryCardFlagId, chip: ReactNode) => {\n const onActivateFlag = onFlagActivate?.[id];\n const hover = flagHover?.[id];\n if (hover == null && !onActivateFlag) return chip;\n\n const triggerClasses =\n 'ds:inline-flex ds:cursor-pointer ds:rounded-[var(--radius-full)] ds:p-0 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 // No card: the chip itself is the action.\n if (hover == null) {\n return (\n <button\n key={id}\n type=\"button\"\n data-flag-action={id}\n onClick={onActivateFlag}\n className={triggerClasses}\n >\n {chip}\n </button>\n );\n }\n\n const trigger = (\n <button\n key={id}\n type=\"button\"\n data-flag-action={onActivateFlag ? id : undefined}\n data-flag-hover={id}\n className={triggerClasses}\n >\n {chip}\n </button>\n );\n\n // A string still renders a plain Tooltip, for a chip that needs naming\n // rather than a card.\n if (typeof hover === 'string') {\n return (\n <Tooltip key={id} label={hover} side=\"bottom\">\n {trigger}\n </Tooltip>\n );\n }\n\n return (\n <HoverCard key={id}>\n <HoverCard.Trigger asChild>{trigger}</HoverCard.Trigger>\n <HoverCard.Content\n side=\"bottom\"\n align=\"start\"\n size=\"sm\"\n headerAction={\n onActivateFlag && flagOpenLabel?.[id] ? (\n <IconButton\n icon={<ArrowUpRight />}\n /* Outline, not ghost: the card's own surface is already\n light, so a borderless glyph reads as decoration rather\n than a control. */\n intent=\"outline\"\n background=\"surface\"\n size=\"sm\"\n aria-label={flagOpenLabel[id] as string}\n onClick={onActivateFlag}\n />\n ) : undefined\n }\n >\n {hover}\n </HoverCard.Content>\n </HoverCard>\n );\n };\n\n const attentionChips: ReactNode[] = [];\n if (hasUnpaid) {\n attentionChips.push(\n asAction(\n 'unpaid',\n <TransactionChip\n key=\"unpaid\"\n state=\"debt\"\n amount={(unpaidAmountCents as number) / 100}\n currency={currency}\n locale={activeLocale}\n size=\"md\"\n showLabel\n />,\n ),\n );\n }\n flagBadges.forEach(({ key, count }) => {\n const FlagIcon = FLAG_ICON[key];\n // The Badge's visible text IS the count-interpolated label, so it's its\n // own accessible name — the leading glyph is decorative (aria-hidden).\n attentionChips.push(\n asAction(\n key,\n <Badge\n key={key}\n variant={FLAG_VARIANT[key]}\n size=\"md\"\n leading={<FlagIcon aria-hidden=\"true\" />}\n >\n {t(`patientSummaryCard.flag.${key}`, {\n count,\n defaultValue: FLAG_LABEL_DEFAULTS[key],\n })}\n </Badge>,\n ),\n );\n });\n if (extraChips) attentionChips.push(extraChips);\n\n /* ---------------------------------------------------------------- */\n /* Loading skeleton */\n /* ---------------------------------------------------------------- */\n\n const skeletonBody = (\n <div className={`ds:flex ds:flex-col ${bodyGapClass}`}>\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-md)]\">\n <Skeleton variant=\"circular\" size=\"lg\" />\n <div className=\"ds:flex ds:flex-1 ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <Skeleton variant=\"text\" width=\"60%\" />\n <Skeleton variant=\"text\" width=\"40%\" />\n </div>\n </div>\n <Skeleton variant=\"text\" lines={3} />\n </div>\n );\n\n /* ---------------------------------------------------------------- */\n /* Header */\n /* ---------------------------------------------------------------- */\n\n const heading = isUrlSafe ? (\n <Link\n href={patientUrl as string}\n intent=\"default\"\n weight=\"strong\"\n onClick={onActivate}\n className={`${headingClass} ds:no-underline`}\n >\n <span id={headingId}>{headingText}</span>\n </Link>\n ) : (\n <span\n id={headingId}\n className={`${headingClass} ds:text-[color:var(--foreground)]`}\n >\n {headingText}\n </span>\n );\n\n const header = (\n <div className=\"ds:flex ds:items-start ds:gap-[var(--spacing-md)]\">\n <Avatar\n size={avatarSize}\n name={name}\n src={avatarUrl}\n className=\"ds:shrink-0\"\n />\n <div className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n {heading}\n {attentionChips.length > 0 || identityChips.length > 0 ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n {/* Attention flags lead, then the sex / age / dob identity chips. */}\n {attentionChips}\n {identityChips}\n </div>\n ) : null}\n </div>\n {customizable || actionSlot ? (\n <div className=\"ds:ms-auto ds:flex ds:shrink-0 ds:items-center ds:gap-[var(--spacing-xs)]\">\n {customizable && sections ? (\n <FieldVisibilityCog\n sections={sections}\n visible={fieldVisibility.visible}\n onToggleField={fieldVisibility.toggleField}\n onToggleSection={fieldVisibility.toggleSection}\n onMoveFieldOnto={fieldVisibility.moveFieldOnto}\n onReset={fieldVisibility.reset}\n />\n ) : null}\n {actionSlot}\n </div>\n ) : null}\n </div>\n );\n\n /* ---------------------------------------------------------------- */\n /* Family relations */\n /* ---------------------------------------------------------------- */\n\n const familyBlock =\n familyRelations && familyRelations.length > 0 ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-label ds:text-[color:var(--muted-foreground)]\">\n {t('patientSummaryCard.label.familyRelations', {\n defaultValue: 'Family relations',\n })}\n </span>\n <div className=\"ds:flex ds:flex-wrap ds:gap-[var(--spacing-2xs)]\">\n {familyRelations.map((rel, index) => {\n const safeUrl =\n !!rel.relatedPatient.url &&\n isSafeEntityUrl(rel.relatedPatient.url);\n const tagLabel = t('patientSummaryCard.value.familyRelation', {\n relation: rel.relation,\n name: rel.relatedPatient.name,\n defaultValue: '{{relation}}: {{name}}',\n });\n return safeUrl ? (\n <Link\n key={`${rel.relation}-${index}`}\n href={rel.relatedPatient.url as string}\n intent=\"default\"\n className=\"ds:no-underline\"\n >\n <Tag label={tagLabel} variant=\"neutral\" />\n </Link>\n ) : (\n <Tag\n key={`${rel.relation}-${index}`}\n label={tagLabel}\n variant=\"neutral\"\n />\n );\n })}\n </div>\n </div>\n ) : null;\n\n /* ---------------------------------------------------------------- */\n /* Body */\n /* ---------------------------------------------------------------- */\n\n // Field rows resolve through the SHARED model: when the consumer passes\n // `sections` (preferred), render those; otherwise wrap the legacy contact\n // rows as a single section. Either way `resolveVisibleFields` applies the\n // shared `visibleFieldOrder` preference, so the card and PatientDetails\n // always show the same fields, honouring the same per-user choice.\n const legacyFields: PatientField[] = rows.map((row) => ({\n id: row.key,\n label: row.label,\n value: row.value,\n icon: row.icon,\n }));\n const effectiveSections: PatientFieldSection[] = sections ?? [\n { id: 'contact', heading: '', fields: legacyFields },\n ];\n // With the shared `sections` model the order comes from the visibility hook\n // (so a cog reorder reflects live); legacy contact rows honour the raw\n // `visibleFieldOrder` prop.\n const order = sections ? fieldVisibility.visible : visibleFieldOrder;\n const visibleFields = resolveVisibleFields(\n effectiveSections,\n order,\n ).flatMap((resolved) => resolved.fields);\n\n const body = (\n <div className={`ds:flex ds:flex-col ${bodyGapClass}`}>\n {header}\n {visibleFields.length > 0 ? (\n // Container-queried so the fields flow into two columns when the\n // card is wide enough (the banner spans the full folder width), and\n // stay single-column in a narrow rail. The list's KeyValuePair\n // children already `col-span-3`; doubling the parent to six tracks\n // (`repeat(2, …)`) lets grid auto-flow place two fields per row while\n // each column keeps its own subgrid label/value alignment.\n // 672px, not the `@2xl` rem alias: container-query `rem` follows the\n // host root font-size, so a non-16px root moves the threshold.\n <div className=\"ds:@container/pfields\">\n <KeyValueList\n rowGap=\"sm\"\n className=\"ds:@[672px]/pfields:grid-cols-[repeat(2,auto_auto_minmax(0,1fr))]\"\n >\n {visibleFields.map((field) => (\n <KeyValuePair\n key={field.id}\n icon={field.icon ?? undefined}\n label={field.label}\n labelNode={<PatientFieldLabel field={field} />}\n // `group` is what reveals the edit pencil on hover / focus;\n // the cell itself carries no row markup.\n className=\"ds:group\"\n data-field-id={field.id}\n value={\n <PatientFieldValueCell\n field={field}\n editable={editable}\n onFieldSave={onFieldSave}\n validate={validateField}\n locale={locale}\n />\n }\n />\n ))}\n </KeyValueList>\n </div>\n ) : null}\n {familyBlock}\n </div>\n );\n\n const inner = loading ? skeletonBody : body;\n\n return (\n <div\n ref={ref}\n role=\"region\"\n // When the heading is rendered, the patient name (via\n // aria-labelledby) is the region's accessible name — the more\n // meaningful label than a generic \"Patient overview\". A consumer\n // aria-label still wins; the generic fallback only applies when\n // there is no heading to point at (loading state).\n aria-label={loading || ariaLabel ? resolvedAriaLabel : undefined}\n aria-labelledby={loading || ariaLabel ? undefined : headingId}\n aria-busy={loading || undefined}\n data-component=\"patient-summary-card\"\n data-component-id={id}\n data-density={density}\n id={id}\n className={rootVariants({ surface, density, className })}\n {...rest}\n >\n {surface === 'elevated' ? (\n <Card variant=\"elevated\">\n <Card.Body>{inner}</Card.Body>\n </Card>\n ) : (\n inner\n )}\n </div>\n );\n },\n);\n\nPatientSummaryCard.displayName = 'PatientSummaryCard';\n\n/** Variant unions re-exported for downstream typing. */\nexport type PatientSummaryCardSurface = NonNullable<\n VariantProps<typeof rootVariants>['surface']\n>;\nexport type PatientSummaryCardDensity = NonNullable<\n VariantProps<typeof rootVariants>['density']\n>;\n"],"names":["__iconNode","FileExclamationPoint","createLucideIcon","MessageSquareWarning","patientSummaryCardAgent","handle","NO_SECTIONS","rootVariants","cva","normalisePhone","raw","FLAG_ICON","FLAG_VARIANT","FLAG_LABEL_DEFAULTS","MARKETING_CONSENT_DEFAULTS","PatientSummaryCard","forwardRef","name","title","ageYears","dateOfBirth","gender","avatarUrl","patientUrl","sections","visibleFieldOrder","onVisibleFieldsChange","email","emailEnabled","phone","cityProvince","marketingConsent","aiConsent","flags","familyRelations","assignedTo","currency","locale","loading","actionSlot","onFlagActivate","flagHover","flagOpenLabel","extraChips","editable","onFieldSave","validateField","onActivate","surface","density","ariaLabel","id","className","rest","ref","i18n","useTranslation","headingId","useId","activeLocale","unpaidAmountCents","unsignedDocumentsCount","highlightedAnamnesisCount","hasUnpaid","useMemo","useAgentRegistration","customizable","fieldVisibility","usePatientFieldVisibility","resolvedAriaLabel","TITLE_DEFAULTS","honorific","headingText","identityChips","jsx","SexChip","AgeChip","NeutralChip","CalendarDays","isUrlSafe","isSafeEntityUrl","avatarSize","headingClass","bodyGapClass","rows","Mail","Link","Phone","jsxs","Badge","MapPin","ShieldCheck","Astroid","Users","Avatar","flagBadges","asAction","chip","onActivateFlag","hover","triggerClasses","trigger","Tooltip","HoverCard","IconButton","ArrowUpRight","attentionChips","TransactionChip","key","count","FlagIcon","skeletonBody","Skeleton","heading","header","FieldVisibilityCog","familyBlock","rel","index","safeUrl","tagLabel","Tag","legacyFields","row","effectiveSections","order","visibleFields","resolveVisibleFields","resolved","body","KeyValueList","field","KeyValuePair","PatientFieldLabel","PatientFieldValueCell","inner","Card"],"mappings":"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","x_google_ignoreList":[0,1]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"receipt-euro-C6k4Gzhr.js","sources":["../../node_modules/lucide-react/dist/esm/icons/credit-card.mjs","../../node_modules/lucide-react/dist/esm/icons/receipt-euro.mjs"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"rect\", { width: \"20\", height: \"14\", x: \"2\", y: \"5\", rx: \"2\", key: \"ynyp8z\" }],\n [\"line\", { x1: \"2\", x2: \"22\", y1: \"10\", y2: \"10\", key: \"1b3vmo\" }]\n];\nconst CreditCard = createLucideIcon(\"credit-card\", __iconNode);\n\nexport { __iconNode, CreditCard as default };\n//# sourceMappingURL=credit-card.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n { d: \"M15.828 14.829a4 4 0 0 1-5.656 0 4 4 0 0 1 0-5.657 4 4 0 0 1 5.656 0\", key: \"16zdw4\" }\n ],\n [\n \"path\",\n {\n d: \"M4 3a1 1 0 0 1 1-1 1.3 1.3 0 0 1 .7.2l.933.6a1.3 1.3 0 0 0 1.4 0l.934-.6a1.3 1.3 0 0 1 1.4 0l.933.6a1.3 1.3 0 0 0 1.4 0l.933-.6a1.3 1.3 0 0 1 1.4 0l.934.6a1.3 1.3 0 0 0 1.4 0l.933-.6A1.3 1.3 0 0 1 19 2a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1 1.3 1.3 0 0 1-.7-.2l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.934.6a1.3 1.3 0 0 1-1.4 0l-.933-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-1.4 0l-.934-.6a1.3 1.3 0 0 0-1.4 0l-.933.6a1.3 1.3 0 0 1-.7.2 1 1 0 0 1-1-1z\",\n key: \"ycz6yz\"\n }\n ],\n [\"path\", { d: \"M8 12h5\", key: \"1g6qi8\" }]\n];\nconst ReceiptEuro = createLucideIcon(\"receipt-euro\", __iconNode);\n\nexport { __iconNode, ReceiptEuro as default };\n//# sourceMappingURL=receipt-euro.mjs.map\n"],"names":["__iconNode","CreditCard","createLucideIcon","ReceiptEuro"],"mappings":";AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB,CAAC,QAAQ,EAAE,OAAO,MAAM,QAAQ,MAAM,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,KAAK,SAAQ,CAAE;AAAA,EAC9E,CAAC,QAAQ,EAAE,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,SAAQ,CAAE;AACnE,GACMC,IAAaC,EAAiB,eAAeF,CAAU;ACb7D;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,MAAMA,IAAa;AAAA,EACjB;AAAA,IACE;AAAA,IACA,EAAE,GAAG,wEAAwE,KAAK,SAAQ;AAAA,EAC9F;AAAA,EACE;AAAA,IACE;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,KAAK;AAAA,IACX;AAAA,EACA;AAAA,EACE,CAAC,QAAQ,EAAE,GAAG,WAAW,KAAK,SAAQ,CAAE;AAC1C,GACMG,IAAcD,EAAiB,gBAAgBF,CAAU;","x_google_ignoreList":[0,1]}