@alfadocs/ui-kit-debug 1.38.0 → 1.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/dist/_chunks/{actions-cell-renderer-CUn1pqEq.js → actions-cell-renderer-BXBy9c0f.js} +3 -3
  2. package/dist/_chunks/{actions-cell-renderer-CUn1pqEq.js.map → actions-cell-renderer-BXBy9c0f.js.map} +1 -1
  3. package/dist/_chunks/{agenda-tray-CG6jUjKc.js → agenda-tray-CBaJASb5.js} +3 -3
  4. package/dist/_chunks/{agenda-tray-CG6jUjKc.js.map → agenda-tray-CBaJASb5.js.map} +1 -1
  5. package/dist/_chunks/{ai-consent-banner-De4gzSBZ.js → ai-consent-banner-D7I2U-cz.js} +37 -36
  6. package/dist/_chunks/ai-consent-banner-D7I2U-cz.js.map +1 -0
  7. package/dist/_chunks/{ai-prompt-input-DdxlaI7q.js → ai-prompt-input-DXknpQCB.js} +2 -2
  8. package/dist/_chunks/{ai-prompt-input-DdxlaI7q.js.map → ai-prompt-input-DXknpQCB.js.map} +1 -1
  9. package/dist/_chunks/{alia-sidebar-B6bXlZZk.js → alia-sidebar-CUqaJNPQ.js} +7 -7
  10. package/dist/_chunks/{alia-sidebar-B6bXlZZk.js.map → alia-sidebar-CUqaJNPQ.js.map} +1 -1
  11. package/dist/_chunks/{anamnesis-card-DGwINeNn.js → anamnesis-card-xtEhyojD.js} +2 -2
  12. package/dist/_chunks/{anamnesis-card-DGwINeNn.js.map → anamnesis-card-xtEhyojD.js.map} +1 -1
  13. package/dist/_chunks/{anamnesis-summary-rows-Cxtgo2ok.js → anamnesis-summary-rows-DQUqwWc1.js} +7 -7
  14. package/dist/_chunks/{anamnesis-summary-rows-Cxtgo2ok.js.map → anamnesis-summary-rows-DQUqwWc1.js.map} +1 -1
  15. package/dist/_chunks/{appointment-card-WsDGBBut.js → appointment-card-TgR_2GKS.js} +134 -102
  16. package/dist/_chunks/appointment-card-TgR_2GKS.js.map +1 -0
  17. package/dist/_chunks/{appointment-peek-5S4O1VQP.js → appointment-peek-abiR0T9e.js} +3 -3
  18. package/dist/_chunks/{appointment-peek-5S4O1VQP.js.map → appointment-peek-abiR0T9e.js.map} +1 -1
  19. package/dist/_chunks/{appointment-timeline-D-rNwKpS.js → appointment-timeline-CCnyUYKz.js} +67 -63
  20. package/dist/_chunks/appointment-timeline-CCnyUYKz.js.map +1 -0
  21. package/dist/_chunks/{appointment-tray-CK2CULg_.js → appointment-tray-N0yEI8UF.js} +4 -4
  22. package/dist/_chunks/{appointment-tray-CK2CULg_.js.map → appointment-tray-N0yEI8UF.js.map} +1 -1
  23. package/dist/_chunks/{audio-recorder-BlQBC7N_.js → audio-recorder-B7dT-Y3v.js} +3 -3
  24. package/dist/_chunks/{audio-recorder-BlQBC7N_.js.map → audio-recorder-B7dT-Y3v.js.map} +1 -1
  25. package/dist/_chunks/{balance-badge-cell-DHs5p0bA.js → balance-badge-cell-o6LldMUA.js} +5 -5
  26. package/dist/_chunks/{balance-badge-cell-DHs5p0bA.js.map → balance-badge-cell-o6LldMUA.js.map} +1 -1
  27. package/dist/_chunks/{bishop-score-D5b8tktp.js → bishop-score-Cu70iv9C.js} +2 -2
  28. package/dist/_chunks/{bishop-score-D5b8tktp.js.map → bishop-score-Cu70iv9C.js.map} +1 -1
  29. package/dist/_chunks/{bmi-calculator-dOKP-vW4.js → bmi-calculator-C9N19aLX.js} +2 -2
  30. package/dist/_chunks/{bmi-calculator-dOKP-vW4.js.map → bmi-calculator-C9N19aLX.js.map} +1 -1
  31. package/dist/_chunks/{booking-x3J7sS2G.js → booking-D43ASl8y.js} +1110 -1104
  32. package/dist/_chunks/booking-D43ASl8y.js.map +1 -0
  33. package/dist/_chunks/{button-nJaPh_HC.js → button-CaUe1uyd.js} +11 -7
  34. package/dist/_chunks/button-CaUe1uyd.js.map +1 -0
  35. package/dist/_chunks/{button-group-QmN1VdUW.js → button-group-R32U7SyV.js} +2 -2
  36. package/dist/_chunks/{button-group-QmN1VdUW.js.map → button-group-R32U7SyV.js.map} +1 -1
  37. package/dist/_chunks/{calendar-7GAUlsNO.js → calendar-ChJQzRw-.js} +2 -2
  38. package/dist/_chunks/{calendar-7GAUlsNO.js.map → calendar-ChJQzRw-.js.map} +1 -1
  39. package/dist/_chunks/calendar-workspace-SN23GsXX.js +11378 -0
  40. package/dist/_chunks/calendar-workspace-SN23GsXX.js.map +1 -0
  41. package/dist/_chunks/{care-plan-card-COFOI-fI.js → care-plan-card-BOv0NRle.js} +3 -3
  42. package/dist/_chunks/{care-plan-card-COFOI-fI.js.map → care-plan-card-BOv0NRle.js.map} +1 -1
  43. package/dist/_chunks/{care-plan-entry-card-BOKn0KW-.js → care-plan-entry-card-d-rZD4li.js} +3 -3
  44. package/dist/_chunks/{care-plan-entry-card-BOKn0KW-.js.map → care-plan-entry-card-d-rZD4li.js.map} +1 -1
  45. package/dist/_chunks/{care-plan-header-CbuOuVBw.js → care-plan-header-CEmBXn6-.js} +2 -2
  46. package/dist/_chunks/{care-plan-header-CbuOuVBw.js.map → care-plan-header-CEmBXn6-.js.map} +1 -1
  47. package/dist/_chunks/{carousel.agent-Dv4a4M8L.js → carousel.agent-z1yLBpyC.js} +2 -2
  48. package/dist/_chunks/{carousel.agent-Dv4a4M8L.js.map → carousel.agent-z1yLBpyC.js.map} +1 -1
  49. package/dist/_chunks/{chart-iWl76PXv.js → chart-PF2krCZC.js} +3 -3
  50. package/dist/_chunks/{chart-iWl76PXv.js.map → chart-PF2krCZC.js.map} +1 -1
  51. package/dist/_chunks/{chat-input-qM5QpUSq.js → chat-input-Cj7ZYQr5.js} +2 -2
  52. package/dist/_chunks/{chat-input-qM5QpUSq.js.map → chat-input-Cj7ZYQr5.js.map} +1 -1
  53. package/dist/_chunks/{chat-message-RniXtrCH.js → chat-message-BMVxiUIX.js} +3 -3
  54. package/dist/_chunks/{chat-message-RniXtrCH.js.map → chat-message-BMVxiUIX.js.map} +1 -1
  55. package/dist/_chunks/{code-block-uVjNSI9g.js → code-block-BB-viuTn.js} +2 -2
  56. package/dist/_chunks/{code-block-uVjNSI9g.js.map → code-block-BB-viuTn.js.map} +1 -1
  57. package/dist/_chunks/{connection-status-OEsWjmRk.js → connection-status-BmA9T0UO.js} +3 -3
  58. package/dist/_chunks/{connection-status-OEsWjmRk.js.map → connection-status-BmA9T0UO.js.map} +1 -1
  59. package/dist/_chunks/{contact-profile-card--My1H2UD.js → contact-profile-card-Zt6WNg1u.js} +2 -2
  60. package/dist/_chunks/{contact-profile-card--My1H2UD.js.map → contact-profile-card-Zt6WNg1u.js.map} +1 -1
  61. package/dist/_chunks/{control-room-rail-DQoHdE1U.js → control-room-rail-CnNZusR5.js} +3 -3
  62. package/dist/_chunks/{control-room-rail-DQoHdE1U.js.map → control-room-rail-CnNZusR5.js.map} +1 -1
  63. package/dist/_chunks/{copy-field-fYKpl6aN.js → copy-field-B8XRVmQv.js} +2 -2
  64. package/dist/_chunks/{copy-field-fYKpl6aN.js.map → copy-field-B8XRVmQv.js.map} +1 -1
  65. package/dist/_chunks/credit-card-D9XZsHGA.js +15 -0
  66. package/dist/_chunks/credit-card-D9XZsHGA.js.map +1 -0
  67. package/dist/_chunks/{cycle-calculator-BJeaXiZv.js → cycle-calculator-BH2StWoT.js} +2 -2
  68. package/dist/_chunks/{cycle-calculator-BJeaXiZv.js.map → cycle-calculator-BH2StWoT.js.map} +1 -1
  69. package/dist/_chunks/{dashboard-grid-B23BFzRl.js → dashboard-grid-BcXWL5S9.js} +2 -2
  70. package/dist/_chunks/{dashboard-grid-B23BFzRl.js.map → dashboard-grid-BcXWL5S9.js.map} +1 -1
  71. package/dist/_chunks/{data-table-Dy1lyumT.js → data-table-CcAx_I1w.js} +6 -6
  72. package/dist/_chunks/{data-table-Dy1lyumT.js.map → data-table-CcAx_I1w.js.map} +1 -1
  73. package/dist/_chunks/{data-table-tabs-BMR0zsVQ.js → data-table-tabs-B9SXA5VP.js} +3 -3
  74. package/dist/_chunks/{data-table-tabs-BMR0zsVQ.js.map → data-table-tabs-B9SXA5VP.js.map} +1 -1
  75. package/dist/_chunks/{description-list-C1RXMDZ_.js → description-list-BsJ_6CQE.js} +2 -2
  76. package/dist/_chunks/{description-list-C1RXMDZ_.js.map → description-list-BsJ_6CQE.js.map} +1 -1
  77. package/dist/_chunks/{document-preview-DsEyRcNd.js → document-preview-COV0BC6n.js} +2 -2
  78. package/dist/_chunks/{document-preview-DsEyRcNd.js.map → document-preview-COV0BC6n.js.map} +1 -1
  79. package/dist/_chunks/{document-scanner-CbWVtm7u.js → document-scanner-B1abl-A4.js} +2 -2
  80. package/dist/_chunks/{document-scanner-CbWVtm7u.js.map → document-scanner-B1abl-A4.js.map} +1 -1
  81. package/dist/_chunks/{due-date-calculator-Dhc9Ljkb.js → due-date-calculator-Buh_mVHq.js} +2 -2
  82. package/dist/_chunks/{due-date-calculator-Dhc9Ljkb.js.map → due-date-calculator-Buh_mVHq.js.map} +1 -1
  83. package/dist/_chunks/{editable-currency-cell-renderer-D7blbDFY.js → editable-currency-cell-renderer-Psb6XKHR.js} +3 -3
  84. package/dist/_chunks/{editable-currency-cell-renderer-D7blbDFY.js.map → editable-currency-cell-renderer-Psb6XKHR.js.map} +1 -1
  85. package/dist/_chunks/{editable-description-7ptNpJEg.js → editable-description-ADMVFPUz.js} +3 -3
  86. package/dist/_chunks/{editable-description-7ptNpJEg.js.map → editable-description-ADMVFPUz.js.map} +1 -1
  87. package/dist/_chunks/{editor-overlay-8fKAcRsm.js → editor-overlay-9tcPXNWt.js} +2 -2
  88. package/dist/_chunks/{editor-overlay-8fKAcRsm.js.map → editor-overlay-9tcPXNWt.js.map} +1 -1
  89. package/dist/_chunks/{empty-state-X0sVPfVo.js → empty-state-BUN_UAWf.js} +2 -2
  90. package/dist/_chunks/{empty-state-X0sVPfVo.js.map → empty-state-BUN_UAWf.js.map} +1 -1
  91. package/dist/_chunks/{entity-summary-BbW0mIzU.js → entity-summary-DXejuQ8i.js} +3 -3
  92. package/dist/_chunks/{entity-summary-BbW0mIzU.js.map → entity-summary-DXejuQ8i.js.map} +1 -1
  93. package/dist/_chunks/{error-boundary-ayXFCcq4.js → error-boundary-BNT2iQ1w.js} +2 -2
  94. package/dist/_chunks/{error-boundary-ayXFCcq4.js.map → error-boundary-BNT2iQ1w.js.map} +1 -1
  95. package/dist/_chunks/{face-scheme-uFvhqz6h.js → face-scheme-Dg6ZyLKb.js} +5 -5
  96. package/dist/_chunks/{face-scheme-uFvhqz6h.js.map → face-scheme-Dg6ZyLKb.js.map} +1 -1
  97. package/dist/_chunks/{fetal-weight-C6SxchOv.js → fetal-weight-wx4ycKc6.js} +2 -2
  98. package/dist/_chunks/{fetal-weight-C6SxchOv.js.map → fetal-weight-wx4ycKc6.js.map} +1 -1
  99. package/dist/_chunks/{field-array-C9dmRaIM.js → field-array-BW9KeeXG.js} +3 -3
  100. package/dist/_chunks/{field-array-C9dmRaIM.js.map → field-array-BW9KeeXG.js.map} +1 -1
  101. package/dist/_chunks/{file-manager-UlcYQv8n.js → file-manager-BfLQxF5t.js} +136 -150
  102. package/dist/_chunks/file-manager-BfLQxF5t.js.map +1 -0
  103. package/dist/_chunks/{finished-terminal-Br61Ip4e.js → finished-terminal-DJd7Z_po.js} +2 -2
  104. package/dist/_chunks/{finished-terminal-Br61Ip4e.js.map → finished-terminal-DJd7Z_po.js.map} +1 -1
  105. package/dist/_chunks/{fiscal-code-input-CkwIdB1y.js → fiscal-code-input-ODQRd_Sw.js} +2 -2
  106. package/dist/_chunks/{fiscal-code-input-CkwIdB1y.js.map → fiscal-code-input-ODQRd_Sw.js.map} +1 -1
  107. package/dist/_chunks/folder-BghC8_S2.js +20 -0
  108. package/dist/_chunks/folder-BghC8_S2.js.map +1 -0
  109. package/dist/_chunks/{freemium-paywall-BqGk_SBU.js → freemium-paywall-Cz-O9lQD.js} +2 -2
  110. package/dist/_chunks/{freemium-paywall-BqGk_SBU.js.map → freemium-paywall-Cz-O9lQD.js.map} +1 -1
  111. package/dist/_chunks/{gestational-age-calculator-DDOGaPvg.js → gestational-age-calculator-CwbecTul.js} +2 -2
  112. package/dist/_chunks/{gestational-age-calculator-DDOGaPvg.js.map → gestational-age-calculator-CwbecTul.js.map} +1 -1
  113. package/dist/_chunks/{hcg-doubling-Bb_n6tEa.js → hcg-doubling-BcXriXJe.js} +2 -2
  114. package/dist/_chunks/{hcg-doubling-Bb_n6tEa.js.map → hcg-doubling-BcXriXJe.js.map} +1 -1
  115. package/dist/_chunks/{header-BZ4pZlJV.js → header-3o9o9v_T.js} +2 -2
  116. package/dist/_chunks/{header-BZ4pZlJV.js.map → header-3o9o9v_T.js.map} +1 -1
  117. package/dist/_chunks/{header-settings-B8mLc03Q.js → header-settings-CTe45iDy.js} +4 -4
  118. package/dist/_chunks/{header-settings-B8mLc03Q.js.map → header-settings-CTe45iDy.js.map} +1 -1
  119. package/dist/_chunks/{hover-card-Bcku1GQu.js → hover-card-BMJBVqIf.js} +2 -2
  120. package/dist/_chunks/{hover-card-Bcku1GQu.js.map → hover-card-BMJBVqIf.js.map} +1 -1
  121. package/dist/_chunks/{icon-button-8xqRnkdG.js → icon-button-CehAeZoP.js} +2 -2
  122. package/dist/_chunks/{icon-button-8xqRnkdG.js.map → icon-button-CehAeZoP.js.map} +1 -1
  123. package/dist/_chunks/{icon-button-group-Dj6CRoYR.js → icon-button-group-DkkdIygu.js} +2 -2
  124. package/dist/_chunks/{icon-button-group-Dj6CRoYR.js.map → icon-button-group-DkkdIygu.js.map} +1 -1
  125. package/dist/_chunks/{icon-picker-CTWzlHJr.js → icon-picker-DMEelg9v.js} +3 -3
  126. package/dist/_chunks/{icon-picker-CTWzlHJr.js.map → icon-picker-DMEelg9v.js.map} +1 -1
  127. package/dist/_chunks/{image-cropper-C84NDTB7.js → image-cropper-BjPjT7wU.js} +2 -2
  128. package/dist/_chunks/{image-cropper-C84NDTB7.js.map → image-cropper-BjPjT7wU.js.map} +1 -1
  129. package/dist/_chunks/{info-tip-ey_Pon2y.js → info-tip-iP2Pm9dh.js} +2 -2
  130. package/dist/_chunks/{info-tip-ey_Pon2y.js.map → info-tip-iP2Pm9dh.js.map} +1 -1
  131. package/dist/_chunks/{insert-result-LCNTskNJ.js → insert-result-DPnOBD85.js} +2 -2
  132. package/dist/_chunks/{insert-result-LCNTskNJ.js.map → insert-result-DPnOBD85.js.map} +1 -1
  133. package/dist/_chunks/{key-value-pair-DczGb4yz.js → key-value-pair-DaQI_LZB.js} +2 -2
  134. package/dist/_chunks/{key-value-pair-DczGb4yz.js.map → key-value-pair-DaQI_LZB.js.map} +1 -1
  135. package/dist/_chunks/{link-cell-renderer-BNa8x6oJ.js → link-cell-renderer-s3oHzOwi.js} +2 -2
  136. package/dist/_chunks/{link-cell-renderer-BNa8x6oJ.js.map → link-cell-renderer-s3oHzOwi.js.map} +1 -1
  137. package/dist/_chunks/{locale-picker-BLeHbFSc.js → locale-picker-CH3kfrIG.js} +3 -3
  138. package/dist/_chunks/{locale-picker-BLeHbFSc.js.map → locale-picker-CH3kfrIG.js.map} +1 -1
  139. package/dist/_chunks/{map-view-CCAlC9IL.js → map-view-CHw4RL6w.js} +2 -2
  140. package/dist/_chunks/{map-view-CCAlC9IL.js.map → map-view-CHw4RL6w.js.map} +1 -1
  141. package/dist/_chunks/{marketplace-app-shell-BwH6Aruw.js → marketplace-app-shell-d2EtcUbe.js} +4 -4
  142. package/dist/_chunks/{marketplace-app-shell-BwH6Aruw.js.map → marketplace-app-shell-d2EtcUbe.js.map} +1 -1
  143. package/dist/_chunks/{message-card-Dm5Xshup.js → message-card-V3sFPiQI.js} +3 -3
  144. package/dist/_chunks/{message-card-Dm5Xshup.js.map → message-card-V3sFPiQI.js.map} +1 -1
  145. package/dist/_chunks/{message-tray-CXjVsKqp.js → message-tray-CrRIHfiQ.js} +4 -4
  146. package/dist/_chunks/{message-tray-CXjVsKqp.js.map → message-tray-CrRIHfiQ.js.map} +1 -1
  147. package/dist/_chunks/{note-timeline-D2oPuQP6.js → note-timeline-Dn_XTo1s.js} +131 -90
  148. package/dist/_chunks/note-timeline-Dn_XTo1s.js.map +1 -0
  149. package/dist/_chunks/{notes-panel-CkbfDDzj.js → notes-panel-CmTqIWlS.js} +277 -241
  150. package/dist/_chunks/notes-panel-CmTqIWlS.js.map +1 -0
  151. package/dist/_chunks/{notification-card-ChcK9Wat.js → notification-card-B2gLO6dK.js} +3 -3
  152. package/dist/_chunks/{notification-card-ChcK9Wat.js.map → notification-card-B2gLO6dK.js.map} +1 -1
  153. package/dist/_chunks/{notification-tray-_NoChRKi.js → notification-tray-BOEKegVV.js} +4 -4
  154. package/dist/_chunks/{notification-tray-_NoChRKi.js.map → notification-tray-BOEKegVV.js.map} +1 -1
  155. package/dist/_chunks/{optical-prescription-cphK41eP.js → optical-prescription-LGgmtcST.js} +2 -2
  156. package/dist/_chunks/{optical-prescription-cphK41eP.js.map → optical-prescription-LGgmtcST.js.map} +1 -1
  157. package/dist/_chunks/{panel-subview-BNXN8OEL.js → panel-subview-Cc2Wtt7D.js} +52 -52
  158. package/dist/_chunks/panel-subview-Cc2Wtt7D.js.map +1 -0
  159. package/dist/_chunks/{patient-details-2cIaL-Zb.js → patient-details-C8ImUrVg.js} +3 -3
  160. package/dist/_chunks/{patient-details-2cIaL-Zb.js.map → patient-details-C8ImUrVg.js.map} +1 -1
  161. package/dist/_chunks/{patient-field-row-IHb2VFc2.js → patient-field-row-BRSOKvme.js} +7 -7
  162. package/dist/_chunks/{patient-field-row-IHb2VFc2.js.map → patient-field-row-BRSOKvme.js.map} +1 -1
  163. package/dist/_chunks/{patient-search-D08b6jgj.js → patient-search-5QcmQKJD.js} +2 -2
  164. package/dist/_chunks/{patient-search-D08b6jgj.js.map → patient-search-5QcmQKJD.js.map} +1 -1
  165. package/dist/_chunks/{patient-summary-card-B131Q7Bp.js → patient-summary-card-BhmKB2KR.js} +7 -7
  166. package/dist/_chunks/patient-summary-card-BhmKB2KR.js.map +1 -0
  167. package/dist/_chunks/{payment-automation-upsell-BLTdE2em.js → payment-automation-upsell-BKmBXU4i.js} +17 -16
  168. package/dist/_chunks/{payment-automation-upsell-BLTdE2em.js.map → payment-automation-upsell-BKmBXU4i.js.map} +1 -1
  169. package/dist/_chunks/{payment-request-card-BxcdvxKR.js → payment-request-card-Cer6XXCn.js} +6 -5
  170. package/dist/_chunks/{payment-request-card-BxcdvxKR.js.map → payment-request-card-Cer6XXCn.js.map} +1 -1
  171. package/dist/_chunks/{periodontal-chart-BF_e3wZp.js → periodontal-chart-DJoZS_o7.js} +2 -2
  172. package/dist/_chunks/{periodontal-chart-BF_e3wZp.js.map → periodontal-chart-DJoZS_o7.js.map} +1 -1
  173. package/dist/_chunks/{periodontal-chart-card-BJEuJuzh.js → periodontal-chart-card-Nd1ZoYWb.js} +2 -2
  174. package/dist/_chunks/{periodontal-chart-card-BJEuJuzh.js.map → periodontal-chart-card-Nd1ZoYWb.js.map} +1 -1
  175. package/dist/_chunks/{popover-DzR5QYxp.js → popover-DO-pssF3.js} +2 -2
  176. package/dist/_chunks/{popover-DzR5QYxp.js.map → popover-DO-pssF3.js.map} +1 -1
  177. package/dist/_chunks/{practice-results-CBNRJNnY.js → practice-results-D_jjzwgf.js} +5 -5
  178. package/dist/_chunks/{practice-results-CBNRJNnY.js.map → practice-results-D_jjzwgf.js.map} +1 -1
  179. package/dist/_chunks/{pregnancy-dating-nV1_S6w0.js → pregnancy-dating-DcyV9ZRD.js} +2 -2
  180. package/dist/_chunks/{pregnancy-dating-nV1_S6w0.js.map → pregnancy-dating-DcyV9ZRD.js.map} +1 -1
  181. package/dist/_chunks/{pregnancy-weight-gain-tRecShAD.js → pregnancy-weight-gain-Bfq4Kwt5.js} +2 -2
  182. package/dist/_chunks/{pregnancy-weight-gain-tRecShAD.js.map → pregnancy-weight-gain-Bfq4Kwt5.js.map} +1 -1
  183. package/dist/_chunks/{privacy-lock-Be39vQUN.js → privacy-lock-CbFCAMM3.js} +3 -3
  184. package/dist/_chunks/{privacy-lock-Be39vQUN.js.map → privacy-lock-CbFCAMM3.js.map} +1 -1
  185. package/dist/_chunks/{product-hub-panel-C3bMjscm.js → product-hub-panel-w40-_-1s.js} +3 -3
  186. package/dist/_chunks/{product-hub-panel-C3bMjscm.js.map → product-hub-panel-w40-_-1s.js.map} +1 -1
  187. package/dist/_chunks/{public-header.agent-Bl1KFwSE.js → public-header.agent-D-EBVskf.js} +3 -3
  188. package/dist/_chunks/{public-header.agent-Bl1KFwSE.js.map → public-header.agent-D-EBVskf.js.map} +1 -1
  189. package/dist/_chunks/{radiograph-panel.agent-k0G7JuoM.js → radiograph-panel.agent-LrILY2lN.js} +4 -4
  190. package/dist/_chunks/{radiograph-panel.agent-k0G7JuoM.js.map → radiograph-panel.agent-LrILY2lN.js.map} +1 -1
  191. package/dist/_chunks/{receipt-euro-C6k4Gzhr.js → receipt-euro-B1cLM_TN.js} +3 -14
  192. package/dist/_chunks/receipt-euro-B1cLM_TN.js.map +1 -0
  193. package/dist/_chunks/{reviews-panel-Cy969x7q.js → reviews-panel-2GVuxGeT.js} +4 -4
  194. package/dist/_chunks/{reviews-panel-Cy969x7q.js.map → reviews-panel-2GVuxGeT.js.map} +1 -1
  195. package/dist/_chunks/{rich-text-editor-BTXlorm5.js → rich-text-editor-BJ1-Lkao.js} +1024 -932
  196. package/dist/_chunks/rich-text-editor-BJ1-Lkao.js.map +1 -0
  197. package/dist/_chunks/{session-countdown-QMsnRa1x.js → session-countdown-BqppPrw6.js} +2 -2
  198. package/dist/_chunks/{session-countdown-QMsnRa1x.js.map → session-countdown-BqppPrw6.js.map} +1 -1
  199. package/dist/_chunks/{sheet-hm04DGFd.js → sheet-C8WIDFS8.js} +2 -2
  200. package/dist/_chunks/{sheet-hm04DGFd.js.map → sheet-C8WIDFS8.js.map} +1 -1
  201. package/dist/_chunks/{sign-in-with-alfadocs-button-BLe_quy5.js → sign-in-with-alfadocs-button-DWwBJtyE.js} +2 -2
  202. package/dist/_chunks/{sign-in-with-alfadocs-button-BLe_quy5.js.map → sign-in-with-alfadocs-button-DWwBJtyE.js.map} +1 -1
  203. package/dist/_chunks/{signature-request-b-86AGlT.js → signature-request-D_j2aQu1.js} +359 -370
  204. package/dist/_chunks/signature-request-D_j2aQu1.js.map +1 -0
  205. package/dist/_chunks/{slot-grid-Bk3GZL1p.js → slot-grid-B3eOPkKD.js} +4 -4
  206. package/dist/_chunks/{slot-grid-Bk3GZL1p.js.map → slot-grid-B3eOPkKD.js.map} +1 -1
  207. package/dist/_chunks/{streaming-text-DjFqLSt_.js → streaming-text-CE1u_oGa.js} +2 -2
  208. package/dist/_chunks/{streaming-text-DjFqLSt_.js.map → streaming-text-CE1u_oGa.js.map} +1 -1
  209. package/dist/_chunks/{task-tray-5co9Jr2L.js → task-tray-DIwjAIes.js} +3 -3
  210. package/dist/_chunks/{task-tray-5co9Jr2L.js.map → task-tray-DIwjAIes.js.map} +1 -1
  211. package/dist/_chunks/{tasks-panel-BpH-x7U3.js → tasks-panel-CpcikOeY.js} +5 -5
  212. package/dist/_chunks/{tasks-panel-BpH-x7U3.js.map → tasks-panel-CpcikOeY.js.map} +1 -1
  213. package/dist/_chunks/{theme-toggle-CMz8YfC1.js → theme-toggle-bI0pgDDv.js} +3 -3
  214. package/dist/_chunks/{theme-toggle-CMz8YfC1.js.map → theme-toggle-bI0pgDDv.js.map} +1 -1
  215. package/dist/_chunks/{toast-8jqtbfAB.js → toast-ZZfhA5u0.js} +2 -2
  216. package/dist/_chunks/{toast-8jqtbfAB.js.map → toast-ZZfhA5u0.js.map} +1 -1
  217. package/dist/_chunks/{token-insert-menu-9Um0JinI.js → token-insert-menu-A9B5AJw6.js} +2 -2
  218. package/dist/_chunks/{token-insert-menu-9Um0JinI.js.map → token-insert-menu-A9B5AJw6.js.map} +1 -1
  219. package/dist/_chunks/tool-rail-D89USYE6.js +799 -0
  220. package/dist/_chunks/tool-rail-D89USYE6.js.map +1 -0
  221. package/dist/_chunks/{tooth-scheme-BWkYxxjR.js → tooth-scheme-DPAq0vQK.js} +3 -3
  222. package/dist/_chunks/{tooth-scheme-BWkYxxjR.js.map → tooth-scheme-DPAq0vQK.js.map} +1 -1
  223. package/dist/_chunks/{transaction-chip-Dth1nThY.js → transaction-chip-CwgcJiqF.js} +47 -46
  224. package/dist/_chunks/{transaction-chip-Dth1nThY.js.map → transaction-chip-CwgcJiqF.js.map} +1 -1
  225. package/dist/_chunks/{unit-converter-BTgU50gk.js → unit-converter-C-LpGzrN.js} +2 -2
  226. package/dist/_chunks/{unit-converter-BTgU50gk.js.map → unit-converter-C-LpGzrN.js.map} +1 -1
  227. package/dist/_chunks/user-plus-BtcOLgNU.js +17 -0
  228. package/dist/_chunks/user-plus-BtcOLgNU.js.map +1 -0
  229. package/dist/_chunks/{warning-stack-BW5Dwb3z.js → warning-stack-C0glSB7p.js} +3 -3
  230. package/dist/_chunks/{warning-stack-BW5Dwb3z.js.map → warning-stack-C0glSB7p.js.map} +1 -1
  231. package/dist/_chunks/{workflow-map-CXdsxvUj.js → workflow-map-DhR_h5yw.js} +5 -5
  232. package/dist/_chunks/{workflow-map-CXdsxvUj.js.map → workflow-map-DhR_h5yw.js.map} +1 -1
  233. package/dist/agent-catalog.json +3 -418
  234. package/dist/agent-i18n/en.json +2 -18
  235. package/dist/components/agenda-tray/index.js +1 -1
  236. package/dist/components/ai-consent-banner/ai-consent-banner.d.ts +9 -0
  237. package/dist/components/ai-consent-banner/ai-consent-banner.d.ts.map +1 -1
  238. package/dist/components/ai-consent-banner/index.d.ts +1 -1
  239. package/dist/components/ai-consent-banner/index.d.ts.map +1 -1
  240. package/dist/components/ai-consent-banner/index.js +1 -1
  241. package/dist/components/ai-prompt-input/index.js +1 -1
  242. package/dist/components/anamnesis-card/index.js +1 -1
  243. package/dist/components/appointment-card/appointment-card.d.ts +24 -0
  244. package/dist/components/appointment-card/appointment-card.d.ts.map +1 -1
  245. package/dist/components/appointment-card/index.js +2 -2
  246. package/dist/components/appointment-peek/index.js +1 -1
  247. package/dist/components/appointment-timeline/appointment-timeline.d.ts +15 -1
  248. package/dist/components/appointment-timeline/appointment-timeline.d.ts.map +1 -1
  249. package/dist/components/appointment-timeline/index.js +1 -1
  250. package/dist/components/audio-recorder/index.js +1 -1
  251. package/dist/components/bishop-score/index.js +1 -1
  252. package/dist/components/bmi-calculator/index.js +1 -1
  253. package/dist/components/booking/booking-types.d.ts +6 -0
  254. package/dist/components/booking/booking-types.d.ts.map +1 -1
  255. package/dist/components/booking/booking.d.ts.map +1 -1
  256. package/dist/components/booking/cascade.d.ts +6 -0
  257. package/dist/components/booking/cascade.d.ts.map +1 -1
  258. package/dist/components/booking/index.js +1 -1
  259. package/dist/components/button/button.d.ts +1 -1
  260. package/dist/components/button/button.d.ts.map +1 -1
  261. package/dist/components/button/index.js +2 -2
  262. package/dist/components/button-group/index.js +1 -1
  263. package/dist/components/calendar/index.js +1 -1
  264. package/dist/components/care-plan-card/index.js +1 -1
  265. package/dist/components/care-plan-entry-card/index.js +1 -1
  266. package/dist/components/care-plan-header/index.js +1 -1
  267. package/dist/components/carousel/index.js +1 -1
  268. package/dist/components/chart/index.js +1 -1
  269. package/dist/components/chat-input/index.js +1 -1
  270. package/dist/components/chat-message/index.js +1 -1
  271. package/dist/components/connection-status/index.js +1 -1
  272. package/dist/components/contact-profile-card/index.js +1 -1
  273. package/dist/components/control-room-rail/index.js +1 -1
  274. package/dist/components/copy-field/index.js +1 -1
  275. package/dist/components/cycle-calculator/index.js +1 -1
  276. package/dist/components/dashboard-grid/index.js +1 -1
  277. package/dist/components/data-table/index.js +4 -4
  278. package/dist/components/data-table-tabs/index.js +1 -1
  279. package/dist/components/description-list/index.js +1 -1
  280. package/dist/components/document-preview/index.js +1 -1
  281. package/dist/components/document-scanner/index.js +1 -1
  282. package/dist/components/due-date-calculator/index.js +1 -1
  283. package/dist/components/editable-description/index.js +1 -1
  284. package/dist/components/editor-overlay/index.js +1 -1
  285. package/dist/components/empty-state/index.js +1 -1
  286. package/dist/components/entity-summary/index.js +1 -1
  287. package/dist/components/error-boundary/index.js +1 -1
  288. package/dist/components/face-scheme/index.js +1 -1
  289. package/dist/components/fetal-weight/index.js +1 -1
  290. package/dist/components/field-array/index.js +1 -1
  291. package/dist/components/file-manager/index.js +1 -1
  292. package/dist/components/finished-terminal/index.js +1 -1
  293. package/dist/components/fiscal-code-input/index.js +1 -1
  294. package/dist/components/freemium-paywall/index.js +1 -1
  295. package/dist/components/gestational-age-calculator/index.js +1 -1
  296. package/dist/components/hcg-doubling/index.js +1 -1
  297. package/dist/components/header/index.js +1 -1
  298. package/dist/components/header-settings/index.js +1 -1
  299. package/dist/components/hover-card/index.js +1 -1
  300. package/dist/components/icon-button/index.js +1 -1
  301. package/dist/components/icon-button-group/index.js +1 -1
  302. package/dist/components/icon-picker/index.js +1 -1
  303. package/dist/components/image-cropper/index.js +1 -1
  304. package/dist/components/info-tip/index.js +1 -1
  305. package/dist/components/key-value-pair/index.js +1 -1
  306. package/dist/components/locale-picker/index.js +1 -1
  307. package/dist/components/map-view/index.js +1 -1
  308. package/dist/components/message-card/index.js +1 -1
  309. package/dist/components/message-tray/index.js +1 -1
  310. package/dist/components/note-timeline/index.js +1 -1
  311. package/dist/components/note-timeline/note-timeline.d.ts +9 -0
  312. package/dist/components/note-timeline/note-timeline.d.ts.map +1 -1
  313. package/dist/components/notes-panel/index.d.ts +1 -0
  314. package/dist/components/notes-panel/index.d.ts.map +1 -1
  315. package/dist/components/notes-panel/index.js +1 -1
  316. package/dist/components/notes-panel/notes-panel.d.ts +13 -5
  317. package/dist/components/notes-panel/notes-panel.d.ts.map +1 -1
  318. package/dist/components/notification-card/index.js +1 -1
  319. package/dist/components/notification-tray/index.js +1 -1
  320. package/dist/components/optical-prescription/index.js +1 -1
  321. package/dist/components/panel-subview/index.js +1 -1
  322. package/dist/components/panel-subview/panel-subview.d.ts.map +1 -1
  323. package/dist/components/patient-details/index.js +1 -1
  324. package/dist/components/patient-search/index.js +1 -1
  325. package/dist/components/patient-summary-card/index.js +1 -1
  326. package/dist/components/patient-summary-card/patient-summary-card.d.ts.map +1 -1
  327. package/dist/components/patient-table/index.js +1 -1
  328. package/dist/components/payment-card/index.js +1 -1
  329. package/dist/components/periodontal-chart/index.js +1 -1
  330. package/dist/components/periodontal-chart-card/index.js +1 -1
  331. package/dist/components/popover/index.js +1 -1
  332. package/dist/components/practice-results/index.js +1 -1
  333. package/dist/components/pregnancy-dating/index.js +1 -1
  334. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  335. package/dist/components/privacy-lock/index.js +1 -1
  336. package/dist/components/product-hub-tray/index.js +1 -1
  337. package/dist/components/public-header/index.js +1 -1
  338. package/dist/components/radiograph-panel/index.js +1 -1
  339. package/dist/components/reviews-panel/index.js +1 -1
  340. package/dist/components/rich-text-editor/index.d.ts +1 -1
  341. package/dist/components/rich-text-editor/index.d.ts.map +1 -1
  342. package/dist/components/rich-text-editor/index.js +1 -1
  343. package/dist/components/rich-text-editor/rich-text-editor.d.ts +48 -0
  344. package/dist/components/rich-text-editor/rich-text-editor.d.ts.map +1 -1
  345. package/dist/components/session-countdown/index.js +1 -1
  346. package/dist/components/sheet/index.js +1 -1
  347. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  348. package/dist/components/slot-grid/index.js +1 -1
  349. package/dist/components/streaming-text/index.js +1 -1
  350. package/dist/components/task-tray/index.js +1 -1
  351. package/dist/components/tasks-panel/index.js +1 -1
  352. package/dist/components/theme-toggle/index.js +1 -1
  353. package/dist/components/toast/index.js +1 -1
  354. package/dist/components/token-insert-menu/index.js +1 -1
  355. package/dist/components/tool-rail/index.js +1 -1
  356. package/dist/components/tool-rail/tool-rail.d.ts.map +1 -1
  357. package/dist/components/tooth-scheme/index.js +1 -1
  358. package/dist/components/transaction-chip/index.js +1 -1
  359. package/dist/components/transaction-chip/transaction-chip.d.ts +7 -0
  360. package/dist/components/transaction-chip/transaction-chip.d.ts.map +1 -1
  361. package/dist/components/unit-converter/index.js +1 -1
  362. package/dist/components/warning-stack/index.js +1 -1
  363. package/dist/components/workflow/index.js +1 -1
  364. package/dist/host-compat.css +13 -4
  365. package/dist/i18n/locales/ar.d.ts +248 -194
  366. package/dist/i18n/locales/ar.d.ts.map +1 -1
  367. package/dist/i18n/locales/ar.js +253 -199
  368. package/dist/i18n/locales/ar.js.map +1 -1
  369. package/dist/i18n/locales/de.d.ts +232 -178
  370. package/dist/i18n/locales/de.d.ts.map +1 -1
  371. package/dist/i18n/locales/de.js +237 -183
  372. package/dist/i18n/locales/de.js.map +1 -1
  373. package/dist/i18n/locales/el.d.ts +247 -193
  374. package/dist/i18n/locales/el.d.ts.map +1 -1
  375. package/dist/i18n/locales/el.js +252 -198
  376. package/dist/i18n/locales/el.js.map +1 -1
  377. package/dist/i18n/locales/en.d.ts +54 -0
  378. package/dist/i18n/locales/en.d.ts.map +1 -1
  379. package/dist/i18n/locales/en.js +59 -5
  380. package/dist/i18n/locales/en.js.map +1 -1
  381. package/dist/i18n/locales/es.d.ts +240 -186
  382. package/dist/i18n/locales/es.d.ts.map +1 -1
  383. package/dist/i18n/locales/es.js +245 -191
  384. package/dist/i18n/locales/es.js.map +1 -1
  385. package/dist/i18n/locales/fr.d.ts +234 -180
  386. package/dist/i18n/locales/fr.d.ts.map +1 -1
  387. package/dist/i18n/locales/fr.js +239 -185
  388. package/dist/i18n/locales/fr.js.map +1 -1
  389. package/dist/i18n/locales/hi.d.ts +248 -194
  390. package/dist/i18n/locales/hi.d.ts.map +1 -1
  391. package/dist/i18n/locales/hi.js +257 -199
  392. package/dist/i18n/locales/hi.js.map +1 -1
  393. package/dist/i18n/locales/it.d.ts +192 -138
  394. package/dist/i18n/locales/it.d.ts.map +1 -1
  395. package/dist/i18n/locales/it.js +197 -143
  396. package/dist/i18n/locales/it.js.map +1 -1
  397. package/dist/i18n/locales/ja.d.ts +246 -192
  398. package/dist/i18n/locales/ja.d.ts.map +1 -1
  399. package/dist/i18n/locales/ja.js +251 -197
  400. package/dist/i18n/locales/ja.js.map +1 -1
  401. package/dist/i18n/locales/nl.d.ts +237 -183
  402. package/dist/i18n/locales/nl.d.ts.map +1 -1
  403. package/dist/i18n/locales/nl.js +242 -188
  404. package/dist/i18n/locales/nl.js.map +1 -1
  405. package/dist/i18n/locales/pl.d.ts +242 -188
  406. package/dist/i18n/locales/pl.d.ts.map +1 -1
  407. package/dist/i18n/locales/pl.js +247 -193
  408. package/dist/i18n/locales/pl.js.map +1 -1
  409. package/dist/i18n/locales/pt.d.ts +242 -188
  410. package/dist/i18n/locales/pt.d.ts.map +1 -1
  411. package/dist/i18n/locales/pt.js +247 -193
  412. package/dist/i18n/locales/pt.js.map +1 -1
  413. package/dist/i18n/locales/ro.d.ts +241 -187
  414. package/dist/i18n/locales/ro.d.ts.map +1 -1
  415. package/dist/i18n/locales/ro.js +246 -192
  416. package/dist/i18n/locales/ro.js.map +1 -1
  417. package/dist/i18n/locales/ru.d.ts +247 -193
  418. package/dist/i18n/locales/ru.d.ts.map +1 -1
  419. package/dist/i18n/locales/ru.js +252 -198
  420. package/dist/i18n/locales/ru.js.map +1 -1
  421. package/dist/i18n/locales/sq.d.ts +241 -187
  422. package/dist/i18n/locales/sq.d.ts.map +1 -1
  423. package/dist/i18n/locales/sq.js +246 -192
  424. package/dist/i18n/locales/sq.js.map +1 -1
  425. package/dist/i18n/locales/sv.d.ts +242 -188
  426. package/dist/i18n/locales/sv.d.ts.map +1 -1
  427. package/dist/i18n/locales/sv.js +247 -193
  428. package/dist/i18n/locales/sv.js.map +1 -1
  429. package/dist/i18n/locales/tr.d.ts +248 -194
  430. package/dist/i18n/locales/tr.d.ts.map +1 -1
  431. package/dist/i18n/locales/tr.js +253 -199
  432. package/dist/i18n/locales/tr.js.map +1 -1
  433. package/dist/i18n/locales/zh.d.ts +241 -187
  434. package/dist/i18n/locales/zh.d.ts.map +1 -1
  435. package/dist/i18n/locales/zh.js +246 -192
  436. package/dist/i18n/locales/zh.js.map +1 -1
  437. package/dist/index.js +107 -107
  438. package/dist/locales/ar.json +253 -199
  439. package/dist/locales/de.json +237 -183
  440. package/dist/locales/el.json +252 -198
  441. package/dist/locales/en.json +59 -5
  442. package/dist/locales/es.json +245 -191
  443. package/dist/locales/fr.json +239 -185
  444. package/dist/locales/hi.json +253 -199
  445. package/dist/locales/it.json +197 -143
  446. package/dist/locales/ja.json +251 -197
  447. package/dist/locales/nl.json +242 -188
  448. package/dist/locales/pl.json +247 -193
  449. package/dist/locales/pt.json +247 -193
  450. package/dist/locales/ro.json +246 -192
  451. package/dist/locales/ru.json +252 -198
  452. package/dist/locales/sq.json +246 -192
  453. package/dist/locales/sv.json +247 -193
  454. package/dist/locales/tr.json +253 -199
  455. package/dist/locales/zh.json +246 -192
  456. package/dist/patterns/alia-assistant/index.js +1 -1
  457. package/dist/patterns/anamnesis/index.js +1 -1
  458. package/dist/patterns/calendar/calendar-appointment-details.d.ts +7 -0
  459. package/dist/patterns/calendar/calendar-appointment-details.d.ts.map +1 -1
  460. package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts +10 -5
  461. package/dist/patterns/calendar/calendar-appointment-details.sections.d.ts.map +1 -1
  462. package/dist/patterns/calendar/calendar-bookings-panel.d.ts +31 -0
  463. package/dist/patterns/calendar/calendar-bookings-panel.d.ts.map +1 -0
  464. package/dist/patterns/calendar/calendar-info-hover.d.ts +15 -1
  465. package/dist/patterns/calendar/calendar-info-hover.d.ts.map +1 -1
  466. package/dist/patterns/calendar/calendar-privacy.d.ts +23 -0
  467. package/dist/patterns/calendar/calendar-privacy.d.ts.map +1 -0
  468. package/dist/patterns/calendar/calendar-rail-settle.d.ts +14 -0
  469. package/dist/patterns/calendar/calendar-rail-settle.d.ts.map +1 -0
  470. package/dist/patterns/calendar/calendar-upcoming-panel.d.ts +32 -0
  471. package/dist/patterns/calendar/calendar-upcoming-panel.d.ts.map +1 -0
  472. package/dist/patterns/calendar/calendar-waiting-list-panel.d.ts +62 -0
  473. package/dist/patterns/calendar/calendar-waiting-list-panel.d.ts.map +1 -0
  474. package/dist/patterns/calendar/calendar-workspace.d.ts +14 -1
  475. package/dist/patterns/calendar/calendar-workspace.d.ts.map +1 -1
  476. package/dist/patterns/calendar/calendar-workspace.model.d.ts +37 -1
  477. package/dist/patterns/calendar/calendar-workspace.model.d.ts.map +1 -1
  478. package/dist/patterns/calendar/calendar.journey.d.ts +9 -1
  479. package/dist/patterns/calendar/calendar.journey.d.ts.map +1 -1
  480. package/dist/patterns/calendar/calendar.model.d.ts +8 -2
  481. package/dist/patterns/calendar/calendar.model.d.ts.map +1 -1
  482. package/dist/patterns/calendar/calendar.sheets.d.ts +49 -28
  483. package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
  484. package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
  485. package/dist/patterns/calendar/calendar.types.d.ts +6 -0
  486. package/dist/patterns/calendar/calendar.types.d.ts.map +1 -1
  487. package/dist/patterns/calendar/index.d.ts +2 -2
  488. package/dist/patterns/calendar/index.d.ts.map +1 -1
  489. package/dist/patterns/calendar/index.js +1 -1
  490. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  491. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  492. package/dist/patterns/signature-request/index.js +1 -1
  493. package/dist/tokens.css +1 -1
  494. package/package.json +3 -1
  495. package/dist/_chunks/ai-consent-banner-De4gzSBZ.js.map +0 -1
  496. package/dist/_chunks/appointment-card-WsDGBBut.js.map +0 -1
  497. package/dist/_chunks/appointment-timeline-D-rNwKpS.js.map +0 -1
  498. package/dist/_chunks/booking-x3J7sS2G.js.map +0 -1
  499. package/dist/_chunks/button-nJaPh_HC.js.map +0 -1
  500. package/dist/_chunks/calendar-workspace-Cc1LRVWY.js +0 -9900
  501. package/dist/_chunks/calendar-workspace-Cc1LRVWY.js.map +0 -1
  502. package/dist/_chunks/file-manager-UlcYQv8n.js.map +0 -1
  503. package/dist/_chunks/note-timeline-D2oPuQP6.js.map +0 -1
  504. package/dist/_chunks/notes-panel-CkbfDDzj.js.map +0 -1
  505. package/dist/_chunks/panel-subview-BNXN8OEL.js.map +0 -1
  506. package/dist/_chunks/patient-summary-card-B131Q7Bp.js.map +0 -1
  507. package/dist/_chunks/receipt-euro-C6k4Gzhr.js.map +0 -1
  508. package/dist/_chunks/rich-text-editor-BTXlorm5.js.map +0 -1
  509. package/dist/_chunks/signature-request-b-86AGlT.js.map +0 -1
  510. package/dist/_chunks/tool-rail-BP8sjxCw.js +0 -667
  511. package/dist/_chunks/tool-rail-BP8sjxCw.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { jsxs as m, jsx as o } from "react/jsx-runtime";
