@alfadocs/ui-kit-debug 1.37.0 → 1.39.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 (517) 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-DYGCTIWB.js → agenda-tray-CBaJASb5.js} +4 -4
  4. package/dist/_chunks/{agenda-tray-DYGCTIWB.js.map → agenda-tray-CBaJASb5.js.map} +1 -1
  5. package/dist/_chunks/{ai-consent-banner-De4gzSBZ.js → ai-consent-banner-DvtaM3yg.js} +2 -2
  6. package/dist/_chunks/{ai-consent-banner-De4gzSBZ.js.map → ai-consent-banner-DvtaM3yg.js.map} +1 -1
  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-card-GYHa7VGp.js → anamnesis-summary-card-CclBbiXg.js} +2 -2
  14. package/dist/_chunks/{anamnesis-summary-card-GYHa7VGp.js.map → anamnesis-summary-card-CclBbiXg.js.map} +1 -1
  15. package/dist/_chunks/{anamnesis-summary-rows-Cxtgo2ok.js → anamnesis-summary-rows-DQUqwWc1.js} +7 -7
  16. package/dist/_chunks/{anamnesis-summary-rows-Cxtgo2ok.js.map → anamnesis-summary-rows-DQUqwWc1.js.map} +1 -1
  17. package/dist/_chunks/{appointment-card-WsDGBBut.js → appointment-card-TgR_2GKS.js} +134 -102
  18. package/dist/_chunks/appointment-card-TgR_2GKS.js.map +1 -0
  19. package/dist/_chunks/{appointment-peek-5S4O1VQP.js → appointment-peek-abiR0T9e.js} +3 -3
  20. package/dist/_chunks/{appointment-peek-5S4O1VQP.js.map → appointment-peek-abiR0T9e.js.map} +1 -1
  21. package/dist/_chunks/{appointment-timeline-ByfovxqR.js → appointment-timeline-CCnyUYKz.js} +67 -63
  22. package/dist/_chunks/appointment-timeline-CCnyUYKz.js.map +1 -0
  23. package/dist/_chunks/{appointment-tray-D6UyJHej.js → appointment-tray-N0yEI8UF.js} +5 -5
  24. package/dist/_chunks/{appointment-tray-D6UyJHej.js.map → appointment-tray-N0yEI8UF.js.map} +1 -1
  25. package/dist/_chunks/{audio-recorder-BlQBC7N_.js → audio-recorder-B7dT-Y3v.js} +3 -3
  26. package/dist/_chunks/{audio-recorder-BlQBC7N_.js.map → audio-recorder-B7dT-Y3v.js.map} +1 -1
  27. package/dist/_chunks/{balance-badge-cell-B0Z8Dwn8.js → balance-badge-cell-o6LldMUA.js} +5 -5
  28. package/dist/_chunks/{balance-badge-cell-B0Z8Dwn8.js.map → balance-badge-cell-o6LldMUA.js.map} +1 -1
  29. package/dist/_chunks/{bishop-score-D5b8tktp.js → bishop-score-Cu70iv9C.js} +2 -2
  30. package/dist/_chunks/{bishop-score-D5b8tktp.js.map → bishop-score-Cu70iv9C.js.map} +1 -1
  31. package/dist/_chunks/{bmi-calculator-dOKP-vW4.js → bmi-calculator-C9N19aLX.js} +2 -2
  32. package/dist/_chunks/{bmi-calculator-dOKP-vW4.js.map → bmi-calculator-C9N19aLX.js.map} +1 -1
  33. package/dist/_chunks/{booking-Dp-9qR6F.js → booking-Dn3jvv3K.js} +6 -6
  34. package/dist/_chunks/{booking-Dp-9qR6F.js.map → booking-Dn3jvv3K.js.map} +1 -1
  35. package/dist/_chunks/{button-nJaPh_HC.js → button-CaUe1uyd.js} +11 -7
  36. package/dist/_chunks/button-CaUe1uyd.js.map +1 -0
  37. package/dist/_chunks/{button-group-QmN1VdUW.js → button-group-R32U7SyV.js} +2 -2
  38. package/dist/_chunks/{button-group-QmN1VdUW.js.map → button-group-R32U7SyV.js.map} +1 -1
  39. package/dist/_chunks/{calendar-7GAUlsNO.js → calendar-ChJQzRw-.js} +2 -2
  40. package/dist/_chunks/{calendar-7GAUlsNO.js.map → calendar-ChJQzRw-.js.map} +1 -1
  41. package/dist/_chunks/calendar-workspace-B-fUbm62.js +11372 -0
  42. package/dist/_chunks/calendar-workspace-B-fUbm62.js.map +1 -0
  43. package/dist/_chunks/{care-plan-card-COFOI-fI.js → care-plan-card-BOv0NRle.js} +3 -3
  44. package/dist/_chunks/{care-plan-card-COFOI-fI.js.map → care-plan-card-BOv0NRle.js.map} +1 -1
  45. package/dist/_chunks/{care-plan-entry-card-BOKn0KW-.js → care-plan-entry-card-d-rZD4li.js} +3 -3
  46. package/dist/_chunks/{care-plan-entry-card-BOKn0KW-.js.map → care-plan-entry-card-d-rZD4li.js.map} +1 -1
  47. package/dist/_chunks/{care-plan-header-CbuOuVBw.js → care-plan-header-CEmBXn6-.js} +2 -2
  48. package/dist/_chunks/{care-plan-header-CbuOuVBw.js.map → care-plan-header-CEmBXn6-.js.map} +1 -1
  49. package/dist/_chunks/{carousel.agent-Dv4a4M8L.js → carousel.agent-z1yLBpyC.js} +2 -2
  50. package/dist/_chunks/{carousel.agent-Dv4a4M8L.js.map → carousel.agent-z1yLBpyC.js.map} +1 -1
  51. package/dist/_chunks/{chart-iWl76PXv.js → chart-PF2krCZC.js} +3 -3
  52. package/dist/_chunks/{chart-iWl76PXv.js.map → chart-PF2krCZC.js.map} +1 -1
  53. package/dist/_chunks/{chat-input-qM5QpUSq.js → chat-input-Cj7ZYQr5.js} +2 -2
  54. package/dist/_chunks/{chat-input-qM5QpUSq.js.map → chat-input-Cj7ZYQr5.js.map} +1 -1
  55. package/dist/_chunks/{chat-message-RniXtrCH.js → chat-message-BMVxiUIX.js} +3 -3
  56. package/dist/_chunks/{chat-message-RniXtrCH.js.map → chat-message-BMVxiUIX.js.map} +1 -1
  57. package/dist/_chunks/{code-block-uVjNSI9g.js → code-block-BB-viuTn.js} +2 -2
  58. package/dist/_chunks/{code-block-uVjNSI9g.js.map → code-block-BB-viuTn.js.map} +1 -1
  59. package/dist/_chunks/{connection-status-OEsWjmRk.js → connection-status-BmA9T0UO.js} +3 -3
  60. package/dist/_chunks/{connection-status-OEsWjmRk.js.map → connection-status-BmA9T0UO.js.map} +1 -1
  61. package/dist/_chunks/{contact-profile-card--My1H2UD.js → contact-profile-card-Zt6WNg1u.js} +2 -2
  62. package/dist/_chunks/{contact-profile-card--My1H2UD.js.map → contact-profile-card-Zt6WNg1u.js.map} +1 -1
  63. package/dist/_chunks/{control-room-rail-DQoHdE1U.js → control-room-rail-CnNZusR5.js} +3 -3
  64. package/dist/_chunks/{control-room-rail-DQoHdE1U.js.map → control-room-rail-CnNZusR5.js.map} +1 -1
  65. package/dist/_chunks/{copy-field-fYKpl6aN.js → copy-field-B8XRVmQv.js} +2 -2
  66. package/dist/_chunks/{copy-field-fYKpl6aN.js.map → copy-field-B8XRVmQv.js.map} +1 -1
  67. package/dist/_chunks/credit-card-D9XZsHGA.js +15 -0
  68. package/dist/_chunks/credit-card-D9XZsHGA.js.map +1 -0
  69. package/dist/_chunks/{cycle-calculator-BJeaXiZv.js → cycle-calculator-BH2StWoT.js} +2 -2
  70. package/dist/_chunks/{cycle-calculator-BJeaXiZv.js.map → cycle-calculator-BH2StWoT.js.map} +1 -1
  71. package/dist/_chunks/{dashboard-grid-B23BFzRl.js → dashboard-grid-BcXWL5S9.js} +2 -2
  72. package/dist/_chunks/{dashboard-grid-B23BFzRl.js.map → dashboard-grid-BcXWL5S9.js.map} +1 -1
  73. package/dist/_chunks/{data-table-BYGK-gUJ.js → data-table-CcAx_I1w.js} +7 -7
  74. package/dist/_chunks/{data-table-BYGK-gUJ.js.map → data-table-CcAx_I1w.js.map} +1 -1
  75. package/dist/_chunks/{data-table-tabs-BMR0zsVQ.js → data-table-tabs-B9SXA5VP.js} +3 -3
  76. package/dist/_chunks/{data-table-tabs-BMR0zsVQ.js.map → data-table-tabs-B9SXA5VP.js.map} +1 -1
  77. package/dist/_chunks/{description-list-C1RXMDZ_.js → description-list-BsJ_6CQE.js} +2 -2
  78. package/dist/_chunks/{description-list-C1RXMDZ_.js.map → description-list-BsJ_6CQE.js.map} +1 -1
  79. package/dist/_chunks/{document-preview-DsEyRcNd.js → document-preview-COV0BC6n.js} +2 -2
  80. package/dist/_chunks/{document-preview-DsEyRcNd.js.map → document-preview-COV0BC6n.js.map} +1 -1
  81. package/dist/_chunks/{document-scanner-CbWVtm7u.js → document-scanner-B1abl-A4.js} +2 -2
  82. package/dist/_chunks/{document-scanner-CbWVtm7u.js.map → document-scanner-B1abl-A4.js.map} +1 -1
  83. package/dist/_chunks/{due-date-calculator-Dhc9Ljkb.js → due-date-calculator-Buh_mVHq.js} +2 -2
  84. package/dist/_chunks/{due-date-calculator-Dhc9Ljkb.js.map → due-date-calculator-Buh_mVHq.js.map} +1 -1
  85. package/dist/_chunks/{editable-currency-cell-renderer-D7blbDFY.js → editable-currency-cell-renderer-Psb6XKHR.js} +3 -3
  86. package/dist/_chunks/{editable-currency-cell-renderer-D7blbDFY.js.map → editable-currency-cell-renderer-Psb6XKHR.js.map} +1 -1
  87. package/dist/_chunks/editable-description-ADMVFPUz.js +142 -0
  88. package/dist/_chunks/editable-description-ADMVFPUz.js.map +1 -0
  89. package/dist/_chunks/{editor-overlay-8fKAcRsm.js → editor-overlay-9tcPXNWt.js} +2 -2
  90. package/dist/_chunks/{editor-overlay-8fKAcRsm.js.map → editor-overlay-9tcPXNWt.js.map} +1 -1
  91. package/dist/_chunks/{empty-state-X0sVPfVo.js → empty-state-BUN_UAWf.js} +2 -2
  92. package/dist/_chunks/{empty-state-X0sVPfVo.js.map → empty-state-BUN_UAWf.js.map} +1 -1
  93. package/dist/_chunks/{entity-summary-BbW0mIzU.js → entity-summary-DXejuQ8i.js} +3 -3
  94. package/dist/_chunks/{entity-summary-BbW0mIzU.js.map → entity-summary-DXejuQ8i.js.map} +1 -1
  95. package/dist/_chunks/{error-boundary-ayXFCcq4.js → error-boundary-BNT2iQ1w.js} +2 -2
  96. package/dist/_chunks/{error-boundary-ayXFCcq4.js.map → error-boundary-BNT2iQ1w.js.map} +1 -1
  97. package/dist/_chunks/{face-scheme-uFvhqz6h.js → face-scheme-Dg6ZyLKb.js} +5 -5
  98. package/dist/_chunks/{face-scheme-uFvhqz6h.js.map → face-scheme-Dg6ZyLKb.js.map} +1 -1
  99. package/dist/_chunks/{fetal-weight-C6SxchOv.js → fetal-weight-wx4ycKc6.js} +2 -2
  100. package/dist/_chunks/{fetal-weight-C6SxchOv.js.map → fetal-weight-wx4ycKc6.js.map} +1 -1
  101. package/dist/_chunks/{field-array-C9dmRaIM.js → field-array-BW9KeeXG.js} +3 -3
  102. package/dist/_chunks/{field-array-C9dmRaIM.js.map → field-array-BW9KeeXG.js.map} +1 -1
  103. package/dist/_chunks/{file-manager-DvkFgj7d.js → file-manager-BfLQxF5t.js} +137 -151
  104. package/dist/_chunks/file-manager-BfLQxF5t.js.map +1 -0
  105. package/dist/_chunks/{finished-terminal-Br61Ip4e.js → finished-terminal-DJd7Z_po.js} +2 -2
  106. package/dist/_chunks/{finished-terminal-Br61Ip4e.js.map → finished-terminal-DJd7Z_po.js.map} +1 -1
  107. package/dist/_chunks/{fiscal-code-input-CkwIdB1y.js → fiscal-code-input-ODQRd_Sw.js} +2 -2
  108. package/dist/_chunks/{fiscal-code-input-CkwIdB1y.js.map → fiscal-code-input-ODQRd_Sw.js.map} +1 -1
  109. package/dist/_chunks/folder-BghC8_S2.js +20 -0
  110. package/dist/_chunks/folder-BghC8_S2.js.map +1 -0
  111. package/dist/_chunks/{freemium-paywall-BqGk_SBU.js → freemium-paywall-Cz-O9lQD.js} +2 -2
  112. package/dist/_chunks/{freemium-paywall-BqGk_SBU.js.map → freemium-paywall-Cz-O9lQD.js.map} +1 -1
  113. package/dist/_chunks/{gestational-age-calculator-DDOGaPvg.js → gestational-age-calculator-CwbecTul.js} +2 -2
  114. package/dist/_chunks/{gestational-age-calculator-DDOGaPvg.js.map → gestational-age-calculator-CwbecTul.js.map} +1 -1
  115. package/dist/_chunks/{hcg-doubling-Bb_n6tEa.js → hcg-doubling-BcXriXJe.js} +2 -2
  116. package/dist/_chunks/{hcg-doubling-Bb_n6tEa.js.map → hcg-doubling-BcXriXJe.js.map} +1 -1
  117. package/dist/_chunks/{header-BZ4pZlJV.js → header-3o9o9v_T.js} +2 -2
  118. package/dist/_chunks/{header-BZ4pZlJV.js.map → header-3o9o9v_T.js.map} +1 -1
  119. package/dist/_chunks/{header-settings-B8mLc03Q.js → header-settings-CTe45iDy.js} +4 -4
  120. package/dist/_chunks/{header-settings-B8mLc03Q.js.map → header-settings-CTe45iDy.js.map} +1 -1
  121. package/dist/_chunks/{hover-card-Bcku1GQu.js → hover-card-BMJBVqIf.js} +2 -2
  122. package/dist/_chunks/{hover-card-Bcku1GQu.js.map → hover-card-BMJBVqIf.js.map} +1 -1
  123. package/dist/_chunks/{icon-button-8xqRnkdG.js → icon-button-CehAeZoP.js} +2 -2
  124. package/dist/_chunks/{icon-button-8xqRnkdG.js.map → icon-button-CehAeZoP.js.map} +1 -1
  125. package/dist/_chunks/{icon-button-group-Dj6CRoYR.js → icon-button-group-DkkdIygu.js} +2 -2
  126. package/dist/_chunks/{icon-button-group-Dj6CRoYR.js.map → icon-button-group-DkkdIygu.js.map} +1 -1
  127. package/dist/_chunks/{icon-picker-CTWzlHJr.js → icon-picker-DMEelg9v.js} +3 -3
  128. package/dist/_chunks/{icon-picker-CTWzlHJr.js.map → icon-picker-DMEelg9v.js.map} +1 -1
  129. package/dist/_chunks/{image-cropper-C84NDTB7.js → image-cropper-BjPjT7wU.js} +2 -2
  130. package/dist/_chunks/{image-cropper-C84NDTB7.js.map → image-cropper-BjPjT7wU.js.map} +1 -1
  131. package/dist/_chunks/{info-tip-ey_Pon2y.js → info-tip-iP2Pm9dh.js} +2 -2
  132. package/dist/_chunks/{info-tip-ey_Pon2y.js.map → info-tip-iP2Pm9dh.js.map} +1 -1
  133. package/dist/_chunks/{insert-result-LCNTskNJ.js → insert-result-DPnOBD85.js} +2 -2
  134. package/dist/_chunks/{insert-result-LCNTskNJ.js.map → insert-result-DPnOBD85.js.map} +1 -1
  135. package/dist/_chunks/{key-value-pair-DczGb4yz.js → key-value-pair-DaQI_LZB.js} +2 -2
  136. package/dist/_chunks/{key-value-pair-DczGb4yz.js.map → key-value-pair-DaQI_LZB.js.map} +1 -1
  137. package/dist/_chunks/{link-cell-renderer-BNa8x6oJ.js → link-cell-renderer-s3oHzOwi.js} +2 -2
  138. package/dist/_chunks/{link-cell-renderer-BNa8x6oJ.js.map → link-cell-renderer-s3oHzOwi.js.map} +1 -1
  139. package/dist/_chunks/{locale-picker-BLeHbFSc.js → locale-picker-CH3kfrIG.js} +3 -3
  140. package/dist/_chunks/{locale-picker-BLeHbFSc.js.map → locale-picker-CH3kfrIG.js.map} +1 -1
  141. package/dist/_chunks/{map-view-CCAlC9IL.js → map-view-CHw4RL6w.js} +2 -2
  142. package/dist/_chunks/{map-view-CCAlC9IL.js.map → map-view-CHw4RL6w.js.map} +1 -1
  143. package/dist/_chunks/{marketplace-app-shell-BwH6Aruw.js → marketplace-app-shell-d2EtcUbe.js} +4 -4
  144. package/dist/_chunks/{marketplace-app-shell-BwH6Aruw.js.map → marketplace-app-shell-d2EtcUbe.js.map} +1 -1
  145. package/dist/_chunks/{message-card-Dm5Xshup.js → message-card-V3sFPiQI.js} +3 -3
  146. package/dist/_chunks/{message-card-Dm5Xshup.js.map → message-card-V3sFPiQI.js.map} +1 -1
  147. package/dist/_chunks/{message-tray-BcLyaO-G.js → message-tray-CrRIHfiQ.js} +5 -5
  148. package/dist/_chunks/{message-tray-BcLyaO-G.js.map → message-tray-CrRIHfiQ.js.map} +1 -1
  149. package/dist/_chunks/note-timeline-Dn_XTo1s.js +333 -0
  150. package/dist/_chunks/note-timeline-Dn_XTo1s.js.map +1 -0
  151. package/dist/_chunks/notes-panel-CAD1Ytcj.js +647 -0
  152. package/dist/_chunks/notes-panel-CAD1Ytcj.js.map +1 -0
  153. package/dist/_chunks/{notification-card-ChcK9Wat.js → notification-card-B2gLO6dK.js} +3 -3
  154. package/dist/_chunks/{notification-card-ChcK9Wat.js.map → notification-card-B2gLO6dK.js.map} +1 -1
  155. package/dist/_chunks/{notification-tray-CJ8jOe-U.js → notification-tray-BOEKegVV.js} +5 -5
  156. package/dist/_chunks/{notification-tray-CJ8jOe-U.js.map → notification-tray-BOEKegVV.js.map} +1 -1
  157. package/dist/_chunks/{optical-prescription-cphK41eP.js → optical-prescription-LGgmtcST.js} +2 -2
  158. package/dist/_chunks/{optical-prescription-cphK41eP.js.map → optical-prescription-LGgmtcST.js.map} +1 -1
  159. package/dist/_chunks/{panel-subview-BNXN8OEL.js → panel-subview-Cc2Wtt7D.js} +52 -52
  160. package/dist/_chunks/panel-subview-Cc2Wtt7D.js.map +1 -0
  161. package/dist/_chunks/{patient-details-2cIaL-Zb.js → patient-details-C8ImUrVg.js} +3 -3
  162. package/dist/_chunks/{patient-details-2cIaL-Zb.js.map → patient-details-C8ImUrVg.js.map} +1 -1
  163. package/dist/_chunks/{patient-field-row-IHb2VFc2.js → patient-field-row-BRSOKvme.js} +7 -7
  164. package/dist/_chunks/{patient-field-row-IHb2VFc2.js.map → patient-field-row-BRSOKvme.js.map} +1 -1
  165. package/dist/_chunks/{patient-search-D08b6jgj.js → patient-search-5QcmQKJD.js} +2 -2
  166. package/dist/_chunks/{patient-search-D08b6jgj.js.map → patient-search-5QcmQKJD.js.map} +1 -1
  167. package/dist/_chunks/{patient-summary-card-BzmJH9a-.js → patient-summary-card-BhmKB2KR.js} +8 -8
  168. package/dist/_chunks/patient-summary-card-BhmKB2KR.js.map +1 -0
  169. package/dist/_chunks/{payment-automation-upsell-BLTdE2em.js → payment-automation-upsell-BKmBXU4i.js} +17 -16
  170. package/dist/_chunks/{payment-automation-upsell-BLTdE2em.js.map → payment-automation-upsell-BKmBXU4i.js.map} +1 -1
  171. package/dist/_chunks/{payment-request-card-BxcdvxKR.js → payment-request-card-Cer6XXCn.js} +6 -5
  172. package/dist/_chunks/{payment-request-card-BxcdvxKR.js.map → payment-request-card-Cer6XXCn.js.map} +1 -1
  173. package/dist/_chunks/{periodontal-chart-BF_e3wZp.js → periodontal-chart-DJoZS_o7.js} +2 -2
  174. package/dist/_chunks/{periodontal-chart-BF_e3wZp.js.map → periodontal-chart-DJoZS_o7.js.map} +1 -1
  175. package/dist/_chunks/{periodontal-chart-card-BJEuJuzh.js → periodontal-chart-card-Nd1ZoYWb.js} +2 -2
  176. package/dist/_chunks/{periodontal-chart-card-BJEuJuzh.js.map → periodontal-chart-card-Nd1ZoYWb.js.map} +1 -1
  177. package/dist/_chunks/{popover-DzR5QYxp.js → popover-DO-pssF3.js} +2 -2
  178. package/dist/_chunks/{popover-DzR5QYxp.js.map → popover-DO-pssF3.js.map} +1 -1
  179. package/dist/_chunks/{practice-results-DOcORTkP.js → practice-results-D_jjzwgf.js} +6 -6
  180. package/dist/_chunks/{practice-results-DOcORTkP.js.map → practice-results-D_jjzwgf.js.map} +1 -1
  181. package/dist/_chunks/{pregnancy-dating-nV1_S6w0.js → pregnancy-dating-DcyV9ZRD.js} +2 -2
  182. package/dist/_chunks/{pregnancy-dating-nV1_S6w0.js.map → pregnancy-dating-DcyV9ZRD.js.map} +1 -1
  183. package/dist/_chunks/{pregnancy-weight-gain-tRecShAD.js → pregnancy-weight-gain-Bfq4Kwt5.js} +2 -2
  184. package/dist/_chunks/{pregnancy-weight-gain-tRecShAD.js.map → pregnancy-weight-gain-Bfq4Kwt5.js.map} +1 -1
  185. package/dist/_chunks/{privacy-lock-Be39vQUN.js → privacy-lock-CbFCAMM3.js} +3 -3
  186. package/dist/_chunks/{privacy-lock-Be39vQUN.js.map → privacy-lock-CbFCAMM3.js.map} +1 -1
  187. package/dist/_chunks/{product-hub-panel-C0TO69P7.js → product-hub-panel-w40-_-1s.js} +4 -4
  188. package/dist/_chunks/{product-hub-panel-C0TO69P7.js.map → product-hub-panel-w40-_-1s.js.map} +1 -1
  189. package/dist/_chunks/{public-header.agent-Bl1KFwSE.js → public-header.agent-D-EBVskf.js} +3 -3
  190. package/dist/_chunks/{public-header.agent-Bl1KFwSE.js.map → public-header.agent-D-EBVskf.js.map} +1 -1
  191. package/dist/_chunks/{radiograph-panel.agent-k0G7JuoM.js → radiograph-panel.agent-LrILY2lN.js} +4 -4
  192. package/dist/_chunks/{radiograph-panel.agent-k0G7JuoM.js.map → radiograph-panel.agent-LrILY2lN.js.map} +1 -1
  193. package/dist/_chunks/{receipt-euro-C6k4Gzhr.js → receipt-euro-B1cLM_TN.js} +3 -14
  194. package/dist/_chunks/receipt-euro-B1cLM_TN.js.map +1 -0
  195. package/dist/_chunks/{reviews-panel-BaHZb_ai.js → reviews-panel-2GVuxGeT.js} +5 -5
  196. package/dist/_chunks/{reviews-panel-BaHZb_ai.js.map → reviews-panel-2GVuxGeT.js.map} +1 -1
  197. package/dist/_chunks/{rich-text-editor-BTXlorm5.js → rich-text-editor-C6fE-uP4.js} +5 -5
  198. package/dist/_chunks/{rich-text-editor-BTXlorm5.js.map → rich-text-editor-C6fE-uP4.js.map} +1 -1
  199. package/dist/_chunks/{session-countdown-QMsnRa1x.js → session-countdown-BqppPrw6.js} +2 -2
  200. package/dist/_chunks/{session-countdown-QMsnRa1x.js.map → session-countdown-BqppPrw6.js.map} +1 -1
  201. package/dist/_chunks/{sheet-hm04DGFd.js → sheet-C8WIDFS8.js} +2 -2
  202. package/dist/_chunks/{sheet-hm04DGFd.js.map → sheet-C8WIDFS8.js.map} +1 -1
  203. package/dist/_chunks/{sign-in-with-alfadocs-button-BLe_quy5.js → sign-in-with-alfadocs-button-DWwBJtyE.js} +2 -2
  204. package/dist/_chunks/{sign-in-with-alfadocs-button-BLe_quy5.js.map → sign-in-with-alfadocs-button-DWwBJtyE.js.map} +1 -1
  205. package/dist/_chunks/{signature-request-Dej2g86d.js → signature-request-D_j2aQu1.js} +360 -371
  206. package/dist/_chunks/signature-request-D_j2aQu1.js.map +1 -0
  207. package/dist/_chunks/{skeleton-CZbwyJAA.js → skeleton-B1KTdJ4N.js} +46 -33
  208. package/dist/_chunks/skeleton-B1KTdJ4N.js.map +1 -0
  209. package/dist/_chunks/{slot-grid-8Ko6thzz.js → slot-grid-B3eOPkKD.js} +5 -5
  210. package/dist/_chunks/{slot-grid-8Ko6thzz.js.map → slot-grid-B3eOPkKD.js.map} +1 -1
  211. package/dist/_chunks/{streaming-text-DjFqLSt_.js → streaming-text-CE1u_oGa.js} +2 -2
  212. package/dist/_chunks/{streaming-text-DjFqLSt_.js.map → streaming-text-CE1u_oGa.js.map} +1 -1
  213. package/dist/_chunks/{task-tray-CQ8UAR2j.js → task-tray-DIwjAIes.js} +4 -4
  214. package/dist/_chunks/{task-tray-CQ8UAR2j.js.map → task-tray-DIwjAIes.js.map} +1 -1
  215. package/dist/_chunks/{tasks-panel-CBGMtQ_f.js → tasks-panel-CpcikOeY.js} +6 -6
  216. package/dist/_chunks/{tasks-panel-CBGMtQ_f.js.map → tasks-panel-CpcikOeY.js.map} +1 -1
  217. package/dist/_chunks/{theme-toggle-CMz8YfC1.js → theme-toggle-bI0pgDDv.js} +3 -3
  218. package/dist/_chunks/{theme-toggle-CMz8YfC1.js.map → theme-toggle-bI0pgDDv.js.map} +1 -1
  219. package/dist/_chunks/{toast-8jqtbfAB.js → toast-ZZfhA5u0.js} +2 -2
  220. package/dist/_chunks/{toast-8jqtbfAB.js.map → toast-ZZfhA5u0.js.map} +1 -1
  221. package/dist/_chunks/{token-insert-menu-9Um0JinI.js → token-insert-menu-A9B5AJw6.js} +2 -2
  222. package/dist/_chunks/{token-insert-menu-9Um0JinI.js.map → token-insert-menu-A9B5AJw6.js.map} +1 -1
  223. package/dist/_chunks/tool-rail-D89USYE6.js +799 -0
  224. package/dist/_chunks/tool-rail-D89USYE6.js.map +1 -0
  225. package/dist/_chunks/{tooth-scheme-BWkYxxjR.js → tooth-scheme-DPAq0vQK.js} +3 -3
  226. package/dist/_chunks/{tooth-scheme-BWkYxxjR.js.map → tooth-scheme-DPAq0vQK.js.map} +1 -1
  227. package/dist/_chunks/{transaction-chip-Dth1nThY.js → transaction-chip-CwgcJiqF.js} +47 -46
  228. package/dist/_chunks/{transaction-chip-Dth1nThY.js.map → transaction-chip-CwgcJiqF.js.map} +1 -1
  229. package/dist/_chunks/treatment-receipt-dUm99mdn.js +160 -0
  230. package/dist/_chunks/treatment-receipt-dUm99mdn.js.map +1 -0
  231. package/dist/_chunks/{unit-converter-BTgU50gk.js → unit-converter-C-LpGzrN.js} +2 -2
  232. package/dist/_chunks/{unit-converter-BTgU50gk.js.map → unit-converter-C-LpGzrN.js.map} +1 -1
  233. package/dist/_chunks/user-plus-BtcOLgNU.js +17 -0
  234. package/dist/_chunks/user-plus-BtcOLgNU.js.map +1 -0
  235. package/dist/_chunks/{warning-stack-BW5Dwb3z.js → warning-stack-C0glSB7p.js} +3 -3
  236. package/dist/_chunks/{warning-stack-BW5Dwb3z.js.map → warning-stack-C0glSB7p.js.map} +1 -1
  237. package/dist/_chunks/{workflow-map-CXdsxvUj.js → workflow-map-DhR_h5yw.js} +5 -5
  238. package/dist/_chunks/{workflow-map-CXdsxvUj.js.map → workflow-map-DhR_h5yw.js.map} +1 -1
  239. package/dist/agent-catalog.json +3 -418
  240. package/dist/agent-i18n/en.json +2 -18
  241. package/dist/components/agenda-tray/index.js +1 -1
  242. package/dist/components/ai-consent-banner/index.js +1 -1
  243. package/dist/components/ai-prompt-input/index.js +1 -1
  244. package/dist/components/anamnesis-card/index.js +1 -1
  245. package/dist/components/anamnesis-summary-card/index.js +1 -1
  246. package/dist/components/appointment-card/appointment-card.d.ts +24 -0
  247. package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
  248. package/dist/components/appointment-card/index.js +2 -2
  249. package/dist/components/appointment-peek/index.js +1 -1
  250. package/dist/components/appointment-timeline/appointment-timeline.d.ts +15 -1
  251. package/dist/components/appointment-timeline/appointment-timeline.d.ts.map +1 -1
  252. package/dist/components/appointment-timeline/index.js +1 -1
  253. package/dist/components/audio-recorder/index.js +1 -1
  254. package/dist/components/bishop-score/index.js +1 -1
  255. package/dist/components/bmi-calculator/index.js +1 -1
  256. package/dist/components/booking/index.js +1 -1
  257. package/dist/components/button/button.d.ts +1 -1
  258. package/dist/components/button/button.d.ts.map +1 -1
  259. package/dist/components/button/index.js +2 -2
  260. package/dist/components/button-group/index.js +1 -1
  261. package/dist/components/calendar/index.js +1 -1
  262. package/dist/components/care-plan-card/index.js +1 -1
  263. package/dist/components/care-plan-entry-card/index.js +1 -1
  264. package/dist/components/care-plan-header/index.js +1 -1
  265. package/dist/components/carousel/index.js +1 -1
  266. package/dist/components/chart/index.js +1 -1
  267. package/dist/components/chat-input/index.js +1 -1
  268. package/dist/components/chat-message/index.js +1 -1
  269. package/dist/components/connection-status/index.js +1 -1
  270. package/dist/components/contact-profile-card/index.js +1 -1
  271. package/dist/components/control-room-rail/index.js +1 -1
  272. package/dist/components/copy-field/index.js +1 -1
  273. package/dist/components/cycle-calculator/index.js +1 -1
  274. package/dist/components/dashboard-grid/index.js +1 -1
  275. package/dist/components/data-table/index.js +4 -4
  276. package/dist/components/data-table-tabs/index.js +1 -1
  277. package/dist/components/description-list/index.js +1 -1
  278. package/dist/components/document-preview/index.js +1 -1
  279. package/dist/components/document-scanner/index.js +1 -1
  280. package/dist/components/due-date-calculator/index.js +1 -1
  281. package/dist/components/editable-description/editable-description.d.ts +6 -0
  282. package/dist/components/editable-description/editable-description.d.ts.map +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 +17 -0
  312. package/dist/components/note-timeline/note-timeline.d.ts.map +1 -1
  313. package/dist/components/notes-panel/index.js +1 -1
  314. package/dist/components/notes-panel/notes-panel.d.ts +5 -4
  315. package/dist/components/notes-panel/notes-panel.d.ts.map +1 -1
  316. package/dist/components/notification-card/index.js +1 -1
  317. package/dist/components/notification-tray/index.js +1 -1
  318. package/dist/components/optical-prescription/index.js +1 -1
  319. package/dist/components/panel-subview/index.js +1 -1
  320. package/dist/components/panel-subview/panel-subview.d.ts.map +1 -1
  321. package/dist/components/patient-details/index.js +1 -1
  322. package/dist/components/patient-search/index.js +1 -1
  323. package/dist/components/patient-summary-card/index.js +1 -1
  324. package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -1
  325. package/dist/components/patient-table/index.js +1 -1
  326. package/dist/components/payment-card/index.js +1 -1
  327. package/dist/components/periodontal-chart/index.js +1 -1
  328. package/dist/components/periodontal-chart-card/index.js +1 -1
  329. package/dist/components/popover/index.js +1 -1
  330. package/dist/components/practice-results/index.js +1 -1
  331. package/dist/components/pregnancy-dating/index.js +1 -1
  332. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  333. package/dist/components/privacy-lock/index.js +1 -1
  334. package/dist/components/product-hub-tray/index.js +1 -1
  335. package/dist/components/public-header/index.js +1 -1
  336. package/dist/components/radiograph-panel/index.js +1 -1
  337. package/dist/components/reviews-panel/index.js +1 -1
  338. package/dist/components/rich-text-editor/index.js +1 -1
  339. package/dist/components/session-countdown/index.js +1 -1
  340. package/dist/components/sheet/index.js +1 -1
  341. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  342. package/dist/components/skeleton/index.d.ts +1 -1
  343. package/dist/components/skeleton/index.d.ts.map +1 -1
  344. package/dist/components/skeleton/index.js +3 -2
  345. package/dist/components/skeleton/skeleton.d.ts +12 -0
  346. package/dist/components/skeleton/skeleton.d.ts.map +1 -1
  347. package/dist/components/slot-grid/index.js +1 -1
  348. package/dist/components/streaming-text/index.js +1 -1
  349. package/dist/components/task-tray/index.js +1 -1
  350. package/dist/components/tasks-panel/index.js +1 -1
  351. package/dist/components/theme-toggle/index.js +1 -1
  352. package/dist/components/toast/index.js +1 -1
  353. package/dist/components/token-insert-menu/index.js +1 -1
  354. package/dist/components/tool-rail/index.js +1 -1
  355. package/dist/components/tool-rail/tool-rail.d.ts.map +1 -1
  356. package/dist/components/tooth-scheme/index.js +1 -1
  357. package/dist/components/transaction-chip/index.js +1 -1
  358. package/dist/components/transaction-chip/transaction-chip.d.ts +7 -0
  359. package/dist/components/transaction-chip/transaction-chip.d.ts.map +1 -1
  360. package/dist/components/treatment-receipt/index.js +1 -1
  361. package/dist/components/treatment-receipt/treatment-receipt.d.ts +8 -0
  362. package/dist/components/treatment-receipt/treatment-receipt.d.ts.map +1 -1
  363. package/dist/components/unit-converter/index.js +1 -1
  364. package/dist/components/warning-stack/index.js +1 -1
  365. package/dist/components/workflow/index.js +1 -1
  366. package/dist/host-compat.css +13 -4
  367. package/dist/i18n/locales/ar.d.ts +235 -183
  368. package/dist/i18n/locales/ar.d.ts.map +1 -1
  369. package/dist/i18n/locales/ar.js +239 -187
  370. package/dist/i18n/locales/ar.js.map +1 -1
  371. package/dist/i18n/locales/de.d.ts +219 -167
  372. package/dist/i18n/locales/de.d.ts.map +1 -1
  373. package/dist/i18n/locales/de.js +223 -171
  374. package/dist/i18n/locales/de.js.map +1 -1
  375. package/dist/i18n/locales/el.d.ts +234 -182
  376. package/dist/i18n/locales/el.d.ts.map +1 -1
  377. package/dist/i18n/locales/el.js +238 -186
  378. package/dist/i18n/locales/el.js.map +1 -1
  379. package/dist/i18n/locales/en.d.ts +52 -0
  380. package/dist/i18n/locales/en.d.ts.map +1 -1
  381. package/dist/i18n/locales/en.js +56 -4
  382. package/dist/i18n/locales/en.js.map +1 -1
  383. package/dist/i18n/locales/es.d.ts +227 -175
  384. package/dist/i18n/locales/es.d.ts.map +1 -1
  385. package/dist/i18n/locales/es.js +231 -179
  386. package/dist/i18n/locales/es.js.map +1 -1
  387. package/dist/i18n/locales/fr.d.ts +221 -169
  388. package/dist/i18n/locales/fr.d.ts.map +1 -1
  389. package/dist/i18n/locales/fr.js +225 -173
  390. package/dist/i18n/locales/fr.js.map +1 -1
  391. package/dist/i18n/locales/hi.d.ts +235 -183
  392. package/dist/i18n/locales/hi.d.ts.map +1 -1
  393. package/dist/i18n/locales/hi.js +243 -187
  394. package/dist/i18n/locales/hi.js.map +1 -1
  395. package/dist/i18n/locales/it.d.ts +179 -127
  396. package/dist/i18n/locales/it.d.ts.map +1 -1
  397. package/dist/i18n/locales/it.js +183 -131
  398. package/dist/i18n/locales/it.js.map +1 -1
  399. package/dist/i18n/locales/ja.d.ts +233 -181
  400. package/dist/i18n/locales/ja.d.ts.map +1 -1
  401. package/dist/i18n/locales/ja.js +237 -185
  402. package/dist/i18n/locales/ja.js.map +1 -1
  403. package/dist/i18n/locales/nl.d.ts +224 -172
  404. package/dist/i18n/locales/nl.d.ts.map +1 -1
  405. package/dist/i18n/locales/nl.js +228 -176
  406. package/dist/i18n/locales/nl.js.map +1 -1
  407. package/dist/i18n/locales/pl.d.ts +229 -177
  408. package/dist/i18n/locales/pl.d.ts.map +1 -1
  409. package/dist/i18n/locales/pl.js +233 -181
  410. package/dist/i18n/locales/pl.js.map +1 -1
  411. package/dist/i18n/locales/pt.d.ts +229 -177
  412. package/dist/i18n/locales/pt.d.ts.map +1 -1
  413. package/dist/i18n/locales/pt.js +233 -181
  414. package/dist/i18n/locales/pt.js.map +1 -1
  415. package/dist/i18n/locales/ro.d.ts +228 -176
  416. package/dist/i18n/locales/ro.d.ts.map +1 -1
  417. package/dist/i18n/locales/ro.js +232 -180
  418. package/dist/i18n/locales/ro.js.map +1 -1
  419. package/dist/i18n/locales/ru.d.ts +234 -182
  420. package/dist/i18n/locales/ru.d.ts.map +1 -1
  421. package/dist/i18n/locales/ru.js +238 -186
  422. package/dist/i18n/locales/ru.js.map +1 -1
  423. package/dist/i18n/locales/sq.d.ts +228 -176
  424. package/dist/i18n/locales/sq.d.ts.map +1 -1
  425. package/dist/i18n/locales/sq.js +232 -180
  426. package/dist/i18n/locales/sq.js.map +1 -1
  427. package/dist/i18n/locales/sv.d.ts +229 -177
  428. package/dist/i18n/locales/sv.d.ts.map +1 -1
  429. package/dist/i18n/locales/sv.js +233 -181
  430. package/dist/i18n/locales/sv.js.map +1 -1
  431. package/dist/i18n/locales/tr.d.ts +235 -183
  432. package/dist/i18n/locales/tr.d.ts.map +1 -1
  433. package/dist/i18n/locales/tr.js +239 -187
  434. package/dist/i18n/locales/tr.js.map +1 -1
  435. package/dist/i18n/locales/zh.d.ts +228 -176
  436. package/dist/i18n/locales/zh.d.ts.map +1 -1
  437. package/dist/i18n/locales/zh.js +232 -180
  438. package/dist/i18n/locales/zh.js.map +1 -1
  439. package/dist/index.js +785 -784
  440. package/dist/locales/ar.json +239 -187
  441. package/dist/locales/de.json +223 -171
  442. package/dist/locales/el.json +238 -186
  443. package/dist/locales/en.json +56 -4
  444. package/dist/locales/es.json +231 -179
  445. package/dist/locales/fr.json +225 -173
  446. package/dist/locales/hi.json +239 -187
  447. package/dist/locales/it.json +183 -131
  448. package/dist/locales/ja.json +237 -185
  449. package/dist/locales/nl.json +228 -176
  450. package/dist/locales/pl.json +233 -181
  451. package/dist/locales/pt.json +233 -181
  452. package/dist/locales/ro.json +232 -180
  453. package/dist/locales/ru.json +238 -186
  454. package/dist/locales/sq.json +232 -180
  455. package/dist/locales/sv.json +233 -181
  456. package/dist/locales/tr.json +239 -187
  457. package/dist/locales/zh.json +232 -180
  458. package/dist/patterns/alia-assistant/index.js +1 -1
  459. package/dist/patterns/anamnesis/index.js +1 -1
  460. package/dist/patterns/calendar/calendar-appointment-details.d.ts +8 -1
  461. package/dist/patterns/calendar/calendar-appointment-details.d.ts.map +1 -1
  462. package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts +10 -5
  463. package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts.map +1 -1
  464. package/dist/patterns/calendar/calendar-bookings-panel.d.ts +31 -0
  465. package/dist/patterns/calendar/calendar-bookings-panel.d.ts.map +1 -0
  466. package/dist/patterns/calendar/calendar-editor-hydration.d.ts +0 -2
  467. package/dist/patterns/calendar/calendar-editor-hydration.d.ts.map +1 -1
  468. package/dist/patterns/calendar/calendar-info-hover.d.ts +15 -1
  469. package/dist/patterns/calendar/calendar-info-hover.d.ts.map +1 -1
  470. package/dist/patterns/calendar/calendar-privacy.d.ts +23 -0
  471. package/dist/patterns/calendar/calendar-privacy.d.ts.map +1 -0
  472. package/dist/patterns/calendar/calendar-rail-settle.d.ts +14 -0
  473. package/dist/patterns/calendar/calendar-rail-settle.d.ts.map +1 -0
  474. package/dist/patterns/calendar/calendar-upcoming-panel.d.ts +32 -0
  475. package/dist/patterns/calendar/calendar-upcoming-panel.d.ts.map +1 -0
  476. package/dist/patterns/calendar/calendar-waiting-list-panel.d.ts +62 -0
  477. package/dist/patterns/calendar/calendar-waiting-list-panel.d.ts.map +1 -0
  478. package/dist/patterns/calendar/calendar-workspace.d.ts +14 -1
  479. package/dist/patterns/calendar/calendar-workspace.d.ts.map +1 -1
  480. package/dist/patterns/calendar/calendar-workspace.model.d.ts +37 -1
  481. package/dist/patterns/calendar/calendar-workspace.model.d.ts.map +1 -1
  482. package/dist/patterns/calendar/calendar.model.d.ts +8 -2
  483. package/dist/patterns/calendar/calendar.model.d.ts.map +1 -1
  484. package/dist/patterns/calendar/calendar.sheets.d.ts +43 -27
  485. package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
  486. package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
  487. package/dist/patterns/calendar/calendar.types.d.ts +6 -0
  488. package/dist/patterns/calendar/calendar.types.d.ts.map +1 -1
  489. package/dist/patterns/calendar/index.d.ts +2 -2
  490. package/dist/patterns/calendar/index.d.ts.map +1 -1
  491. package/dist/patterns/calendar/index.js +1 -1
  492. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  493. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  494. package/dist/patterns/signature-request/index.js +1 -1
  495. package/dist/tokens.css +1 -1
  496. package/package.json +3 -1
  497. package/dist/_chunks/appointment-card-WsDGBBut.js.map +0 -1
  498. package/dist/_chunks/appointment-timeline-ByfovxqR.js.map +0 -1
  499. package/dist/_chunks/button-nJaPh_HC.js.map +0 -1
  500. package/dist/_chunks/calendar-workspace-BqKBj26r.js +0 -9715
  501. package/dist/_chunks/calendar-workspace-BqKBj26r.js.map +0 -1
  502. package/dist/_chunks/editable-description-BOfAeY3T.js +0 -112
  503. package/dist/_chunks/editable-description-BOfAeY3T.js.map +0 -1
  504. package/dist/_chunks/file-manager-DvkFgj7d.js.map +0 -1
  505. package/dist/_chunks/note-timeline-CXfSV3yX.js +0 -231
  506. package/dist/_chunks/note-timeline-CXfSV3yX.js.map +0 -1
  507. package/dist/_chunks/notes-panel-4y5JioWN.js +0 -556
  508. package/dist/_chunks/notes-panel-4y5JioWN.js.map +0 -1
  509. package/dist/_chunks/panel-subview-BNXN8OEL.js.map +0 -1
  510. package/dist/_chunks/patient-summary-card-BzmJH9a-.js.map +0 -1
  511. package/dist/_chunks/receipt-euro-C6k4Gzhr.js.map +0 -1
  512. package/dist/_chunks/signature-request-Dej2g86d.js.map +0 -1
  513. package/dist/_chunks/skeleton-CZbwyJAA.js.map +0 -1
  514. package/dist/_chunks/tool-rail-BP8sjxCw.js +0 -667
  515. package/dist/_chunks/tool-rail-BP8sjxCw.js.map +0 -1
  516. package/dist/_chunks/treatment-receipt-D4kOLXOk.js +0 -94
  517. package/dist/_chunks/treatment-receipt-D4kOLXOk.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"appointment-peek-5S4O1VQP.js","sources":["../../src/components/appointment-peek/appointment-peek.tsx"],"sourcesContent":["import {\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { Armchair, Clock, EyeOff, Video } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Avatar } from '../avatar';\nimport { DescriptionList } from '../description-list';\nimport { HoverCard } from '../hover-card';\nimport { WorkflowStatusDisplay } from '../workflow-status';\nimport {\n appointmentStateWorkflow,\n type AppointmentState,\n} from '../_shared/entity-card';\n\n/* -------------------------------------------------------------------- */\n/* AppointmentPeek */\n/* */\n/* The body of a calendar hover card: who, when, where, and the status */\n/* in the kit's one status face. Renders inside `HoverCard.Content`; its */\n/* name is a `HoverCard.Heading`, so the card takes its accessible name */\n/* from the patient without the host wiring it. */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva(\n 'ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-sm)]',\n);\n\nexport interface AppointmentPeekDetail {\n /** Leading glyph, decorative. */\n icon?: ReactNode;\n /** The term, already translated: \"Care\", \"Operator\". */\n label: string;\n value: ReactNode;\n}\n\nexport interface AppointmentPeekProps extends HTMLAttributes<HTMLDivElement> {\n /** Patient name, or the event title for an appointment with no patient. */\n name: string;\n /** Photo for the avatar; initials are drawn from `name` without one. */\n avatarSrc?: string;\n /** Host-formatted time range, e.g. \"09:30–11:00\". */\n time: string;\n /** Chair or room, already translated. With `telehealth`, the visit type. */\n location?: string;\n /** Swaps the chair glyph for a video camera. */\n telehealth?: boolean;\n /**\n * Appointment status, shown through `WorkflowStatusDisplay`. Leave it out\n * when the host has none recorded: no status is not the same as\n * confirmed, so the card shows no status face at all.\n */\n status?: AppointmentState;\n /**\n * Override the status caption, e.g. \"Arrived · waiting 12 min\". Still shown\n * under `privacy`, so keep it free of patient data. Ignored without\n * `status`.\n */\n statusLabel?: string;\n /** Extra rows after time and location: care, operator. */\n details?: AppointmentPeekDetail[];\n /** Indicator chips (Badges): booked online, anamnesis. Never status. */\n flags?: ReactNode;\n /**\n * Masks the name and drops everything personal: avatar, details and\n * flags. Time, place and status stay; they\n * are not patient data.\n */\n privacy?: boolean;\n}\n\nexport const AppointmentPeek = forwardRef<HTMLDivElement, AppointmentPeekProps>(\n (\n {\n name,\n avatarSrc,\n time,\n location,\n telehealth = false,\n status,\n statusLabel,\n details,\n flags,\n privacy = false,\n className,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const workflow = status ? appointmentStateWorkflow(status) : null;\n const StatusIcon = workflow?.Icon;\n\n const LocationIcon = telehealth ? Video : Armchair;\n const showClinical = !privacy;\n\n const rows: {\n icon: ReactElement | null;\n label: string;\n value: ReactNode;\n }[] = [\n { icon: <Clock />, label: t('appointmentPeek.time'), value: time },\n ...(location\n ? [\n {\n icon: <LocationIcon />,\n label: t('appointmentPeek.location'),\n value: location,\n },\n ]\n : []),\n ...(showClinical && details\n ? details.map((detail) => ({\n icon: isValidElement(detail.icon) ? detail.icon : null,\n label: detail.label,\n value: detail.value,\n }))\n : []),\n ];\n\n return (\n <div\n ref={ref}\n data-component=\"appointment-peek\"\n data-status={status}\n className={rootVariants({ className })}\n {...props}\n >\n {/* Avatar, name and the indicator chips together, every fact on its\n own row below, status last: the same identity block as\n PatientDetails. */}\n <div className=\"ds:flex ds:min-w-0 ds:items-start ds:gap-[var(--spacing-sm)]\">\n {privacy ? null : (\n <Avatar\n size=\"sm\"\n name={name}\n src={avatarSrc}\n aria-hidden=\"true\"\n className=\"ds:shrink-0\"\n />\n )}\n <div className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <HoverCard.Heading className=\"ds:min-w-0\">\n {privacy ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <EyeOff\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0\"\n />\n {t('appointmentPeek.hiddenName')}\n </span>\n ) : (\n name\n )}\n </HoverCard.Heading>\n {showClinical && flags ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n {flags}\n </div>\n ) : null}\n </div>\n </div>\n\n <DescriptionList\n layout=\"inline\"\n density=\"compact\"\n divider=\"none\"\n // Label icons in the accent, as in PatientDetails.\n className=\"ds:[--description-list-icon-color:var(--accent)]\"\n >\n {rows.map((row, index) => (\n <DescriptionList.Row key={index} icon={row.icon}>\n <DescriptionList.Term>{row.label}</DescriptionList.Term>\n <DescriptionList.Detail>{row.value}</DescriptionList.Detail>\n </DescriptionList.Row>\n ))}\n </DescriptionList>\n\n {/* The kit's one status face: the same display the details panel,\n AppointmentCard and the history use, so a status never reads\n differently on the grid. Last, so the card reads who, what, then\n where it stands. Nothing at all when none is recorded. */}\n {status && workflow && StatusIcon ? (\n <div data-slot=\"workflow\">\n <WorkflowStatusDisplay\n size=\"sm\"\n value={status}\n option={{\n value: status,\n label: statusLabel ?? t(`appointmentCard.state.${status}`),\n icon: <StatusIcon aria-hidden=\"true\" />,\n tone: workflow.tone,\n }}\n />\n </div>\n ) : null}\n </div>\n );\n },\n);\nAppointmentPeek.displayName = 'AppointmentPeek';\n"],"names":["rootVariants","cva","AppointmentPeek","forwardRef","name","avatarSrc","time","location","telehealth","status","statusLabel","details","flags","privacy","className","props","ref","t","useTranslation","workflow","appointmentStateWorkflow","StatusIcon","LocationIcon","Video","Armchair","showClinical","rows","jsx","Clock","detail","isValidElement","jsxs","Avatar","HoverCard","EyeOff","DescriptionList","row","index","WorkflowStatusDisplay"],"mappings":";;;;;;;;;;;;;AA4BA,MAAMA,IAAeC;AAAA,EACnB;AACF,GA6CaC,IAAkBC;AAAA,EAC7B,CACE;AAAA,IACE,MAAAC;AAAA,IACA,WAAAC;AAAA,IACA,MAAAC;AAAA,IACA,UAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,QAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAWV,IAASW,EAAyBX,CAAM,IAAI,MACvDY,IAAaF,KAAA,gBAAAA,EAAU,MAEvBG,IAAed,IAAae,IAAQC,GACpCC,IAAe,CAACZ,GAEhBa,IAIA;AAAA,MACJ,EAAE,MAAM,gBAAAC,EAACC,GAAA,EAAM,GAAI,OAAOX,EAAE,sBAAsB,GAAG,OAAOX,EAAA;AAAA,MAC5D,GAAIC,IACA;AAAA,QACE;AAAA,UACE,wBAAOe,GAAA,EAAa;AAAA,UACpB,OAAOL,EAAE,0BAA0B;AAAA,UACnC,OAAOV;AAAA,QAAA;AAAA,MACT,IAEF,CAAA;AAAA,MACJ,GAAIkB,KAAgBd,IAChBA,EAAQ,IAAI,CAACkB,OAAY;AAAA,QACvB,MAAMC,EAAeD,EAAO,IAAI,IAAIA,EAAO,OAAO;AAAA,QAClD,OAAOA,EAAO;AAAA,QACd,OAAOA,EAAO;AAAA,MAAA,EACd,IACF,CAAA;AAAA,IAAC;AAGP,WACE,gBAAAE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAf;AAAA,QACA,kBAAe;AAAA,QACf,eAAaP;AAAA,QACb,WAAWT,EAAa,EAAE,WAAAc,GAAW;AAAA,QACpC,GAAGC;AAAA,QAKJ,UAAA;AAAA,UAAA,gBAAAgB,EAAC,OAAA,EAAI,WAAU,gEACZ,UAAA;AAAA,YAAAlB,IAAU,OACT,gBAAAc;AAAA,cAACK;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,MAAA5B;AAAA,gBACA,KAAKC;AAAA,gBACL,eAAY;AAAA,gBACZ,WAAU;AAAA,cAAA;AAAA,YAAA;AAAA,YAGd,gBAAA0B,EAAC,OAAA,EAAI,WAAU,wEACb,UAAA;AAAA,cAAA,gBAAAJ,EAACM,EAAU,SAAV,EAAkB,WAAU,cAC1B,UAAApB,IACC,gBAAAkB,EAAC,QAAA,EAAK,WAAU,6DACd,UAAA;AAAA,gBAAA,gBAAAJ;AAAA,kBAACO;AAAA,kBAAA;AAAA,oBACC,eAAY;AAAA,oBACZ,WAAU;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEXjB,EAAE,4BAA4B;AAAA,cAAA,EAAA,CACjC,IAEAb,GAEJ;AAAA,cACCqB,KAAgBb,IACf,gBAAAe,EAAC,SAAI,WAAU,mEACZ,aACH,IACE;AAAA,YAAA,EAAA,CACN;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAA;AAAA,YAACQ;AAAA,YAAA;AAAA,cACC,QAAO;AAAA,cACP,SAAQ;AAAA,cACR,SAAQ;AAAA,cAER,WAAU;AAAA,cAET,UAAAT,EAAK,IAAI,CAACU,GAAKC,MACd,gBAAAN,EAACI,EAAgB,KAAhB,EAAgC,MAAMC,EAAI,MACzC,UAAA;AAAA,gBAAA,gBAAAT,EAACQ,EAAgB,MAAhB,EAAsB,UAAAC,EAAI,OAAM;AAAA,gBACjC,gBAAAT,EAACQ,EAAgB,QAAhB,EAAwB,YAAI,MAAA,CAAM;AAAA,cAAA,EAAA,GAFXE,CAG1B,CACD;AAAA,YAAA;AAAA,UAAA;AAAA,UAOF5B,KAAUU,KAAYE,IACrB,gBAAAM,EAAC,OAAA,EAAI,aAAU,YACb,UAAA,gBAAAA;AAAA,YAACW;AAAA,YAAA;AAAA,cACC,MAAK;AAAA,cACL,OAAO7B;AAAA,cACP,QAAQ;AAAA,gBACN,OAAOA;AAAA,gBACP,OAAOC,KAAeO,EAAE,yBAAyBR,CAAM,EAAE;AAAA,gBACzD,MAAM,gBAAAkB,EAACN,GAAA,EAAW,eAAY,OAAA,CAAO;AAAA,gBACrC,MAAMF,EAAS;AAAA,cAAA;AAAA,YACjB;AAAA,UAAA,GAEJ,IACE;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACAjB,EAAgB,cAAc;"}
