@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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfadocs/ui-kit-debug",
3
- "version": "1.37.0",
3
+ "version": "1.39.0",
4
4
  "type": "module",
5
5
  "description": "AlfaDocs shared design system — tokens, components, patterns, and translations for platform, booking, and alfascribe. (debug build — identical runtime to @alfadocs/ui-kit, ships source maps for symbolication).",
6
6
  "license": "BUSL-1.1",
@@ -953,6 +953,7 @@
953
953
  "build:icon-map": "node scripts/build-icon-map.mjs",
954
954
  "check:icon-map": "node scripts/build-icon-map.mjs --check",
955
955
  "typecheck": "tsc -b",
956
+ "gate": "node scripts/gate.mjs",
956
957
  "test": "vitest run",
957
958
  "lint": "eslint .",
958
959
  "lint:fix": "eslint . --fix",
@@ -970,6 +971,7 @@
970
971
  "check:i18n-parity": "node --experimental-strip-types scripts/check-i18n-parity.ts",
971
972
  "check:i18n-plurals": "node --experimental-strip-types scripts/check-i18n-plurals.ts",
972
973
  "check:i18n-coverage": "node --experimental-strip-types scripts/check-i18n-coverage.ts",
974
+ "check:i18n-untranslated": "node --experimental-strip-types scripts/check-i18n-untranslated.ts",
973
975
  "seed:i18n-coverage": "node --experimental-strip-types scripts/seed-i18n-coverage.ts",
974
976
  "chromatic": "chromatic --exit-zero-on-changes"