2
2
  import { isValidElement as w, cloneElement as A, forwardRef as B } from "react";
3
3
  import { useTranslation as R } from "react-i18next";
4
- import { I as f } from "./icon-button-8xqRnkdG.js";
5
- import { I as S } from "./icon-button-group-Dj6CRoYR.js";
4
+ import { I as f } from "./icon-button-CehAeZoP.js";
5
+ import { I as S } from "./icon-button-group-DkkdIygu.js";
6
6
  import { D as l } from "./dropdown-menu-DU-Hrf33.js";
7
7
  import { E as T } from "./ellipsis-dRo9ouSU.js";
8
8
  function h(s) {
@@ -134,4 +134,4 @@ export {
134
134
  V as A,
135
135
  G as a
136
136
  };
137
- //# sourceMappingURL=actions-cell-renderer-CUn1pqEq.js.map
137
+ //# sourceMappingURL=actions-cell-renderer-BXBy9c0f.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions-cell-renderer-CUn1pqEq.js","sources":["../../src/components/data-table/cell-renderers/actions-cell-renderer.tsx"],"sourcesContent":["import {\n type ReactElement,\n cloneElement,\n isValidElement,\n type ReactNode,\n forwardRef,\n type ForwardedRef,\n} from 'react';\nimport type { CustomCellRendererProps } from 'ag-grid-react';\nimport { useTranslation } from 'react-i18next';\nimport { Ellipsis } from 'lucide-react';\nimport { IconButton, type IconButtonProps } from '../../button/icon-button';\nimport { IconButtonGroup } from '../../icon-button-group';\nimport { DropdownMenu } from '../../dropdown-menu';\n\n// Lucide icons render at their intrinsic 24×24 unless given a `size` prop or\n// `size-*` class. The IconButton's wrapping span is only `size-4` (16px), so a\n// bare `<Trash2 />` overflows and, inside AG Grid's `overflow: hidden` cells,\n// gets clipped into horizontal slivers. Coerce icon nodes to the expected size.\nfunction sizeIcon(node: ReactNode): ReactNode {\n if (!isValidElement(node)) return node;\n const element = node as React.ReactElement<{\n className?: string;\n size?: number;\n }>;\n const existingClass = element.props.className ?? '';\n const className = /\\bsize-|\\bw-|\\bh-/.test(existingClass)\n ? existingClass\n : `${existingClass} size-4`.trim();\n return cloneElement(element, { className, size: element.props.size ?? 16 });\n}\n\nexport interface ActionDef<TData = unknown> {\n /** Lucide-style icon node. */\n icon: ReactNode;\n /** Accessible label — also used as the tooltip. */\n label: string;\n /** Invoked with the row data. */\n onClick: (data: TData) => void;\n /** Disable the action. Pass a predicate for per-row disablement. */\n disabled?: boolean | ((data: TData) => boolean);\n /** Human-readable reason shown in the tooltip when disabled. */\n disabledReason?: string;\n /** `destructive` swaps the button intent. */\n variant?: 'default' | 'destructive';\n /** Hide the action entirely. Pass a predicate for per-row hiding. */\n hidden?: boolean | ((data: TData) => boolean);\n}\n\nexport interface ActionsCellRendererParams<TData = unknown> {\n actions: ActionDef<TData>[];\n /** Intent of the inline buttons / the collapsed trigger (default `ghost`). */\n intent?: 'ghost' | 'outline';\n /**\n * Render the inline buttons as a connected `IconButtonGroup` (a segmented\n * control) rather than a loose row. Requires `label` for the group name.\n */\n group?: boolean;\n /** Accessible name for the group and the collapsed overflow trigger. */\n label?: string;\n /**\n * Collapse the actions into a single \"…\" overflow menu instead of inline\n * buttons. Pass a getter to flip it at runtime — call\n * `api.refreshCells({ force: true })` after the underlying value changes so\n * the cells re-read it (this preserves column state, unlike rebuilding defs).\n */\n collapsed?: boolean | (() => boolean);\n /**\n * Split button: keep the first `maxInline` visible actions as inline buttons\n * and fold the rest into a trailing \"…\" menu at the end of the row. The\n * column then needs `actionsColumnWidth(maxInline + 1)`. Ignored while\n * `collapsed`; `0` is the same as `collapsed`.\n */\n maxInline?: number;\n}\n\n/**\n * Pixel width an actions column needs so `count` inline `sm` IconButtons (32px\n * each — whether segmented via `group` or loose) plus the data-table cell's\n * inline padding never clip. AG Grid gives a column ONE width for every row, so\n * pass the TOTAL number of actions (the worst case where a single row shows them\n * all) — not the per-row visible count, which varies with `hidden` predicates.\n *\n * Use it as the column `width` so a fully-actioned row can't overflow:\n *\n * {\n * colId: 'actions',\n * cellRenderer: ActionsCellRenderer,\n * cellRendererParams: { actions, group: true },\n * width: actionsColumnWidth(actions.length),\n * // minWidth stays at the collapsed footprint when `collapsed` is used.\n * }\n */\nexport function actionsColumnWidth(count: number): number {\n const SM_BUTTON = 32; // sm IconButton (`w-8`)\n // Segmented-group chrome + the cell's inline padding:\n // 12 segmented-group borders and seams around the buttons\n // + 16 --spacing-sm each side, the reduced padding the theme gives\n // graphic-only cells (a text cell's 30px would clip the group).\n const CELL_INSET = 28;\n return Math.max(1, count) * SM_BUTTON + CELL_INSET;\n}\n\nfunction resolve<T>(\n flag: boolean | ((data: T) => boolean) | undefined,\n data: T,\n): boolean {\n if (typeof flag === 'function') return flag(data);\n return Boolean(flag);\n}\n\nconst destructiveInline =\n 'ds:text-[color:var(--destructive)] ds:hover:text-[color:var(--destructive-hover)]';\n\nexport function ActionsCellRenderer<TData = unknown>(\n props: CustomCellRendererProps<TData> & ActionsCellRendererParams<TData>,\n) {\n const {\n data,\n actions,\n intent = 'ghost',\n group,\n label,\n collapsed,\n maxInline,\n } = props;\n const { t } = useTranslation();\n if (!data) return null;\n\n const visible = actions.filter((action) => !resolve(action.hidden, data));\n const isCollapsed =\n typeof collapsed === 'function' ? collapsed() : Boolean(collapsed);\n const inline =\n maxInline === undefined\n ? visible\n : visible.slice(0, Math.max(0, maxInline));\n const overflow =\n maxInline === undefined ? [] : visible.slice(Math.max(0, maxInline));\n\n // Collapsed: one \"…\" trigger opening a DropdownMenu of the actions. Disabled\n // actions stay in the menu but inert (the per-action `disabledReason` is an\n // inline-only affordance — a menu row has no tooltip surface).\n if (isCollapsed) {\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n size=\"sm\"\n intent={intent}\n icon={<Ellipsis aria-hidden />}\n aria-label={label ?? t('dataTable.actions', 'Actions')}\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {visible.map((action, index) => (\n <DropdownMenu.Item\n // Action defs are referentially stable; index is safe as actions\n // do not reorder within a row.\n key={index}\n startIcon={sizeIcon(action.icon)}\n disabled={resolve(action.disabled, data)}\n onSelect={() => action.onClick(data)}\n className={\n action.variant === 'destructive'\n ? 'ds:text-[color:var(--destructive)]'\n : undefined\n }\n >\n {action.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n }\n\n const buttons = inline.map((action, index) => {\n const isDisabled = resolve(action.disabled, data);\n const tooltip =\n isDisabled && action.disabledReason\n ? action.disabledReason\n : action.label;\n return (\n <IconButton\n // See note above on index keys.\n key={index}\n size=\"sm\"\n intent={intent}\n icon={sizeIcon(action.icon)}\n tooltip={tooltip}\n aria-label={action.label}\n disabled={isDisabled}\n onClick={(event) => {\n event.stopPropagation();\n action.onClick(data);\n }}\n className={\n action.variant === 'destructive' ? destructiveInline : undefined\n }\n />\n );\n });\n\n const more =\n overflow.length > 0 ? (\n <OverflowActionsMenu\n key=\"overflow\"\n data={data}\n actions={overflow}\n intent={intent}\n label={label ?? t('dataTable.actions', 'Actions')}\n />\n ) : null;\n\n return group ? (\n <IconButtonGroup\n aria-label={label ?? t('dataTable.actions', 'Actions')}\n size=\"sm\"\n >\n {buttons}\n {more}\n </IconButtonGroup>\n ) : (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {buttons}\n {more}\n </span>\n );\n}\n\ninterface OverflowActionsMenuProps<TData> extends Omit<\n IconButtonProps,\n 'icon' | 'aria-label' | 'onClick'\n> {\n data: TData;\n actions: ActionDef<TData>[];\n label: string;\n}\n\n/**\n * The \"…\" end of a split actions button. Forwards its ref and the rest of its\n * props to the trigger IconButton, so an IconButtonGroup can seat it as the\n * last segment exactly like a plain button (the same contract ExportMenu\n * follows in the toolbar).\n */\nconst OverflowActionsMenu = forwardRef(function OverflowActionsMenu<TData>(\n {\n data,\n actions,\n label,\n intent = 'ghost',\n ...rest\n }: OverflowActionsMenuProps<TData>,\n ref: ForwardedRef<HTMLButtonElement>,\n) {\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n ref={ref}\n type=\"button\"\n size=\"sm\"\n intent={intent}\n icon={<Ellipsis aria-hidden />}\n tooltip={label}\n aria-label={label}\n onClick={(event) => event.stopPropagation()}\n {...rest}\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {actions.map((action, index) => (\n <DropdownMenu.Item\n key={index}\n startIcon={sizeIcon(action.icon)}\n disabled={resolve(action.disabled, data)}\n onSelect={() => action.onClick(data)}\n className={\n action.variant === 'destructive'\n ? 'ds:text-[color:var(--destructive)]'\n : undefined\n }\n >\n {action.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n}) as <TData>(\n props: OverflowActionsMenuProps<TData> & {\n ref?: ForwardedRef<HTMLButtonElement>;\n },\n) => ReactElement;\n"],"names":["sizeIcon","node","isValidElement","element","existingClass","className","cloneElement","actionsColumnWidth","count","resolve","flag","data","destructiveInline","ActionsCellRenderer","props","actions","intent","group","label","collapsed","maxInline","t","useTranslation","visible","action","isCollapsed","inline","overflow","jsxs","DropdownMenu","jsx","IconButton","Ellipsis","index","buttons","isDisabled","tooltip","event","more","OverflowActionsMenu","IconButtonGroup","forwardRef","rest","ref"],"mappings":"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"}
1
+ {"version":3,"file":"actions-cell-renderer-BXBy9c0f.js","sources":["../../src/components/data-table/cell-renderers/actions-cell-renderer.tsx"],"sourcesContent":["import {\n type ReactElement,\n cloneElement,\n isValidElement,\n type ReactNode,\n forwardRef,\n type ForwardedRef,\n} from 'react';\nimport type { CustomCellRendererProps } from 'ag-grid-react';\nimport { useTranslation } from 'react-i18next';\nimport { Ellipsis } from 'lucide-react';\nimport { IconButton, type IconButtonProps } from '../../button/icon-button';\nimport { IconButtonGroup } from '../../icon-button-group';\nimport { DropdownMenu } from '../../dropdown-menu';\n\n// Lucide icons render at their intrinsic 24×24 unless given a `size` prop or\n// `size-*` class. The IconButton's wrapping span is only `size-4` (16px), so a\n// bare `<Trash2 />` overflows and, inside AG Grid's `overflow: hidden` cells,\n// gets clipped into horizontal slivers. Coerce icon nodes to the expected size.\nfunction sizeIcon(node: ReactNode): ReactNode {\n if (!isValidElement(node)) return node;\n const element = node as React.ReactElement<{\n className?: string;\n size?: number;\n }>;\n const existingClass = element.props.className ?? '';\n const className = /\\bsize-|\\bw-|\\bh-/.test(existingClass)\n ? existingClass\n : `${existingClass} size-4`.trim();\n return cloneElement(element, { className, size: element.props.size ?? 16 });\n}\n\nexport interface ActionDef<TData = unknown> {\n /** Lucide-style icon node. */\n icon: ReactNode;\n /** Accessible label — also used as the tooltip. */\n label: string;\n /** Invoked with the row data. */\n onClick: (data: TData) => void;\n /** Disable the action. Pass a predicate for per-row disablement. */\n disabled?: boolean | ((data: TData) => boolean);\n /** Human-readable reason shown in the tooltip when disabled. */\n disabledReason?: string;\n /** `destructive` swaps the button intent. */\n variant?: 'default' | 'destructive';\n /** Hide the action entirely. Pass a predicate for per-row hiding. */\n hidden?: boolean | ((data: TData) => boolean);\n}\n\nexport interface ActionsCellRendererParams<TData = unknown> {\n actions: ActionDef<TData>[];\n /** Intent of the inline buttons / the collapsed trigger (default `ghost`). */\n intent?: 'ghost' | 'outline';\n /**\n * Render the inline buttons as a connected `IconButtonGroup` (a segmented\n * control) rather than a loose row. Requires `label` for the group name.\n */\n group?: boolean;\n /** Accessible name for the group and the collapsed overflow trigger. */\n label?: string;\n /**\n * Collapse the actions into a single \"…\" overflow menu instead of inline\n * buttons. Pass a getter to flip it at runtime — call\n * `api.refreshCells({ force: true })` after the underlying value changes so\n * the cells re-read it (this preserves column state, unlike rebuilding defs).\n */\n collapsed?: boolean | (() => boolean);\n /**\n * Split button: keep the first `maxInline` visible actions as inline buttons\n * and fold the rest into a trailing \"…\" menu at the end of the row. The\n * column then needs `actionsColumnWidth(maxInline + 1)`. Ignored while\n * `collapsed`; `0` is the same as `collapsed`.\n */\n maxInline?: number;\n}\n\n/**\n * Pixel width an actions column needs so `count` inline `sm` IconButtons (32px\n * each — whether segmented via `group` or loose) plus the data-table cell's\n * inline padding never clip. AG Grid gives a column ONE width for every row, so\n * pass the TOTAL number of actions (the worst case where a single row shows them\n * all) — not the per-row visible count, which varies with `hidden` predicates.\n *\n * Use it as the column `width` so a fully-actioned row can't overflow:\n *\n * {\n * colId: 'actions',\n * cellRenderer: ActionsCellRenderer,\n * cellRendererParams: { actions, group: true },\n * width: actionsColumnWidth(actions.length),\n * // minWidth stays at the collapsed footprint when `collapsed` is used.\n * }\n */\nexport function actionsColumnWidth(count: number): number {\n const SM_BUTTON = 32; // sm IconButton (`w-8`)\n // Segmented-group chrome + the cell's inline padding:\n // 12 segmented-group borders and seams around the buttons\n // + 16 --spacing-sm each side, the reduced padding the theme gives\n // graphic-only cells (a text cell's 30px would clip the group).\n const CELL_INSET = 28;\n return Math.max(1, count) * SM_BUTTON + CELL_INSET;\n}\n\nfunction resolve<T>(\n flag: boolean | ((data: T) => boolean) | undefined,\n data: T,\n): boolean {\n if (typeof flag === 'function') return flag(data);\n return Boolean(flag);\n}\n\nconst destructiveInline =\n 'ds:text-[color:var(--destructive)] ds:hover:text-[color:var(--destructive-hover)]';\n\nexport function ActionsCellRenderer<TData = unknown>(\n props: CustomCellRendererProps<TData> & ActionsCellRendererParams<TData>,\n) {\n const {\n data,\n actions,\n intent = 'ghost',\n group,\n label,\n collapsed,\n maxInline,\n } = props;\n const { t } = useTranslation();\n if (!data) return null;\n\n const visible = actions.filter((action) => !resolve(action.hidden, data));\n const isCollapsed =\n typeof collapsed === 'function' ? collapsed() : Boolean(collapsed);\n const inline =\n maxInline === undefined\n ? visible\n : visible.slice(0, Math.max(0, maxInline));\n const overflow =\n maxInline === undefined ? [] : visible.slice(Math.max(0, maxInline));\n\n // Collapsed: one \"…\" trigger opening a DropdownMenu of the actions. Disabled\n // actions stay in the menu but inert (the per-action `disabledReason` is an\n // inline-only affordance — a menu row has no tooltip surface).\n if (isCollapsed) {\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n size=\"sm\"\n intent={intent}\n icon={<Ellipsis aria-hidden />}\n aria-label={label ?? t('dataTable.actions', 'Actions')}\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {visible.map((action, index) => (\n <DropdownMenu.Item\n // Action defs are referentially stable; index is safe as actions\n // do not reorder within a row.\n key={index}\n startIcon={sizeIcon(action.icon)}\n disabled={resolve(action.disabled, data)}\n onSelect={() => action.onClick(data)}\n className={\n action.variant === 'destructive'\n ? 'ds:text-[color:var(--destructive)]'\n : undefined\n }\n >\n {action.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n }\n\n const buttons = inline.map((action, index) => {\n const isDisabled = resolve(action.disabled, data);\n const tooltip =\n isDisabled && action.disabledReason\n ? action.disabledReason\n : action.label;\n return (\n <IconButton\n // See note above on index keys.\n key={index}\n size=\"sm\"\n intent={intent}\n icon={sizeIcon(action.icon)}\n tooltip={tooltip}\n aria-label={action.label}\n disabled={isDisabled}\n onClick={(event) => {\n event.stopPropagation();\n action.onClick(data);\n }}\n className={\n action.variant === 'destructive' ? destructiveInline : undefined\n }\n />\n );\n });\n\n const more =\n overflow.length > 0 ? (\n <OverflowActionsMenu\n key=\"overflow\"\n data={data}\n actions={overflow}\n intent={intent}\n label={label ?? t('dataTable.actions', 'Actions')}\n />\n ) : null;\n\n return group ? (\n <IconButtonGroup\n aria-label={label ?? t('dataTable.actions', 'Actions')}\n size=\"sm\"\n >\n {buttons}\n {more}\n </IconButtonGroup>\n ) : (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n {buttons}\n {more}\n </span>\n );\n}\n\ninterface OverflowActionsMenuProps<TData> extends Omit<\n IconButtonProps,\n 'icon' | 'aria-label' | 'onClick'\n> {\n data: TData;\n actions: ActionDef<TData>[];\n label: string;\n}\n\n/**\n * The \"…\" end of a split actions button. Forwards its ref and the rest of its\n * props to the trigger IconButton, so an IconButtonGroup can seat it as the\n * last segment exactly like a plain button (the same contract ExportMenu\n * follows in the toolbar).\n */\nconst OverflowActionsMenu = forwardRef(function OverflowActionsMenu<TData>(\n {\n data,\n actions,\n label,\n intent = 'ghost',\n ...rest\n }: OverflowActionsMenuProps<TData>,\n ref: ForwardedRef<HTMLButtonElement>,\n) {\n return (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n ref={ref}\n type=\"button\"\n size=\"sm\"\n intent={intent}\n icon={<Ellipsis aria-hidden />}\n tooltip={label}\n aria-label={label}\n onClick={(event) => event.stopPropagation()}\n {...rest}\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {actions.map((action, index) => (\n <DropdownMenu.Item\n key={index}\n startIcon={sizeIcon(action.icon)}\n disabled={resolve(action.disabled, data)}\n onSelect={() => action.onClick(data)}\n className={\n action.variant === 'destructive'\n ? 'ds:text-[color:var(--destructive)]'\n : undefined\n }\n >\n {action.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n}) as <TData>(\n props: OverflowActionsMenuProps<TData> & {\n ref?: ForwardedRef<HTMLButtonElement>;\n },\n) => ReactElement;\n"],"names":["sizeIcon","node","isValidElement","element","existingClass","className","cloneElement","actionsColumnWidth","count","resolve","flag","data","destructiveInline","ActionsCellRenderer","props","actions","intent","group","label","collapsed","maxInline","t","useTranslation","visible","action","isCollapsed","inline","overflow","jsxs","DropdownMenu","jsx","IconButton","Ellipsis","index","buttons","isDisabled","tooltip","event","more","OverflowActionsMenu","IconButtonGroup","forwardRef","rest","ref"],"mappings":"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"}
@@ -2,9 +2,9 @@ import { jsx as e, jsxs as n } from "react/jsx-runtime";
2
2
  import { forwardRef as P, useRef as T, useImperativeHandle as q, useMemo as B } from "react";
3
3
  import { c as H } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as K } from "react-i18next";