1
+ {"version":3,"file":"appointment-peek-abiR0T9e.js","sources":["../../src/components/appointment-peek/appointment-peek.tsx"],"sourcesContent":["import {\n forwardRef,\n isValidElement,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { Armchair, Clock, EyeOff, Video } from 'lucide-react';\nimport { useTranslation } from 'react-i18next';\nimport { Avatar } from '../avatar';\nimport { DescriptionList } from '../description-list';\nimport { HoverCard } from '../hover-card';\nimport { WorkflowStatusDisplay } from '../workflow-status';\nimport {\n appointmentStateWorkflow,\n type AppointmentState,\n} from '../_shared/entity-card';\n\n/* -------------------------------------------------------------------- */\n/* AppointmentPeek */\n/* */\n/* The body of a calendar hover card: who, when, where, and the status */\n/* in the kit's one status face. Renders inside `HoverCard.Content`; its */\n/* name is a `HoverCard.Heading`, so the card takes its accessible name */\n/* from the patient without the host wiring it. */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva(\n 'ds:flex ds:min-w-0 ds:flex-col ds:gap-[var(--spacing-sm)]',\n);\n\nexport interface AppointmentPeekDetail {\n /** Leading glyph, decorative. */\n icon?: ReactNode;\n /** The term, already translated: \"Care\", \"Operator\". */\n label: string;\n value: ReactNode;\n}\n\nexport interface AppointmentPeekProps extends HTMLAttributes<HTMLDivElement> {\n /** Patient name, or the event title for an appointment with no patient. */\n name: string;\n /** Photo for the avatar; initials are drawn from `name` without one. */\n avatarSrc?: string;\n /** Host-formatted time range, e.g. \"09:30–11:00\". */\n time: string;\n /** Chair or room, already translated. With `telehealth`, the visit type. */\n location?: string;\n /** Swaps the chair glyph for a video camera. */\n telehealth?: boolean;\n /**\n * Appointment status, shown through `WorkflowStatusDisplay`. Leave it out\n * when the host has none recorded: no status is not the same as\n * confirmed, so the card shows no status face at all.\n */\n status?: AppointmentState;\n /**\n * Override the status caption, e.g. \"Arrived · waiting 12 min\". Still shown\n * under `privacy`, so keep it free of patient data. Ignored without\n * `status`.\n */\n statusLabel?: string;\n /** Extra rows after time and location: care, operator. */\n details?: AppointmentPeekDetail[];\n /** Indicator chips (Badges): booked online, anamnesis. Never status. */\n flags?: ReactNode;\n /**\n * Masks the name and drops everything personal: avatar, details and\n * flags. Time, place and status stay; they\n * are not patient data.\n */\n privacy?: boolean;\n}\n\nexport const AppointmentPeek = forwardRef<HTMLDivElement, AppointmentPeekProps>(\n (\n {\n name,\n avatarSrc,\n time,\n location,\n telehealth = false,\n status,\n statusLabel,\n details,\n flags,\n privacy = false,\n className,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const workflow = status ? appointmentStateWorkflow(status) : null;\n const StatusIcon = workflow?.Icon;\n\n const LocationIcon = telehealth ? Video : Armchair;\n const showClinical = !privacy;\n\n const rows: {\n icon: ReactElement | null;\n label: string;\n value: ReactNode;\n }[] = [\n { icon: <Clock />, label: t('appointmentPeek.time'), value: time },\n ...(location\n ? [\n {\n icon: <LocationIcon />,\n label: t('appointmentPeek.location'),\n value: location,\n },\n ]\n : []),\n ...(showClinical && details\n ? details.map((detail) => ({\n icon: isValidElement(detail.icon) ? detail.icon : null,\n label: detail.label,\n value: detail.value,\n }))\n : []),\n ];\n\n return (\n <div\n ref={ref}\n data-component=\"appointment-peek\"\n data-status={status}\n className={rootVariants({ className })}\n {...props}\n >\n {/* Avatar, name and the indicator chips together, every fact on its\n own row below, status last: the same identity block as\n PatientDetails. */}\n <div className=\"ds:flex ds:min-w-0 ds:items-start ds:gap-[var(--spacing-sm)]\">\n {privacy ? null : (\n <Avatar\n size=\"sm\"\n name={name}\n src={avatarSrc}\n aria-hidden=\"true\"\n className=\"ds:shrink-0\"\n />\n )}\n <div className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <HoverCard.Heading className=\"ds:min-w-0\">\n {privacy ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <EyeOff\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0\"\n />\n {t('appointmentPeek.hiddenName')}\n </span>\n ) : (\n name\n )}\n </HoverCard.Heading>\n {showClinical && flags ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n {flags}\n </div>\n ) : null}\n </div>\n </div>\n\n <DescriptionList\n layout=\"inline\"\n density=\"compact\"\n divider=\"none\"\n // Label icons in the accent, as in PatientDetails.\n className=\"ds:[--description-list-icon-color:var(--accent)]\"\n >\n {rows.map((row, index) => (\n <DescriptionList.Row key={index} icon={row.icon}>\n <DescriptionList.Term>{row.label}</DescriptionList.Term>\n <DescriptionList.Detail>{row.value}</DescriptionList.Detail>\n </DescriptionList.Row>\n ))}\n </DescriptionList>\n\n {/* The kit's one status face: the same display the details panel,\n AppointmentCard and the history use, so a status never reads\n differently on the grid. Last, so the card reads who, what, then\n where it stands. Nothing at all when none is recorded. */}\n {status && workflow && StatusIcon ? (\n <div data-slot=\"workflow\">\n <WorkflowStatusDisplay\n size=\"sm\"\n value={status}\n option={{\n value: status,\n label: statusLabel ?? t(`appointmentCard.state.${status}`),\n icon: <StatusIcon aria-hidden=\"true\" />,\n tone: workflow.tone,\n }}\n />\n </div>\n ) : null}\n </div>\n );\n },\n);\nAppointmentPeek.displayName = 'AppointmentPeek';\n"],"names":["rootVariants","cva","AppointmentPeek","forwardRef","name","avatarSrc","time","location","telehealth","status","statusLabel","details","flags","privacy","className","props","ref","t","useTranslation","workflow","appointmentStateWorkflow","StatusIcon","LocationIcon","Video","Armchair","showClinical","rows","jsx","Clock","detail","isValidElement","jsxs","Avatar","HoverCard","EyeOff","DescriptionList","row","index","WorkflowStatusDisplay"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
- import { jsxs as x, jsx as o, Fragment as je } from "react/jsx-runtime";
2
- import { forwardRef as Ce, useId as He, useMemo as j, useRef as v, useState as $, useEffect as Me, useCallback as b, useImperativeHandle as Ne } from "react";
3
- import { c as _e } from "./index-D2ZczOXr.js";
4
- import { useTranslation as Fe } from "react-i18next";
5
- import { A as ne } from "./appointment-card-WsDGBBut.js";
6
- import { B as P } from "./button-nJaPh_HC.js";
7
- import { B as ze } from "./button-group-QmN1VdUW.js";
8
- import { D as Ae } from "./date-picker-6tFnKFty.js";
9
- import { P as Be } from "./panel-header-D_mTdhUp.js";
10
- import { S as Ke } from "./skeleton-CZbwyJAA.js";
11
- import { E as Ee } from "./empty-state-X0sVPfVo.js";
1
+ import { jsxs as x, jsx as o, Fragment as He } from "react/jsx-runtime";
2
+ import { forwardRef as Me, useId as Ne, useMemo as j, useRef as v, useState as $, useEffect as _e, useCallback as b, useImperativeHandle as Fe } from "react";
3
+ import { c as ze } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as Ae } from "react-i18next";
5
+ import { A as ne } from "./appointment-card-TgR_2GKS.js";
6
+ import { B as P } from "./button-CaUe1uyd.js";
7
+ import { B as Be } from "./button-group-R32U7SyV.js";
8
+ import { D as Ke } from "./date-picker-6tFnKFty.js";
9
+ import { P as Ee } from "./panel-header-D_mTdhUp.js";
10
+ import { S as Ye } from "./skeleton-B1KTdJ4N.js";
11
+ import { E as $e } from "./empty-state-BUN_UAWf.js";
12
12
  import { u as ae } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
13
- import { u as Ye } from "./use-prefers-reduced-motion-BMwIQRjB.js";
14
- import { a as $e, u as Pe, R as We } from "./use-list-reflow-Cw43nxw5.js";
15
- import { u as qe } from "./registry-DvAUVLHh.js";
16
- import { C as Ge } from "./calendar-days-BGWklvE-.js";
17
- const Ve = {
13
+ import { u as Pe } from "./use-prefers-reduced-motion-BMwIQRjB.js";
14
+ import { a as We, u as qe, R as Ge } from "./use-list-reflow-Cw43nxw5.js";
15
+ import { u as Ve } from "./registry-DvAUVLHh.js";
16
+ import { C as Le } from "./calendar-days-BGWklvE-.js";
17
+ const Oe = {
18
18
  id: "appointment-timeline",
19
19
  // 'pick' backs select_item (non-persisting activation through
20
20
  // onOpenAppointment); 'scroll' backs jump_to_today, which re-anchors the
@@ -70,13 +70,13 @@ const Ve = {
70
70
  description: "Stable appointment id emitted on each rendered AppointmentCard inside the timeline."
71
71
  }
72
72
  }
73
- }, ie = 96, Le = _e(
73
+ }, ie = 96, Qe = ze(
74
74
  [
75
75
  "ds:flex ds:flex-col ds:h-full ds:min-h-0",
76
76
  "ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]"
77
77
  ].join(" "),
78
78
  { variants: { size: { sm: "", md: "" } }, defaultVariants: { size: "sm" } }
79
- ), Oe = [
79
+ ), Ue = [
80
80
  "ds:flex-1 ds:min-h-0 ds:overflow-y-auto",
81
81
  "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]",
82
82
  "ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]",
@@ -95,7 +95,7 @@ function k(i) {
95
95
  const n = `${i.getMonth() + 1}`.padStart(2, "0"), d = `${i.getDate()}`.padStart(2, "0");
96
96
  return `${i.getFullYear()}-${n}-${d}`;
97
97
  }
98
- function Qe(i) {
98
+ function Xe(i) {
99
99
  const n = [...i].sort(
100
100
  (g, m) => +new Date(g.startIso) - +new Date(m.startIso)
101
101
  ), d = /* @__PURE__ */ new Map();
@@ -110,7 +110,7 @@ function Qe(i) {
110
110
  }
111
111
  return [...d.values()];
112
112
  }
113
- const Ue = Ce(
113
+ const Ze = Me(
114
114
  ({
115
115
  id: i,
116
116
  items: n,
@@ -134,19 +134,21 @@ const Ue = Ce(
134
134
  emptyDescription: ce,
135
135
  className: de,
136
136
  "aria-label": me,
137
- ...pe
138
- }, ue) => {
139
- const { t: l, i18n: fe } = Fe(), W = He(), z = Ye(), A = m ?? fe.language, q = g ?? l("appointmentTimeline.title"), c = j(
137
+ headerExtra: pe,
138
+ hideDefaultStatus: ue = !1,
139
+ ...fe
140
+ }, ge) => {
141
+ const { t: l, i18n: he } = Ae(), W = Ne(), z = Pe(), A = m ?? he.language, q = g ?? l("appointmentTimeline.title"), c = j(
140
142
  () => d ? new Date(d) : /* @__PURE__ */ new Date(),
141
143
  [d]
142
- ), u = j(() => Qe(n), [n]), G = z || void 0, ge = j(
144
+ ), u = j(() => Xe(n), [n]), G = z || void 0, ye = j(
143
145
  () => u.flatMap((e) => e.items.map((t) => t.id)).join(),
144
146
  [u]
145
- ), { containerRef: he } = $e({
146
- key: ge,
147
+ ), { containerRef: ve } = We({
148
+ key: ye,
147
149
  reduceMotion: G
148
- }), V = Pe({ reduceMotion: G }), L = v(n), [O, Q] = $([]);
149
- Me(() => {
150
+ }), V = qe({ reduceMotion: G }), L = v(n), [O, Q] = $([]);
151
+ _e(() => {
150
152
  const e = L.current;
151
153
  if (e === n) return;
152
154
  const t = new Set(n.map((a) => a.id)), s = e.filter((a) => !t.has(a.id));
@@ -160,18 +162,18 @@ const Ue = Ce(
160
162
  if (u.length === 0) return;
161
163
  const e = k(c), t = u.map((s) => s.key);
162
164
  return t.includes(e) ? e : t.find((s) => s >= e) ?? t[t.length - 1];
163
- }, [u, c]), D = v(null), w = v(/* @__PURE__ */ new Map()), Z = v(!1), K = v(void 0), J = v(0), [ye, ve] = $(!1), [ke, Te] = $(!1), R = b(() => {
165
+ }, [u, c]), D = v(null), w = v(/* @__PURE__ */ new Map()), Z = v(!1), K = v(void 0), J = v(0), [ke, Te] = $(!1), [be, xe] = $(!1), R = b(() => {
164
166
  const e = D.current;
165
167
  if (!e) return;
166
168
  const { scrollTop: t, scrollHeight: s, clientHeight: a } = e;
167
- ve(t > 1), Te(t + a < s - 1);
169
+ Te(t > 1), xe(t + a < s - 1);
168
170
  }, []), I = b(
169
171
  (e, t) => {
170
172
  const s = D.current;
171
173
  if (!s) return;
172
174
  let a = w.current.get(e);
173
175
  if (!a) {
174
- const S = [...w.current.keys()].sort(), se = S.find((Se) => Se >= e) ?? S[S.length - 1];
176
+ const S = [...w.current.keys()].sort(), se = S.find((Ce) => Ce >= e) ?? S[S.length - 1];
175
177
  a = se ? w.current.get(se) : void 0;
176
178
  }
177
179
  if (!a) return;
@@ -201,7 +203,7 @@ const Ue = Ce(
201
203
  const t = new ResizeObserver(R);
202
204
  return t.observe(e), () => t.disconnect();
203
205
  }, [R]);
204
- const be = b(() => {
206
+ const De = b(() => {
205
207
  R();
206
208
  const e = D.current;
207
209
  if (!e) return;
@@ -221,16 +223,16 @@ const Ue = Ce(
221
223
  I(t, !0), s || _ == null || _(e.toISOString());
222
224
  },
223
225
  [I, _]
224
- ), xe = b(() => T(c), [T, c]), De = b(() => {
226
+ ), we = b(() => T(c), [T, c]), Re = b(() => {
225
227
  const e = new Date(c), t = (e.getDay() + 6) % 7;
226
228
  e.setDate(e.getDate() - t), T(e);
227
- }, [T, c]), we = b(() => {
229
+ }, [T, c]), Ie = b(() => {
228
230
  T(new Date(c.getFullYear(), c.getMonth(), 1));
229
231
  }, [T, c]), E = v(n);
230
232
  E.current = n;
231
233
  const ee = v(null);
232
- Ne(ue, () => ee.current, []);
233
- const Re = j(
234
+ Fe(ge, () => ee.current, []);
235
+ const Se = j(
234
236
  () => ({
235
237
  getItems: () => E.current.map((e) => ({ id: e.id, state: e.state })),
236
238
  selectItem: (e) => {
@@ -241,13 +243,13 @@ const Ue = Ce(
241
243
  }),
242
244
  [y, I, c]
243
245
  );
244
- qe(Ve, Re, i);
245
- const Ie = u.length === 0 && !M && !N, te = (e) => /* @__PURE__ */ o(
246
+ Ve(Oe, Se, i);
247
+ const je = u.length === 0 && !M && !N, te = (e) => /* @__PURE__ */ o(
246
248
  "div",
247
249
  {
248
250
  "aria-hidden": "true",
249
251
  className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:py-[var(--spacing-xs)]",
250
- children: /* @__PURE__ */ o(Ke, { variant: "rectangular", height: "3.5rem" })
252
+ children: /* @__PURE__ */ o(Ye, { variant: "rectangular", height: "3.5rem" })
251
253
  },
252
254
  e
253
255
  );
@@ -258,23 +260,23 @@ const Ue = Ce(
258
260
  "data-component": "appointment-timeline",
259
261
  "data-component-id": i,
260
262
  "aria-label": me ?? q,
261
- className: Le({ size: r, className: de }),
262
- ...pe,
263
+ className: Qe({ size: r, className: de }),
264
+ ...fe,
263
265
  children: [
264
266
  /* @__PURE__ */ o(
265
- Be,
267
+ Ee,
266
268
  {
267
- icon: /* @__PURE__ */ o(Ge, {}),
269
+ icon: /* @__PURE__ */ o(Le, {}),
268
270
  title: q,
269
- filters: re ? /* @__PURE__ */ x(je, { children: [
270
- /* @__PURE__ */ x(ze, { label: l("appointmentTimeline.filtersLabel"), children: [
271
- /* @__PURE__ */ o(P, { intent: "outline", size: "sm", onClick: xe, children: l("appointmentTimeline.today") }),
272
- /* @__PURE__ */ o(P, { intent: "outline", size: "sm", onClick: De, children: l("appointmentTimeline.thisWeek") }),
273
- /* @__PURE__ */ o(P, { intent: "outline", size: "sm", onClick: we, children: l("appointmentTimeline.thisMonth") })
271
+ filters: re ? /* @__PURE__ */ x(He, { children: [
272
+ /* @__PURE__ */ x(Be, { label: l("appointmentTimeline.filtersLabel"), children: [
273
+ /* @__PURE__ */ o(P, { intent: "outline", size: "sm", onClick: we, children: l("appointmentTimeline.today") }),
274
+ /* @__PURE__ */ o(P, { intent: "outline", size: "sm", onClick: Re, children: l("appointmentTimeline.thisWeek") }),
275
+ /* @__PURE__ */ o(P, { intent: "outline", size: "sm", onClick: Ie, children: l("appointmentTimeline.thisMonth") })
274
276
  ] }),
275
277
  /* @__PURE__ */ o("label", { htmlFor: W, className: "ds:sr-only", children: l("appointmentTimeline.jumpToDate") }),
276
278
  /* @__PURE__ */ o(
277
- Ae,
279
+ Ke,
278
280
  {
279
281
  id: W,
280
282
  size: "sm",
@@ -287,8 +289,9 @@ const Ue = Ce(
287
289
  ] }) : void 0
288
290
  }
289
291
  ),
290
- Ie ? /* @__PURE__ */ o("div", { className: "ds:flex-1 ds:p-[var(--spacing-md)]", children: /* @__PURE__ */ o(
291
- Ee,
292
+ pe,
293
+ je ? /* @__PURE__ */ o("div", { className: "ds:flex-1 ds:p-[var(--spacing-md)]", children: /* @__PURE__ */ o(
294
+ $e,
292
295
  {
293
296
  variant: "first-use",
294
297
  size: "sm",
@@ -300,16 +303,16 @@ const Ue = Ce(
300
303
  {
301
304
  ref: D,
302
305
  tabIndex: 0,
303
- onScroll: be,
304
- "data-fade-top": ye ? "true" : void 0,
305
- "data-fade-bottom": ke ? "true" : void 0,
306
- className: Oe,
306
+ onScroll: De,
307
+ "data-fade-top": ke ? "true" : void 0,
308
+ "data-fade-bottom": be ? "true" : void 0,
309
+ className: Ue,
307
310
  children: [
308
311
  M ? te("loading-earlier") : null,
309
312
  /* @__PURE__ */ x(
310
313
  "ol",
311
314
  {
312
- ref: he,
315
+ ref: ve,
313
316
  role: "list",
314
317
  className: "ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-md)] ds:p-0",
315
318
  children: [
@@ -322,7 +325,7 @@ const Ue = Ce(
322
325
  className: "ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]",
323
326
  children: [
324
327
  /* @__PURE__ */ o(
325
- Xe,
328
+ Je,
326
329
  {
327
330
  date: e.date,
328
331
  now: c,
@@ -348,9 +351,10 @@ const Ue = Ce(
348
351
  currency: h,
349
352
  onActivate: y,
350
353
  selected: t.id === H,
354
+ hideDefaultStatus: ue,
351
355
  "data-appointment-id": t.id,
352
356
  "data-reflow-id": t.id,
353
- className: We
357
+ className: Ge
354
358
  },
355
359
  t.id
356
360
  ))
@@ -393,8 +397,8 @@ const Ue = Ce(
393
397
  );
394
398
  }
395
399
  );
396
- Ue.displayName = "AppointmentTimeline";
397
- function Xe({
400
+ Ze.displayName = "AppointmentTimeline";
401
+ function Je({
398
402
  date: i,
399
403
  now: n,
400
404
  locale: d,
@@ -443,7 +447,7 @@ function Xe({
443
447
  );
444
448
  }
445
449
  export {
446
- Ue as A,
447
- Ve as a
450
+ Ze as A,
451
+ Oe as a
448
452
  };
449
- //# sourceMappingURL=appointment-timeline-ByfovxqR.js.map
453
+ //# sourceMappingURL=appointment-timeline-CCnyUYKz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appointment-timeline-CCnyUYKz.js","sources":["../../src/components/appointment-timeline/appointment-timeline.agent.ts","../../src/components/appointment-timeline/appointment-timeline.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — AppointmentTimeline. */\n/* */\n/* Timeline surface: read appointment ids + lifecycle state (never */\n/* patient names / treatments), activate a row through the curated handle, */\n/* and re-anchor the scroll on today. In-page (no open/close). */\n/* `showPatient` is presentation only — it changes which name each row */\n/* leads with, never what the adapter reads or exposes. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AppointmentTimelineHandle } from './appointment-timeline';\n\nexport const appointmentTimelineAgent: AgentAdapter<AppointmentTimelineHandle> =\n {\n id: 'appointment-timeline',\n // 'pick' backs select_item (non-persisting activation through\n // onOpenAppointment); 'scroll' backs jump_to_today, which re-anchors the\n // scroll viewport (mirrors practice-results' scroll_to_result).\n capabilities: ['scroll', 'pick'],\n state: {\n items: {\n type: 'Array<{ id: string; state: string }>',\n descriptionKey: 'ui.agent.appointmentTimeline.state.items',\n description:\n 'Currently-rendered appointments. Ids + lifecycle state only — never patient identity.',\n read: (handle) => handle.getItems(),\n },\n },\n actions: {\n select_item: {\n safety: 'read',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: { id: { type: 'string' } },\n required: ['id'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.appointmentTimeline.actions.selectItem',\n description: 'Activate the appointment with the given id.',\n invoke: (handle, args: { id: string }) => {\n handle.selectItem(args.id);\n },\n },\n jump_to_today: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.appointmentTimeline.actions.jumpToToday',\n description: \"Re-anchor the timeline scroll on today's appointments.\",\n invoke: (handle) => {\n handle.jumpToToday();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'appointment-timeline',\n description: 'Marks the AppointmentTimeline wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific timeline from the agent.',\n },\n item: {\n attr: 'data-appointment-id',\n description:\n 'Stable appointment id emitted on each rendered AppointmentCard inside the timeline.',\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, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CalendarDays } from 'lucide-react';\nimport { AppointmentCard, type AppointmentItem } from '../appointment-card';\nimport { Button } from '../button';\nimport { ButtonGroup } from '../button-group';\nimport { DatePicker } from '../date-picker';\nimport { PanelHeader } from '../panel-header';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { usePrefersReducedMotion } from '../../hooks/use-prefers-reduced-motion';\nimport { REFLOW_ROW_CLASS, useListReflow } from '../../hooks/use-list-reflow';\nimport { useExitTransition } from '../../hooks/use-exit-transition';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { appointmentTimelineAgent } from './appointment-timeline.agent';\n\n/* -------------------------------------------------------------------- */\n/* AppointmentTimeline */\n/* */\n/* A vertical, day-grouped appointment timeline for the Control Room */\n/* rail. Unlike AppointmentTray (a bordered card of a flat list), this */\n/* fills the rail edge-to-edge: appointments are grouped under day */\n/* headers, the scroll is anchored on TODAY, and it scrolls infinitely */\n/* into the past and future — the consumer feeds more via onLoadEarlier */\n/* / onLoadLater as either edge is reached (scroll position is preserved */\n/* when earlier items prepend). Date-filter presets + a jump-to-date */\n/* picker re-anchor the scroll. Top + bottom transparent gradient fades */\n/* (a block-axis mask) signal more content beyond each edge. */\n/* */\n/* Each row reuses AppointmentCard (care-plan + chair chips included). */\n/* All visible text flows through useTranslation('ui') against the */\n/* `appointmentTimeline.*` namespace; no PHI reaches the agent adapter. */\n/* -------------------------------------------------------------------- */\n\n/* How close (px) to an edge before the matching load callback fires. */\nconst EDGE_LOAD_THRESHOLD = 96;\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\n/** Curated imperative handle — identifiers + lifecycle state only. */\nexport interface AppointmentTimelineHandle {\n getItems: () => Array<{ id: string; state: string }>;\n selectItem: (id: string) => void;\n jumpToToday: () => void;\n}\n\nexport interface AppointmentTimelineProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'onClick' | 'id' | 'title'\n> {\n /** Stable instance id, surfaced as `data-component-id`. */\n id?: string;\n /** Appointments to render — any order; grouped + sorted internally. */\n items: AppointmentItem[];\n /**\n * ISO-8601 \"now\" anchor — the timeline scrolls to this day on mount and the\n * \"Today\" preset returns to it. Defaults to the current instant. Stories pass\n * a fixed value for deterministic snapshots.\n */\n nowIso?: string;\n /** Panel heading. Defaults to the localised \"Appointments\". */\n title?: string;\n /** BCP-47 locale override for day headers + each AppointmentCard. */\n locale?: string;\n /** ISO-4217 currency code passed to each AppointmentCard. */\n currency?: string;\n /** Visual density passed to each AppointmentCard. */\n size?: 'sm' | 'md';\n /**\n * Lead each row with the PATIENT (avatar + name as the row title) rather\n * than the operator. Default `false`: the timeline was built for a\n * patient-scoped rail, where repeating the name on every row is noise. A\n * clinic-wide agenda — \"who is coming in next\" across the practice —\n * passes `true`, and rows with no patient read as \"No patient\".\n */\n showPatient?: boolean;\n /** Fires when a row is activated. */\n onOpenAppointment?: (item: AppointmentItem) => void;\n /**\n * The id of the currently selected appointment. The matching card\n * renders with `selected` (info-tinted accent + `aria-current`) so the\n * eye keeps its place in the list after a click.\n */\n selectedId?: string;\n\n /* ----- Infinite scroll ----- */\n /** Load earlier (past) appointments — fired when the top edge is reached. */\n onLoadEarlier?: () => void;\n /** Load later (future) appointments — fired when the bottom edge is reached. */\n onLoadLater?: () => void;\n /** Whether more past appointments exist. Defaults to `true` when `onLoadEarlier` is set. */\n hasMoreEarlier?: boolean;\n /** Whether more future appointments exist. Defaults to `true` when `onLoadLater` is set. */\n hasMoreLater?: boolean;\n /** Show a loading row at the top edge. */\n loadingEarlier?: boolean;\n /** Show a loading row at the bottom edge. */\n loadingLater?: boolean;\n\n /* ----- Filters ----- */\n /** Show the date-filter row (presets + jump-to-date). Default `true`. */\n showFilters?: boolean;\n /**\n * Fired when a jump-to-date / preset targets a day outside the loaded range,\n * so the consumer can load it. The timeline scrolls to the nearest rendered\n * day until then.\n */\n onJumpToDate?: (dateIso: string) => void;\n\n /* ----- Empty ----- */\n emptyTitle?: string;\n emptyDescription?: string;\n\n /** Accessible name for the panel region (defaults to `title`). */\n 'aria-label'?: string;\n\n /**\n * Content rendered between the header/filter row and the scroll region —\n * a summary strip, a \"happening now\" band, anything the host needs\n * ahead of the day-grouped list. Omitted by default (no change to\n * today's layout). Not part of the scroll region: it stays fixed like\n * the header above it.\n */\n headerExtra?: ReactNode;\n /**\n * Forwarded to every row's `AppointmentCard`: withhold the lifecycle\n * badge for the default/expected state (`confirmed`). Default `false`\n * (today's behaviour — every state shows its badge).\n */\n hideDefaultStatus?: boolean;\n}\n\n/* -------------------------------------------------------------------- */\n/* CVA */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva(\n [\n 'ds:flex ds:flex-col ds:h-full ds:min-h-0',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n ].join(' '),\n { variants: { size: { sm: '', md: '' } }, defaultVariants: { size: 'sm' } },\n);\n\n/* Scroll region with a block-axis fade mask. The CSS custom properties flip to\n `transparent` at whichever edge has more content (data-fade-top /\n data-fade-bottom), mirroring the TabBar edge-mask technique on the Y axis.\n Disabled under reduced-motion, the accessible theme, and forced-colors. */\nconst scrollRegionClasses = [\n 'ds:flex-1 ds:min-h-0 ds:overflow-y-auto',\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]',\n 'ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n 'ds:[--atl-mask-top:black] ds:[--atl-mask-bottom:black]',\n 'ds:data-[fade-top=true]:[--atl-mask-top:transparent]',\n 'ds:data-[fade-bottom=true]:[--atl-mask-bottom:transparent]',\n 'ds:[mask-image:linear-gradient(to_bottom,var(--atl-mask-top)_0,black_var(--atl-fade-distance,var(--spacing-lg)),black_calc(100%-var(--atl-fade-distance,var(--spacing-lg))),var(--atl-mask-bottom)_100%)]',\n 'ds:motion-reduce:[mask-image:none]',\n 'ds:[.theme-accessible_&]:[mask-image:none]',\n 'ds:forced-colors:[mask-image:none]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:[outline-offset:-2px]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n].join(' ');\n\n/* -------------------------------------------------------------------- */\n/* Day grouping + header labels */\n/* -------------------------------------------------------------------- */\n\ninterface DayGroup {\n key: string;\n date: Date;\n items: AppointmentItem[];\n}\n\n/** Local calendar day key (`YYYY-MM-DD`) — sorts chronologically as a string. */\nfunction localDayKey(d: Date): string {\n const m = `${d.getMonth() + 1}`.padStart(2, '0');\n const day = `${d.getDate()}`.padStart(2, '0');\n return `${d.getFullYear()}-${m}-${day}`;\n}\n\nfunction groupByDay(items: AppointmentItem[]): DayGroup[] {\n const sorted = [...items].sort(\n (a, b) => +new Date(a.startIso) - +new Date(b.startIso),\n );\n const map = new Map<string, DayGroup>();\n for (const item of sorted) {\n const d = new Date(item.startIso);\n const key = localDayKey(d);\n let group = map.get(key);\n if (!group) {\n group = {\n key,\n date: new Date(d.getFullYear(), d.getMonth(), d.getDate()),\n items: [],\n };\n map.set(key, group);\n }\n group.items.push(item);\n }\n return [...map.values()];\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const AppointmentTimeline = forwardRef<\n HTMLElement,\n AppointmentTimelineProps\n>(\n (\n {\n id,\n items,\n nowIso,\n title,\n locale,\n currency,\n size = 'sm',\n showPatient = false,\n onOpenAppointment,\n selectedId,\n onLoadEarlier,\n onLoadLater,\n hasMoreEarlier,\n hasMoreLater,\n loadingEarlier = false,\n loadingLater = false,\n showFilters = true,\n onJumpToDate,\n emptyTitle,\n emptyDescription,\n className,\n 'aria-label': ariaLabel,\n headerExtra,\n hideDefaultStatus = false,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const jumpId = useId();\n const prefersReducedMotion = usePrefersReducedMotion();\n const resolvedLocale = locale ?? i18n.language;\n\n const heading = title ?? t('appointmentTimeline.title');\n const now = useMemo(\n () => (nowIso ? new Date(nowIso) : new Date()),\n [nowIso],\n );\n\n const groups = useMemo(() => groupByDay(items), [items]);\n\n /* Reflow + exit transitions — the same pair notes and tasks use. When\n an appointment is added or removed, surviving cards slide to their\n new positions instead of snapping; a removed card fades out in place\n before the host drops it, so the removal reads as a removal. */\n const reduceMotion = prefersReducedMotion || undefined;\n const flatItemIds = useMemo(\n () => groups.flatMap((g) => g.items.map((i) => i.id)).join(),\n [groups],\n );\n const { containerRef: reflowRef } = useListReflow<HTMLOListElement>({\n key: flatItemIds,\n reduceMotion,\n });\n const exitTransition = useExitTransition({ reduceMotion });\n\n /* Track removed items so they can fade out in place. The previous\n items array is diffed against the current one; removed ids are held\n in `leavingItems` and rendered after the live groups, faded, until\n the exit transition elapses and drops them. */\n const prevItemsRef = useRef(items);\n const [leavingItems, setLeavingItems] = useState<AppointmentItem[]>([]);\n useEffect(() => {\n const prev = prevItemsRef.current;\n if (prev === items) return;\n const currentIds = new Set(items.map((i) => i.id));\n const removed = prev.filter((i) => !currentIds.has(i.id));\n if (removed.length > 0) {\n setLeavingItems((prev) => [...prev, ...removed]);\n removed.forEach((item) => {\n exitTransition.leave(item.id, () => {\n setLeavingItems((prev) => prev.filter((i) => i.id !== item.id));\n });\n });\n }\n prevItemsRef.current = items;\n }, [items, exitTransition]);\n\n const moreEarlier = hasMoreEarlier ?? !!onLoadEarlier;\n const moreLater = hasMoreLater ?? !!onLoadLater;\n\n /* The day to anchor on: today if present, else the nearest upcoming day,\n else the last day we have. */\n const anchorKey = useMemo(() => {\n if (groups.length === 0) return undefined;\n const todayKey = localDayKey(now);\n const keys = groups.map((g) => g.key);\n if (keys.includes(todayKey)) return todayKey;\n return keys.find((k) => k >= todayKey) ?? keys[keys.length - 1];\n }, [groups, now]);\n\n const scrollRef = useRef<HTMLDivElement>(null);\n const dayElRefs = useRef<Map<string, HTMLElement>>(new Map());\n const hasAnchored = useRef(false);\n const prevFirstKey = useRef<string | undefined>(undefined);\n const prevScrollHeight = useRef(0);\n\n const [fadeTop, setFadeTop] = useState(false);\n const [fadeBottom, setFadeBottom] = useState(false);\n\n const updateEdges = useCallback(() => {\n const region = scrollRef.current;\n if (!region) return;\n const { scrollTop, scrollHeight, clientHeight } = region;\n setFadeTop(scrollTop > 1);\n setFadeBottom(scrollTop + clientHeight < scrollHeight - 1);\n }, []);\n\n /* Scroll a day into view at the top of the region. Falls back to the\n nearest rendered day on/after the target (presets may land on an empty\n day). Uses getBoundingClientRect so it is offsetParent-agnostic. */\n const scrollToKey = useCallback(\n (targetKey: string, smooth: boolean) => {\n const region = scrollRef.current;\n if (!region) return;\n let el = dayElRefs.current.get(targetKey);\n if (!el) {\n const keys = [...dayElRefs.current.keys()].sort();\n const next =\n keys.find((k) => k >= targetKey) ?? keys[keys.length - 1];\n el = next ? dayElRefs.current.get(next) : undefined;\n }\n if (!el) return;\n const delta =\n el.getBoundingClientRect().top - region.getBoundingClientRect().top;\n region.scrollTo({\n top: region.scrollTop + delta,\n behavior: smooth && !prefersReducedMotion ? 'smooth' : 'auto',\n });\n },\n [prefersReducedMotion],\n );\n\n /* Anchor on mount; preserve the viewport when earlier days prepend. */\n useIsomorphicLayoutEffect(() => {\n const region = scrollRef.current;\n if (!region) return;\n const firstKey = groups[0]?.key;\n if (!hasAnchored.current) {\n if (groups.length > 0 && anchorKey) {\n scrollToKey(anchorKey, false);\n hasAnchored.current = true;\n }\n } else if (\n prevFirstKey.current &&\n firstKey &&\n firstKey < prevFirstKey.current\n ) {\n const grew = region.scrollHeight - prevScrollHeight.current;\n if (grew > 0) region.scrollTop += grew;\n }\n prevFirstKey.current = firstKey;\n prevScrollHeight.current = region.scrollHeight;\n updateEdges();\n }, [groups, anchorKey, scrollToKey, updateEdges]);\n\n /* Recompute the fades when the region resizes. */\n useIsomorphicLayoutEffect(() => {\n const region = scrollRef.current;\n if (!region || typeof ResizeObserver === 'undefined') return undefined;\n const observer = new ResizeObserver(updateEdges);\n observer.observe(region);\n return () => observer.disconnect();\n }, [updateEdges]);\n\n const handleScroll = useCallback(() => {\n updateEdges();\n const region = scrollRef.current;\n if (!region) return;\n const { scrollTop, scrollHeight, clientHeight } = region;\n if (\n onLoadEarlier &&\n moreEarlier &&\n !loadingEarlier &&\n scrollTop <= EDGE_LOAD_THRESHOLD\n ) {\n onLoadEarlier();\n }\n if (\n onLoadLater &&\n moreLater &&\n !loadingLater &&\n scrollHeight - scrollTop - clientHeight <= EDGE_LOAD_THRESHOLD\n ) {\n onLoadLater();\n }\n }, [\n updateEdges,\n onLoadEarlier,\n onLoadLater,\n moreEarlier,\n moreLater,\n loadingEarlier,\n loadingLater,\n ]);\n\n /* ----- Filter actions ----- */\n const jumpTo = useCallback(\n (date: Date) => {\n const key = localDayKey(date);\n const known = dayElRefs.current.has(key);\n scrollToKey(key, true);\n if (!known) onJumpToDate?.(date.toISOString());\n },\n [scrollToKey, onJumpToDate],\n );\n\n const handleToday = useCallback(() => jumpTo(now), [jumpTo, now]);\n const handleThisWeek = useCallback(() => {\n const start = new Date(now);\n const dow = (start.getDay() + 6) % 7; // Monday-based week start\n start.setDate(start.getDate() - dow);\n jumpTo(start);\n }, [jumpTo, now]);\n const handleThisMonth = useCallback(() => {\n jumpTo(new Date(now.getFullYear(), now.getMonth(), 1));\n }, [jumpTo, now]);\n\n /* ----- Agent handle ----- */\n const itemsRef = useRef<AppointmentItem[]>(items);\n itemsRef.current = items;\n const innerRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLElement, []);\n\n const handle = useMemo<AppointmentTimelineHandle>(\n () => ({\n getItems: () =>\n itemsRef.current.map((i) => ({ id: i.id, state: i.state })),\n selectItem: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onOpenAppointment?.(found);\n },\n jumpToToday: () => scrollToKey(localDayKey(now), true),\n }),\n [onOpenAppointment, scrollToKey, now],\n );\n useAgentRegistration(appointmentTimelineAgent, handle, id);\n\n const isEmpty = groups.length === 0 && !loadingEarlier && !loadingLater;\n\n const loadingRow = (key: string) => (\n <div\n key={key}\n aria-hidden=\"true\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:py-[var(--spacing-xs)]\"\n >\n <Skeleton variant=\"rectangular\" height=\"3.5rem\" />\n </div>\n );\n\n return (\n <section\n ref={innerRef}\n data-component=\"appointment-timeline\"\n data-component-id={id}\n aria-label={ariaLabel ?? heading}\n className={rootVariants({ size, className })}\n {...rest}\n >\n {/* Shared rail header: title + (optional) filter row + divider. This\n panel owns its own scroll/fill, so the header stays a fixed band\n (sticky={false}). The rail injects the favourite/close cluster via\n PanelHeaderActionsProvider; standalone it renders none. */}\n <PanelHeader\n icon={<CalendarDays />}\n title={heading}\n filters={\n showFilters ? (\n <>\n <ButtonGroup label={t('appointmentTimeline.filtersLabel')}>\n <Button intent=\"outline\" size=\"sm\" onClick={handleToday}>\n {t('appointmentTimeline.today')}\n </Button>\n <Button intent=\"outline\" size=\"sm\" onClick={handleThisWeek}>\n {t('appointmentTimeline.thisWeek')}\n </Button>\n <Button intent=\"outline\" size=\"sm\" onClick={handleThisMonth}>\n {t('appointmentTimeline.thisMonth')}\n </Button>\n </ButtonGroup>\n <label htmlFor={jumpId} className=\"ds:sr-only\">\n {t('appointmentTimeline.jumpToDate')}\n </label>\n <DatePicker\n id={jumpId}\n size=\"sm\"\n placeholder={t('appointmentTimeline.jumpToDate')}\n onChange={(date) => {\n if (date) jumpTo(date);\n }}\n />\n </>\n ) : undefined\n }\n />\n\n {headerExtra}\n\n {isEmpty ? (\n <div className=\"ds:flex-1 ds:p-[var(--spacing-md)]\">\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={emptyTitle ?? t('appointmentTimeline.empty.title')}\n description={\n emptyDescription ?? t('appointmentTimeline.empty.description')\n }\n />\n </div>\n ) : (\n <div\n ref={scrollRef}\n // The scroll region must be keyboard-focusable so arrow / Home /\n // End can drive it (axe scrollable-region-focusable); jsx-a11y's\n // generic rule doesn't know this element scrolls.\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex\n tabIndex={0}\n onScroll={handleScroll}\n data-fade-top={fadeTop ? 'true' : undefined}\n data-fade-bottom={fadeBottom ? 'true' : undefined}\n className={scrollRegionClasses}\n >\n {loadingEarlier ? loadingRow('loading-earlier') : null}\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- role=\"list\" is NOT redundant: WebKit drops implicit list semantics when list-style is none */}\n <ol\n ref={reflowRef}\n role=\"list\"\n className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-md)] ds:p-0\"\n >\n {groups.map((group) => (\n <li\n key={group.key}\n ref={(node) => {\n if (node) dayElRefs.current.set(group.key, node);\n else dayElRefs.current.delete(group.key);\n }}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\"\n >\n <DayHeader\n date={group.date}\n now={now}\n locale={resolvedLocale}\n todayLabel={t('appointmentTimeline.today')}\n tomorrowLabel={t('appointmentTimeline.tomorrow')}\n yesterdayLabel={t('appointmentTimeline.yesterday')}\n />\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- role=\"list\" is NOT redundant: WebKit drops implicit list semantics when list-style is none */}\n <ul\n role=\"list\"\n className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0\"\n >\n {group.items.map((item) => (\n <AppointmentCard\n key={item.id}\n item={item}\n size={size}\n surface=\"elevated\"\n showPatient={showPatient}\n locale={resolvedLocale}\n currency={currency}\n onActivate={onOpenAppointment}\n selected={item.id === selectedId}\n hideDefaultStatus={hideDefaultStatus}\n data-appointment-id={item.id}\n data-reflow-id={item.id}\n className={REFLOW_ROW_CLASS}\n />\n ))}\n </ul>\n </li>\n ))}\n {/* Leaving cards: removed from state but held for the exit\n fade. Rendered without `data-reflow-id` so the reflow hook\n ignores them; faded via `data-leaving`. */}\n {leavingItems.length > 0\n ? leavingItems.map((item) => (\n <AppointmentCard\n key={`leaving-${item.id}`}\n item={item}\n size={size}\n surface=\"elevated\"\n showPatient={showPatient}\n locale={resolvedLocale}\n currency={currency}\n aria-hidden=\"true\"\n data-leaving\n className={[\n 'ds:opacity-0',\n 'ds:transition-opacity',\n 'ds:duration-[var(--animation-duration)]',\n 'ds:ease-[var(--ease-out)]',\n 'ds:motion-reduce:transition-none',\n ].join(' ')}\n />\n ))\n : null}\n </ol>\n {loadingLater ? loadingRow('loading-later') : null}\n </div>\n )}\n </section>\n );\n },\n);\n\nAppointmentTimeline.displayName = 'AppointmentTimeline';\n\n/* -------------------------------------------------------------------- */\n/* Day header — sticky label per day group */\n/* -------------------------------------------------------------------- */\n\ninterface DayHeaderProps {\n date: Date;\n now: Date;\n locale: string | undefined;\n todayLabel: string;\n tomorrowLabel: string;\n yesterdayLabel: string;\n}\n\nfunction DayHeader({\n date,\n now,\n locale,\n todayLabel,\n tomorrowLabel,\n yesterdayLabel,\n}: DayHeaderProps): ReactNode {\n const key = localDayKey(date);\n const todayKey = localDayKey(now);\n const tomorrow = new Date(now);\n tomorrow.setDate(now.getDate() + 1);\n const yesterday = new Date(now);\n yesterday.setDate(now.getDate() - 1);\n\n const isToday = key === todayKey;\n\n let label: string;\n if (isToday) label = todayLabel;\n else if (key === localDayKey(tomorrow)) label = tomorrowLabel;\n else if (key === localDayKey(yesterday)) label = yesterdayLabel;\n else {\n const sameYear = date.getFullYear() === now.getFullYear();\n label = new Intl.DateTimeFormat(locale, {\n weekday: 'short',\n day: 'numeric',\n month: 'short',\n ...(sameYear ? {} : { year: 'numeric' }),\n }).format(date);\n }\n\n // Today's group is marked with the brand colour + a leading dot so the\n // current day reads at a glance. `--primary` clears AA on the card in every\n // theme (violet-500 light, magenta on dark); the dot is decorative.\n return (\n <div\n data-today={isToday ? 'true' : undefined}\n className={[\n 'ds:sticky ds:top-0 ds:z-[1] ds:bg-[color:var(--card)] ds:py-[var(--spacing-2xs)]',\n 'ds:flex ds:items-center ds:gap-[var(--spacing-2xs)] type-eyebrow',\n isToday\n ? 'ds:text-[color:var(--primary)] ds:font-semibold'\n : 'ds:text-[color:var(--muted-foreground)]',\n ].join(' ')}\n >\n {isToday ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:size-1.5 ds:shrink-0 ds:rounded-[var(--radius-full)] ds:bg-[color:var(--primary)]\"\n />\n ) : null}\n {label}\n </div>\n );\n}\n\n/** Re-export of the size variant union for downstream typing. */\nexport type AppointmentTimelineSize = NonNullable<\n VariantProps<typeof rootVariants>['size']\n>;\n"],"names":["appointmentTimelineAgent","handle","args","EDGE_LOAD_THRESHOLD","rootVariants","cva","scrollRegionClasses","localDayKey","d","m","day","groupByDay","items","sorted","a","b","map","item","key","group","AppointmentTimeline","forwardRef","id","nowIso","title","locale","currency","size","showPatient","onOpenAppointment","selectedId","onLoadEarlier","onLoadLater","hasMoreEarlier","hasMoreLater","loadingEarlier","loadingLater","showFilters","onJumpToDate","emptyTitle","emptyDescription","className","ariaLabel","headerExtra","hideDefaultStatus","rest","ref","t","i18n","useTranslation","jumpId","useId","prefersReducedMotion","usePrefersReducedMotion","resolvedLocale","heading","now","useMemo","groups","reduceMotion","flatItemIds","g","i","reflowRef","useListReflow","exitTransition","useExitTransition","prevItemsRef","useRef","leavingItems","setLeavingItems","useState","useEffect","prev","currentIds","removed","moreEarlier","moreLater","anchorKey","todayKey","keys","k","scrollRef","dayElRefs","hasAnchored","prevFirstKey","prevScrollHeight","fadeTop","setFadeTop","fadeBottom","setFadeBottom","updateEdges","useCallback","region","scrollTop","scrollHeight","clientHeight","scrollToKey","targetKey","smooth","el","next","delta","useIsomorphicLayoutEffect","firstKey","_a","grew","observer","handleScroll","jumpTo","date","known","handleToday","handleThisWeek","start","dow","handleThisMonth","itemsRef","innerRef","useImperativeHandle","targetId","found","useAgentRegistration","isEmpty","loadingRow","jsx","Skeleton","jsxs","PanelHeader","CalendarDays","Fragment","ButtonGroup","Button","DatePicker","EmptyState","node","DayHeader","AppointmentCard","REFLOW_ROW_CLASS","todayLabel","tomorrowLabel","yesterdayLabel","tomorrow","yesterday","isToday","label","sameYear"],"mappings":"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"}
@@ -2,10 +2,10 @@ import { jsx as t, jsxs as d } from "react/jsx-runtime";
2
2
  import { forwardRef as j, useRef as h, useImperativeHandle as z, useMemo as P } from "react";
3
3
  import { c as E } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as H } from "react-i18next";
5
- import { I as M } from "./icon-button-8xqRnkdG.js";
6
- import { S as q } from "./skeleton-CZbwyJAA.js";
7
- import { E as K } from "./empty-state-X0sVPfVo.js";
8
- import { A as V } from "./appointment-card-WsDGBBut.js";
5
+ import { I as M } from "./icon-button-CehAeZoP.js";
6
+ import { S as q } from "./skeleton-B1KTdJ4N.js";
7
+ import { E as K } from "./empty-state-BUN_UAWf.js";
8
+ import { A as V } from "./appointment-card-TgR_2GKS.js";
9
9
  import { u as _ } from "./registry-DvAUVLHh.js";
10
10
  import { C as B } from "./calendar-days-BGWklvE-.js";
11
11
  import { P as D } from "./plus-DzMQ_c6b.js";
@@ -190,4 +190,4 @@ export {
190
190
  ae as a,
191
191
  L as b
192
192
  };
193
- //# sourceMappingURL=appointment-tray-D6UyJHej.js.map
193
+ //# sourceMappingURL=appointment-tray-N0yEI8UF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"appointment-tray-D6UyJHej.js","sources":["../../src/components/appointment-card/appointment-card.agent.ts","../../src/components/appointment-card/appointment-tray.agent.ts","../../src/components/appointment-card/appointment-tray.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — AppointmentCard. */\n/* */\n/* Single-appointment surface. Activation is owned by the consumer / */\n/* host tray; the card emits a DOM hook so a future MCP UI bridge can */\n/* address one rendered card by its appointment id. Read-only — the card */\n/* exposes no imperative handle of its own (the tray owns activation). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\n\nexport const appointmentCardAgent: AgentAdapter = {\n id: 'appointment-card',\n // 'pick' (non-persisting activation) is host-delegated: the card exposes no\n // handle of its own — its enclosing AppointmentTray performs the pick via\n // `appointment-tray.select_item`, addressing this card by its data-component-id.\n capabilities: ['pick'],\n state: {},\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'appointment-card',\n description:\n 'Marks the element as a kit AppointmentCard. The root also emits data-component-id sourced from item.id, data-state with the appointment lifecycle, and data-type with the delivery channel.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'item.id',\n description: 'Sourced from item.id — the stable appointment identifier.',\n },\n },\n};\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — AppointmentTray. */\n/* */\n/* Tray-level surface: read appointment ids + lifecycle state (never */\n/* patient names / treatments), and route an activation through the */\n/* curated handle. AppointmentTray is in-page (no open/close). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AppointmentTrayHandle } from './appointment-tray';\n\nexport const appointmentTrayAgent: AgentAdapter<AppointmentTrayHandle> = {\n id: 'appointment-tray',\n // 'pick' (non-persisting activation): select_item routes an activation\n // through onActivate — it does not persist a \"selected appointment\" value,\n // so this is a focus/pick, not a select_single.\n capabilities: ['pick'],\n state: {\n items: {\n type: 'Array<{ id: string; state: string }>',\n descriptionKey: 'ui.agent.appointmentTray.state.items',\n description:\n 'Currently-displayed appointments. Ids + lifecycle state only — never patient identity.',\n read: (handle) => handle.getItems(),\n },\n },\n actions: {\n select_item: {\n safety: 'read',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: { id: { type: 'string' } },\n required: ['id'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.appointmentTray.actions.selectItem',\n description: 'Activate the appointment with the given id.',\n invoke: (handle, args: { id: string }) => {\n handle.selectItem(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'appointment-tray',\n description: 'Marks the AppointmentTray wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific tray from the agent.',\n },\n item: {\n attr: 'data-appointment-id',\n description:\n 'Stable appointment id emitted on each rendered AppointmentCard inside the tray.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CalendarDays, Plus } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { AppointmentCard, type AppointmentItem } from './appointment-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { appointmentTrayAgent } from './appointment-tray.agent';\n\n/* -------------------------------------------------------------------- */\n/* AppointmentTray */\n/* */\n/* Bordered panel that hosts a list of AppointmentCards — header with a */\n/* title + optional caption + an \"Add\" affordance, a body that branches */\n/* on loading (Skeleton) / empty (EmptyState) / list. Mirrors AgendaTray */\n/* but composes the richer AppointmentCard row. */\n/* */\n/* All visible text flows through useTranslation('ui') against the */\n/* `appointmentTray.*` namespace. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA — panel surface */\n/* -------------------------------------------------------------------- */\n\nconst appointmentTrayVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-md)] ds:shadow-[var(--shadow-card)]',\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:overflow-hidden',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\n/**\n * Curated imperative handle for AppointmentTray — the forwardRef target so a\n * future agent / MCP UI bridge can drive the tray without touching the DOM.\n * Reads identifiers + lifecycle state only, never patient identity. See\n * `appointment-tray.agent.ts`.\n */\nexport interface AppointmentTrayHandle {\n getItems: () => Array<{ id: string; state: string }>;\n selectItem: (id: string) => void;\n}\n\nexport interface AppointmentTrayProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'onClick' | 'id'>,\n VariantProps<typeof appointmentTrayVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so an\n * agent / MCP UI bridge can address this specific tray.\n */\n id?: string;\n /** The appointments to render. */\n items: AppointmentItem[];\n /** Section title — rendered in the header. Localised by the consumer. */\n title?: string;\n /** Optional small caption (e.g. localised date) shown next to the title. */\n caption?: string;\n /** Visual density passed through to each AppointmentCard. */\n size?: 'sm' | 'md';\n /** BCP-47 locale override passed to each AppointmentCard. */\n locale?: string;\n /** ISO-4217 currency code passed to each AppointmentCard. */\n currency?: string;\n onOpenAppointment?: (item: AppointmentItem) => void;\n onAddAppointment?: () => void;\n /** Localised label for the \"Add\" affordance. */\n addLabel?: string;\n loading?: boolean;\n emptyTitle?: string;\n emptyDescription?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const AppointmentTray = forwardRef<HTMLElement, AppointmentTrayProps>(\n (\n {\n id,\n items,\n title,\n caption,\n size = 'sm',\n locale,\n currency,\n onOpenAppointment,\n onAddAppointment,\n addLabel,\n loading = false,\n emptyTitle,\n emptyDescription,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const heading = title ?? t('appointmentTray.title');\n const resolvedAddLabel = addLabel ?? t('appointmentTray.add');\n const isEmpty = !loading && items.length === 0;\n\n let body: ReactNode;\n if (loading) {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} variant=\"rectangular\" height=\"3.5rem\" />\n ))}\n </div>\n );\n } else if (isEmpty) {\n body = (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={emptyTitle ?? t('appointmentTray.empty.title')}\n description={\n emptyDescription ?? t('appointmentTray.empty.description')\n }\n />\n </div>\n );\n } else {\n body = (\n <ul className=\"ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-2xs)] ds:p-[var(--spacing-2xs)]\">\n {items.map((item) => (\n <AppointmentCard\n key={item.id}\n item={item}\n size={size}\n locale={locale}\n currency={currency}\n onActivate={onOpenAppointment}\n data-appointment-id={item.id}\n />\n ))}\n </ul>\n );\n }\n\n /* Curated imperative handle for agent integration. See\n * appointment-tray.agent.ts. */\n const itemsRef = useRef<AppointmentItem[]>(items);\n itemsRef.current = items;\n\n const innerRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLElement, []);\n\n const handle = useMemo<AppointmentTrayHandle>(\n () => ({\n getItems: () =>\n itemsRef.current.map((i) => ({ id: i.id, state: i.state })),\n selectItem: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onOpenAppointment?.(found);\n },\n }),\n [onOpenAppointment],\n );\n\n useAgentRegistration(appointmentTrayAgent, handle, id);\n\n return (\n <section\n ref={innerRef}\n aria-label={heading}\n data-component=\"appointment-tray\"\n data-component-id={id}\n className={appointmentTrayVariants({ size, className })}\n {...rest}\n >\n <header className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0\">\n <h3 className=\"ds:m-0 ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-title-card\">\n <CalendarDays aria-hidden=\"true\" className=\"ds:size-4\" />\n {heading}\n </h3>\n {caption ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {caption}\n </span>\n ) : null}\n </div>\n {onAddAppointment ? (\n <IconButton\n icon={<Plus />}\n intent=\"outline\"\n size=\"sm\"\n aria-label={resolvedAddLabel}\n onClick={onAddAppointment}\n />\n ) : null}\n </header>\n {body}\n </section>\n );\n },\n);\n\nAppointmentTray.displayName = 'AppointmentTray';\n"],"names":["appointmentCardAgent","appointmentTrayAgent","handle","args","appointmentTrayVariants","cva","AppointmentTray","forwardRef","id","items","title","caption","size","locale","currency","onOpenAppointment","onAddAppointment","addLabel","loading","emptyTitle","emptyDescription","className","rest","ref","t","useTranslation","heading","resolvedAddLabel","isEmpty","body","jsx","i","Skeleton","EmptyState","item","AppointmentCard","itemsRef","useRef","innerRef","useImperativeHandle","useMemo","targetId","found","useAgentRegistration","jsxs","CalendarDays","IconButton","Plus"],"mappings":";;;;;;;;;;;AAWO,MAAMA,KAAqC;AAAA,EAChD,IAAI;AAAA;AAAA;AAAA;AAAA,EAIJ,cAAc,CAAC,MAAM;AAAA,EACrB,OAAO,CAAA;AAAA,EACP,SAAS,CAAA;AAAA,EACT,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aACE;AAAA,IAAA;AAAA,IAEJ,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,GCrBaC,IAA4D;AAAA,EACvE,IAAI;AAAA;AAAA;AAAA;AAAA,EAIJ,cAAc,CAAC,MAAM;AAAA,EACrB,OAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,SAAA;AAAA,IAAS;AAAA,EACpC;AAAA,EAEF,SAAS;AAAA,IACP,aAAa;AAAA,MACX,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY,EAAE,IAAI,EAAE,MAAM,WAAS;AAAA,QACnC,UAAU,CAAC,IAAI;AAAA,MAAA;AAAA,MAEjB,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,QAAQ,CAACA,GAAQC,MAAyB;AACxC,QAAAD,EAAO,WAAWC,EAAK,EAAE;AAAA,MAC3B;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aACE;AAAA,IAAA;AAAA,IAEJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GC3BMC,IAA0BC;AAAA,EAC9B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,EACA,KAAK,GAAG;AAAA,EACV;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,MAAA;AAAA,IACN;AAAA,IAEF,iBAAiB;AAAA,MACf,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ,GAmDaC,IAAkBC;AAAA,EAC7B,CACE;AAAA,IACE,IAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,MAAAC,IAAO;AAAA,IACP,QAAAC;AAAA,IACA,UAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC,IAAU;AAAA,IACV,YAAAC;AAAA,IACA,kBAAAC;AAAA,IACA,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAUhB,KAASc,EAAE,uBAAuB,GAC5CG,IAAmBV,KAAYO,EAAE,qBAAqB,GACtDI,IAAU,CAACV,KAAWT,EAAM,WAAW;AAE7C,QAAIoB;AACJ,IAAIX,IACFW,IACE,gBAAAC,EAAC,SAAI,WAAU,2EACZ,WAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAACC,MACd,gBAAAD,EAACE,KAAiB,SAAQ,eAAc,QAAO,SAAA,GAAhCD,CAAyC,CACzD,GACH,IAEOH,IACTC,IACE,gBAAAC,EAAC,OAAA,EAAI,WAAU,4BACb,UAAA,gBAAAA;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,SAAQ;AAAA,QACR,MAAK;AAAA,QACL,OAAOd,KAAcK,EAAE,6BAA6B;AAAA,QACpD,aACEJ,KAAoBI,EAAE,mCAAmC;AAAA,MAAA;AAAA,IAAA,GAG/D,IAGFK,sBACG,MAAA,EAAG,WAAU,0FACX,UAAApB,EAAM,IAAI,CAACyB,MACV,gBAAAJ;AAAA,MAACK;AAAA,MAAA;AAAA,QAEC,MAAAD;AAAA,QACA,MAAAtB;AAAA,QACA,QAAAC;AAAA,QACA,UAAAC;AAAA,QACA,YAAYC;AAAA,QACZ,uBAAqBmB,EAAK;AAAA,MAAA;AAAA,MANrBA,EAAK;AAAA,IAAA,CAQb,GACH;AAMJ,UAAME,IAAWC,EAA0B5B,CAAK;AAChD,IAAA2B,EAAS,UAAU3B;AAEnB,UAAM6B,IAAWD,EAAoB,IAAI;AACzC,IAAAE,EAAoBhB,GAAK,MAAMe,EAAS,SAAwB,CAAA,CAAE;AAElE,UAAMpC,IAASsC;AAAA,MACb,OAAO;AAAA,QACL,UAAU,MACRJ,EAAS,QAAQ,IAAI,CAACL,OAAO,EAAE,IAAIA,EAAE,IAAI,OAAOA,EAAE,QAAQ;AAAA,QAC5D,YAAY,CAACU,MAAqB;AAChC,gBAAMC,IAAQN,EAAS,QAAQ,KAAK,CAACL,MAAMA,EAAE,OAAOU,CAAQ;AAC5D,UAAIC,qBAA2BA;AAAA,QACjC;AAAA,MAAA;AAAA,MAEF,CAAC3B,CAAiB;AAAA,IAAA;AAGpB,WAAA4B,EAAqB1C,GAAsBC,GAAQM,CAAE,GAGnD,gBAAAoC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKN;AAAA,QACL,cAAYZ;AAAA,QACZ,kBAAe;AAAA,QACf,qBAAmBlB;AAAA,QACnB,WAAWJ,EAAwB,EAAE,MAAAQ,GAAM,WAAAS,GAAW;AAAA,QACrD,GAAGC;AAAA,QAEJ,UAAA;AAAA,UAAA,gBAAAsB,EAAC,UAAA,EAAO,WAAU,kGAChB,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,8DACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,oFACZ,UAAA;AAAA,gBAAA,gBAAAd,EAACe,GAAA,EAAa,eAAY,QAAO,WAAU,aAAY;AAAA,gBACtDnB;AAAA,cAAA,GACH;AAAA,cACCf,IACC,gBAAAmB,EAAC,QAAA,EAAK,WAAU,wDACb,aACH,IACE;AAAA,YAAA,GACN;AAAA,YACCd,IACC,gBAAAc;AAAA,cAACgB;AAAA,cAAA;AAAA,gBACC,wBAAOC,GAAA,EAAK;AAAA,gBACZ,QAAO;AAAA,gBACP,MAAK;AAAA,gBACL,cAAYpB;AAAA,gBACZ,SAASX;AAAA,cAAA;AAAA,YAAA,IAET;AAAA,UAAA,GACN;AAAA,UACCa;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGP;AACF;AAEAvB,EAAgB,cAAc;"}
1
+ {"version":3,"file":"appointment-tray-N0yEI8UF.js","sources":["../../src/components/appointment-card/appointment-card.agent.ts","../../src/components/appointment-card/appointment-tray.agent.ts","../../src/components/appointment-card/appointment-tray.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — AppointmentCard. */\n/* */\n/* Single-appointment surface. Activation is owned by the consumer / */\n/* host tray; the card emits a DOM hook so a future MCP UI bridge can */\n/* address one rendered card by its appointment id. Read-only — the card */\n/* exposes no imperative handle of its own (the tray owns activation). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\n\nexport const appointmentCardAgent: AgentAdapter = {\n id: 'appointment-card',\n // 'pick' (non-persisting activation) is host-delegated: the card exposes no\n // handle of its own — its enclosing AppointmentTray performs the pick via\n // `appointment-tray.select_item`, addressing this card by its data-component-id.\n capabilities: ['pick'],\n state: {},\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'appointment-card',\n description:\n 'Marks the element as a kit AppointmentCard. The root also emits data-component-id sourced from item.id, data-state with the appointment lifecycle, and data-type with the delivery channel.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'item.id',\n description: 'Sourced from item.id — the stable appointment identifier.',\n },\n },\n};\n","/* -------------------------------------------------------------------- */\n/* Agent adapter — AppointmentTray. */\n/* */\n/* Tray-level surface: read appointment ids + lifecycle state (never */\n/* patient names / treatments), and route an activation through the */\n/* curated handle. AppointmentTray is in-page (no open/close). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AppointmentTrayHandle } from './appointment-tray';\n\nexport const appointmentTrayAgent: AgentAdapter<AppointmentTrayHandle> = {\n id: 'appointment-tray',\n // 'pick' (non-persisting activation): select_item routes an activation\n // through onActivate — it does not persist a \"selected appointment\" value,\n // so this is a focus/pick, not a select_single.\n capabilities: ['pick'],\n state: {\n items: {\n type: 'Array<{ id: string; state: string }>',\n descriptionKey: 'ui.agent.appointmentTray.state.items',\n description:\n 'Currently-displayed appointments. Ids + lifecycle state only — never patient identity.',\n read: (handle) => handle.getItems(),\n },\n },\n actions: {\n select_item: {\n safety: 'read',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: { id: { type: 'string' } },\n required: ['id'],\n },\n idempotent: true,\n descriptionKey: 'ui.agent.appointmentTray.actions.selectItem',\n description: 'Activate the appointment with the given id.',\n invoke: (handle, args: { id: string }) => {\n handle.selectItem(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'appointment-tray',\n description: 'Marks the AppointmentTray wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific tray from the agent.',\n },\n item: {\n attr: 'data-appointment-id',\n description:\n 'Stable appointment id emitted on each rendered AppointmentCard inside the tray.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CalendarDays, Plus } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { AppointmentCard, type AppointmentItem } from './appointment-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { appointmentTrayAgent } from './appointment-tray.agent';\n\n/* -------------------------------------------------------------------- */\n/* AppointmentTray */\n/* */\n/* Bordered panel that hosts a list of AppointmentCards — header with a */\n/* title + optional caption + an \"Add\" affordance, a body that branches */\n/* on loading (Skeleton) / empty (EmptyState) / list. Mirrors AgendaTray */\n/* but composes the richer AppointmentCard row. */\n/* */\n/* All visible text flows through useTranslation('ui') against the */\n/* `appointmentTray.*` namespace. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA — panel surface */\n/* -------------------------------------------------------------------- */\n\nconst appointmentTrayVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-md)] ds:shadow-[var(--shadow-card)]',\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:overflow-hidden',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\n/**\n * Curated imperative handle for AppointmentTray — the forwardRef target so a\n * future agent / MCP UI bridge can drive the tray without touching the DOM.\n * Reads identifiers + lifecycle state only, never patient identity. See\n * `appointment-tray.agent.ts`.\n */\nexport interface AppointmentTrayHandle {\n getItems: () => Array<{ id: string; state: string }>;\n selectItem: (id: string) => void;\n}\n\nexport interface AppointmentTrayProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'onClick' | 'id'>,\n VariantProps<typeof appointmentTrayVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so an\n * agent / MCP UI bridge can address this specific tray.\n */\n id?: string;\n /** The appointments to render. */\n items: AppointmentItem[];\n /** Section title — rendered in the header. Localised by the consumer. */\n title?: string;\n /** Optional small caption (e.g. localised date) shown next to the title. */\n caption?: string;\n /** Visual density passed through to each AppointmentCard. */\n size?: 'sm' | 'md';\n /** BCP-47 locale override passed to each AppointmentCard. */\n locale?: string;\n /** ISO-4217 currency code passed to each AppointmentCard. */\n currency?: string;\n onOpenAppointment?: (item: AppointmentItem) => void;\n onAddAppointment?: () => void;\n /** Localised label for the \"Add\" affordance. */\n addLabel?: string;\n loading?: boolean;\n emptyTitle?: string;\n emptyDescription?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const AppointmentTray = forwardRef<HTMLElement, AppointmentTrayProps>(\n (\n {\n id,\n items,\n title,\n caption,\n size = 'sm',\n locale,\n currency,\n onOpenAppointment,\n onAddAppointment,\n addLabel,\n loading = false,\n emptyTitle,\n emptyDescription,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const heading = title ?? t('appointmentTray.title');\n const resolvedAddLabel = addLabel ?? t('appointmentTray.add');\n const isEmpty = !loading && items.length === 0;\n\n let body: ReactNode;\n if (loading) {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} variant=\"rectangular\" height=\"3.5rem\" />\n ))}\n </div>\n );\n } else if (isEmpty) {\n body = (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={emptyTitle ?? t('appointmentTray.empty.title')}\n description={\n emptyDescription ?? t('appointmentTray.empty.description')\n }\n />\n </div>\n );\n } else {\n body = (\n <ul className=\"ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-2xs)] ds:p-[var(--spacing-2xs)]\">\n {items.map((item) => (\n <AppointmentCard\n key={item.id}\n item={item}\n size={size}\n locale={locale}\n currency={currency}\n onActivate={onOpenAppointment}\n data-appointment-id={item.id}\n />\n ))}\n </ul>\n );\n }\n\n /* Curated imperative handle for agent integration. See\n * appointment-tray.agent.ts. */\n const itemsRef = useRef<AppointmentItem[]>(items);\n itemsRef.current = items;\n\n const innerRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLElement, []);\n\n const handle = useMemo<AppointmentTrayHandle>(\n () => ({\n getItems: () =>\n itemsRef.current.map((i) => ({ id: i.id, state: i.state })),\n selectItem: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onOpenAppointment?.(found);\n },\n }),\n [onOpenAppointment],\n );\n\n useAgentRegistration(appointmentTrayAgent, handle, id);\n\n return (\n <section\n ref={innerRef}\n aria-label={heading}\n data-component=\"appointment-tray\"\n data-component-id={id}\n className={appointmentTrayVariants({ size, className })}\n {...rest}\n >\n <header className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0\">\n <h3 className=\"ds:m-0 ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-title-card\">\n <CalendarDays aria-hidden=\"true\" className=\"ds:size-4\" />\n {heading}\n </h3>\n {caption ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {caption}\n </span>\n ) : null}\n </div>\n {onAddAppointment ? (\n <IconButton\n icon={<Plus />}\n intent=\"outline\"\n size=\"sm\"\n aria-label={resolvedAddLabel}\n onClick={onAddAppointment}\n />\n ) : null}\n </header>\n {body}\n </section>\n );\n },\n);\n\nAppointmentTray.displayName = 'AppointmentTray';\n"],"names":["appointmentCardAgent","appointmentTrayAgent","handle","args","appointmentTrayVariants","cva","AppointmentTray","forwardRef","id","items","title","caption","size","locale","currency","onOpenAppointment","onAddAppointment","addLabel","loading","emptyTitle","emptyDescription","className","rest","ref","t","useTranslation","heading","resolvedAddLabel","isEmpty","body","jsx","i","Skeleton","EmptyState","item","AppointmentCard","itemsRef","useRef","innerRef","useImperativeHandle","useMemo","targetId","found","useAgentRegistration","jsxs","CalendarDays","IconButton","Plus"],"mappings":"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"}
@@ -2,8 +2,8 @@ import { jsxs as R, jsx as s, Fragment as se } from "react/jsx-runtime";
2
2
  import { forwardRef as ne, useReducer as ae, useState as x, useRef as l, useEffect as N, useCallback as h, useMemo as de, useImperativeHandle as ce } from "react";
3
3
  import { c as oe } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as ue } from "react-i18next";
5
- import { B as G } from "./button-nJaPh_HC.js";
6
- import { I as D } from "./icon-button-8xqRnkdG.js";
5
+ import { B as G } from "./button-CaUe1uyd.js";
6
+ import { I as D } from "./icon-button-CehAeZoP.js";
7
7
  import { S as pe } from "./select-CLSUnKjF.js";
8
8
  import { A as le } from "./audio-visualiser-l6zPd0AG.js";
9
9
  import { A as F } from "./alert-CiQ5Pa3Q.js";
@@ -447,4 +447,4 @@ export {
447
447
  De as A,
448
448
  Re as a
449
449
  };
450
- //# sourceMappingURL=audio-recorder-BlQBC7N_.js.map
450
+ //# sourceMappingURL=audio-recorder-B7dT-Y3v.js.map