975
977
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"appointment-card-WsDGBBut.js","sources":["../../node_modules/lucide-react/dist/esm/icons/clipboard-plus.mjs","../../node_modules/lucide-react/dist/esm/icons/file-pen-line.mjs","../../node_modules/lucide-react/dist/esm/icons/message-square-text.mjs","../../src/components/appointment-card/appointment-card.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"rect\", { width: \"8\", height: \"4\", x: \"8\", y: \"2\", rx: \"1\", ry: \"1\", key: \"tgr4d6\" }],\n [\n \"path\",\n {\n d: \"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\",\n key: \"116196\"\n }\n ],\n [\"path\", { d: \"M9 14h6\", key: \"159ibu\" }],\n [\"path\", { d: \"M12 17v-6\", key: \"1y8rbf\" }]\n];\nconst ClipboardPlus = createLucideIcon(\"clipboard-plus\", __iconNode);\n\nexport { __iconNode, ClipboardPlus as default };\n//# sourceMappingURL=clipboard-plus.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M14.364 13.634a2 2 0 0 0-.506.854l-.837 2.87a.5.5 0 0 0 .62.62l2.87-.837a2 2 0 0 0 .854-.506l4.013-4.009a1 1 0 0 0-3.004-3.004z\",\n key: \"ukzhwg\"\n }\n ],\n [\"path\", { d: \"M14.487 7.858A1 1 0 0 1 14 7V2\", key: \"1klhew\" }],\n [\n \"path\",\n {\n d: \"M20 19.645V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l2.516 2.516\",\n key: \"rxaxab\"\n }\n ],\n [\"path\", { d: \"M8 18h1\", key: \"13wk12\" }]\n];\nconst FilePenLine = createLucideIcon(\"file-pen-line\", __iconNode);\n\nexport { __iconNode, FilePenLine as default };\n//# sourceMappingURL=file-pen-line.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z\",\n key: \"18887p\"\n }\n ],\n [\"path\", { d: \"M7 11h10\", key: \"1twpyw\" }],\n [\"path\", { d: \"M7 15h6\", key: \"d9of3u\" }],\n [\"path\", { d: \"M7 7h8\", key: \"af5zfr\" }]\n];\nconst MessageSquareText = createLucideIcon(\"message-square-text\", __iconNode);\n\nexport { __iconNode, MessageSquareText as default };\n//# sourceMappingURL=message-square-text.mjs.map\n","import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport {\n Armchair,\n ChevronRight,\n ClipboardPlus,\n FileSignature,\n Globe,\n MapPin,\n MessageSquareText,\n Repeat,\n Star,\n UserX,\n Video,\n} from 'lucide-react';\nimport { Avatar } from '../avatar/avatar';\nimport { Badge } from '../badge/badge';\nimport { Tag } from '../tag/tag';\nimport { Timestamp } from '../timestamp/timestamp';\nimport { TransactionChip } from '../transaction-chip/transaction-chip';\nimport {\n appointmentStateWorkflow,\n colorIdToToken,\n colorIdToAvatarToken,\n isSafeEntityUrl,\n} from '../_shared/entity-card';\nimport type { AppointmentState } from '../_shared/entity-card';\nimport { WorkflowStatusDisplay } from '../workflow-status';\n\n/*\n * Closed colour-dot class map. `colorIdToToken` resolves the operator's\n * numeric colour id to one of a fixed set of palette tokens; the operator\n * dot needs a *static* Tailwind class for each so the compiler can emit it\n * (dynamic `ds:bg-[…]` strings are not seen by the JIT). The keys mirror the\n * exact token strings the shared helper returns.\n */\nconst OPERATOR_DOT_CLASS: Record<string, string> = {\n 'var(--color-violet-500)': 'ds:bg-[var(--color-violet-500)]',\n 'var(--color-purple-500)': 'ds:bg-[var(--color-purple-500)]',\n 'var(--color-magenta-500)': 'ds:bg-[var(--color-magenta-500)]',\n 'var(--color-blue-500)': 'ds:bg-[var(--color-blue-500)]',\n 'var(--color-green-500)': 'ds:bg-[var(--color-green-500)]',\n 'var(--color-red-500)': 'ds:bg-[var(--color-red-500)]',\n 'var(--color-yellow-500)': 'ds:bg-[var(--color-yellow-500)]',\n 'var(--color-indigo-500)': 'ds:bg-[var(--color-indigo-500)]',\n 'var(--color-orange-500)': 'ds:bg-[var(--color-orange-500)]',\n 'var(--color-fuchsia-500)': 'ds:bg-[var(--color-fuchsia-500)]',\n 'var(--color-grey-700)': 'ds:bg-[var(--color-grey-700)]',\n};\n\nfunction operatorDotClass(colorId: number | string | undefined): string {\n return (\n OPERATOR_DOT_CLASS[colorIdToToken(colorId)] ??\n 'ds:bg-[var(--color-grey-700)]'\n );\n}\n\n/** Age in whole years from a DOB string, or undefined if unparseable. */\nfunction ageFromDob(dobIso: string | undefined): number | undefined {\n if (!dobIso) return undefined;\n const dob = new Date(dobIso);\n if (Number.isNaN(dob.getTime())) return undefined;\n const now = new Date();\n let age = now.getFullYear() - dob.getFullYear();\n const monthDiff = now.getMonth() - dob.getMonth();\n if (monthDiff < 0 || (monthDiff === 0 && now.getDate() < dob.getDate())) {\n age--;\n }\n return age < 0 || age > 130 ? undefined : age;\n}\n\n/* -------------------------------------------------------------------- */\n/* AppointmentCard */\n/* */\n/* Single-row appointment surface — sibling of AgendaCard, but richer: */\n/* leading timestamp, operator + patient avatars with the operator */\n/* colour dot, a lifecycle-state Badge (announced by label, never colour */\n/* alone), treatment / tooth Tags, and an optional advance-deposit */\n/* TransactionChip. State→Badge-variant + colour-id→token + URL-safety */\n/* come from the shared `_shared/entity-card` helpers. */\n/* */\n/* All visible text flows through useTranslation('ui') against the */\n/* `appointmentCard.*` namespace (plus shared `financial.*` for money). */\n/* -------------------------------------------------------------------- */\n\n// Back-compat / one-stop import — the URL guard lives in the shared helper.\nexport { isSafeEntityUrl as isSafeAppointmentUrl } from '../_shared/is-safe-url';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\n/** Appointment delivery channel. */\nexport type AppointmentType = 'inPractice' | 'telehealth';\n\n/** First-visit tri-state flag. */\nexport type AppointmentFirstVisit = 'yes' | 'no' | 'unknown';\n\n/** Operator (clinician) summary — name + optional palette colour id. */\nexport interface AppointmentOperator {\n /** Operator display name — drives the avatar initials + accessible name. */\n name: string;\n /** Numeric palette colour id, resolved to a kit token for the colour dot. */\n colorId?: number | string;\n}\n\n/** Patient summary — identity + optional age driver. */\nexport interface AppointmentPatient {\n /** Patient display name. */\n name: string;\n /** Optional avatar image URL. */\n avatarUrl?: string;\n /** ISO-8601 date of birth — when present, the card renders the age as a\n * suffix on the name (e.g. \"Carol Danvers · 45\"). */\n dobIso?: string;\n}\n\n/** One treatment line within the appointment. */\nexport interface AppointmentTreatment {\n /** Localised care / treatment name. */\n careName: string;\n /** Optional tooth elements (e.g. FDI ids) the treatment targets. */\n elements?: string[];\n}\n\n/** Booking-reason metadata captured at online-booking time. */\nexport interface AppointmentBookingReason {\n /** Localised booking-reason description. */\n description: string;\n /** Expected duration in minutes. */\n durationMin?: number;\n /** Advance / deposit amount in cents (non-negative). */\n advanceAmountCents?: number;\n /** Localised specialty label. */\n specialty?: string;\n}\n\n/** Money summary for the appointment. */\nexport interface AppointmentMoney {\n /** Total billable amount in cents. When present, rendered as a\n * TransactionChip. */\n billableAmountCents?: number;\n /** Outstanding unpaid amount in cents. When > 0, rendered as a warning\n * TransactionChip so the front desk can flag it at a glance. */\n unpaidAmountCents?: number;\n}\n\n/** Signing status for documents attached to the appointment. */\nexport interface AppointmentSigning {\n /** How many documents require a signature. */\n required: number;\n /** How many have been completed so far. */\n toComplete: number;\n}\n\n/** Boolean appointment flags surfaced as chips / indicators. */\nexport interface AppointmentFlags {\n bookedOnline?: boolean;\n noPatientAssigned?: boolean;\n highlightedAnamnesis?: boolean;\n billable?: boolean;\n}\n\nexport interface AppointmentItem {\n /** Stable appointment identifier. */\n id: string;\n /** ISO-8601 start instant. */\n startIso: string;\n /** Duration in minutes. */\n durationMin: number;\n /** Lifecycle state — drives the Badge variant + label. */\n state: AppointmentState;\n /** Delivery channel — drives the leading type glyph. */\n type: AppointmentType;\n /** First-visit flag. */\n firstVisit?: AppointmentFirstVisit;\n /** Assigned operator. */\n operator?: AppointmentOperator;\n /** Chair / room label — surfaced as a chip. */\n chair?: string;\n /**\n * The care plan this appointment belongs to, when any — surfaced as a chip\n * (`Care plan {number}`). `url` is the deep link the consumer may use for\n * navigation; the chip itself is non-interactive so it never nests an anchor\n * inside the row's own stretched link.\n */\n carePlan?: { number: string; url?: string };\n /** Patient identity. */\n patient?: AppointmentPatient;\n /** Treatment lines. */\n treatments?: AppointmentTreatment[];\n /** Online booking-reason metadata. */\n bookingReason?: AppointmentBookingReason;\n /** Boolean flags. */\n flags?: AppointmentFlags;\n /** Money summary — billable + unpaid amounts. */\n money?: AppointmentMoney;\n /** Whether this appointment is part of a recurring series. */\n recurring?: boolean;\n /** Signing status for attached documents. */\n signing?: AppointmentSigning;\n /** A note left by the patient at booking time. When present, a small\n * message icon signals it. */\n bookingNote?: string;\n /** Optional deep link — when present (and safe) the row renders as an anchor. */\n url?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* CVA — row */\n/* -------------------------------------------------------------------- */\n\nconst appointmentCardVariants = cva(\n [\n 'ds:relative ds:flex ds:items-start ds:gap-[var(--spacing-sm)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:text-start ds:group',\n 'ds:bg-[var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:transition-[colors,border-color,box-shadow] ds:duration-[var(--animation-duration)]',\n 'ds:motion-reduce:transition-none',\n 'ds:forced-colors:border ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n {\n variants: {\n size: {\n sm: 'ds:p-[var(--spacing-sm)]',\n md: 'ds:p-[var(--spacing-md)]',\n },\n interactive: {\n true: 'ds:hover:bg-[color:var(--muted)]/40 ds:cursor-pointer',\n false: '',\n },\n surface: {\n // `flat` (default) is the chrome-less row used inside a bordered\n // AppointmentTray. `elevated` gives each row its own card chrome\n // (border + shadow) for use directly on a rail, e.g. AppointmentTimeline.\n // Uses `--shadow-sm` (a row lift), not `--shadow-card`/`--shadow-lg`:\n // the rail's `overflow-y:auto` scroll region clips `overflow-x` at a\n // narrow gutter, so a wide 30px-blur shadow gets a hard-edged clip.\n flat: '',\n elevated:\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2 ds:shadow-[var(--shadow-sm)]',\n },\n selected: {\n // The row the host has marked as the active/selected appointment —\n // matches the `current` note's info-tinted accent: a solid\n // inline-start bar plus a soft info wash, so the eye keeps its\n // place in the list after a click.\n true: 'ds:border-s-2 ds:border-s-[color:var(--info)] ds:bg-[color:var(--info)]/10',\n false: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n interactive: false,\n surface: 'flat',\n selected: false,\n },\n },\n);\n\nconst stretchedLinkClass = [\n // Interactive elements need a box to remain keyboard-focusable in browsers.\n 'ds:inline-flex ds:min-w-0',\n 'ds:focus-visible:outline-none',\n \"ds:after:content-[''] ds:after:absolute ds:after:inset-0 ds:after:rounded-[var(--radius-md)]\",\n 'ds:after:pointer-events-auto',\n 'ds:focus-visible:after:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:after:outline-solid',\n 'ds:focus-visible:after:outline-[color:var(--ring)]',\n 'ds:focus-visible:after:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:after:outline-[CanvasText]',\n].join(' ');\n\nconst TYPE_ICON: Record<AppointmentType, typeof MapPin> = {\n inPractice: MapPin,\n telehealth: Video,\n};\n\n/* -------------------------------------------------------------------- */\n/* Props */\n/* -------------------------------------------------------------------- */\n\nexport interface AppointmentCardProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onClick' | 'title'>,\n VariantProps<typeof appointmentCardVariants> {\n /** The appointment to render. */\n item: AppointmentItem;\n /** Visual density. */\n size?: 'sm' | 'md';\n /**\n * `'flat'` (default) — chrome-less row for use inside a bordered\n * `AppointmentTray`. `'elevated'` — each row carries its own card chrome\n * (border + shadow), for placing rows directly on a rail (AppointmentTimeline).\n */\n surface?: 'flat' | 'elevated';\n /** BCP-47 locale override for the timestamp + currency. */\n locale?: string;\n /** ISO-4217 currency code for the advance-deposit chip. Defaults to `EUR`. */\n currency?: string;\n /**\n * Show the patient identity (avatar + name as the row title). Default `true`.\n * Set `false` in single-patient surfaces (e.g. a patient's own\n * `AppointmentTimeline`) where repeating the name is redundant — the row then\n * leads with the operator as its title, falling back to a generic label.\n */\n showPatient?: boolean;\n /** Fires when the row is activated. */\n onActivate?: (item: AppointmentItem) => void;\n /**\n * Mark this row as the active/selected appointment — an info-tinted\n * inline-start bar plus a soft wash, so the eye keeps its place in the\n * list after a click. Renders `aria-current=\"true\"` for assistive tech.\n */\n selected?: boolean;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const AppointmentCard = forwardRef<HTMLDivElement, AppointmentCardProps>(\n (\n {\n item,\n size = 'sm',\n surface = 'flat',\n locale,\n currency = 'EUR',\n showPatient = true,\n onActivate,\n selected = false,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const interactive = !!onActivate;\n const hasSafeUrl = !!item.url && isSafeEntityUrl(item.url);\n\n const patientName = item.patient?.name ?? t('appointmentCard.noPatient');\n const operatorName = item.operator?.name;\n const stateLabel = t(`appointmentCard.state.${item.state}`);\n const stateWorkflow = appointmentStateWorkflow(item.state);\n const StateIcon = stateWorkflow.Icon;\n const patientAge = ageFromDob(item.patient?.dobIso);\n const noPatient = item.flags?.noPatientAssigned || !item.patient;\n\n const avatarSize = size === 'md' ? 'md' : 'sm';\n const TypeIcon = TYPE_ICON[item.type];\n\n // In single-patient context the patient name is redundant, so the row leads\n // with the operator (the \"who am I seeing\") and falls back to a generic\n // label when no operator is set.\n const title = showPatient\n ? patientName\n : (operatorName ?? t('appointmentCard.appointment'));\n\n const ariaLabel = showPatient\n ? t('appointmentCard.itemLabel', {\n patient: patientName,\n state: stateLabel,\n })\n : t('appointmentCard.itemLabelGeneric', { title, state: stateLabel });\n\n const titleNode = (\n <span className=\"ds:min-w-0 ds:truncate type-title-item ds:text-[color:var(--foreground)]\">\n {title}\n {showPatient && patientAge !== undefined ? (\n <span className=\"ds:ms-[var(--spacing-2xs)] ds:font-normal ds:text-[color:var(--muted-foreground)]\">\n · {patientAge}\n </span>\n ) : null}\n </span>\n );\n\n let activator: ReactNode;\n if (interactive && hasSafeUrl) {\n activator = (\n <a\n href={item.url}\n aria-label={ariaLabel}\n className={stretchedLinkClass}\n onClick={(e) => {\n if (e.defaultPrevented || e.metaKey || e.ctrlKey || e.shiftKey)\n return;\n onActivate?.(item);\n }}\n >\n {titleNode}\n </a>\n );\n } else if (interactive) {\n activator = (\n <button\n type=\"button\"\n aria-label={ariaLabel}\n className={\n stretchedLinkClass +\n ' ds:bg-transparent ds:border-0 ds:p-0 ds:text-start'\n }\n onClick={() => onActivate?.(item)}\n >\n {titleNode}\n </button>\n );\n } else {\n activator = titleNode;\n }\n\n // Treatment / tooth-element Tags. Each treatment becomes one Tag; the\n // tooth elements (when present) are appended to the visible label.\n const treatmentTags = (item.treatments ?? []).map((tx, index) => {\n const label =\n tx.elements && tx.elements.length > 0\n ? t('appointmentCard.treatmentWithElements', {\n care: tx.careName,\n elements: tx.elements.join(', '),\n })\n : tx.careName;\n return (\n <Tag\n key={`${tx.careName}-${index}`}\n label={label}\n variant=\"neutral\"\n fill=\"outline\"\n size=\"sm\"\n maxInlineSize=\"12rem\"\n />\n );\n });\n\n const advanceCents = item.bookingReason?.advanceAmountCents;\n const hasAdvance = typeof advanceCents === 'number' && advanceCents > 0;\n const unpaidCents = item.money?.unpaidAmountCents;\n const hasUnpaid = typeof unpaidCents === 'number' && unpaidCents > 0;\n\n return (\n <div\n ref={ref}\n /* `listitem` by default — the card is normally a list child. A\n consumer composing a richer row (card plus its own action row)\n owns the semantics instead and passes `role=\"presentation\"`,\n so the two do not nest. `rest` is spread after this. */\n role=\"listitem\"\n data-component=\"appointment-card\"\n data-component-id={item.id}\n data-state={item.state}\n data-type={item.type}\n aria-current={selected ? 'true' : undefined}\n className={appointmentCardVariants({\n size,\n interactive,\n surface,\n selected,\n className,\n })}\n {...rest}\n >\n {/* Leading rail: type glyph + start time + duration */}\n {/* min-w, not a fixed w: a 12-hour time (\"10:30 AM\") plus the type\n glyph is wider than 4rem, and must never wrap AM/PM onto a\n second line. */}\n <span className=\"ds:flex ds:min-w-20 ds:shrink-0 ds:flex-col ds:items-start ds:gap-[var(--spacing-2xs)]\">\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] ds:whitespace-nowrap ds:text-[color:var(--muted-foreground)]\">\n <TypeIcon aria-hidden=\"true\" className=\"ds:size-3.5 ds:shrink-0\" />\n <span className=\"ds:sr-only\">\n {t(`appointmentCard.type.${item.type}`)}\n </span>\n <Timestamp\n value={item.startIso}\n format=\"absolute\"\n shape=\"bare\"\n locale={locale}\n absoluteFormat={{ hour: 'numeric', minute: '2-digit' }}\n className=\"type-body-sm ds:font-medium ds:text-[color:var(--foreground)] ds:tabular-nums\"\n />\n </span>\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {t('appointmentCard.duration', { count: item.durationMin })}\n </span>\n </span>\n\n {/* Operator avatar with colour dot */}\n {operatorName ? (\n <span className=\"ds:relative ds:shrink-0\">\n <Avatar\n name={operatorName}\n color={colorIdToAvatarToken(item.operator?.colorId)}\n size={avatarSize}\n aria-hidden=\"true\"\n role=\"presentation\"\n aria-label={undefined}\n />\n <span\n aria-hidden=\"true\"\n className={\n 'ds:absolute ds:bottom-0 ds:end-0 ds:size-2.5 ds:rounded-[var(--radius-full)] ds:border ds:border-[color:var(--card)] ' +\n operatorDotClass(item.operator?.colorId)\n }\n />\n </span>\n ) : null}\n\n {/* Main content column */}\n <div className=\"ds:flex-1 ds:min-w-0 ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <div className=\"ds:flex ds:items-start ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex-1 ds:min-w-0 ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {showPatient && item.patient?.avatarUrl ? (\n <Avatar\n name={patientName}\n src={item.patient.avatarUrl}\n size={avatarSize}\n className=\"ds:shrink-0\"\n aria-hidden=\"true\"\n role=\"presentation\"\n aria-label={undefined}\n />\n ) : null}\n {showPatient && noPatient ? (\n <span\n className={`ds:shrink-0 ds:inline-flex ds:items-center ds:justify-center ds:rounded-[var(--radius-full)] ds:bg-[color:var(--muted)] ds:text-[color:var(--muted-foreground)] ${\n avatarSize === 'md' ? 'ds:size-10' : 'ds:size-8'\n }`}\n >\n <UserX aria-hidden=\"true\" className=\"ds:size-4\" />\n </span>\n ) : null}\n {activator}\n </div>\n {/* The kit's read-only status surface, not a bare Badge: an\n appointment's status is the same thing on a card, in a details\n footer and in a history entry, so it wears one face and takes\n its tone and glyph from the shared map. */}\n <WorkflowStatusDisplay\n size=\"sm\"\n value={item.state}\n option={{\n value: item.state,\n label: stateLabel,\n icon: <StateIcon aria-hidden=\"true\" />,\n tone: stateWorkflow.tone,\n }}\n className=\"ds:shrink-0\"\n />\n </div>\n\n {/* Meta line: operator name · specialty · first visit · booking note\n (chair moved to a chip below). When the patient is hidden the\n operator is promoted to the title, so it drops out of the meta. */}\n {(showPatient && operatorName) ||\n item.bookingReason?.specialty ||\n item.firstVisit === 'yes' ||\n item.firstVisit === 'unknown' ||\n item.bookingNote ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-sm)] ds:gap-y-[var(--spacing-2xs)] type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {showPatient && operatorName ? <span>{operatorName}</span> : null}\n {item.bookingReason?.specialty ? (\n <span>{item.bookingReason.specialty}</span>\n ) : null}\n {item.firstVisit === 'yes' ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <Star aria-hidden=\"true\" className=\"ds:size-3 ds:shrink-0\" />\n {t('appointmentCard.firstVisit')}\n </span>\n ) : null}\n {item.firstVisit === 'unknown' ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\">\n <Star aria-hidden=\"true\" className=\"ds:size-3 ds:shrink-0\" />\n {t('appointmentCard.firstVisitUnknown')}\n </span>\n ) : null}\n {item.bookingNote ? (\n <span\n className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)]\"\n title={t('appointmentCard.hasBookingNote')}\n >\n <MessageSquareText\n aria-hidden=\"true\"\n className=\"ds:size-3 ds:shrink-0\"\n />\n {t('appointmentCard.hasBookingNote')}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {/* Booking reason */}\n {item.bookingReason?.description ? (\n <span className=\"type-body-sm ds:text-[color:var(--foreground)] ds:truncate\">\n {item.bookingReason.description}\n </span>\n ) : null}\n\n {/* Treatment / tooth Tags */}\n {treatmentTags.length > 0 ? (\n <div className=\"ds:flex ds:flex-wrap ds:gap-[var(--spacing-2xs)]\">\n {treatmentTags}\n </div>\n ) : null}\n\n {/* Chips: care plan · chair · flags · recurring · signing ·\n advance-deposit · unpaid balance · billable */}\n {item.carePlan ||\n item.chair ||\n item.flags?.bookedOnline ||\n item.flags?.highlightedAnamnesis ||\n item.flags?.billable ||\n item.recurring ||\n item.signing ||\n hasAdvance ||\n hasUnpaid ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-xs)]\">\n {item.carePlan ? (\n <Badge\n variant=\"accentSoft\"\n size=\"sm\"\n leading={<ClipboardPlus />}\n >\n {t('appointmentCard.carePlan', {\n number: item.carePlan.number,\n })}\n </Badge>\n ) : null}\n {item.chair ? (\n <Badge variant=\"neutral\" size=\"sm\" leading={<Armchair />}>\n {t('appointmentCard.chair', { chair: item.chair })}\n </Badge>\n ) : null}\n {item.flags?.bookedOnline ? (\n <Badge variant=\"info\" size=\"sm\" leading={<Globe />}>\n {t('appointmentCard.flag.bookedOnline')}\n </Badge>\n ) : null}\n {item.flags?.highlightedAnamnesis ? (\n <Badge variant=\"warning\" size=\"sm\" withDot>\n {t('appointmentCard.flag.highlightedAnamnesis')}\n </Badge>\n ) : null}\n {item.recurring ? (\n <Badge variant=\"neutral\" size=\"sm\" leading={<Repeat />}>\n {t('appointmentCard.recurring')}\n </Badge>\n ) : null}\n {item.signing ? (\n <Badge\n variant={\n item.signing.toComplete >= item.signing.required\n ? 'success'\n : 'warning'\n }\n size=\"sm\"\n leading={<FileSignature />}\n >\n {t('appointmentCard.signing', {\n complete: item.signing.toComplete,\n required: item.signing.required,\n })}\n </Badge>\n ) : null}\n {item.flags?.billable ? (\n <Badge variant=\"success\" size=\"sm\" withDot>\n {t('appointmentCard.flag.billable')}\n </Badge>\n ) : null}\n {hasAdvance ? (\n <TransactionChip\n state=\"to-invoice\"\n amount={(advanceCents as number) / 100}\n currency={currency}\n locale={locale}\n size=\"sm\"\n showLabel\n />\n ) : null}\n {hasUnpaid ? (\n <TransactionChip\n state=\"debt\"\n amount={unpaidCents / 100}\n currency={currency}\n locale={locale}\n size=\"sm\"\n showLabel\n />\n ) : null}\n </div>\n ) : null}\n </div>\n\n {interactive ? (\n <ChevronRight\n aria-hidden=\"true\"\n className=\"ds:size-4 ds:shrink-0 ds:self-center ds:text-[color:var(--muted-foreground)] ds:opacity-0 ds:transition-opacity ds:motion-reduce:transition-none ds:group-hover:opacity-100 ds:group-focus-within:opacity-100 ds:rtl:rotate-180\"\n />\n ) : null}\n </div>\n );\n },\n);\n\nAppointmentCard.displayName = 'AppointmentCard';\n"],"names":["__iconNode","ClipboardPlus","createLucideIcon","FilePenLine","MessageSquareText","OPERATOR_DOT_CLASS","operatorDotClass","colorId","colorIdToToken","ageFromDob","dobIso","dob","now","age","monthDiff","appointmentCardVariants","cva","stretchedLinkClass","TYPE_ICON","MapPin","Video","AppointmentCard","forwardRef","item","size","surface","locale","currency","showPatient","onActivate","selected","className","rest","ref","t","useTranslation","interactive","hasSafeUrl","isSafeEntityUrl","patientName","_a","operatorName","_b","stateLabel","stateWorkflow","appointmentStateWorkflow","StateIcon","patientAge","_c","noPatient","_d","avatarSize","TypeIcon","title","ariaLabel","titleNode","jsxs","activator","jsx","e","treatmentTags","tx","index","label","Tag","advanceCents","_e","hasAdvance","unpaidCents","_f","hasUnpaid","Timestamp","Avatar","colorIdToAvatarToken","_g","_h","_i","UserX","WorkflowStatusDisplay","_j","_k","Star","_l","_m","_n","_o","Badge","Armchair","_p","Globe","_q","Repeat","FileSignature","_r","TransactionChip","ChevronRight"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"appointment-timeline-ByfovxqR.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/* -------------------------------------------------------------------- */\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 ...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 {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 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","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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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"button-nJaPh_HC.js","sources":["../../src/components/button/button.tsx"],"sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, useEffect } from 'react';\nimport { Slot, Slottable } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst buttonVariants = cva(\n // `forced-colors:*` — under Windows High Contrast Mode the OS strips our\n // bg/text tokens, so `ghost` / `outline` / `link` would lose their shape.\n // We repaint a `ButtonBorder` edge + swap the focus ring to `CanvasText`\n // so the control and its focused state both survive HCM.\n 'ds:inline-flex ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)] ds:font-medium ds:transition-colors ds:rounded-[var(--radius-md)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:border ds:forced-colors:border-[ButtonBorder] ds:forced-colors:focus-visible:outline-[CanvasText] ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:aria-disabled:opacity-50 ds:aria-disabled:cursor-not-allowed ds:aria-busy:cursor-wait ds:relative',\n {\n variants: {\n intent: {\n primary:\n 'ds:bg-primary ds:text-primary-foreground ds:hover:bg-primary-hover ds:active:opacity-90 ds:shadow-sm',\n secondary:\n 'ds:bg-secondary ds:text-secondary-foreground ds:hover:bg-secondary-hover ds:active:opacity-90',\n // Background paint is owned by the `background` variant (compound\n // rules below) — see-through by default so outline chrome works on\n // tinted toolbars and shells; `background=\"surface\"` opts into the\n // painted `--background` fill for host pages where a transparent\n // outline reads grey on grey.\n outline:\n 'ds:text-foreground ds:border ds:border-border ds:hover:bg-muted/10 ds:active:bg-muted/20',\n ghost:\n 'ds:bg-transparent ds:text-foreground ds:hover:bg-muted/10 ds:active:bg-muted/20',\n destructive:\n 'ds:bg-destructive ds:text-destructive-foreground ds:hover:bg-destructive-hover ds:active:opacity-90 ds:shadow-sm',\n // Outline chrome in the destructive palette — for dangerous secondary\n // actions (cancel appointment, remove item) that must read as risky\n // without the solid fill's weight. Background paint comes from the\n // `background` variant, same as `outline`.\n destructiveOutline:\n 'ds:text-destructive ds:border ds:border-destructive ds:hover:bg-destructive/10 ds:active:bg-destructive/20',\n link: 'ds:bg-transparent ds:text-primary ds:underline-offset-4 ds:hover:underline ds:active:opacity-80 ds:p-0 ds:h-auto ds:rounded-none',\n // `tonal` is a container-contextual intent. The button carries a\n // `data-intent=\"tonal\"` hook + baseline chrome (hover/active/shadow).\n // The ambient container (e.g. `Alert`) paints the colour via a\n // descendant selector — `[&_[data-intent=tonal]]:bg-…` — so the\n // button picks up the surrounding tint (amber on `warning`, red on\n // `error`, etc.). Outside such a container the button falls back to\n // the primary palette so a loose `<Button intent=\"tonal\">` is never\n // invisible.\n tonal:\n 'ds:bg-primary ds:text-primary-foreground ds:hover:opacity-90 ds:active:opacity-80 ds:shadow-sm',\n },\n size: {\n sm: 'ds:h-8 ds:ps-3 ds:pe-3 ds:text-[length:var(--font-size-sm)] ds:min-h-[var(--min-target-size)] ds:sm:min-h-0 ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:sm:before:hidden',\n md: 'ds:h-10 ds:ps-4 ds:pe-4 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:ps-6 ds:pe-6 ds:text-[length:var(--font-size-lg)]',\n },\n hideLabel: {\n true: 'ds:aspect-square ds:ps-0 ds:pe-0',\n false: '',\n },\n // Backing paint behind the outline intents. Only meaningful for\n // `outline` / `destructiveOutline` (the compound rules below);\n // ignored by the filled and deliberately see-through intents.\n background: {\n transparent: '',\n surface: '',\n },\n },\n // The outline intents carry NO bg utility of their own — the compound\n // rules below are the single source of the paint, so `transparent` vs\n // `surface` never depends on CSS order between competing bg-* classes.\n compoundVariants: [\n {\n intent: ['outline', 'destructiveOutline'],\n background: 'transparent',\n className: 'ds:bg-transparent',\n },\n {\n // 1.6.1 — the painted fill 1.4.6 baked into `outline` is now this\n // opt-in: it kept host pages legible but turned every toolbar\n // icon button on a tinted shell into a solid white square.\n intent: ['outline', 'destructiveOutline'],\n background: 'surface',\n className: 'ds:bg-[var(--background)]',\n },\n ],\n defaultVariants: {\n intent: 'primary',\n size: 'md',\n hideLabel: false,\n background: 'transparent',\n },\n },\n);\n\nexport interface ButtonProps\n extends\n ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n /**\n * Mirror directional icons (arrows, chevrons) horizontally when the\n * interface renders in RTL. Default `false` — most icons (trash, calendar,\n * plus) must NOT flip. Opt in per call-site for arrow / chevron glyphs.\n */\n flipIconInRtl?: boolean;\n /**\n * Visually hide the label, leaving the icon(s) and a square footprint.\n * The children stay in the DOM screen-reader-only, so the accessible\n * name is preserved. Ignored with `asChild` (the label is slotted).\n */\n hideLabel?: boolean;\n /**\n * Backing paint behind `intent=\"outline\"` / `\"destructiveOutline\"`.\n * `'transparent'` (default) shows the surface behind the button —\n * correct on toolbars and tinted shells (app header, coloured bars).\n * `'surface'` paints `--background` behind the outline — for host\n * pages and split-button segments where a see-through outline reads\n * grey on grey. Ignored by the other intents.\n */\n background?: 'transparent' | 'surface';\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n intent,\n size,\n background,\n className,\n asChild = false,\n loading = false,\n startIcon,\n endIcon,\n flipIconInRtl = false,\n hideLabel = false,\n disabled,\n children,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : 'button';\n const labelHidden = hideLabel && !asChild;\n const isIconButton = !children && (startIcon || endIcon);\n\n const ariaLabel = props['aria-label'];\n useEffect(() => {\n if (import.meta.env.DEV && isIconButton && !ariaLabel) {\n console.warn(\n 'Button: Use IconButton for icon-only triggers to ensure accessibility and proper square sizing.',\n );\n }\n }, [isIconButton, ariaLabel]);\n\n const iconSize = size === 'sm' ? 16 : size === 'lg' ? 20 : 18;\n const iconSizeClass =\n size === 'sm'\n ? 'ds:size-4'\n : size === 'lg'\n ? 'ds:size-5'\n : 'ds:size-[18px]';\n const iconFlipClass = flipIconInRtl ? 'ds:rtl:rotate-180' : '';\n\n return (\n <Comp\n ref={ref}\n className={buttonVariants({\n intent,\n size,\n background,\n hideLabel: labelHidden,\n className,\n })}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n data-component=\"button\"\n data-intent={intent ?? undefined}\n {...props}\n >\n {loading && (\n <svg\n aria-hidden=\"true\"\n className=\"ds:animate-spin\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.25\"\n strokeWidth=\"3\"\n />\n <path\n d=\"M22 12a10 10 0 0 1-10 10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n {!loading && startIcon && (\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ${iconSizeClass} ${iconFlipClass}`.trim()}\n >\n {startIcon}\n </span>\n )}\n {asChild ? (\n <Slottable>{children}</Slottable>\n ) : (\n <span\n className={loading || labelHidden ? 'ds:sr-only' : 'ds:inline-flex'}\n >\n {children}\n </span>\n )}\n {!loading && endIcon && (\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ${iconSizeClass} ${iconFlipClass}`.trim()}\n >\n {endIcon}\n </span>\n )}\n </Comp>\n );\n },\n);\n\nButton.displayName = 'Button';\n"],"names":["buttonVariants","cva","Button","forwardRef","intent","size","background","className","asChild","loading","startIcon","endIcon","flipIconInRtl","hideLabel","disabled","children","props","ref","Comp","Slot","labelHidden","isIconButton","ariaLabel","useEffect","iconSize","iconSizeClass","iconFlipClass","jsxs","jsx","Slottable"],"mappings":"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"}