5
- import { I as M } from "./icon-button-8xqRnkdG.js";
5
+ import { I as M } from "./icon-button-CehAeZoP.js";
6
6
  import { S as A } from "./skeleton-B1KTdJ4N.js";
7
- import { E as D } from "./empty-state-X0sVPfVo.js";
7
+ import { E as D } from "./empty-state-BUN_UAWf.js";
8
8
  import { A as V } from "./agenda-card-DyQtHb9z.js";
9
9
  import { u as F } from "./registry-DvAUVLHh.js";
10
10
  import { C as G } from "./calendar-days-BGWklvE-.js";
@@ -212,4 +212,4 @@ export {
212
212
  U as A,
213
213
  L as a
214
214
  };
215
- //# sourceMappingURL=agenda-tray-CG6jUjKc.js.map
215
+ //# sourceMappingURL=agenda-tray-CBaJASb5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agenda-tray-CG6jUjKc.js","sources":["../../src/components/agenda-tray/agenda-tray.agent.ts","../../src/components/agenda-tray/agenda-tray.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — AgendaTray. */\n/* */\n/* Tray-level surface: read appointment ids + lifecycle status (never */\n/* patient names / treatments), and route an activation through the */\n/* curated handle. AgendaTray is in-page (no open/close). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AgendaTrayHandle } from './agenda-tray';\n\nexport const agendaTrayAgent: AgentAdapter<AgendaTrayHandle> = {\n id: 'agenda-tray',\n // `pick` (NON-persisting): select_item activates / opens an appointment by\n // firing onOpenAppointment — it does not store a \"selected\" value on the tray\n // (there is no selection state slot), so this is a pick, not select_single.\n capabilities: ['pick'],\n state: {\n items: {\n type: 'Array<{ id: string; status: string }>',\n descriptionKey: 'ui.agent.agendaTray.state.items',\n description:\n 'Currently-displayed appointments. Ids + status only — never patient identity.',\n read: (handle) => handle.getItems(),\n },\n },\n actions: {\n select_item: {\n // Activates (opens) an appointment — pure navigation, no data mutation.\n safety: 'read',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: { id: { type: 'string' } },\n required: ['id'],\n },\n descriptionKey: 'ui.agent.agendaTray.actions.selectItem',\n description: 'Activate the appointment with the given id.',\n examples: [\n { args: { id: 'appt-204' }, note: 'Open appointment appt-204.' },\n ],\n invoke: (handle, args: { id: string }) => {\n handle.selectItem(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'agenda-tray',\n description: 'Marks the AgendaTray wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific tray from the agent.',\n },\n item: {\n attr: 'data-appointment-id',\n description:\n 'Stable appointment id emitted on each rendered AgendaCard inside the tray.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CalendarDays, Plus } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { AgendaCard, type AgendaItem } from '../agenda-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { agendaTrayAgent } from './agenda-tray.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst agendaTrayVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-md)] ds:shadow-[var(--shadow-card)]',\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:overflow-hidden',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/**\n * Curated imperative handle for AgendaTray. Exposed as the forwardRef\n * target so a future agent / MCP UI bridge can drive the tray without\n * touching the DOM. See `agenda-tray.agent.ts`.\n */\nexport interface AgendaTrayHandle {\n getItems: () => Array<{ id: string; status: string }>;\n selectItem: (id: string) => void;\n}\n\nexport interface AgendaTrayProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'onClick' | 'id'>,\n VariantProps<typeof agendaTrayVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so\n * an agent / MCP UI bridge can address this specific tray.\n */\n id?: string;\n items: AgendaItem[];\n /** Section title — rendered in the header. Localised by the consumer. */\n title?: string;\n /** Optional small caption (e.g. localised date) shown next to the title. */\n caption?: string;\n size?: 'sm' | 'md';\n onOpenAppointment?: (item: AgendaItem) => void;\n onAddAppointment?: () => void;\n /** Localised label for the \"Add\" affordance. */\n addLabel?: string;\n loading?: boolean;\n emptyTitle?: string;\n emptyDescription?: string;\n /** Optional CTA wired into the empty state (EmptyState primaryAction). */\n emptyAction?: { label: string; onClick: () => void };\n /**\n * Pinned footer link (e.g. \"All upcoming appointments\"). Localised by\n * the consumer; rendered after the list, before the section closes.\n */\n viewAllLabel?: string;\n /** Fires when the footer link is activated. Required to render it. */\n onViewAll?: () => void;\n /**\n * Per-row trailing action toolbar, forwarded to each AgendaCard's\n * `actions` slot.\n */\n renderItemActions?: (item: AgendaItem) => ReactNode;\n /**\n * Constrain the list to the tray's own height and scroll inside it —\n * pair with a height/max-height on `className`. The scroll region is\n * keyboard-focusable so it stays operable without a pointer.\n */\n scrollable?: boolean;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const AgendaTray = forwardRef<HTMLElement, AgendaTrayProps>(\n (\n {\n id,\n items,\n title,\n caption,\n size = 'sm',\n onOpenAppointment,\n onAddAppointment,\n addLabel,\n loading = false,\n emptyTitle,\n emptyDescription,\n emptyAction,\n viewAllLabel,\n onViewAll,\n renderItemActions,\n scrollable = false,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const heading = title ?? t('agendaTray.title', \"Today's appointments\");\n const resolvedAddLabel = addLabel ?? t('agendaTray.add', 'Add appointment');\n const isEmpty = !loading && items.length === 0;\n\n let body: ReactNode;\n if (loading) {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} variant=\"rectangular\" height=\"2.5rem\" />\n ))}\n </div>\n );\n } else if (isEmpty) {\n body = (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={emptyTitle ?? t('agendaTray.empty.title', 'No appointments')}\n description={\n emptyDescription ??\n t(\n 'agendaTray.empty.description',\n 'New appointments will appear here.',\n )\n }\n primaryAction={emptyAction}\n />\n </div>\n );\n } else {\n body = (\n <ul\n className={[\n // flex-1 unconditionally so a footer pins to the tray's\n // bottom edge in equal-height grid rows.\n 'ds:flex ds:list-none ds:flex-col ds:flex-1 ds:min-h-0',\n // Keyboard-focusable when it scrolls (axe\n // scrollable-region-focusable) — pair with a height on the\n // tray's className.\n scrollable ? 'ds:overflow-y-auto' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable list must be keyboard focusable (axe scrollable-region-focusable)\n tabIndex={scrollable ? 0 : undefined}\n aria-label={scrollable ? heading : undefined}\n >\n {items.map((item) => (\n <AgendaCard\n key={item.id}\n item={item}\n size={size}\n onActivate={onOpenAppointment}\n actions={renderItemActions?.(item)}\n data-appointment-id={item.id}\n />\n ))}\n </ul>\n );\n }\n\n /* Curated imperative handle for agent integration. See\n * agenda-tray.agent.ts. */\n const itemsRef = useRef<AgendaItem[]>(items);\n itemsRef.current = items;\n\n const innerRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLElement, []);\n\n const handle = useMemo<AgendaTrayHandle>(\n () => ({\n getItems: () =>\n itemsRef.current.map((i) => ({\n id: i.id,\n status: i.status ?? 'confirmed',\n })),\n selectItem: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onOpenAppointment?.(found);\n },\n }),\n [onOpenAppointment],\n );\n\n useAgentRegistration(agendaTrayAgent, handle, id);\n\n return (\n <section\n ref={innerRef}\n aria-label={heading}\n data-component=\"agenda-tray\"\n data-component-id={id}\n className={agendaTrayVariants({ size, className })}\n {...rest}\n >\n <header className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0\">\n <h3 className=\"ds:m-0 ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-title-card\">\n <CalendarDays aria-hidden=\"true\" className=\"ds:size-4\" />\n {heading}\n </h3>\n {caption ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {caption}\n </span>\n ) : null}\n </div>\n {onAddAppointment ? (\n <IconButton\n icon={<Plus />}\n intent=\"outline\"\n size=\"sm\"\n aria-label={resolvedAddLabel}\n onClick={onAddAppointment}\n />\n ) : null}\n </header>\n {body}\n {viewAllLabel && onViewAll && !isEmpty && !loading ? (\n <footer className=\"ds:[border-block-start:var(--border-width-sm)_solid_var(--card-border)] ds:p-[var(--spacing-sm)]\">\n <button\n type=\"button\"\n onClick={onViewAll}\n className={[\n 'type-label ds:text-[color:var(--link)] ds:underline ds:underline-offset-2 ds:hover:no-underline',\n 'ds:rounded-[var(--radius-sm)] ds:min-h-[var(--min-target-size)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\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-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' ')}\n >\n {viewAllLabel}\n </button>\n </footer>\n ) : null}\n </section>\n );\n },\n);\n\nAgendaTray.displayName = 'AgendaTray';\n"],"names":["agendaTrayAgent","handle","args","agendaTrayVariants","cva","AgendaTray","forwardRef","id","items","title","caption","size","onOpenAppointment","onAddAppointment","addLabel","loading","emptyTitle","emptyDescription","emptyAction","viewAllLabel","onViewAll","renderItemActions","scrollable","className","rest","ref","t","useTranslation","heading","resolvedAddLabel","isEmpty","body","jsx","i","Skeleton","EmptyState","item","AgendaCard","itemsRef","useRef","innerRef","useImperativeHandle","useMemo","targetId","found","useAgentRegistration","jsxs","CalendarDays","IconButton","Plus"],"mappings":"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"}
1
+ {"version":3,"file":"agenda-tray-CBaJASb5.js","sources":["../../src/components/agenda-tray/agenda-tray.agent.ts","../../src/components/agenda-tray/agenda-tray.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — AgendaTray. */\n/* */\n/* Tray-level surface: read appointment ids + lifecycle status (never */\n/* patient names / treatments), and route an activation through the */\n/* curated handle. AgendaTray is in-page (no open/close). */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AgendaTrayHandle } from './agenda-tray';\n\nexport const agendaTrayAgent: AgentAdapter<AgendaTrayHandle> = {\n id: 'agenda-tray',\n // `pick` (NON-persisting): select_item activates / opens an appointment by\n // firing onOpenAppointment — it does not store a \"selected\" value on the tray\n // (there is no selection state slot), so this is a pick, not select_single.\n capabilities: ['pick'],\n state: {\n items: {\n type: 'Array<{ id: string; status: string }>',\n descriptionKey: 'ui.agent.agendaTray.state.items',\n description:\n 'Currently-displayed appointments. Ids + status only — never patient identity.',\n read: (handle) => handle.getItems(),\n },\n },\n actions: {\n select_item: {\n // Activates (opens) an appointment — pure navigation, no data mutation.\n safety: 'read',\n argsType: '{ id: string }',\n argsSchema: {\n type: 'object',\n properties: { id: { type: 'string' } },\n required: ['id'],\n },\n descriptionKey: 'ui.agent.agendaTray.actions.selectItem',\n description: 'Activate the appointment with the given id.',\n examples: [\n { args: { id: 'appt-204' }, note: 'Open appointment appt-204.' },\n ],\n invoke: (handle, args: { id: string }) => {\n handle.selectItem(args.id);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'agenda-tray',\n description: 'Marks the AgendaTray wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific tray from the agent.',\n },\n item: {\n attr: 'data-appointment-id',\n description:\n 'Stable appointment id emitted on each rendered AgendaCard inside the tray.',\n },\n },\n};\n","import {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { CalendarDays, Plus } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { Skeleton } from '../skeleton/skeleton';\nimport { EmptyState } from '../empty-state/empty-state';\nimport { AgendaCard, type AgendaItem } from '../agenda-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { agendaTrayAgent } from './agenda-tray.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst agendaTrayVariants = cva(\n [\n 'ds:flex ds:flex-col',\n 'ds:rounded-[var(--radius-md)] ds:shadow-[var(--shadow-card)]',\n 'ds:border ds:border-[color:var(--card-border)] ds:[.theme-accessible_&]:border-2',\n 'ds:bg-[color:var(--card)] ds:text-[color:var(--card-foreground)]',\n 'ds:overflow-hidden',\n ].join(' '),\n {\n variants: {\n size: {\n sm: '',\n md: '',\n },\n },\n defaultVariants: {\n size: 'sm',\n },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\n/**\n * Curated imperative handle for AgendaTray. Exposed as the forwardRef\n * target so a future agent / MCP UI bridge can drive the tray without\n * touching the DOM. See `agenda-tray.agent.ts`.\n */\nexport interface AgendaTrayHandle {\n getItems: () => Array<{ id: string; status: string }>;\n selectItem: (id: string) => void;\n}\n\nexport interface AgendaTrayProps\n extends\n Omit<HTMLAttributes<HTMLElement>, 'onClick' | 'id'>,\n VariantProps<typeof agendaTrayVariants> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so\n * an agent / MCP UI bridge can address this specific tray.\n */\n id?: string;\n items: AgendaItem[];\n /** Section title — rendered in the header. Localised by the consumer. */\n title?: string;\n /** Optional small caption (e.g. localised date) shown next to the title. */\n caption?: string;\n size?: 'sm' | 'md';\n onOpenAppointment?: (item: AgendaItem) => void;\n onAddAppointment?: () => void;\n /** Localised label for the \"Add\" affordance. */\n addLabel?: string;\n loading?: boolean;\n emptyTitle?: string;\n emptyDescription?: string;\n /** Optional CTA wired into the empty state (EmptyState primaryAction). */\n emptyAction?: { label: string; onClick: () => void };\n /**\n * Pinned footer link (e.g. \"All upcoming appointments\"). Localised by\n * the consumer; rendered after the list, before the section closes.\n */\n viewAllLabel?: string;\n /** Fires when the footer link is activated. Required to render it. */\n onViewAll?: () => void;\n /**\n * Per-row trailing action toolbar, forwarded to each AgendaCard's\n * `actions` slot.\n */\n renderItemActions?: (item: AgendaItem) => ReactNode;\n /**\n * Constrain the list to the tray's own height and scroll inside it —\n * pair with a height/max-height on `className`. The scroll region is\n * keyboard-focusable so it stays operable without a pointer.\n */\n scrollable?: boolean;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const AgendaTray = forwardRef<HTMLElement, AgendaTrayProps>(\n (\n {\n id,\n items,\n title,\n caption,\n size = 'sm',\n onOpenAppointment,\n onAddAppointment,\n addLabel,\n loading = false,\n emptyTitle,\n emptyDescription,\n emptyAction,\n viewAllLabel,\n onViewAll,\n renderItemActions,\n scrollable = false,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const heading = title ?? t('agendaTray.title', \"Today's appointments\");\n const resolvedAddLabel = addLabel ?? t('agendaTray.add', 'Add appointment');\n const isEmpty = !loading && items.length === 0;\n\n let body: ReactNode;\n if (loading) {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n {[0, 1, 2].map((i) => (\n <Skeleton key={i} variant=\"rectangular\" height=\"2.5rem\" />\n ))}\n </div>\n );\n } else if (isEmpty) {\n body = (\n <div className=\"ds:p-[var(--spacing-md)]\">\n <EmptyState\n variant=\"first-use\"\n size=\"sm\"\n title={emptyTitle ?? t('agendaTray.empty.title', 'No appointments')}\n description={\n emptyDescription ??\n t(\n 'agendaTray.empty.description',\n 'New appointments will appear here.',\n )\n }\n primaryAction={emptyAction}\n />\n </div>\n );\n } else {\n body = (\n <ul\n className={[\n // flex-1 unconditionally so a footer pins to the tray's\n // bottom edge in equal-height grid rows.\n 'ds:flex ds:list-none ds:flex-col ds:flex-1 ds:min-h-0',\n // Keyboard-focusable when it scrolls (axe\n // scrollable-region-focusable) — pair with a height on the\n // tray's className.\n scrollable ? 'ds:overflow-y-auto' : '',\n ]\n .filter(Boolean)\n .join(' ')}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable list must be keyboard focusable (axe scrollable-region-focusable)\n tabIndex={scrollable ? 0 : undefined}\n aria-label={scrollable ? heading : undefined}\n >\n {items.map((item) => (\n <AgendaCard\n key={item.id}\n item={item}\n size={size}\n onActivate={onOpenAppointment}\n actions={renderItemActions?.(item)}\n data-appointment-id={item.id}\n />\n ))}\n </ul>\n );\n }\n\n /* Curated imperative handle for agent integration. See\n * agenda-tray.agent.ts. */\n const itemsRef = useRef<AgendaItem[]>(items);\n itemsRef.current = items;\n\n const innerRef = useRef<HTMLElement>(null);\n useImperativeHandle(ref, () => innerRef.current as HTMLElement, []);\n\n const handle = useMemo<AgendaTrayHandle>(\n () => ({\n getItems: () =>\n itemsRef.current.map((i) => ({\n id: i.id,\n status: i.status ?? 'confirmed',\n })),\n selectItem: (targetId: string) => {\n const found = itemsRef.current.find((i) => i.id === targetId);\n if (found) onOpenAppointment?.(found);\n },\n }),\n [onOpenAppointment],\n );\n\n useAgentRegistration(agendaTrayAgent, handle, id);\n\n return (\n <section\n ref={innerRef}\n aria-label={heading}\n data-component=\"agenda-tray\"\n data-component-id={id}\n className={agendaTrayVariants({ size, className })}\n {...rest}\n >\n <header className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)] ds:p-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)] ds:min-w-0\">\n <h3 className=\"ds:m-0 ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-title-card\">\n <CalendarDays aria-hidden=\"true\" className=\"ds:size-4\" />\n {heading}\n </h3>\n {caption ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {caption}\n </span>\n ) : null}\n </div>\n {onAddAppointment ? (\n <IconButton\n icon={<Plus />}\n intent=\"outline\"\n size=\"sm\"\n aria-label={resolvedAddLabel}\n onClick={onAddAppointment}\n />\n ) : null}\n </header>\n {body}\n {viewAllLabel && onViewAll && !isEmpty && !loading ? (\n <footer className=\"ds:[border-block-start:var(--border-width-sm)_solid_var(--card-border)] ds:p-[var(--spacing-sm)]\">\n <button\n type=\"button\"\n onClick={onViewAll}\n className={[\n 'type-label ds:text-[color:var(--link)] ds:underline ds:underline-offset-2 ds:hover:no-underline',\n 'ds:rounded-[var(--radius-sm)] ds:min-h-[var(--min-target-size)] ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)]',\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-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n ].join(' ')}\n >\n {viewAllLabel}\n </button>\n </footer>\n ) : null}\n </section>\n );\n },\n);\n\nAgendaTray.displayName = 'AgendaTray';\n"],"names":["agendaTrayAgent","handle","args","agendaTrayVariants","cva","AgendaTray","forwardRef","id","items","title","caption","size","onOpenAppointment","onAddAppointment","addLabel","loading","emptyTitle","emptyDescription","emptyAction","viewAllLabel","onViewAll","renderItemActions","scrollable","className","rest","ref","t","useTranslation","heading","resolvedAddLabel","isEmpty","body","jsx","i","Skeleton","EmptyState","item","AgendaCard","itemsRef","useRef","innerRef","useImperativeHandle","useMemo","targetId","found","useAgentRegistration","jsxs","CalendarDays","IconButton","Plus"],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import { jsxs as r, jsx as n } from "react/jsx-runtime";
2
- import { forwardRef as N, useState as k, useRef as q, useMemo as I } from "react";
3
- import { c as L } from "./index-D2ZczOXr.js";
4
- import { useTranslation as R } from "react-i18next";
2
+ import { forwardRef as k, useState as q, useRef as I, useMemo as L } from "react";
3
+ import { c as R } from "./index-D2ZczOXr.js";
4
+ import { useTranslation as w } from "react-i18next";
5
5
  import { A as d } from "./alert-CiQ5Pa3Q.js";
6
- import { B as w } from "./badge-BudgzTe_.js";
7
- import { B as T } from "./button-nJaPh_HC.js";
8
- import { C as V } from "./checkbox-CZkipDn7.js";
9
- import { S as j } from "./spinner-hbwuKwMf.js";
10
- import { T as z } from "./timestamp-BV2lC-wV.js";
11
- import { u as G } from "./registry-DvAUVLHh.js";
12
- const K = {
6
+ import { B as T } from "./badge-BudgzTe_.js";
7
+ import { B as V } from "./button-CaUe1uyd.js";
8
+ import { C as j } from "./checkbox-CZkipDn7.js";
9
+ import { S as z } from "./spinner-hbwuKwMf.js";
10
+ import { T as G } from "./timestamp-BV2lC-wV.js";
11
+ import { u as K } from "./registry-DvAUVLHh.js";
12
+ const M = {
13
13
  id: "ai-consent-banner",
14
14
  capabilities: [],
15
15
  state: {
@@ -39,7 +39,7 @@ const K = {
39
39
  description: "Sourced from the id prop. Required to address a specific banner from the agent."
40
40
  }
41
41
  }
42
- }, M = L("ds:w-full ds:text-[color:var(--foreground)]", {
42
+ }, P = R("ds:w-full ds:text-[color:var(--foreground)]", {
43
43
  variants: {
44
44
  state: {
45
45
  granted: "",
@@ -54,7 +54,7 @@ const K = {
54
54
  function u(a, s) {
55
55
  return s ? "pending" : a ? "granted" : "required";
56
56
  }
57
- const P = N(
57
+ const D = k(
58
58
  ({
59
59
  id: a,
60
60
  granted: s,
@@ -63,29 +63,30 @@ const P = N(
63
63
  canGrant: f = !0,
64
64
  pending: c = !1,
65
65
  onGrantConsent: g,
66
- "aria-label": h,
67
- className: v,
68
- ...b
69
- }, C) => {
70
- const { t: e } = R(), t = u(s, c), [o, B] = k(!1), p = q(o);
66
+ headingLevel: h = 5,
67
+ "aria-label": v,
68
+ className: b,
69
+ ...C
70
+ }, B) => {
71
+ const { t: e } = w(), t = u(s, c), [o, y] = q(!1), p = I(o);
71
72
  p.current = o;
72
- const y = I(
73
+ const A = L(
73
74
  () => ({
74
75
  getState: () => u(s, c),
75
76
  isArmed: () => p.current
76
77
  }),
77
78
  [s, c]
78
79
  );
79
- G(K, y, a);
80
- const A = h ?? e("aiConsentBanner.regionLabel", "AI assistance consent"), x = t === "granted" ? "success" : "info";
80
+ K(M, A, a);
81
+ const x = v ?? e("aiConsentBanner.regionLabel", "AI assistance consent"), S = t === "granted" ? "success" : "info";
81
82
  let i;
82
83
  return t === "granted" ? i = /* @__PURE__ */ r("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
83
84
  /* @__PURE__ */ r("div", { className: "ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]", children: [
84
- /* @__PURE__ */ n(w, { variant: "success", children: e("aiConsentBanner.badge.granted", "Consent granted") }),
85
+ /* @__PURE__ */ n(T, { variant: "success", children: e("aiConsentBanner.badge.granted", "Consent granted") }),
85
86
  l !== void 0 ? /* @__PURE__ */ r("span", { className: "type-body-sm ds:text-[color:var(--muted-foreground)]", children: [
86
87
  e("aiConsentBanner.grantedAtPrefix", "Granted"),
87
88
  " ",
88
- /* @__PURE__ */ n(z, { value: l, format: "relative", shape: "inline" })
89
+ /* @__PURE__ */ n(G, { value: l, format: "relative", shape: "inline" })
89
90
  ] }) : null
90
91
  ] }),
91
92
  m ? /* @__PURE__ */ n("p", { className: "type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]", children: e("aiConsentBanner.grantedBy", {
@@ -94,7 +95,7 @@ const P = N(
94
95
  }) }) : null
95
96
  ] }) : t === "pending" ? i = /* @__PURE__ */ r("div", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-sm)]", children: [
96
97
  /* @__PURE__ */ n(
97
- j,
98
+ z,
98
99
  {
99
100
  variant: "pulse",
100
101
  size: "sm",
@@ -104,10 +105,10 @@ const P = N(
104
105
  /* @__PURE__ */ n("span", { className: "type-body-sm ds:text-[color:var(--muted-foreground)]", children: e("aiConsentBanner.pendingLabel", "Saving consent…") })
105
106
  ] }) : i = f ? /* @__PURE__ */ r("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
106
107
  /* @__PURE__ */ n(
107
- V,
108
+ j,
108
109
  {
109
110
  checked: o,
110
- onCheckedChange: (S) => B(S === !0),
111
+ onCheckedChange: (N) => y(N === !0),
111
112
  label: e(
112
113
  "aiConsentBanner.confirmLabel",
113
114
  "I confirm consent has been obtained for AI assistance."
@@ -115,7 +116,7 @@ const P = N(
115
116
  }
116
117
  ),
117
118
  /* @__PURE__ */ n(d.Action, { children: /* @__PURE__ */ n(
118
- T,
119
+ V,
119
120
  {
120
121
  intent: "primary",
121
122
  size: "sm",
@@ -130,23 +131,23 @@ const P = N(
130
131
  ) }), /* @__PURE__ */ n(
131
132
  "div",
132
133
  {
133
- ref: C,
134
+ ref: B,
134
135
  role: "region",
135
- "aria-label": A,
136
+ "aria-label": x,
136
137
  "aria-busy": t === "pending" ? !0 : void 0,
137
138
  "data-component": "ai-consent-banner",
138
139
  "data-component-id": a,
139
140
  "data-state": t,
140
141
  id: a,
141
- className: M({ state: t, className: v }),
142
- ...b,
142
+ className: P({ state: t, className: b }),
143
+ ...C,
143
144
  children: /* @__PURE__ */ r(
144
145
  d,
145
146
  {
146
- variant: x,
147
+ variant: S,
147
148
  icon: t === "pending" ? null : void 0,
148
149
  children: [
149
- /* @__PURE__ */ n(d.Title, { children: e("aiConsentBanner.title", "AI assistance consent") }),
150
+ /* @__PURE__ */ n(d.Title, { as: `h${h}`, children: e("aiConsentBanner.title", "AI assistance consent") }),
150
151
  /* @__PURE__ */ n(d.Description, { children: t === "granted" ? e(
151
152
  "aiConsentBanner.description.granted",
152
153
  "AI assistance is enabled for this record."
@@ -162,9 +163,9 @@ const P = N(
162
163
  );
163
164
  }
164
165
  );
165
- P.displayName = "AiConsentBanner";
166
+ D.displayName = "AiConsentBanner";
166
167
  export {
167
- P as A,
168
- K as a
168
+ D as A,
169
+ M as a
169
170
  };
170
- //# sourceMappingURL=ai-consent-banner-De4gzSBZ.js.map
171
+ //# sourceMappingURL=ai-consent-banner-D7I2U-cz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-consent-banner-D7I2U-cz.js","sources":["../../src/components/ai-consent-banner/ai-consent-banner.agent.ts","../../src/components/ai-consent-banner/ai-consent-banner.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — AiConsentBanner. */\n/* */\n/* Read-only structural surface: the current consent state and whether */\n/* the grant affordance is armed. Identifiers / structural state ONLY — */\n/* never the grantee's name or any PHI. The real consent gate lives */\n/* server-side; this adapter does not expose a grant action so an agent */\n/* cannot consent on a user's behalf. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { AiConsentBannerHandle } from './ai-consent-banner';\n\nexport const aiConsentBannerAgent: AgentAdapter<AiConsentBannerHandle> = {\n id: 'ai-consent-banner',\n capabilities: [],\n state: {\n consentState: {\n type: \"'granted' | 'required' | 'pending'\",\n descriptionKey: 'ui.agent.aiConsentBanner.state.consentState',\n description:\n 'Current consent state. Structural only — never the grantee identity.',\n read: (handle) => handle.getState(),\n },\n armed: {\n type: 'boolean',\n descriptionKey: 'ui.agent.aiConsentBanner.state.armed',\n description:\n 'Whether the consent confirmation checkbox is ticked (required state only).',\n read: (handle) => handle.isArmed(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'ai-consent-banner',\n description: 'Marks the AiConsentBanner root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Required to address a specific banner from the agent.',\n },\n },\n};\n","import {\n forwardRef,\n useMemo,\n useRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Alert } from '../alert/alert';\nimport { Badge } from '../badge/badge';\nimport { Button } from '../button/button';\nimport { Checkbox } from '../checkbox/checkbox';\nimport { Spinner } from '../spinner/spinner';\nimport { Timestamp } from '../timestamp/timestamp';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { aiConsentBannerAgent } from './ai-consent-banner.agent';\n\n/* -------------------------------------------------------------------- */\n/* AiConsentBanner */\n/* */\n/* Presentational AI-consent gate surfaced above an AI-assisted surface */\n/* (e.g. Alfascribe consultation transcription). The SERVER owns the */\n/* real gate — this component only reflects the consent record and lets */\n/* the operator initiate a grant; it never enforces access itself. */\n/* */\n/* Three states drive the Alert variant + body: */\n/* - granted → success Alert with a Badge + when/who it was granted. */\n/* - required → info Alert with a Checkbox-gated Grant Button. */\n/* - pending → info Alert in a disabled, Spinner-busy state while the */\n/* server persists the grant. */\n/* */\n/* All visible text flows through useTranslation('ui') against the */\n/* `aiConsentBanner.*` namespace. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* CVA — root */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva('ds:w-full ds:text-[color:var(--foreground)]', {\n variants: {\n state: {\n granted: '',\n required: '',\n pending: '',\n },\n },\n defaultVariants: {\n state: 'required',\n },\n});\n\n/* -------------------------------------------------------------------- */\n/* State derivation */\n/* -------------------------------------------------------------------- */\n\nexport type AiConsentState = NonNullable<\n VariantProps<typeof rootVariants>['state']\n>;\n\n/** Heading levels `AiConsentBanner.headingLevel` accepts. */\nexport type AiConsentBannerHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\n/** Pending wins over granted/required so the busy state is never masked. */\nfunction deriveState(granted: boolean, pending: boolean): AiConsentState {\n if (pending) return 'pending';\n return granted ? 'granted' : 'required';\n}\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/** Agent-readiness curated handle. Exposes the structural consent state only. */\nexport interface AiConsentBannerHandle {\n /** Current derived state: 'granted' | 'required' | 'pending'. */\n getState: () => AiConsentState;\n /** Whether the Grant affordance is currently armed (checkbox ticked). */\n isArmed: () => boolean;\n}\n\nexport interface AiConsentBannerProps extends Omit<\n ComponentPropsWithoutRef<'div'>,\n 'aria-label' | 'children' | 'role'\n> {\n /**\n * Stable instance id. Surfaced on the root as `data-component-id` so an\n * agent / MCP UI bridge can address this specific banner. Mirrored to the\n * real DOM `id`.\n */\n id?: string;\n /** Whether consent has already been granted. Server-sourced. */\n granted: boolean;\n /**\n * When consent was granted — ISO-8601 string, ms-epoch, or Date. Rendered\n * via `Timestamp` in the granted state.\n */\n grantedAt?: string | number | Date;\n /** Who granted consent (operator display name / role). Granted state only. */\n grantedBy?: string;\n /**\n * Whether the current user is allowed to grant consent. When `false`, the\n * required-state Grant affordance is hidden and a not-allowed note shows.\n * Default `true`.\n */\n canGrant?: boolean;\n /** The grant is being persisted server-side — shows the busy Spinner state. */\n pending?: boolean;\n /** Fired when the operator confirms the consent grant. */\n onGrantConsent?: () => void;\n /**\n * Heading level for the banner's own title, so it can be nested under a\n * host section's heading without skipping levels (axe `heading-order`).\n * Additive: default `5` matches the banner's original, unconditional\n * `<h5>` — every existing consumer is unaffected.\n */\n headingLevel?: AiConsentBannerHeadingLevel;\n /** Override the region's accessible name. */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const AiConsentBanner = forwardRef<HTMLDivElement, AiConsentBannerProps>(\n (\n {\n id,\n granted,\n grantedAt,\n grantedBy,\n canGrant = true,\n pending = false,\n onGrantConsent,\n headingLevel = 5,\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const state = deriveState(granted, pending);\n\n // Local arm switch — the required state gates the Grant Button behind an\n // explicit \"I understand\" checkbox so consent is never one mis-click away.\n const [armed, setArmed] = useState(false);\n\n const armedRef = useRef(armed);\n armedRef.current = armed;\n\n const handle = useMemo<AiConsentBannerHandle>(\n () => ({\n getState: () => deriveState(granted, pending),\n isArmed: () => armedRef.current,\n }),\n [granted, pending],\n );\n useAgentRegistration(aiConsentBannerAgent, handle, id);\n\n const resolvedAriaLabel =\n ariaLabel ?? t('aiConsentBanner.regionLabel', 'AI assistance consent');\n\n // Alert variant per state: granted → success, required/pending → info.\n const alertVariant = state === 'granted' ? 'success' : 'info';\n\n let body: React.ReactNode;\n if (state === 'granted') {\n body = (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Badge variant=\"success\">\n {t('aiConsentBanner.badge.granted', 'Consent granted')}\n </Badge>\n {grantedAt !== undefined ? (\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {t('aiConsentBanner.grantedAtPrefix', 'Granted')}{' '}\n <Timestamp value={grantedAt} format=\"relative\" shape=\"inline\" />\n </span>\n ) : null}\n </div>\n {grantedBy ? (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {t('aiConsentBanner.grantedBy', {\n name: grantedBy,\n defaultValue: 'By {{name}}',\n })}\n </p>\n ) : null}\n </div>\n );\n } else if (state === 'pending') {\n body = (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Spinner\n variant=\"pulse\"\n size=\"sm\"\n label={t('aiConsentBanner.pendingLabel', 'Saving consent…')}\n />\n <span className=\"type-body-sm ds:text-[color:var(--muted-foreground)]\">\n {t('aiConsentBanner.pendingLabel', 'Saving consent…')}\n </span>\n </div>\n );\n } else {\n // required\n body = canGrant ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <Checkbox\n checked={armed}\n onCheckedChange={(next) => setArmed(next === true)}\n label={t(\n 'aiConsentBanner.confirmLabel',\n 'I confirm consent has been obtained for AI assistance.',\n )}\n />\n <Alert.Action>\n <Button\n intent=\"primary\"\n size=\"sm\"\n disabled={!armed}\n onClick={onGrantConsent}\n >\n {t('aiConsentBanner.grantButton', 'Grant consent')}\n </Button>\n </Alert.Action>\n </div>\n ) : (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n {t(\n 'aiConsentBanner.notAllowed',\n 'You do not have permission to grant AI assistance consent.',\n )}\n </p>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={resolvedAriaLabel}\n aria-busy={state === 'pending' ? true : undefined}\n data-component=\"ai-consent-banner\"\n data-component-id={id}\n data-state={state}\n id={id}\n className={rootVariants({ state, className })}\n {...rest}\n >\n <Alert\n variant={alertVariant}\n icon={state === 'pending' ? null : undefined}\n >\n <Alert.Title as={`h${headingLevel}` as const}>\n {t('aiConsentBanner.title', 'AI assistance consent')}\n </Alert.Title>\n <Alert.Description>\n {state === 'granted'\n ? t(\n 'aiConsentBanner.description.granted',\n 'AI assistance is enabled for this record.',\n )\n : t(\n 'aiConsentBanner.description.required',\n 'AI assistance requires recorded consent before it can run.',\n )}\n </Alert.Description>\n {body}\n </Alert>\n </div>\n );\n },\n);\n\nAiConsentBanner.displayName = 'AiConsentBanner';\n"],"names":["aiConsentBannerAgent","handle","rootVariants","cva","deriveState","granted","pending","AiConsentBanner","forwardRef","id","grantedAt","grantedBy","canGrant","onGrantConsent","headingLevel","ariaLabel","className","rest","ref","t","useTranslation","state","armed","setArmed","useState","armedRef","useRef","useMemo","useAgentRegistration","resolvedAriaLabel","alertVariant","body","jsxs","jsx","Badge","Timestamp","Spinner","Checkbox","next","Alert","Button"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { u as Oe } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
7
7
  import { u as Re } from "./registry-DvAUVLHh.js";
8
8
  import { _ as g } from "./index-4xgbg-sn.js";
9
9
  import { u as De } from "./index-BcMWc8W2.js";
10
- import { I as te } from "./icon-button-8xqRnkdG.js";
10
+ import { I as te } from "./icon-button-CehAeZoP.js";
11
11
  import { S as We } from "./select-CLSUnKjF.js";
12
12
  import { S as _e } from "./send-C5kDJ-Mz.js";
13
13
  import { X as Ae } from "./x-B5YnXwCz.js";
@@ -497,4 +497,4 @@ export {
497
497
  Ze as A,
498
498
  Le as a
499
499
  };
500
- //# sourceMappingURL=ai-prompt-input-DdxlaI7q.js.map
500
+ //# sourceMappingURL=ai-prompt-input-DXknpQCB.js.map