@alfadocs/ui-kit-debug 1.6.0 → 1.7.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 (400) hide show
  1. package/dist/_chunks/{actions-cell-renderer-BD-jruqA.js → actions-cell-renderer-ALEAGO3j.js} +6 -6
  2. package/dist/_chunks/{actions-cell-renderer-BD-jruqA.js.map → actions-cell-renderer-ALEAGO3j.js.map} +1 -1
  3. package/dist/_chunks/{agenda-tray-CYR-znfE.js → agenda-tray-BweO8pDo.js} +3 -3
  4. package/dist/_chunks/{agenda-tray-CYR-znfE.js.map → agenda-tray-BweO8pDo.js.map} +1 -1
  5. package/dist/_chunks/{ai-consent-banner-DLF6FNXv.js → ai-consent-banner-OggpS5hW.js} +2 -2
  6. package/dist/_chunks/{ai-consent-banner-DLF6FNXv.js.map → ai-consent-banner-OggpS5hW.js.map} +1 -1
  7. package/dist/_chunks/{ai-prompt-input-BgAubYKd.js → ai-prompt-input-DnbfEJnr.js} +2 -2
  8. package/dist/_chunks/{ai-prompt-input-BgAubYKd.js.map → ai-prompt-input-DnbfEJnr.js.map} +1 -1
  9. package/dist/_chunks/{alia-sidebar-Bg53-ZOT.js → alia-sidebar-BWcWZivN.js} +7 -7
  10. package/dist/_chunks/{alia-sidebar-Bg53-ZOT.js.map → alia-sidebar-BWcWZivN.js.map} +1 -1
  11. package/dist/_chunks/{anamnesis-card-BylMLHYj.js → anamnesis-card-NTi4LLzI.js} +2 -2
  12. package/dist/_chunks/{anamnesis-card-BylMLHYj.js.map → anamnesis-card-NTi4LLzI.js.map} +1 -1
  13. package/dist/_chunks/{anamnesis-summary-rows-BpYztFUv.js → anamnesis-summary-rows-F-cCmFAn.js} +7 -7
  14. package/dist/_chunks/{anamnesis-summary-rows-BpYztFUv.js.map → anamnesis-summary-rows-F-cCmFAn.js.map} +1 -1
  15. package/dist/_chunks/{appointment-timeline-DT1uFp8z.js → appointment-timeline-CMPvzlGZ.js} +4 -4
  16. package/dist/_chunks/{appointment-timeline-DT1uFp8z.js.map → appointment-timeline-CMPvzlGZ.js.map} +1 -1
  17. package/dist/_chunks/{appointment-tray-DvyVK7um.js → appointment-tray-3c_FLxXJ.js} +3 -3
  18. package/dist/_chunks/{appointment-tray-DvyVK7um.js.map → appointment-tray-3c_FLxXJ.js.map} +1 -1
  19. package/dist/_chunks/{audio-recorder-nVRN4PSK.js → audio-recorder-EWBCNIsd.js} +3 -3
  20. package/dist/_chunks/{audio-recorder-nVRN4PSK.js.map → audio-recorder-EWBCNIsd.js.map} +1 -1
  21. package/dist/_chunks/{bishop-score-BV1JAEMV.js → bishop-score-Cnu0xs-z.js} +2 -2
  22. package/dist/_chunks/{bishop-score-BV1JAEMV.js.map → bishop-score-Cnu0xs-z.js.map} +1 -1
  23. package/dist/_chunks/{bmi-calculator-CdR-RLFj.js → bmi-calculator-CcH6upht.js} +2 -2
  24. package/dist/_chunks/{bmi-calculator-CdR-RLFj.js.map → bmi-calculator-CcH6upht.js.map} +1 -1
  25. package/dist/_chunks/{booking-D84O6H2X.js → booking-CQMJUFG-.js} +5 -5
  26. package/dist/_chunks/{booking-D84O6H2X.js.map → booking-CQMJUFG-.js.map} +1 -1
  27. package/dist/_chunks/{button-group-Be_In68J.js → button-group-CaxRJsNG.js} +2 -2
  28. package/dist/_chunks/{button-group-Be_In68J.js.map → button-group-CaxRJsNG.js.map} +1 -1
  29. package/dist/_chunks/{button-BvNtqHAS.js → button-nJaPh_HC.js} +68 -38
  30. package/dist/_chunks/button-nJaPh_HC.js.map +1 -0
  31. package/dist/_chunks/{care-plan-card-CehAU7F_.js → care-plan-card-DQjVRDxO.js} +2 -2
  32. package/dist/_chunks/{care-plan-card-CehAU7F_.js.map → care-plan-card-DQjVRDxO.js.map} +1 -1
  33. package/dist/_chunks/{care-plan-entry-card-ChWRMfMw.js → care-plan-entry-card-CMpoeNkb.js} +2 -2
  34. package/dist/_chunks/{care-plan-entry-card-ChWRMfMw.js.map → care-plan-entry-card-CMpoeNkb.js.map} +1 -1
  35. package/dist/_chunks/{care-plan-header-_B0TTWT1.js → care-plan-header-CxYoq23f.js} +2 -2
  36. package/dist/_chunks/{care-plan-header-_B0TTWT1.js.map → care-plan-header-CxYoq23f.js.map} +1 -1
  37. package/dist/_chunks/{carousel.agent-pjORsMS8.js → carousel.agent-CLxdHEBP.js} +2 -2
  38. package/dist/_chunks/{carousel.agent-pjORsMS8.js.map → carousel.agent-CLxdHEBP.js.map} +1 -1
  39. package/dist/_chunks/{chart-Y-gso_Uz.js → chart-Bkr1Sh4o.js} +3 -3
  40. package/dist/_chunks/{chart-Y-gso_Uz.js.map → chart-Bkr1Sh4o.js.map} +1 -1
  41. package/dist/_chunks/{chat-input-BqI9GXQh.js → chat-input-BsB5Umpj.js} +2 -2
  42. package/dist/_chunks/{chat-input-BqI9GXQh.js.map → chat-input-BsB5Umpj.js.map} +1 -1
  43. package/dist/_chunks/{chat-message-DHNUbjXA.js → chat-message-DBQu10rs.js} +3 -3
  44. package/dist/_chunks/{chat-message-DHNUbjXA.js.map → chat-message-DBQu10rs.js.map} +1 -1
  45. package/dist/_chunks/{code-block-BONe9fJi.js → code-block-BIkpRLkl.js} +2 -2
  46. package/dist/_chunks/{code-block-BONe9fJi.js.map → code-block-BIkpRLkl.js.map} +1 -1
  47. package/dist/_chunks/{connection-status-NT8hUtYl.js → connection-status-DRZIcMqM.js} +3 -3
  48. package/dist/_chunks/{connection-status-NT8hUtYl.js.map → connection-status-DRZIcMqM.js.map} +1 -1
  49. package/dist/_chunks/{contact-profile-card-BxHiG8e6.js → contact-profile-card-CE9OJKcl.js} +2 -2
  50. package/dist/_chunks/{contact-profile-card-BxHiG8e6.js.map → contact-profile-card-CE9OJKcl.js.map} +1 -1
  51. package/dist/_chunks/{control-room-rail-DDyPDBji.js → control-room-rail-IH1eBjrK.js} +3 -3
  52. package/dist/_chunks/{control-room-rail-DDyPDBji.js.map → control-room-rail-IH1eBjrK.js.map} +1 -1
  53. package/dist/_chunks/{copy-field-B-DoMBH_.js → copy-field-fYKpl6aN.js} +2 -2
  54. package/dist/_chunks/{copy-field-B-DoMBH_.js.map → copy-field-fYKpl6aN.js.map} +1 -1
  55. package/dist/_chunks/{cycle-calculator-DJZYvNhw.js → cycle-calculator-DzgO1vzP.js} +2 -2
  56. package/dist/_chunks/{cycle-calculator-DJZYvNhw.js.map → cycle-calculator-DzgO1vzP.js.map} +1 -1
  57. package/dist/_chunks/{dashboard-grid-bd0QW2a8.js → dashboard-grid-BFtdHqfn.js} +2 -2
  58. package/dist/_chunks/{dashboard-grid-bd0QW2a8.js.map → dashboard-grid-BFtdHqfn.js.map} +1 -1
  59. package/dist/_chunks/{data-table-tabs-C8uDThT3.js → data-table-tabs-C1kRUzat.js} +3 -3
  60. package/dist/_chunks/{data-table-tabs-C8uDThT3.js.map → data-table-tabs-C1kRUzat.js.map} +1 -1
  61. package/dist/_chunks/{description-list-Ck7fKdt5.js → description-list-CjJqR8WK.js} +2 -2
  62. package/dist/_chunks/{description-list-Ck7fKdt5.js.map → description-list-CjJqR8WK.js.map} +1 -1
  63. package/dist/_chunks/{document-preview-Aae2yKvY.js → document-preview-oyx9RhCo.js} +2 -2
  64. package/dist/_chunks/{document-preview-Aae2yKvY.js.map → document-preview-oyx9RhCo.js.map} +1 -1
  65. package/dist/_chunks/{document-scanner-qNZLhH_r.js → document-scanner-C5Vrbu21.js} +2 -2
  66. package/dist/_chunks/{document-scanner-qNZLhH_r.js.map → document-scanner-C5Vrbu21.js.map} +1 -1
  67. package/dist/_chunks/{due-date-calculator-ajaQ4ya5.js → due-date-calculator-wK8Tajzz.js} +2 -2
  68. package/dist/_chunks/{due-date-calculator-ajaQ4ya5.js.map → due-date-calculator-wK8Tajzz.js.map} +1 -1
  69. package/dist/_chunks/{editable-currency-cell-renderer-DyMbSyDK.js → editable-currency-cell-renderer-DYdzKpjL.js} +3 -3
  70. package/dist/_chunks/{editable-currency-cell-renderer-DyMbSyDK.js.map → editable-currency-cell-renderer-DYdzKpjL.js.map} +1 -1
  71. package/dist/_chunks/{editor-overlay-DE-gxj9L.js → editor-overlay-DEc5yYwo.js} +2 -2
  72. package/dist/_chunks/{editor-overlay-DE-gxj9L.js.map → editor-overlay-DEc5yYwo.js.map} +1 -1
  73. package/dist/_chunks/{empty-state-Df0tM6Kn.js → empty-state-X0sVPfVo.js} +2 -2
  74. package/dist/_chunks/{empty-state-Df0tM6Kn.js.map → empty-state-X0sVPfVo.js.map} +1 -1
  75. package/dist/_chunks/{entity-summary-DBOI5di6.js → entity-summary-B_vO5Ur4.js} +3 -3
  76. package/dist/_chunks/{entity-summary-DBOI5di6.js.map → entity-summary-B_vO5Ur4.js.map} +1 -1
  77. package/dist/_chunks/{face-scheme-D7Pub04e.js → face-scheme-BfDi4YkW.js} +5 -5
  78. package/dist/_chunks/{face-scheme-D7Pub04e.js.map → face-scheme-BfDi4YkW.js.map} +1 -1
  79. package/dist/_chunks/{fetal-weight-jon6GIfQ.js → fetal-weight-Dqy0T1fP.js} +2 -2
  80. package/dist/_chunks/{fetal-weight-jon6GIfQ.js.map → fetal-weight-Dqy0T1fP.js.map} +1 -1
  81. package/dist/_chunks/{field-array-BQFX5OYi.js → field-array-BjkXZzSr.js} +3 -3
  82. package/dist/_chunks/{field-array-BQFX5OYi.js.map → field-array-BjkXZzSr.js.map} +1 -1
  83. package/dist/_chunks/{field-value-BbiDRyNh.js → field-value-DG8zaZvo.js} +4 -4
  84. package/dist/_chunks/{field-value-BbiDRyNh.js.map → field-value-DG8zaZvo.js.map} +1 -1
  85. package/dist/_chunks/{file-manager-CML_C6_h.js → file-manager-Cc_upjZX.js} +6 -6
  86. package/dist/_chunks/{file-manager-CML_C6_h.js.map → file-manager-Cc_upjZX.js.map} +1 -1
  87. package/dist/_chunks/{finished-terminal-BWNVh7Y8.js → finished-terminal-Br61Ip4e.js} +2 -2
  88. package/dist/_chunks/{finished-terminal-BWNVh7Y8.js.map → finished-terminal-Br61Ip4e.js.map} +1 -1
  89. package/dist/_chunks/{fiscal-code-input-Nx1N9r72.js → fiscal-code-input-B_nYMSEM.js} +2 -2
  90. package/dist/_chunks/{fiscal-code-input-Nx1N9r72.js.map → fiscal-code-input-B_nYMSEM.js.map} +1 -1
  91. package/dist/_chunks/{freemium-paywall-HG3pFvMp.js → freemium-paywall-DrXzYfv-.js} +2 -2
  92. package/dist/_chunks/{freemium-paywall-HG3pFvMp.js.map → freemium-paywall-DrXzYfv-.js.map} +1 -1
  93. package/dist/_chunks/{gestational-age-calculator-dEpQDWcb.js → gestational-age-calculator-C_uDAeP_.js} +2 -2
  94. package/dist/_chunks/{gestational-age-calculator-dEpQDWcb.js.map → gestational-age-calculator-C_uDAeP_.js.map} +1 -1
  95. package/dist/_chunks/{hcg-doubling-CC6TLtHd.js → hcg-doubling-BaXkJhT-.js} +2 -2
  96. package/dist/_chunks/{hcg-doubling-CC6TLtHd.js.map → hcg-doubling-BaXkJhT-.js.map} +1 -1
  97. package/dist/_chunks/{header-CimZS-J9.js → header-DUXRIPyM.js} +2 -2
  98. package/dist/_chunks/{header-CimZS-J9.js.map → header-DUXRIPyM.js.map} +1 -1
  99. package/dist/_chunks/{header-settings-C0zHLXJE.js → header-settings-CVC_davE.js} +4 -4
  100. package/dist/_chunks/{header-settings-C0zHLXJE.js.map → header-settings-CVC_davE.js.map} +1 -1
  101. package/dist/_chunks/{icon-button-9c9Gp41m.js → icon-button-DA2CAGHZ.js} +2 -2
  102. package/dist/_chunks/{icon-button-9c9Gp41m.js.map → icon-button-DA2CAGHZ.js.map} +1 -1
  103. package/dist/_chunks/{icon-button-group-DrvuWPGJ.js → icon-button-group-D6SVMteH.js} +2 -2
  104. package/dist/_chunks/{icon-button-group-DrvuWPGJ.js.map → icon-button-group-D6SVMteH.js.map} +1 -1
  105. package/dist/_chunks/{icon-picker-DXV3sDp1.js → icon-picker-ChzpCnZ-.js} +3 -3
  106. package/dist/_chunks/{icon-picker-DXV3sDp1.js.map → icon-picker-ChzpCnZ-.js.map} +1 -1
  107. package/dist/_chunks/{image-cropper-DWSnyLwW.js → image-cropper-C84NDTB7.js} +2 -2
  108. package/dist/_chunks/{image-cropper-DWSnyLwW.js.map → image-cropper-C84NDTB7.js.map} +1 -1
  109. package/dist/_chunks/{info-tip-C4mPSJbS.js → info-tip-C119cwQl.js} +2 -2
  110. package/dist/_chunks/{info-tip-C4mPSJbS.js.map → info-tip-C119cwQl.js.map} +1 -1
  111. package/dist/_chunks/{insert-result-98J1QEp7.js → insert-result-LCNTskNJ.js} +2 -2
  112. package/dist/_chunks/{insert-result-98J1QEp7.js.map → insert-result-LCNTskNJ.js.map} +1 -1
  113. package/dist/_chunks/{key-value-pair-DGkGlgCF.js → key-value-pair-BubG4fUa.js} +2 -2
  114. package/dist/_chunks/{key-value-pair-DGkGlgCF.js.map → key-value-pair-BubG4fUa.js.map} +1 -1
  115. package/dist/_chunks/{link-cell-renderer-D3IsW_2R.js → link-cell-renderer-DH4JYpKU.js} +2 -2
  116. package/dist/_chunks/{link-cell-renderer-D3IsW_2R.js.map → link-cell-renderer-DH4JYpKU.js.map} +1 -1
  117. package/dist/_chunks/{locale-picker-sI0HWgZy.js → locale-picker-BvbVjDQ-.js} +3 -3
  118. package/dist/_chunks/{locale-picker-sI0HWgZy.js.map → locale-picker-BvbVjDQ-.js.map} +1 -1
  119. package/dist/_chunks/{map-view-iwSDRW3t.js → map-view-CCAlC9IL.js} +2 -2
  120. package/dist/_chunks/{map-view-iwSDRW3t.js.map → map-view-CCAlC9IL.js.map} +1 -1
  121. package/dist/_chunks/{marketplace-app-shell-b5hN-Q0m.js → marketplace-app-shell-Chfdia7m.js} +4 -4
  122. package/dist/_chunks/{marketplace-app-shell-b5hN-Q0m.js.map → marketplace-app-shell-Chfdia7m.js.map} +1 -1
  123. package/dist/_chunks/{message-card-BCJ-Jgs6.js → message-card-D8GB4FdF.js} +3 -3
  124. package/dist/_chunks/{message-card-BCJ-Jgs6.js.map → message-card-D8GB4FdF.js.map} +1 -1
  125. package/dist/_chunks/{message-tray-DHtm_WaF.js → message-tray-CGIRQjx5.js} +4 -4
  126. package/dist/_chunks/{message-tray-DHtm_WaF.js.map → message-tray-CGIRQjx5.js.map} +1 -1
  127. package/dist/_chunks/{notes-panel-D6HKLLS-.js → notes-panel-DlnENphf.js} +3 -3
  128. package/dist/_chunks/{notes-panel-D6HKLLS-.js.map → notes-panel-DlnENphf.js.map} +1 -1
  129. package/dist/_chunks/{notification-card-CcMQn2RX.js → notification-card-CtrzoTUO.js} +3 -3
  130. package/dist/_chunks/{notification-card-CcMQn2RX.js.map → notification-card-CtrzoTUO.js.map} +1 -1
  131. package/dist/_chunks/{notification-tray-nr7dv-Q8.js → notification-tray-BiRzXHDf.js} +4 -4
  132. package/dist/_chunks/{notification-tray-nr7dv-Q8.js.map → notification-tray-BiRzXHDf.js.map} +1 -1
  133. package/dist/_chunks/{optical-prescription-DtzEqFQm.js → optical-prescription-Dj3Eh5Ok.js} +2 -2
  134. package/dist/_chunks/{optical-prescription-DtzEqFQm.js.map → optical-prescription-Dj3Eh5Ok.js.map} +1 -1
  135. package/dist/_chunks/{patient-details-rENrE_qY.js → patient-details-qnsqYBGQ.js} +5 -5
  136. package/dist/_chunks/{patient-details-rENrE_qY.js.map → patient-details-qnsqYBGQ.js.map} +1 -1
  137. package/dist/_chunks/{patient-search-NQemeJlL.js → patient-search-D5ufYoRc.js} +2 -2
  138. package/dist/_chunks/{patient-search-NQemeJlL.js.map → patient-search-D5ufYoRc.js.map} +1 -1
  139. package/dist/_chunks/{patient-summary-card-DQJgOOrA.js → patient-summary-card-CBfuDvJ5.js} +3 -3
  140. package/dist/_chunks/{patient-summary-card-DQJgOOrA.js.map → patient-summary-card-CBfuDvJ5.js.map} +1 -1
  141. package/dist/_chunks/{patient-table-BubxfOWL.js → patient-table-DwshfVsQ.js} +3 -3
  142. package/dist/_chunks/{patient-table-BubxfOWL.js.map → patient-table-DwshfVsQ.js.map} +1 -1
  143. package/dist/_chunks/{payment-automation-upsell-CnaBPt5e.js → payment-automation-upsell-BBIG7NFL.js} +2 -2
  144. package/dist/_chunks/{payment-automation-upsell-CnaBPt5e.js.map → payment-automation-upsell-BBIG7NFL.js.map} +1 -1
  145. package/dist/_chunks/{payment-request-card-CvhDzDNk.js → payment-request-card-BjjBMdsp.js} +3 -3
  146. package/dist/_chunks/{payment-request-card-CvhDzDNk.js.map → payment-request-card-BjjBMdsp.js.map} +1 -1
  147. package/dist/_chunks/{periodontal-chart-C0nNQKKK.js → periodontal-chart-BatZEFar.js} +2 -2
  148. package/dist/_chunks/{periodontal-chart-C0nNQKKK.js.map → periodontal-chart-BatZEFar.js.map} +1 -1
  149. package/dist/_chunks/{periodontal-chart-card-Bz-ebteE.js → periodontal-chart-card-BBpY_rBc.js} +2 -2
  150. package/dist/_chunks/{periodontal-chart-card-Bz-ebteE.js.map → periodontal-chart-card-BBpY_rBc.js.map} +1 -1
  151. package/dist/_chunks/{popover-Btj6N25H.js → popover-Cqcjx-Ny.js} +2 -2
  152. package/dist/_chunks/{popover-Btj6N25H.js.map → popover-Cqcjx-Ny.js.map} +1 -1
  153. package/dist/_chunks/{practice-results-CKoLD_x5.js → practice-results-BEsAdW-B.js} +719 -633
  154. package/dist/_chunks/practice-results-BEsAdW-B.js.map +1 -0
  155. package/dist/_chunks/{pregnancy-dating-DQVpFs_f.js → pregnancy-dating-BVS_9YU2.js} +2 -2
  156. package/dist/_chunks/{pregnancy-dating-DQVpFs_f.js.map → pregnancy-dating-BVS_9YU2.js.map} +1 -1
  157. package/dist/_chunks/{pregnancy-weight-gain-hm3QJALe.js → pregnancy-weight-gain-CJwbs9W-.js} +2 -2
  158. package/dist/_chunks/{pregnancy-weight-gain-hm3QJALe.js.map → pregnancy-weight-gain-CJwbs9W-.js.map} +1 -1
  159. package/dist/_chunks/{privacy-lock-SQYFRSuH.js → privacy-lock-CkAUo6Dz.js} +3 -3
  160. package/dist/_chunks/{privacy-lock-SQYFRSuH.js.map → privacy-lock-CkAUo6Dz.js.map} +1 -1
  161. package/dist/_chunks/{product-hub-panel-BjnD9pdl.js → product-hub-panel-BScCotGD.js} +3 -3
  162. package/dist/_chunks/{product-hub-panel-BjnD9pdl.js.map → product-hub-panel-BScCotGD.js.map} +1 -1
  163. package/dist/_chunks/{public-header.agent-DseNK2NQ.js → public-header.agent-kth2SdXn.js} +3 -3
  164. package/dist/_chunks/{public-header.agent-DseNK2NQ.js.map → public-header.agent-kth2SdXn.js.map} +1 -1
  165. package/dist/_chunks/{radiograph-panel.agent-CAXFgCyn.js → radiograph-panel.agent-CiHwgISa.js} +4 -4
  166. package/dist/_chunks/{radiograph-panel.agent-CAXFgCyn.js.map → radiograph-panel.agent-CiHwgISa.js.map} +1 -1
  167. package/dist/_chunks/{reviews-panel-Cd3SxJdW.js → reviews-panel-BKHEfqVQ.js} +4 -4
  168. package/dist/_chunks/{reviews-panel-Cd3SxJdW.js.map → reviews-panel-BKHEfqVQ.js.map} +1 -1
  169. package/dist/_chunks/{rich-text-editor-DGtn_4sb.js → rich-text-editor-DARnq_6N.js} +5 -5
  170. package/dist/_chunks/{rich-text-editor-DGtn_4sb.js.map → rich-text-editor-DARnq_6N.js.map} +1 -1
  171. package/dist/_chunks/{session-countdown-q4r5TlCo.js → session-countdown-QMsnRa1x.js} +2 -2
  172. package/dist/_chunks/{session-countdown-q4r5TlCo.js.map → session-countdown-QMsnRa1x.js.map} +1 -1
  173. package/dist/_chunks/{sheet-CD99CdXr.js → sheet-BSznOyJs.js} +2 -2
  174. package/dist/_chunks/{sheet-CD99CdXr.js.map → sheet-BSznOyJs.js.map} +1 -1
  175. package/dist/_chunks/{sign-in-with-alfadocs-button-_JxVRO5d.js → sign-in-with-alfadocs-button-BLe_quy5.js} +2 -2
  176. package/dist/_chunks/{sign-in-with-alfadocs-button-_JxVRO5d.js.map → sign-in-with-alfadocs-button-BLe_quy5.js.map} +1 -1
  177. package/dist/_chunks/{signature-request-C4UBfVRZ.js → signature-request-DXhpphlp.js} +4 -4
  178. package/dist/_chunks/{signature-request-C4UBfVRZ.js.map → signature-request-DXhpphlp.js.map} +1 -1
  179. package/dist/_chunks/{slot-grid-P_e9p5t5.js → slot-grid-BuZOKfcd.js} +4 -4
  180. package/dist/_chunks/{slot-grid-P_e9p5t5.js.map → slot-grid-BuZOKfcd.js.map} +1 -1
  181. package/dist/_chunks/{streaming-text-BuW7I0Zu.js → streaming-text-CvsjIQ7S.js} +2 -2
  182. package/dist/_chunks/{streaming-text-BuW7I0Zu.js.map → streaming-text-CvsjIQ7S.js.map} +1 -1
  183. package/dist/_chunks/{task-tray-BT288xoM.js → task-tray-CYG6rj2s.js} +3 -3
  184. package/dist/_chunks/{task-tray-BT288xoM.js.map → task-tray-CYG6rj2s.js.map} +1 -1
  185. package/dist/_chunks/{tasks-panel-BBkZuejF.js → tasks-panel-Do5SFp-j.js} +5 -5
  186. package/dist/_chunks/{tasks-panel-BBkZuejF.js.map → tasks-panel-Do5SFp-j.js.map} +1 -1
  187. package/dist/_chunks/{theme-toggle-Bi-CmV6M.js → theme-toggle-DuMhQNFS.js} +3 -3
  188. package/dist/_chunks/{theme-toggle-Bi-CmV6M.js.map → theme-toggle-DuMhQNFS.js.map} +1 -1
  189. package/dist/_chunks/{toast.agent-C44mtGrW.js → toast.agent-D1tdg6DS.js} +2 -2
  190. package/dist/_chunks/{toast.agent-C44mtGrW.js.map → toast.agent-D1tdg6DS.js.map} +1 -1
  191. package/dist/_chunks/{token-insert-menu-D8FgXl33.js → token-insert-menu-9Um0JinI.js} +2 -2
  192. package/dist/_chunks/{token-insert-menu-D8FgXl33.js.map → token-insert-menu-9Um0JinI.js.map} +1 -1
  193. package/dist/_chunks/{tool-rail-BF3F2Ihq.js → tool-rail-CHyUmulN.js} +2 -2
  194. package/dist/_chunks/{tool-rail-BF3F2Ihq.js.map → tool-rail-CHyUmulN.js.map} +1 -1
  195. package/dist/_chunks/{tooth-scheme-BPXE1_3N.js → tooth-scheme-WdyVymQ1.js} +3 -3
  196. package/dist/_chunks/{tooth-scheme-BPXE1_3N.js.map → tooth-scheme-WdyVymQ1.js.map} +1 -1
  197. package/dist/_chunks/{unit-converter-iDxlxKmm.js → unit-converter-BPumXMA6.js} +2 -2
  198. package/dist/_chunks/{unit-converter-iDxlxKmm.js.map → unit-converter-BPumXMA6.js.map} +1 -1
  199. package/dist/_chunks/{warning-stack-nczJf52p.js → warning-stack-DQz0Jyir.js} +3 -3
  200. package/dist/_chunks/{warning-stack-nczJf52p.js.map → warning-stack-DQz0Jyir.js.map} +1 -1
  201. package/dist/_chunks/{workflow-map-BVofnDYh.js → workflow-map-DE_ribRM.js} +5 -5
  202. package/dist/_chunks/{workflow-map-BVofnDYh.js.map → workflow-map-DE_ribRM.js.map} +1 -1
  203. package/dist/agent-catalog.json +2 -2
  204. package/dist/components/agenda-tray/index.js +1 -1
  205. package/dist/components/ai-consent-banner/index.js +1 -1
  206. package/dist/components/ai-prompt-input/index.js +1 -1
  207. package/dist/components/anamnesis-card/index.js +1 -1
  208. package/dist/components/appointment-card/index.js +1 -1
  209. package/dist/components/appointment-timeline/index.js +1 -1
  210. package/dist/components/audio-recorder/index.js +1 -1
  211. package/dist/components/bishop-score/index.js +1 -1
  212. package/dist/components/bmi-calculator/index.js +1 -1
  213. package/dist/components/booking/index.js +1 -1
  214. package/dist/components/button/button.d.ts +10 -0
  215. package/dist/components/button/button.d.ts.map +1 -1
  216. package/dist/components/button/index.js +2 -2
  217. package/dist/components/button-group/index.js +1 -1
  218. package/dist/components/care-plan-card/index.js +1 -1
  219. package/dist/components/care-plan-entry-card/index.js +1 -1
  220. package/dist/components/care-plan-header/index.js +1 -1
  221. package/dist/components/carousel/index.js +1 -1
  222. package/dist/components/chart/index.js +1 -1
  223. package/dist/components/chat-input/index.js +1 -1
  224. package/dist/components/chat-message/index.js +1 -1
  225. package/dist/components/connection-status/index.js +1 -1
  226. package/dist/components/contact-profile-card/index.js +1 -1
  227. package/dist/components/control-room-rail/index.js +1 -1
  228. package/dist/components/copy-field/index.js +1 -1
  229. package/dist/components/cycle-calculator/index.js +1 -1
  230. package/dist/components/dashboard-grid/index.js +1 -1
  231. package/dist/components/data-table/index.js +3 -3
  232. package/dist/components/data-table-tabs/index.js +1 -1
  233. package/dist/components/description-list/index.js +1 -1
  234. package/dist/components/document-preview/index.js +1 -1
  235. package/dist/components/document-scanner/index.js +1 -1
  236. package/dist/components/due-date-calculator/index.js +1 -1
  237. package/dist/components/editor-overlay/index.js +1 -1
  238. package/dist/components/empty-state/index.js +1 -1
  239. package/dist/components/entity-summary/index.js +1 -1
  240. package/dist/components/face-scheme/index.js +1 -1
  241. package/dist/components/fetal-weight/index.js +1 -1
  242. package/dist/components/field-array/index.js +1 -1
  243. package/dist/components/file-manager/index.js +1 -1
  244. package/dist/components/finished-terminal/index.js +1 -1
  245. package/dist/components/fiscal-code-input/index.js +1 -1
  246. package/dist/components/freemium-paywall/index.js +1 -1
  247. package/dist/components/gestational-age-calculator/index.js +1 -1
  248. package/dist/components/hcg-doubling/index.js +1 -1
  249. package/dist/components/header/index.js +1 -1
  250. package/dist/components/header-settings/index.js +1 -1
  251. package/dist/components/icon-button/index.js +1 -1
  252. package/dist/components/icon-button-group/index.js +1 -1
  253. package/dist/components/icon-picker/index.js +1 -1
  254. package/dist/components/image-cropper/index.js +1 -1
  255. package/dist/components/info-tip/index.js +1 -1
  256. package/dist/components/key-value-pair/index.js +1 -1
  257. package/dist/components/locale-picker/index.js +1 -1
  258. package/dist/components/map-view/index.js +1 -1
  259. package/dist/components/matrix-rain/matrix-rain.d.ts +1 -1
  260. package/dist/components/message-card/index.js +1 -1
  261. package/dist/components/message-tray/index.js +1 -1
  262. package/dist/components/notes-panel/index.js +1 -1
  263. package/dist/components/notification-card/index.js +1 -1
  264. package/dist/components/notification-tray/index.js +1 -1
  265. package/dist/components/optical-prescription/index.js +1 -1
  266. package/dist/components/patient-details/index.js +1 -1
  267. package/dist/components/patient-search/index.js +1 -1
  268. package/dist/components/patient-summary-card/index.js +1 -1
  269. package/dist/components/patient-table/index.js +1 -1
  270. package/dist/components/payment-card/index.js +1 -1
  271. package/dist/components/periodontal-chart/index.js +1 -1
  272. package/dist/components/periodontal-chart-card/index.js +1 -1
  273. package/dist/components/popover/index.js +1 -1
  274. package/dist/components/practice-results/index.js +1 -1
  275. package/dist/components/practice-results/practice-results.d.ts +47 -7
  276. package/dist/components/practice-results/practice-results.d.ts.map +1 -1
  277. package/dist/components/pregnancy-dating/index.js +1 -1
  278. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  279. package/dist/components/privacy-lock/index.js +1 -1
  280. package/dist/components/product-hub-tray/index.js +1 -1
  281. package/dist/components/public-header/index.js +1 -1
  282. package/dist/components/public-header/public-header.d.ts +1 -1
  283. package/dist/components/radiograph-panel/index.js +1 -1
  284. package/dist/components/reviews-panel/index.js +1 -1
  285. package/dist/components/rich-text-editor/index.js +1 -1
  286. package/dist/components/session-countdown/index.js +1 -1
  287. package/dist/components/sheet/index.js +1 -1
  288. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  289. package/dist/components/slot-grid/index.js +1 -1
  290. package/dist/components/streaming-text/index.js +1 -1
  291. package/dist/components/task-tray/index.js +1 -1
  292. package/dist/components/tasks-panel/index.js +1 -1
  293. package/dist/components/theme-toggle/index.js +1 -1
  294. package/dist/components/toast/index.js +1 -1
  295. package/dist/components/token-insert-menu/index.js +1 -1
  296. package/dist/components/tool-rail/index.js +1 -1
  297. package/dist/components/tooth-scheme/index.js +1 -1
  298. package/dist/components/unit-converter/index.js +1 -1
  299. package/dist/components/warning-stack/index.js +1 -1
  300. package/dist/components/workflow/index.js +1 -1
  301. package/dist/i18n/locales/ar.d.ts +1 -0
  302. package/dist/i18n/locales/ar.d.ts.map +1 -1
  303. package/dist/i18n/locales/ar.js +2 -1
  304. package/dist/i18n/locales/ar.js.map +1 -1
  305. package/dist/i18n/locales/de.d.ts +1 -0
  306. package/dist/i18n/locales/de.d.ts.map +1 -1
  307. package/dist/i18n/locales/de.js +2 -1
  308. package/dist/i18n/locales/de.js.map +1 -1
  309. package/dist/i18n/locales/el.d.ts +1 -0
  310. package/dist/i18n/locales/el.d.ts.map +1 -1
  311. package/dist/i18n/locales/el.js +2 -1
  312. package/dist/i18n/locales/el.js.map +1 -1
  313. package/dist/i18n/locales/en.d.ts +1 -0
  314. package/dist/i18n/locales/en.d.ts.map +1 -1
  315. package/dist/i18n/locales/en.js +2 -1
  316. package/dist/i18n/locales/en.js.map +1 -1
  317. package/dist/i18n/locales/es.d.ts +1 -0
  318. package/dist/i18n/locales/es.d.ts.map +1 -1
  319. package/dist/i18n/locales/es.js +2 -1
  320. package/dist/i18n/locales/es.js.map +1 -1
  321. package/dist/i18n/locales/fr.d.ts +1 -0
  322. package/dist/i18n/locales/fr.d.ts.map +1 -1
  323. package/dist/i18n/locales/fr.js +2 -1
  324. package/dist/i18n/locales/fr.js.map +1 -1
  325. package/dist/i18n/locales/hi.d.ts +1 -0
  326. package/dist/i18n/locales/hi.d.ts.map +1 -1
  327. package/dist/i18n/locales/hi.js +2 -1
  328. package/dist/i18n/locales/hi.js.map +1 -1
  329. package/dist/i18n/locales/it.d.ts +1 -0
  330. package/dist/i18n/locales/it.d.ts.map +1 -1
  331. package/dist/i18n/locales/it.js +2 -1
  332. package/dist/i18n/locales/it.js.map +1 -1
  333. package/dist/i18n/locales/ja.d.ts +1 -0
  334. package/dist/i18n/locales/ja.d.ts.map +1 -1
  335. package/dist/i18n/locales/ja.js +2 -1
  336. package/dist/i18n/locales/ja.js.map +1 -1
  337. package/dist/i18n/locales/nl.d.ts +1 -0
  338. package/dist/i18n/locales/nl.d.ts.map +1 -1
  339. package/dist/i18n/locales/nl.js +2 -1
  340. package/dist/i18n/locales/nl.js.map +1 -1
  341. package/dist/i18n/locales/pl.d.ts +1 -0
  342. package/dist/i18n/locales/pl.d.ts.map +1 -1
  343. package/dist/i18n/locales/pl.js +2 -1
  344. package/dist/i18n/locales/pl.js.map +1 -1
  345. package/dist/i18n/locales/pt.d.ts +1 -0
  346. package/dist/i18n/locales/pt.d.ts.map +1 -1
  347. package/dist/i18n/locales/pt.js +2 -1
  348. package/dist/i18n/locales/pt.js.map +1 -1
  349. package/dist/i18n/locales/ro.d.ts +1 -0
  350. package/dist/i18n/locales/ro.d.ts.map +1 -1
  351. package/dist/i18n/locales/ro.js +2 -1
  352. package/dist/i18n/locales/ro.js.map +1 -1
  353. package/dist/i18n/locales/ru.d.ts +1 -0
  354. package/dist/i18n/locales/ru.d.ts.map +1 -1
  355. package/dist/i18n/locales/ru.js +2 -1
  356. package/dist/i18n/locales/ru.js.map +1 -1
  357. package/dist/i18n/locales/sq.d.ts +1 -0
  358. package/dist/i18n/locales/sq.d.ts.map +1 -1
  359. package/dist/i18n/locales/sq.js +2 -1
  360. package/dist/i18n/locales/sq.js.map +1 -1
  361. package/dist/i18n/locales/sv.d.ts +1 -0
  362. package/dist/i18n/locales/sv.d.ts.map +1 -1
  363. package/dist/i18n/locales/sv.js +2 -1
  364. package/dist/i18n/locales/sv.js.map +1 -1
  365. package/dist/i18n/locales/tr.d.ts +1 -0
  366. package/dist/i18n/locales/tr.d.ts.map +1 -1
  367. package/dist/i18n/locales/tr.js +2 -1
  368. package/dist/i18n/locales/tr.js.map +1 -1
  369. package/dist/i18n/locales/zh.d.ts +1 -0
  370. package/dist/i18n/locales/zh.d.ts.map +1 -1
  371. package/dist/i18n/locales/zh.js +2 -1
  372. package/dist/i18n/locales/zh.js.map +1 -1
  373. package/dist/index.js +96 -96
  374. package/dist/locales/ar.json +2 -1
  375. package/dist/locales/de.json +2 -1
  376. package/dist/locales/el.json +2 -1
  377. package/dist/locales/en.json +2 -1
  378. package/dist/locales/es.json +2 -1
  379. package/dist/locales/fr.json +2 -1
  380. package/dist/locales/hi.json +2 -1
  381. package/dist/locales/it.json +2 -1
  382. package/dist/locales/ja.json +2 -1
  383. package/dist/locales/nl.json +2 -1
  384. package/dist/locales/pl.json +2 -1
  385. package/dist/locales/pt.json +2 -1
  386. package/dist/locales/ro.json +2 -1
  387. package/dist/locales/ru.json +2 -1
  388. package/dist/locales/sq.json +2 -1
  389. package/dist/locales/sv.json +2 -1
  390. package/dist/locales/tr.json +2 -1
  391. package/dist/locales/zh.json +2 -1
  392. package/dist/patterns/alia-assistant/index.js +1 -1
  393. package/dist/patterns/anamnesis/index.js +1 -1
  394. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  395. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  396. package/dist/patterns/signature-request/index.js +1 -1
  397. package/dist/tokens.css +1 -1
  398. package/package.json +1 -1
  399. package/dist/_chunks/button-BvNtqHAS.js.map +0 -1
  400. package/dist/_chunks/practice-results-CKoLD_x5.js.map +0 -1
@@ -2,7 +2,7 @@ import { jsx as s, jsxs as j } from "react/jsx-runtime";
2
2
  import { forwardRef as ce, useRef as R, useState as X, useCallback as fe, Children as z, isValidElement as Y, useEffect as pe, cloneElement as B } from "react";
3
3
  import { c as me } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as be } from "react-i18next";
5
- import { I as Z } from "./icon-button-9c9Gp41m.js";
5
+ import { I as Z } from "./icon-button-DA2CAGHZ.js";
6
6
  import { D as x } from "./dropdown-menu-DU-Hrf33.js";
7
7
  import { u as ge } from "./use-isomorphic-layout-effect-BGfaCOP1.js";
8
8
  import { u as we } from "./use-priority-overflow-c9SjxZkZ.js";
@@ -286,4 +286,4 @@ ve.displayName = "ButtonGroup";
286
286
  export {
287
287
  ve as B
288
288
  };
289
- //# sourceMappingURL=button-group-Be_In68J.js.map
289
+ //# sourceMappingURL=button-group-CaxRJsNG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"button-group-Be_In68J.js","sources":["../../src/components/button-group/button-group.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Ellipsis } from 'lucide-react';\nimport type { ButtonProps } from '../button/button';\nimport { IconButton } from '../button/icon-button';\nimport { DropdownMenu } from '../dropdown-menu';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { usePriorityOverflow } from '../../hooks/use-priority-overflow';\n\ntype ButtonIntent = NonNullable<ButtonProps['intent']>;\n\nconst buttonGroupVariants = cva(\n 'ds:inline-flex ds:isolate ds:[&>*]:relative ds:[&>*:focus-visible]:z-10',\n {\n variants: {\n orientation: {\n horizontal: [\n 'ds:flex-row',\n 'ds:[&>*:not(:first-child)]:rounded-s-none',\n 'ds:[&>*:not(:last-child)]:rounded-e-none',\n 'ds:[&>*:not(:first-child)]:-ms-px',\n ].join(' '),\n vertical: [\n 'ds:flex-col',\n 'ds:[&>*:not(:first-child)]:rounded-t-none',\n 'ds:[&>*:not(:last-child)]:rounded-b-none',\n 'ds:[&>*:not(:first-child)]:-mt-px',\n ].join(' '),\n },\n separator: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n orientation: 'horizontal',\n separator: true,\n class:\n 'ds:[&>*:not(:last-child)]:border-e ds:[&>*:not(:last-child)]:border-border',\n },\n {\n orientation: 'vertical',\n separator: true,\n class:\n 'ds:[&>*:not(:last-child)]:border-b ds:[&>*:not(:last-child)]:border-border',\n },\n ],\n defaultVariants: {\n orientation: 'horizontal',\n separator: false,\n },\n },\n);\n\n// Hidden measurement rows: laid out (so widths are real) but invisible,\n// non-interactive and out of the a11y tree. Never display:none.\nconst MEASURE_ROW_CLASSES =\n 'ds:absolute ds:start-0 ds:top-0 ds:invisible ds:pointer-events-none';\n\ntype GroupChildProps = {\n intent?: ButtonIntent;\n tabIndex?: number;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n ref?: React.Ref<HTMLButtonElement>;\n children?: ReactNode;\n disabled?: boolean;\n loading?: boolean;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n hideLabel?: boolean;\n 'aria-label'?: string;\n 'data-overflow-pin'?: boolean | 'true' | '';\n};\n\nexport interface ButtonGroupProps\n extends\n HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof buttonGroupVariants> {\n /**\n * Accessible label for the group. Falls back to the translated\n * `ui.buttonGroup.label` string when not provided.\n */\n label?: string;\n /**\n * When the children are interactive toolbar-style controls (e.g. toggles),\n * set this to render `role=\"toolbar\"` instead of `role=\"group\"`.\n */\n toolbar?: boolean;\n /**\n * Intent applied to every Button / IconButton child that does not set\n * its own `intent`. Defaults to `outline` — grouped buttons are peers,\n * not three solid-primary CTAs.\n */\n intent?: ButtonIntent;\n /**\n * `'menu'` keeps the strip on one line whatever the container width:\n * once the buttons stop fitting (after the optional `collapseToIcons`\n * stage) trailing ones move into a dropdown behind an ellipsis trigger.\n * The group then fills its container's inline size, so give it a bounded\n * parent. Horizontal only. Children needing to stay in the strip set\n * `data-overflow-pin`; children without a string label or `aria-label`\n * cannot be mirrored into the menu and are pinned automatically.\n */\n overflow?: 'none' | 'menu';\n /**\n * With `overflow=\"menu\"`: before spilling into the menu, hide every\n * child's label (`hideLabel`) and keep only its `startIcon` — buttons\n * without an icon shrink to their padding, so give each child one.\n */\n collapseToIcons?: boolean;\n}\n\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n (\n {\n className,\n orientation = 'horizontal',\n separator = false,\n toolbar = false,\n intent = 'outline',\n label,\n overflow = 'none',\n collapseToIcons = false,\n children,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const accessibleLabel = label ?? t('buttonGroup.label', 'Button group');\n const moreLabel = t('buttonGroup.more', 'More options');\n\n if (\n import.meta.env.DEV &&\n overflow === 'menu' &&\n orientation === 'vertical'\n ) {\n console.warn(\n 'ButtonGroup: overflow=\"menu\" is horizontal-only; falling back to overflow=\"none\".',\n );\n }\n const overflowEnabled = overflow === 'menu' && orientation !== 'vertical';\n\n // Roving tabindex — required by the WAI-ARIA toolbar pattern.\n // When `toolbar` is true, one child owns `tabIndex=0` and the rest are\n // `-1`. Arrow keys / Home / End move focus between children, respecting\n // orientation and RTL. Plain `group` mode keeps every child natively\n // tabbable.\n const rovingTabindex = toolbar;\n const buttonsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [focusIndex, setFocusIndex] = useState(0);\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [isRTL, setIsRTL] = useState(false);\n useIsomorphicLayoutEffect(() => {\n if (typeof window === 'undefined') return;\n const node = rootRef.current;\n if (!node) return;\n setIsRTL(window.getComputedStyle(node).direction === 'rtl');\n }, []);\n\n const handleRootKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (!rovingTabindex) return;\n const count = buttonsRef.current.filter(Boolean).length;\n if (count === 0) return;\n\n const forwardKey =\n orientation === 'vertical'\n ? 'ArrowDown'\n : isRTL\n ? 'ArrowLeft'\n : 'ArrowRight';\n const backwardKey =\n orientation === 'vertical'\n ? 'ArrowUp'\n : isRTL\n ? 'ArrowRight'\n : 'ArrowLeft';\n\n let next: number | null = null;\n if (event.key === forwardKey) next = (focusIndex + 1) % count;\n else if (event.key === backwardKey)\n next = (focusIndex - 1 + count) % count;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = count - 1;\n if (next === null) return;\n\n // Skip over disabled children.\n const maxAttempts = count;\n let attempts = 0;\n let candidate = next;\n while (attempts < maxAttempts) {\n const el = buttonsRef.current[candidate];\n if (\n el &&\n el.getAttribute('aria-disabled') !== 'true' &&\n !el.disabled\n ) {\n break;\n }\n candidate =\n event.key === backwardKey || event.key === 'End'\n ? (candidate - 1 + count) % count\n : (candidate + 1) % count;\n attempts += 1;\n }\n event.preventDefault();\n setFocusIndex(candidate);\n buttonsRef.current[candidate]?.focus();\n },\n [rovingTabindex, orientation, isRTL, focusIndex],\n );\n\n /* ---- Overflow bookkeeping (menu mode only) --------------------- */\n const childElements = overflowEnabled\n ? (Children.toArray(children).filter(isValidElement) as Array<\n ReactElement<GroupChildProps>\n >)\n : [];\n\n const mirrorLabel = (child: ReactElement<GroupChildProps>) => {\n if (typeof child.props.children === 'string') return child.props.children;\n const aria = child.props['aria-label'];\n return typeof aria === 'string' ? aria : null;\n };\n const warnedRef = useRef(false);\n const pinnedFlags = childElements.map((child) => {\n const explicit = child.props['data-overflow-pin'] !== undefined;\n const mirrorable = mirrorLabel(child) !== null;\n if (\n import.meta.env.DEV &&\n !explicit &&\n !mirrorable &&\n !warnedRef.current\n ) {\n warnedRef.current = true;\n console.warn(\n 'ButtonGroup: a child without a string label or aria-label cannot move into the overflow menu — it stays pinned in the strip.',\n );\n }\n return explicit || !mirrorable;\n });\n\n const {\n containerRef,\n fullRowRef,\n iconRowRef,\n triggerProbeRef,\n stage,\n visible,\n overflowing,\n } = usePriorityOverflow({\n enabled: overflowEnabled,\n count: childElements.length,\n twoStage: collapseToIcons,\n pinned: pinnedFlags,\n });\n\n const triggerNodeRef = useRef<HTMLButtonElement | null>(null);\n const visibleCount = overflowEnabled\n ? visible.filter(Boolean).length\n : Children.count(children);\n\n // Clamp the roving focus when items move into the menu; hand real focus\n // to the trigger only when the focused node was the one that left.\n useEffect(() => {\n if (!rovingTabindex || !overflowEnabled) return;\n const total = visibleCount + (overflowing ? 1 : 0);\n if (total > 0 && focusIndex >= total) {\n setFocusIndex(total - 1);\n if (document.activeElement === document.body) {\n triggerNodeRef.current?.focus();\n }\n }\n }, [\n rovingTabindex,\n overflowEnabled,\n visibleCount,\n overflowing,\n focusIndex,\n ]);\n\n const mergeChildRef = (\n childEl: ReactElement<GroupChildProps>,\n index: number,\n ) => {\n return (node: HTMLButtonElement | null) => {\n buttonsRef.current[index] = node;\n const originalRef = (\n childEl as unknown as { ref?: React.Ref<HTMLButtonElement> }\n ).ref;\n if (typeof originalRef === 'function') originalRef(node);\n else if (\n originalRef !== null &&\n originalRef !== undefined &&\n typeof originalRef === 'object'\n ) {\n (\n originalRef as React.MutableRefObject<HTMLButtonElement | null>\n ).current = node;\n }\n };\n };\n\n /* ---- Legacy path: overflow=\"none\" keeps today's exact DOM ------ */\n const enhanced = overflowEnabled\n ? null\n : Children.map(children, (child, index) => {\n if (!isValidElement(child)) return child;\n const childEl = child as ReactElement<GroupChildProps>;\n\n // Roving-tabindex wiring (ref / tabIndex / onFocus) is only needed in\n // `toolbar` mode. In plain `group` mode inject ONLY `intent`, so the group\n // composes with members that don't forward a ref — e.g. each wrapped in a\n // `DropdownMenu.Root` for a split-button strip — without React's \"function\n // components cannot be given refs\" warning. The joined styling is DOM-level\n // (`[&>*]`), so it still applies to the rendered buttons either way.\n const overrides: Record<string, unknown> = {\n intent: childEl.props.intent ?? intent,\n };\n if (rovingTabindex) {\n overrides.tabIndex = index === focusIndex ? 0 : -1;\n overrides.onFocus = (ev: React.FocusEvent<HTMLButtonElement>) => {\n setFocusIndex(index);\n childEl.props.onFocus?.(ev);\n };\n overrides.ref = mergeChildRef(childEl, index);\n }\n\n return cloneElement(\n childEl,\n overrides as Partial<typeof childEl.props>,\n );\n });\n\n /* ---- Menu path: strip of visible children + ellipsis trigger --- */\n let stripChildren: ReactNode = null;\n let menuItems: ReactNode = null;\n if (overflowEnabled) {\n buttonsRef.current.length = visibleCount + (overflowing ? 1 : 0);\n let stripIndex = -1;\n stripChildren = childElements.map((childEl, i) => {\n if (!visible[i]) return null;\n stripIndex += 1;\n const index = stripIndex;\n const overrides: Record<string, unknown> = {\n intent: childEl.props.intent ?? intent,\n };\n // Only children with an icon AND a text label collapse; icon-only\n // children (their children ARE the icon) would go blank.\n if (\n collapseToIcons &&\n stage === 'icons' &&\n childEl.props.children &&\n (childEl.props.startIcon || childEl.props.endIcon)\n )\n overrides.hideLabel = true;\n if (rovingTabindex) {\n overrides.tabIndex = index === focusIndex ? 0 : -1;\n overrides.onFocus = (ev: React.FocusEvent<HTMLButtonElement>) => {\n setFocusIndex(index);\n childEl.props.onFocus?.(ev);\n };\n overrides.ref = mergeChildRef(childEl, index);\n }\n return cloneElement(childEl, overrides as Partial<GroupChildProps>);\n });\n\n menuItems = childElements.map((childEl, i) => {\n if (visible[i]) return null;\n const itemLabel = mirrorLabel(childEl);\n if (itemLabel === null) return null;\n return (\n <DropdownMenu.Item\n key={childEl.key ?? i}\n startIcon={childEl.props.startIcon}\n disabled={\n childEl.props.disabled === true || childEl.props.loading === true\n }\n onSelect={(event) => {\n childEl.props.onClick?.(\n event as unknown as React.MouseEvent<HTMLButtonElement>,\n );\n }}\n >\n {itemLabel}\n </DropdownMenu.Item>\n );\n });\n }\n\n const mergedRootRef = (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref && typeof ref === 'object') {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n };\n\n if (!overflowEnabled) {\n return (\n <div\n ref={mergedRootRef}\n role={toolbar ? 'toolbar' : 'group'}\n aria-label={accessibleLabel}\n aria-orientation={toolbar ? (orientation ?? 'horizontal') : undefined}\n data-component=\"button-group\"\n onKeyDown={handleRootKeyDown}\n className={buttonGroupVariants({ orientation, separator, className })}\n {...props}\n >\n {enhanced}\n </div>\n );\n }\n\n const stripClasses = buttonGroupVariants({ orientation, separator });\n const triggerIndex = visibleCount;\n const measureClone = (\n childEl: ReactElement<GroupChildProps>,\n i: number,\n icons: boolean,\n ) =>\n cloneElement(childEl, {\n key: childEl.key ?? i,\n intent: childEl.props.intent ?? intent,\n tabIndex: -1,\n // Same rule as the live strip: icon-only children never hideLabel.\n ...(icons &&\n childEl.props.children &&\n (childEl.props.startIcon || childEl.props.endIcon)\n ? { hideLabel: true }\n : null),\n ref: null,\n } as Partial<GroupChildProps>);\n\n return (\n <div\n ref={mergedRootRef}\n data-component=\"button-group\"\n className={[\n 'ds:relative ds:block ds:w-full ds:min-w-0 ds:overflow-x-clip',\n className ?? '',\n ]\n .join(' ')\n .trim()}\n {...props}\n >\n <div ref={containerRef} className=\"ds:block ds:w-full ds:min-w-0\">\n {/* Measurement rows: every item at natural width, both stages. */}\n <div\n ref={fullRowRef}\n aria-hidden=\"true\"\n inert\n className={`${MEASURE_ROW_CLASSES} ${stripClasses}`}\n >\n {childElements.map((c, i) => measureClone(c, i, false))}\n </div>\n {collapseToIcons ? (\n <div\n ref={iconRowRef}\n aria-hidden=\"true\"\n inert\n className={`${MEASURE_ROW_CLASSES} ${stripClasses}`}\n >\n {childElements.map((c, i) => measureClone(c, i, true))}\n </div>\n ) : null}\n <span\n ref={triggerProbeRef}\n aria-hidden=\"true\"\n inert\n className={MEASURE_ROW_CLASSES}\n >\n <IconButton\n icon={<Ellipsis />}\n intent={intent}\n aria-label={moreLabel}\n tabIndex={-1}\n />\n </span>\n\n <div\n role={toolbar ? 'toolbar' : 'group'}\n aria-label={accessibleLabel}\n aria-orientation={toolbar ? 'horizontal' : undefined}\n onKeyDown={handleRootKeyDown}\n className={`${stripClasses} ds:max-w-full`}\n >\n {stripChildren}\n {overflowing ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n icon={<Ellipsis />}\n intent={intent}\n aria-label={moreLabel}\n ref={(node: HTMLButtonElement | null) => {\n triggerNodeRef.current = node;\n buttonsRef.current[triggerIndex] = node;\n }}\n tabIndex={\n rovingTabindex\n ? focusIndex === triggerIndex\n ? 0\n : -1\n : undefined\n }\n onFocus={\n rovingTabindex\n ? () => setFocusIndex(triggerIndex)\n : undefined\n }\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {menuItems}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n </div>\n </div>\n </div>\n );\n },\n);\n\nButtonGroup.displayName = 'ButtonGroup';\n"],"names":["buttonGroupVariants","cva","MEASURE_ROW_CLASSES","ButtonGroup","forwardRef","className","orientation","separator","toolbar","intent","label","overflow","collapseToIcons","children","props","ref","t","useTranslation","accessibleLabel","moreLabel","overflowEnabled","rovingTabindex","buttonsRef","useRef","focusIndex","setFocusIndex","useState","rootRef","isRTL","setIsRTL","useIsomorphicLayoutEffect","node","handleRootKeyDown","useCallback","event","count","forwardKey","backwardKey","next","maxAttempts","attempts","candidate","el","_a","childElements","Children","isValidElement","mirrorLabel","child","aria","pinnedFlags","explicit","mirrorable","containerRef","fullRowRef","iconRowRef","triggerProbeRef","stage","visible","overflowing","usePriorityOverflow","triggerNodeRef","visibleCount","useEffect","total","mergeChildRef","childEl","index","originalRef","enhanced","overrides","ev","_b","cloneElement","stripChildren","menuItems","stripIndex","i","itemLabel","jsx","DropdownMenu","mergedRootRef","stripClasses","triggerIndex","measureClone","icons","c","IconButton","Ellipsis","jsxs"],"mappings":";;;;;;;;;AAyBA,MAAMA,KAAsBC;AAAA,EAC1B;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,aAAa;AAAA,QACX,YAAY;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,QACV,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QAAA,EACA,KAAK,GAAG;AAAA,MAAA;AAAA,MAEZ,WAAW;AAAA,QACT,MAAM;AAAA,QACN,OAAO;AAAA,MAAA;AAAA,IACT;AAAA,IAEF,kBAAkB;AAAA,MAChB;AAAA,QACE,aAAa;AAAA,QACb,WAAW;AAAA,QACX,OACE;AAAA,MAAA;AAAA,MAEJ;AAAA,QACE,aAAa;AAAA,QACb,WAAW;AAAA,QACX,OACE;AAAA,MAAA;AAAA,IACJ;AAAA,IAEF,iBAAiB;AAAA,MACf,aAAa;AAAA,MACb,WAAW;AAAA,IAAA;AAAA,EACb;AAEJ,GAIMC,IACJ,uEAwDWC,KAAcC;AAAA,EACzB,CACE;AAAA,IACE,WAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,WAAAC,IAAY;AAAA,IACZ,SAAAC,IAAU;AAAA,IACV,QAAAC,IAAS;AAAA,IACT,OAAAC;AAAA,IACA,UAAAC,KAAW;AAAA,IACX,iBAAAC,IAAkB;AAAA,IAClB,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,MACG;AACH,UAAM,EAAE,GAAAC,EAAA,IAAMC,GAAA,GACRC,IAAkBR,MAASM,EAAE,qBAAqB,cAAc,GAChEG,IAAYH,EAAE,oBAAoB,cAAc,GAWhDI,IAAkBT,OAAa,UAAUL,MAAgB,YAOzDe,IAAiBb,GACjBc,IAAaC,EAAwC,EAAE,GACvD,CAACC,GAAYC,CAAa,IAAIC,EAAS,CAAC,GAExCC,IAAUJ,EAA8B,IAAI,GAC5C,CAACK,GAAOC,EAAQ,IAAIH,EAAS,EAAK;AACxC,IAAAI,GAA0B,MAAM;AAC9B,UAAI,OAAO,SAAW,IAAa;AACnC,YAAMC,IAAOJ,EAAQ;AACrB,MAAKI,KACLF,GAAS,OAAO,iBAAiBE,CAAI,EAAE,cAAc,KAAK;AAAA,IAC5D,GAAG,CAAA,CAAE;AAEL,UAAMC,IAAoBC;AAAA,MACxB,CAACC,MAA8C;;AAC7C,YAAI,CAACb,EAAgB;AACrB,cAAMc,IAAQb,EAAW,QAAQ,OAAO,OAAO,EAAE;AACjD,YAAIa,MAAU,EAAG;AAEjB,cAAMC,IACJ9B,MAAgB,aACZ,cACAsB,IACE,cACA,cACFS,IACJ/B,MAAgB,aACZ,YACAsB,IACE,eACA;AAER,YAAIU,IAAsB;AAM1B,YALIJ,EAAM,QAAQE,IAAYE,KAAQd,IAAa,KAAKW,IAC/CD,EAAM,QAAQG,IACrBC,KAAQd,IAAa,IAAIW,KAASA,IAC3BD,EAAM,QAAQ,SAAQI,IAAO,IAC7BJ,EAAM,QAAQ,UAAOI,IAAOH,IAAQ,IACzCG,MAAS,KAAM;AAGnB,cAAMC,IAAcJ;AACpB,YAAIK,IAAW,GACXC,IAAYH;AAChB,eAAOE,IAAWD,KAAa;AAC7B,gBAAMG,IAAKpB,EAAW,QAAQmB,CAAS;AACvC,cACEC,KACAA,EAAG,aAAa,eAAe,MAAM,UACrC,CAACA,EAAG;AAEJ;AAEF,UAAAD,IACEP,EAAM,QAAQG,KAAeH,EAAM,QAAQ,SACtCO,IAAY,IAAIN,KAASA,KACzBM,IAAY,KAAKN,GACxBK,KAAY;AAAA,QACd;AACA,QAAAN,EAAM,eAAA,GACNT,EAAcgB,CAAS,IACvBE,IAAArB,EAAW,QAAQmB,CAAS,MAA5B,QAAAE,EAA+B;AAAA,MACjC;AAAA,MACA,CAACtB,GAAgBf,GAAasB,GAAOJ,CAAU;AAAA,IAAA,GAI3CoB,IAAgBxB,IACjByB,EAAS,QAAQhC,CAAQ,EAAE,OAAOiC,CAAc,IAGjD,CAAA,GAEEC,IAAc,CAACC,MAAyC;AAC5D,UAAI,OAAOA,EAAM,MAAM,YAAa,SAAU,QAAOA,EAAM,MAAM;AACjE,YAAMC,IAAOD,EAAM,MAAM,YAAY;AACrC,aAAO,OAAOC,KAAS,WAAWA,IAAO;AAAA,IAC3C;AACkB,IAAA1B,EAAO,EAAK;AAC9B,UAAM2B,KAAcN,EAAc,IAAI,CAACI,MAAU;AAC/C,YAAMG,IAAWH,EAAM,MAAM,mBAAmB,MAAM,QAChDI,IAAaL,EAAYC,CAAK,MAAM;AAY1C,aAAOG,KAAY,CAACC;AAAA,IACtB,CAAC,GAEK;AAAA,MACJ,cAAAC;AAAA,MACA,YAAAC;AAAA,MACA,YAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,aAAAC;AAAA,IAAA,IACEC,GAAoB;AAAA,MACtB,SAASxC;AAAA,MACT,OAAOwB,EAAc;AAAA,MACrB,UAAUhC;AAAA,MACV,QAAQsC;AAAA,IAAA,CACT,GAEKW,IAAiBtC,EAAiC,IAAI,GACtDuC,IAAe1C,IACjBsC,EAAQ,OAAO,OAAO,EAAE,SACxBb,EAAS,MAAMhC,CAAQ;AAI3B,IAAAkD,GAAU,MAAM;;AACd,UAAI,CAAC1C,KAAkB,CAACD,EAAiB;AACzC,YAAM4C,IAAQF,KAAgBH,IAAc,IAAI;AAChD,MAAIK,IAAQ,KAAKxC,KAAcwC,MAC7BvC,EAAcuC,IAAQ,CAAC,GACnB,SAAS,kBAAkB,SAAS,UACtCrB,IAAAkB,EAAe,YAAf,QAAAlB,EAAwB;AAAA,IAG9B,GAAG;AAAA,MACDtB;AAAA,MACAD;AAAA,MACA0C;AAAA,MACAH;AAAA,MACAnC;AAAA,IAAA,CACD;AAED,UAAMyC,IAAgB,CACpBC,GACAC,MAEO,CAACpC,MAAmC;AACzC,MAAAT,EAAW,QAAQ6C,CAAK,IAAIpC;AAC5B,YAAMqC,IACJF,EACA;AACF,MAAI,OAAOE,KAAgB,aAAYA,EAAYrC,CAAI,IAErDqC,KAAgB,QAEhB,OAAOA,KAAgB,aAGrBA,EACA,UAAUrC;AAAA,IAEhB,GAIIsC,KAAWjD,IACb,OACAyB,EAAS,IAAIhC,GAAU,CAACmC,GAAOmB,MAAU;AACvC,UAAI,CAACrB,EAAeE,CAAK,EAAG,QAAOA;AACnC,YAAMkB,IAAUlB,GAQVsB,IAAqC;AAAA,QACzC,QAAQJ,EAAQ,MAAM,UAAUzD;AAAA,MAAA;AAElC,aAAIY,MACFiD,EAAU,WAAWH,MAAU3C,IAAa,IAAI,IAChD8C,EAAU,UAAU,CAACC,MAA4C;;AAC/D,QAAA9C,EAAc0C,CAAK,IACnBK,KAAA7B,IAAAuB,EAAQ,OAAM,YAAd,QAAAM,EAAA,KAAA7B,GAAwB4B;AAAA,MAC1B,GACAD,EAAU,MAAML,EAAcC,GAASC,CAAK,IAGvCM;AAAA,QACLP;AAAA,QACAI;AAAA,MAAA;AAAA,IAEJ,CAAC;AAGL,QAAII,IAA2B,MAC3BC,IAAuB;AAC3B,QAAIvD,GAAiB;AACnB,MAAAE,EAAW,QAAQ,SAASwC,KAAgBH,IAAc,IAAI;AAC9D,UAAIiB,IAAa;AACjB,MAAAF,IAAgB9B,EAAc,IAAI,CAACsB,GAASW,MAAM;AAChD,YAAI,CAACnB,EAAQmB,CAAC,EAAG,QAAO;AACxB,QAAAD,KAAc;AACd,cAAMT,IAAQS,GACRN,IAAqC;AAAA,UACzC,QAAQJ,EAAQ,MAAM,UAAUzD;AAAA,QAAA;AAIlC,eACEG,KACA6C,OAAU,WACVS,EAAQ,MAAM,aACbA,EAAQ,MAAM,aAAaA,EAAQ,MAAM,aAE1CI,EAAU,YAAY,KACpBjD,MACFiD,EAAU,WAAWH,MAAU3C,IAAa,IAAI,IAChD8C,EAAU,UAAU,CAACC,MAA4C;;AAC/D,UAAA9C,EAAc0C,CAAK,IACnBK,KAAA7B,IAAAuB,EAAQ,OAAM,YAAd,QAAAM,EAAA,KAAA7B,GAAwB4B;AAAA,QAC1B,GACAD,EAAU,MAAML,EAAcC,GAASC,CAAK,IAEvCM,EAAaP,GAASI,CAAqC;AAAA,MACpE,CAAC,GAEDK,IAAY/B,EAAc,IAAI,CAACsB,GAASW,MAAM;AAC5C,YAAInB,EAAQmB,CAAC,EAAG,QAAO;AACvB,cAAMC,IAAY/B,EAAYmB,CAAO;AACrC,eAAIY,MAAc,OAAa,OAE7B,gBAAAC;AAAA,UAACC,EAAa;AAAA,UAAb;AAAA,YAEC,WAAWd,EAAQ,MAAM;AAAA,YACzB,UACEA,EAAQ,MAAM,aAAa,MAAQA,EAAQ,MAAM,YAAY;AAAA,YAE/D,UAAU,CAAChC,MAAU;;AACnB,eAAAsC,KAAA7B,IAAAuB,EAAQ,OAAM,YAAd,QAAAM,EAAA;AAAA,gBAAA7B;AAAA,gBACET;AAAA;AAAA,YAEJ;AAAA,YAEC,UAAA4C;AAAA,UAAA;AAAA,UAXIZ,EAAQ,OAAOW;AAAA,QAAA;AAAA,MAc1B,CAAC;AAAA,IACH;AAEA,UAAMI,IAAgB,CAAClD,MAAgC;AACrD,MAAAJ,EAAQ,UAAUI,GACd,OAAOhB,KAAQ,aAAYA,EAAIgB,CAAI,IAC9BhB,KAAO,OAAOA,KAAQ,aAC5BA,EAAsD,UAAUgB;AAAA,IAErE;AAEA,QAAI,CAACX;AACH,aACE,gBAAA2D;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKE;AAAA,UACL,MAAMzE,IAAU,YAAY;AAAA,UAC5B,cAAYU;AAAA,UACZ,oBAAkBV,IAAWF,KAAe,eAAgB;AAAA,UAC5D,kBAAe;AAAA,UACf,WAAW0B;AAAA,UACX,WAAWhC,GAAoB,EAAE,aAAAM,GAAa,WAAAC,GAAW,WAAAF,GAAW;AAAA,UACnE,GAAGS;AAAA,UAEH,UAAAuD;AAAA,QAAA;AAAA,MAAA;AAKP,UAAMa,IAAelF,GAAoB,EAAE,aAAAM,GAAa,WAAAC,GAAW,GAC7D4E,IAAerB,GACfsB,IAAe,CACnBlB,GACAW,GACAQ,MAEAZ,EAAaP,GAAS;AAAA,MACpB,KAAKA,EAAQ,OAAOW;AAAA,MACpB,QAAQX,EAAQ,MAAM,UAAUzD;AAAA,MAChC,UAAU;AAAA;AAAA,MAEV,GAAI4E,KACJnB,EAAQ,MAAM,aACbA,EAAQ,MAAM,aAAaA,EAAQ,MAAM,WACtC,EAAE,WAAW,OACb;AAAA,MACJ,KAAK;AAAA,IAAA,CACsB;AAE/B,WACE,gBAAAa;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAKE;AAAA,QACL,kBAAe;AAAA,QACf,WAAW;AAAA,UACT;AAAA,UACA5E,KAAa;AAAA,QAAA,EAEZ,KAAK,GAAG,EACR,KAAA;AAAA,QACF,GAAGS;AAAA,QAEJ,4BAAC,OAAA,EAAI,KAAKuC,IAAc,WAAU,iCAEhC,UAAA;AAAA,UAAA,gBAAA0B;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKzB;AAAA,cACL,eAAY;AAAA,cACZ,OAAK;AAAA,cACL,WAAW,GAAGpD,CAAmB,IAAIgF,CAAY;AAAA,cAEhD,UAAAtC,EAAc,IAAI,CAAC0C,GAAGT,MAAMO,EAAaE,GAAGT,GAAG,EAAK,CAAC;AAAA,YAAA;AAAA,UAAA;AAAA,UAEvDjE,IACC,gBAAAmE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKxB;AAAA,cACL,eAAY;AAAA,cACZ,OAAK;AAAA,cACL,WAAW,GAAGrD,CAAmB,IAAIgF,CAAY;AAAA,cAEhD,UAAAtC,EAAc,IAAI,CAAC0C,GAAGT,MAAMO,EAAaE,GAAGT,GAAG,EAAI,CAAC;AAAA,YAAA;AAAA,UAAA,IAErD;AAAA,UACJ,gBAAAE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,KAAKvB;AAAA,cACL,eAAY;AAAA,cACZ,OAAK;AAAA,cACL,WAAWtD;AAAA,cAEX,UAAA,gBAAA6E;AAAA,gBAACQ;AAAA,gBAAA;AAAA,kBACC,wBAAOC,GAAA,EAAS;AAAA,kBAChB,QAAA/E;AAAA,kBACA,cAAYU;AAAA,kBACZ,UAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACZ;AAAA,UAAA;AAAA,UAGF,gBAAAsE;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,MAAMjF,IAAU,YAAY;AAAA,cAC5B,cAAYU;AAAA,cACZ,oBAAkBV,IAAU,eAAe;AAAA,cAC3C,WAAWwB;AAAA,cACX,WAAW,GAAGkD,CAAY;AAAA,cAEzB,UAAA;AAAA,gBAAAR;AAAA,gBACAf,IACC,gBAAA8B,EAACT,EAAa,MAAb,EACC,UAAA;AAAA,oCAACA,EAAa,SAAb,EAAqB,SAAO,IAC3B,UAAA,gBAAAD;AAAA,oBAACQ;AAAA,oBAAA;AAAA,sBACC,wBAAOC,GAAA,EAAS;AAAA,sBAChB,QAAA/E;AAAA,sBACA,cAAYU;AAAA,sBACZ,KAAK,CAACY,MAAmC;AACvC,wBAAA8B,EAAe,UAAU9B,GACzBT,EAAW,QAAQ6D,CAAY,IAAIpD;AAAA,sBACrC;AAAA,sBACA,UACEV,IACIG,MAAe2D,IACb,IACA,KACF;AAAA,sBAEN,SACE9D,IACI,MAAMI,EAAc0D,CAAY,IAChC;AAAA,oBAAA;AAAA,kBAAA,GAGV;AAAA,oCACCH,EAAa,SAAb,EAAqB,OAAM,OACzB,UAAAL,GACH;AAAA,gBAAA,EAAA,CACF,IACE;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QACN,GACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF;AAEAxE,GAAY,cAAc;"}
1
+ {"version":3,"file":"button-group-CaxRJsNG.js","sources":["../../src/components/button-group/button-group.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n forwardRef,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type KeyboardEvent as ReactKeyboardEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Ellipsis } from 'lucide-react';\nimport type { ButtonProps } from '../button/button';\nimport { IconButton } from '../button/icon-button';\nimport { DropdownMenu } from '../dropdown-menu';\nimport { useIsomorphicLayoutEffect } from '../../hooks/use-isomorphic-layout-effect';\nimport { usePriorityOverflow } from '../../hooks/use-priority-overflow';\n\ntype ButtonIntent = NonNullable<ButtonProps['intent']>;\n\nconst buttonGroupVariants = cva(\n 'ds:inline-flex ds:isolate ds:[&>*]:relative ds:[&>*:focus-visible]:z-10',\n {\n variants: {\n orientation: {\n horizontal: [\n 'ds:flex-row',\n 'ds:[&>*:not(:first-child)]:rounded-s-none',\n 'ds:[&>*:not(:last-child)]:rounded-e-none',\n 'ds:[&>*:not(:first-child)]:-ms-px',\n ].join(' '),\n vertical: [\n 'ds:flex-col',\n 'ds:[&>*:not(:first-child)]:rounded-t-none',\n 'ds:[&>*:not(:last-child)]:rounded-b-none',\n 'ds:[&>*:not(:first-child)]:-mt-px',\n ].join(' '),\n },\n separator: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n {\n orientation: 'horizontal',\n separator: true,\n class:\n 'ds:[&>*:not(:last-child)]:border-e ds:[&>*:not(:last-child)]:border-border',\n },\n {\n orientation: 'vertical',\n separator: true,\n class:\n 'ds:[&>*:not(:last-child)]:border-b ds:[&>*:not(:last-child)]:border-border',\n },\n ],\n defaultVariants: {\n orientation: 'horizontal',\n separator: false,\n },\n },\n);\n\n// Hidden measurement rows: laid out (so widths are real) but invisible,\n// non-interactive and out of the a11y tree. Never display:none.\nconst MEASURE_ROW_CLASSES =\n 'ds:absolute ds:start-0 ds:top-0 ds:invisible ds:pointer-events-none';\n\ntype GroupChildProps = {\n intent?: ButtonIntent;\n tabIndex?: number;\n onFocus?: React.FocusEventHandler<HTMLButtonElement>;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n ref?: React.Ref<HTMLButtonElement>;\n children?: ReactNode;\n disabled?: boolean;\n loading?: boolean;\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n hideLabel?: boolean;\n 'aria-label'?: string;\n 'data-overflow-pin'?: boolean | 'true' | '';\n};\n\nexport interface ButtonGroupProps\n extends\n HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof buttonGroupVariants> {\n /**\n * Accessible label for the group. Falls back to the translated\n * `ui.buttonGroup.label` string when not provided.\n */\n label?: string;\n /**\n * When the children are interactive toolbar-style controls (e.g. toggles),\n * set this to render `role=\"toolbar\"` instead of `role=\"group\"`.\n */\n toolbar?: boolean;\n /**\n * Intent applied to every Button / IconButton child that does not set\n * its own `intent`. Defaults to `outline` — grouped buttons are peers,\n * not three solid-primary CTAs.\n */\n intent?: ButtonIntent;\n /**\n * `'menu'` keeps the strip on one line whatever the container width:\n * once the buttons stop fitting (after the optional `collapseToIcons`\n * stage) trailing ones move into a dropdown behind an ellipsis trigger.\n * The group then fills its container's inline size, so give it a bounded\n * parent. Horizontal only. Children needing to stay in the strip set\n * `data-overflow-pin`; children without a string label or `aria-label`\n * cannot be mirrored into the menu and are pinned automatically.\n */\n overflow?: 'none' | 'menu';\n /**\n * With `overflow=\"menu\"`: before spilling into the menu, hide every\n * child's label (`hideLabel`) and keep only its `startIcon` — buttons\n * without an icon shrink to their padding, so give each child one.\n */\n collapseToIcons?: boolean;\n}\n\nexport const ButtonGroup = forwardRef<HTMLDivElement, ButtonGroupProps>(\n (\n {\n className,\n orientation = 'horizontal',\n separator = false,\n toolbar = false,\n intent = 'outline',\n label,\n overflow = 'none',\n collapseToIcons = false,\n children,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const accessibleLabel = label ?? t('buttonGroup.label', 'Button group');\n const moreLabel = t('buttonGroup.more', 'More options');\n\n if (\n import.meta.env.DEV &&\n overflow === 'menu' &&\n orientation === 'vertical'\n ) {\n console.warn(\n 'ButtonGroup: overflow=\"menu\" is horizontal-only; falling back to overflow=\"none\".',\n );\n }\n const overflowEnabled = overflow === 'menu' && orientation !== 'vertical';\n\n // Roving tabindex — required by the WAI-ARIA toolbar pattern.\n // When `toolbar` is true, one child owns `tabIndex=0` and the rest are\n // `-1`. Arrow keys / Home / End move focus between children, respecting\n // orientation and RTL. Plain `group` mode keeps every child natively\n // tabbable.\n const rovingTabindex = toolbar;\n const buttonsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [focusIndex, setFocusIndex] = useState(0);\n\n const rootRef = useRef<HTMLDivElement | null>(null);\n const [isRTL, setIsRTL] = useState(false);\n useIsomorphicLayoutEffect(() => {\n if (typeof window === 'undefined') return;\n const node = rootRef.current;\n if (!node) return;\n setIsRTL(window.getComputedStyle(node).direction === 'rtl');\n }, []);\n\n const handleRootKeyDown = useCallback(\n (event: ReactKeyboardEvent<HTMLDivElement>) => {\n if (!rovingTabindex) return;\n const count = buttonsRef.current.filter(Boolean).length;\n if (count === 0) return;\n\n const forwardKey =\n orientation === 'vertical'\n ? 'ArrowDown'\n : isRTL\n ? 'ArrowLeft'\n : 'ArrowRight';\n const backwardKey =\n orientation === 'vertical'\n ? 'ArrowUp'\n : isRTL\n ? 'ArrowRight'\n : 'ArrowLeft';\n\n let next: number | null = null;\n if (event.key === forwardKey) next = (focusIndex + 1) % count;\n else if (event.key === backwardKey)\n next = (focusIndex - 1 + count) % count;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = count - 1;\n if (next === null) return;\n\n // Skip over disabled children.\n const maxAttempts = count;\n let attempts = 0;\n let candidate = next;\n while (attempts < maxAttempts) {\n const el = buttonsRef.current[candidate];\n if (\n el &&\n el.getAttribute('aria-disabled') !== 'true' &&\n !el.disabled\n ) {\n break;\n }\n candidate =\n event.key === backwardKey || event.key === 'End'\n ? (candidate - 1 + count) % count\n : (candidate + 1) % count;\n attempts += 1;\n }\n event.preventDefault();\n setFocusIndex(candidate);\n buttonsRef.current[candidate]?.focus();\n },\n [rovingTabindex, orientation, isRTL, focusIndex],\n );\n\n /* ---- Overflow bookkeeping (menu mode only) --------------------- */\n const childElements = overflowEnabled\n ? (Children.toArray(children).filter(isValidElement) as Array<\n ReactElement<GroupChildProps>\n >)\n : [];\n\n const mirrorLabel = (child: ReactElement<GroupChildProps>) => {\n if (typeof child.props.children === 'string') return child.props.children;\n const aria = child.props['aria-label'];\n return typeof aria === 'string' ? aria : null;\n };\n const warnedRef = useRef(false);\n const pinnedFlags = childElements.map((child) => {\n const explicit = child.props['data-overflow-pin'] !== undefined;\n const mirrorable = mirrorLabel(child) !== null;\n if (\n import.meta.env.DEV &&\n !explicit &&\n !mirrorable &&\n !warnedRef.current\n ) {\n warnedRef.current = true;\n console.warn(\n 'ButtonGroup: a child without a string label or aria-label cannot move into the overflow menu — it stays pinned in the strip.',\n );\n }\n return explicit || !mirrorable;\n });\n\n const {\n containerRef,\n fullRowRef,\n iconRowRef,\n triggerProbeRef,\n stage,\n visible,\n overflowing,\n } = usePriorityOverflow({\n enabled: overflowEnabled,\n count: childElements.length,\n twoStage: collapseToIcons,\n pinned: pinnedFlags,\n });\n\n const triggerNodeRef = useRef<HTMLButtonElement | null>(null);\n const visibleCount = overflowEnabled\n ? visible.filter(Boolean).length\n : Children.count(children);\n\n // Clamp the roving focus when items move into the menu; hand real focus\n // to the trigger only when the focused node was the one that left.\n useEffect(() => {\n if (!rovingTabindex || !overflowEnabled) return;\n const total = visibleCount + (overflowing ? 1 : 0);\n if (total > 0 && focusIndex >= total) {\n setFocusIndex(total - 1);\n if (document.activeElement === document.body) {\n triggerNodeRef.current?.focus();\n }\n }\n }, [\n rovingTabindex,\n overflowEnabled,\n visibleCount,\n overflowing,\n focusIndex,\n ]);\n\n const mergeChildRef = (\n childEl: ReactElement<GroupChildProps>,\n index: number,\n ) => {\n return (node: HTMLButtonElement | null) => {\n buttonsRef.current[index] = node;\n const originalRef = (\n childEl as unknown as { ref?: React.Ref<HTMLButtonElement> }\n ).ref;\n if (typeof originalRef === 'function') originalRef(node);\n else if (\n originalRef !== null &&\n originalRef !== undefined &&\n typeof originalRef === 'object'\n ) {\n (\n originalRef as React.MutableRefObject<HTMLButtonElement | null>\n ).current = node;\n }\n };\n };\n\n /* ---- Legacy path: overflow=\"none\" keeps today's exact DOM ------ */\n const enhanced = overflowEnabled\n ? null\n : Children.map(children, (child, index) => {\n if (!isValidElement(child)) return child;\n const childEl = child as ReactElement<GroupChildProps>;\n\n // Roving-tabindex wiring (ref / tabIndex / onFocus) is only needed in\n // `toolbar` mode. In plain `group` mode inject ONLY `intent`, so the group\n // composes with members that don't forward a ref — e.g. each wrapped in a\n // `DropdownMenu.Root` for a split-button strip — without React's \"function\n // components cannot be given refs\" warning. The joined styling is DOM-level\n // (`[&>*]`), so it still applies to the rendered buttons either way.\n const overrides: Record<string, unknown> = {\n intent: childEl.props.intent ?? intent,\n };\n if (rovingTabindex) {\n overrides.tabIndex = index === focusIndex ? 0 : -1;\n overrides.onFocus = (ev: React.FocusEvent<HTMLButtonElement>) => {\n setFocusIndex(index);\n childEl.props.onFocus?.(ev);\n };\n overrides.ref = mergeChildRef(childEl, index);\n }\n\n return cloneElement(\n childEl,\n overrides as Partial<typeof childEl.props>,\n );\n });\n\n /* ---- Menu path: strip of visible children + ellipsis trigger --- */\n let stripChildren: ReactNode = null;\n let menuItems: ReactNode = null;\n if (overflowEnabled) {\n buttonsRef.current.length = visibleCount + (overflowing ? 1 : 0);\n let stripIndex = -1;\n stripChildren = childElements.map((childEl, i) => {\n if (!visible[i]) return null;\n stripIndex += 1;\n const index = stripIndex;\n const overrides: Record<string, unknown> = {\n intent: childEl.props.intent ?? intent,\n };\n // Only children with an icon AND a text label collapse; icon-only\n // children (their children ARE the icon) would go blank.\n if (\n collapseToIcons &&\n stage === 'icons' &&\n childEl.props.children &&\n (childEl.props.startIcon || childEl.props.endIcon)\n )\n overrides.hideLabel = true;\n if (rovingTabindex) {\n overrides.tabIndex = index === focusIndex ? 0 : -1;\n overrides.onFocus = (ev: React.FocusEvent<HTMLButtonElement>) => {\n setFocusIndex(index);\n childEl.props.onFocus?.(ev);\n };\n overrides.ref = mergeChildRef(childEl, index);\n }\n return cloneElement(childEl, overrides as Partial<GroupChildProps>);\n });\n\n menuItems = childElements.map((childEl, i) => {\n if (visible[i]) return null;\n const itemLabel = mirrorLabel(childEl);\n if (itemLabel === null) return null;\n return (\n <DropdownMenu.Item\n key={childEl.key ?? i}\n startIcon={childEl.props.startIcon}\n disabled={\n childEl.props.disabled === true || childEl.props.loading === true\n }\n onSelect={(event) => {\n childEl.props.onClick?.(\n event as unknown as React.MouseEvent<HTMLButtonElement>,\n );\n }}\n >\n {itemLabel}\n </DropdownMenu.Item>\n );\n });\n }\n\n const mergedRootRef = (node: HTMLDivElement | null) => {\n rootRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref && typeof ref === 'object') {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n };\n\n if (!overflowEnabled) {\n return (\n <div\n ref={mergedRootRef}\n role={toolbar ? 'toolbar' : 'group'}\n aria-label={accessibleLabel}\n aria-orientation={toolbar ? (orientation ?? 'horizontal') : undefined}\n data-component=\"button-group\"\n onKeyDown={handleRootKeyDown}\n className={buttonGroupVariants({ orientation, separator, className })}\n {...props}\n >\n {enhanced}\n </div>\n );\n }\n\n const stripClasses = buttonGroupVariants({ orientation, separator });\n const triggerIndex = visibleCount;\n const measureClone = (\n childEl: ReactElement<GroupChildProps>,\n i: number,\n icons: boolean,\n ) =>\n cloneElement(childEl, {\n key: childEl.key ?? i,\n intent: childEl.props.intent ?? intent,\n tabIndex: -1,\n // Same rule as the live strip: icon-only children never hideLabel.\n ...(icons &&\n childEl.props.children &&\n (childEl.props.startIcon || childEl.props.endIcon)\n ? { hideLabel: true }\n : null),\n ref: null,\n } as Partial<GroupChildProps>);\n\n return (\n <div\n ref={mergedRootRef}\n data-component=\"button-group\"\n className={[\n 'ds:relative ds:block ds:w-full ds:min-w-0 ds:overflow-x-clip',\n className ?? '',\n ]\n .join(' ')\n .trim()}\n {...props}\n >\n <div ref={containerRef} className=\"ds:block ds:w-full ds:min-w-0\">\n {/* Measurement rows: every item at natural width, both stages. */}\n <div\n ref={fullRowRef}\n aria-hidden=\"true\"\n inert\n className={`${MEASURE_ROW_CLASSES} ${stripClasses}`}\n >\n {childElements.map((c, i) => measureClone(c, i, false))}\n </div>\n {collapseToIcons ? (\n <div\n ref={iconRowRef}\n aria-hidden=\"true\"\n inert\n className={`${MEASURE_ROW_CLASSES} ${stripClasses}`}\n >\n {childElements.map((c, i) => measureClone(c, i, true))}\n </div>\n ) : null}\n <span\n ref={triggerProbeRef}\n aria-hidden=\"true\"\n inert\n className={MEASURE_ROW_CLASSES}\n >\n <IconButton\n icon={<Ellipsis />}\n intent={intent}\n aria-label={moreLabel}\n tabIndex={-1}\n />\n </span>\n\n <div\n role={toolbar ? 'toolbar' : 'group'}\n aria-label={accessibleLabel}\n aria-orientation={toolbar ? 'horizontal' : undefined}\n onKeyDown={handleRootKeyDown}\n className={`${stripClasses} ds:max-w-full`}\n >\n {stripChildren}\n {overflowing ? (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n icon={<Ellipsis />}\n intent={intent}\n aria-label={moreLabel}\n ref={(node: HTMLButtonElement | null) => {\n triggerNodeRef.current = node;\n buttonsRef.current[triggerIndex] = node;\n }}\n tabIndex={\n rovingTabindex\n ? focusIndex === triggerIndex\n ? 0\n : -1\n : undefined\n }\n onFocus={\n rovingTabindex\n ? () => setFocusIndex(triggerIndex)\n : undefined\n }\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Content align=\"end\">\n {menuItems}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n ) : null}\n </div>\n </div>\n </div>\n );\n },\n);\n\nButtonGroup.displayName = 'ButtonGroup';\n"],"names":["buttonGroupVariants","cva","MEASURE_ROW_CLASSES","ButtonGroup","forwardRef","className","orientation","separator","toolbar","intent","label","overflow","collapseToIcons","children","props","ref","t","useTranslation","accessibleLabel","moreLabel","overflowEnabled","rovingTabindex","buttonsRef","useRef","focusIndex","setFocusIndex","useState","rootRef","isRTL","setIsRTL","useIsomorphicLayoutEffect","node","handleRootKeyDown","useCallback","event","count","forwardKey","backwardKey","next","maxAttempts","attempts","candidate","el","_a","childElements","Children","isValidElement","mirrorLabel","child","aria","pinnedFlags","explicit","mirrorable","containerRef","fullRowRef","iconRowRef","triggerProbeRef","stage","visible","overflowing","usePriorityOverflow","triggerNodeRef","visibleCount","useEffect","total","mergeChildRef","childEl","index","originalRef","enhanced","overrides","ev","_b","cloneElement","stripChildren","menuItems","stripIndex","i","itemLabel","jsx","DropdownMenu","mergedRootRef","stripClasses","triggerIndex","measureClone","icons","c","IconButton","Ellipsis","jsxs"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { jsxs as m, jsx as e } from "react/jsx-runtime";
2
- import { forwardRef as z, useEffect as k } from "react";
3
- import { Slot as B, Slottable as N } from "@radix-ui/react-slot";
4
- import { c as L } from "./index-D2ZczOXr.js";
5
- const C = L(
2
+ import { forwardRef as z, useEffect as N } from "react";
3
+ import { Slot as B, Slottable as L } from "@radix-ui/react-slot";
4
+ import { c as C } from "./index-D2ZczOXr.js";
5
+ const O = C(
6
6
  // `forced-colors:*` — under Windows High Contrast Mode the OS strips our
7
7
  // bg/text tokens, so `ghost` / `outline` / `link` would lose their shape.
8
8
  // We repaint a `ButtonBorder` edge + swap the focus ring to `CanvasText`
@@ -13,17 +13,19 @@ const C = L(
13
13
  intent: {
14
14
  primary: "ds:bg-primary ds:text-primary-foreground ds:hover:bg-primary-hover ds:active:opacity-90 ds:shadow-sm",
15
15
  secondary: "ds:bg-secondary ds:text-secondary-foreground ds:hover:bg-secondary-hover ds:active:opacity-90",
16
- // Painted, not transparent: an outline button sits on cards, tinted
17
- // page shells and host pages alike, and a see-through one took on
18
- // whatever was behind it grey on grey the moment the host page was
19
- // not white. The surface colour keeps the chrome legible everywhere.
20
- outline: "ds:bg-[var(--background)] ds:text-foreground ds:border ds:border-border ds:hover:bg-muted/10 ds:active:bg-muted/20",
16
+ // Background paint is owned by the `background` variant (compound
17
+ // rules below) see-through by default so outline chrome works on
18
+ // tinted toolbars and shells; `background="surface"` opts into the
19
+ // painted `--background` fill for host pages where a transparent
20
+ // outline reads grey on grey.
21
+ outline: "ds:text-foreground ds:border ds:border-border ds:hover:bg-muted/10 ds:active:bg-muted/20",
21
22
  ghost: "ds:bg-transparent ds:text-foreground ds:hover:bg-muted/10 ds:active:bg-muted/20",
22
23
  destructive: "ds:bg-destructive ds:text-destructive-foreground ds:hover:bg-destructive-hover ds:active:opacity-90 ds:shadow-sm",
23
24
  // Outline chrome in the destructive palette — for dangerous secondary
24
25
  // actions (cancel appointment, remove item) that must read as risky
25
- // without the solid fill's weight.
26
- destructiveOutline: "ds:bg-transparent ds:text-destructive ds:border ds:border-destructive ds:hover:bg-destructive/10 ds:active:bg-destructive/20",
26
+ // without the solid fill's weight. Background paint comes from the
27
+ // `background` variant, same as `outline`.
28
+ destructiveOutline: "ds:text-destructive ds:border ds:border-destructive ds:hover:bg-destructive/10 ds:active:bg-destructive/20",
27
29
  link: "ds:bg-transparent ds:text-primary ds:underline-offset-4 ds:hover:underline ds:active:opacity-80 ds:p-0 ds:h-auto ds:rounded-none",
28
30
  // `tonal` is a container-contextual intent. The button carries a
29
31
  // `data-intent="tonal"` hook + baseline chrome (hover/active/shadow).
@@ -43,47 +45,75 @@ const C = L(
43
45
  hideLabel: {
44
46
  true: "ds:aspect-square ds:ps-0 ds:pe-0",
45
47
  false: ""
48
+ },
49
+ // Backing paint behind the outline intents. Only meaningful for
50
+ // `outline` / `destructiveOutline` (the compound rules below);
51
+ // ignored by the filled and deliberately see-through intents.
52
+ background: {
53
+ transparent: "",
54
+ surface: ""
46
55
  }
47
56
  },
57
+ // The outline intents carry NO bg utility of their own — the compound
58
+ // rules below are the single source of the paint, so `transparent` vs
59
+ // `surface` never depends on CSS order between competing bg-* classes.
60
+ compoundVariants: [
61
+ {
62
+ intent: ["outline", "destructiveOutline"],
63
+ background: "transparent",
64
+ className: "ds:bg-transparent"
65
+ },
66
+ {
67
+ // 1.6.1 — the painted fill 1.4.6 baked into `outline` is now this
68
+ // opt-in: it kept host pages legible but turned every toolbar
69
+ // icon button on a tinted shell into a solid white square.
70
+ intent: ["outline", "destructiveOutline"],
71
+ background: "surface",
72
+ className: "ds:bg-[var(--background)]"
73
+ }
74
+ ],
48
75
  defaultVariants: {
49
76
  intent: "primary",
50
77
  size: "md",
51
- hideLabel: !1
78
+ hideLabel: !1,
79
+ background: "transparent"
52
80
  }
53
81
  }
54
82
  ), S = z(
55
83
  ({
56
- intent: a,
84
+ intent: i,
57
85
  size: t,
58
- className: f,
59
- asChild: d = !1,
86
+ background: f,
87
+ className: v,
88
+ asChild: r = !1,
60
89
  loading: s = !1,
61
- startIcon: r,
62
- endIcon: o,
63
- flipIconInRtl: v = !1,
64
- hideLabel: p = !1,
90
+ startIcon: d,
91
+ endIcon: a,
92
+ flipIconInRtl: p = !1,
93
+ hideLabel: g = !1,
65
94
  disabled: h,
66
- children: i,
95
+ children: o,
67
96
  ...n
68
- }, g) => {
69
- const y = d ? B : "button", c = p && !d, x = !i && (r || o), w = n["aria-label"];
70
- k(() => {
71
- }, [x, w]);
72
- const l = t === "sm" ? 16 : t === "lg" ? 20 : 18, u = t === "sm" ? "ds:size-4" : t === "lg" ? "ds:size-5" : "ds:size-[18px]", b = v ? "ds:rtl:rotate-180" : "";
97
+ }, y) => {
98
+ const x = r ? B : "button", c = g && !r, k = !o && (d || a), w = n["aria-label"];
99
+ N(() => {
100
+ }, [k, w]);
101
+ const l = t === "sm" ? 16 : t === "lg" ? 20 : 18, u = t === "sm" ? "ds:size-4" : t === "lg" ? "ds:size-5" : "ds:size-[18px]", b = p ? "ds:rtl:rotate-180" : "";
73
102
  return /* @__PURE__ */ m(
74
- y,
103
+ x,
75
104
  {
76
- ref: g,
77
- className: C({
78
- intent: a,
105
+ ref: y,
106
+ className: O({
107
+ intent: i,
79
108
  size: t,
109
+ background: f,
80
110
  hideLabel: c,
81
- className: f
111
+ className: v
82
112
  }),
83
113
  disabled: h || s,
84
114
  "aria-busy": s || void 0,
85
115
  "data-component": "button",
86
- "data-intent": a ?? void 0,
116
+ "data-intent": i ?? void 0,
87
117
  ...n,
88
118
  children: [
89
119
  s && /* @__PURE__ */ m(
@@ -119,27 +149,27 @@ const C = L(
119
149
  ]
120
150
  }
121
151
  ),
122
- !s && r && /* @__PURE__ */ e(
152
+ !s && d && /* @__PURE__ */ e(
123
153
  "span",
124
154
  {
125
155
  "aria-hidden": "true",
126
156
  className: `ds:inline-flex ds:items-center ${u} ${b}`.trim(),
127
- children: r
157
+ children: d
128
158
  }
129
159
  ),
130
- d ? /* @__PURE__ */ e(N, { children: i }) : /* @__PURE__ */ e(
160
+ r ? /* @__PURE__ */ e(L, { children: o }) : /* @__PURE__ */ e(
131
161
  "span",
132
162
  {
133
163
  className: s || c ? "ds:sr-only" : "ds:inline-flex",
134
- children: i
164
+ children: o
135
165
  }
136
166
  ),
137
- !s && o && /* @__PURE__ */ e(
167
+ !s && a && /* @__PURE__ */ e(
138
168
  "span",
139
169
  {
140
170
  "aria-hidden": "true",
141
171
  className: `ds:inline-flex ds:items-center ${u} ${b}`.trim(),
142
- children: o
172
+ children: a
143
173
  }
144
174
  )
145
175
  ]
@@ -151,4 +181,4 @@ S.displayName = "Button";
151
181
  export {
152
182
  S as B
153
183
  };
154
- //# sourceMappingURL=button-BvNtqHAS.js.map
184
+ //# sourceMappingURL=button-nJaPh_HC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-nJaPh_HC.js","sources":["../../src/components/button/button.tsx"],"sourcesContent":["import { forwardRef, type ButtonHTMLAttributes, useEffect } from 'react';\nimport { Slot, Slottable } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nconst buttonVariants = cva(\n // `forced-colors:*` — under Windows High Contrast Mode the OS strips our\n // bg/text tokens, so `ghost` / `outline` / `link` would lose their shape.\n // We repaint a `ButtonBorder` edge + swap the focus ring to `CanvasText`\n // so the control and its focused state both survive HCM.\n 'ds:inline-flex ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)] ds:font-medium ds:transition-colors ds:rounded-[var(--radius-md)] ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid ds:focus-visible:outline-ring ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:border ds:forced-colors:border-[ButtonBorder] ds:forced-colors:focus-visible:outline-[CanvasText] ds:disabled:opacity-50 ds:disabled:cursor-not-allowed ds:aria-disabled:opacity-50 ds:aria-disabled:cursor-not-allowed ds:aria-busy:cursor-wait ds:relative',\n {\n variants: {\n intent: {\n primary:\n 'ds:bg-primary ds:text-primary-foreground ds:hover:bg-primary-hover ds:active:opacity-90 ds:shadow-sm',\n secondary:\n 'ds:bg-secondary ds:text-secondary-foreground ds:hover:bg-secondary-hover ds:active:opacity-90',\n // Background paint is owned by the `background` variant (compound\n // rules below) — see-through by default so outline chrome works on\n // tinted toolbars and shells; `background=\"surface\"` opts into the\n // painted `--background` fill for host pages where a transparent\n // outline reads grey on grey.\n outline:\n 'ds:text-foreground ds:border ds:border-border ds:hover:bg-muted/10 ds:active:bg-muted/20',\n ghost:\n 'ds:bg-transparent ds:text-foreground ds:hover:bg-muted/10 ds:active:bg-muted/20',\n destructive:\n 'ds:bg-destructive ds:text-destructive-foreground ds:hover:bg-destructive-hover ds:active:opacity-90 ds:shadow-sm',\n // Outline chrome in the destructive palette — for dangerous secondary\n // actions (cancel appointment, remove item) that must read as risky\n // without the solid fill's weight. Background paint comes from the\n // `background` variant, same as `outline`.\n destructiveOutline:\n 'ds:text-destructive ds:border ds:border-destructive ds:hover:bg-destructive/10 ds:active:bg-destructive/20',\n link: 'ds:bg-transparent ds:text-primary ds:underline-offset-4 ds:hover:underline ds:active:opacity-80 ds:p-0 ds:h-auto ds:rounded-none',\n // `tonal` is a container-contextual intent. The button carries a\n // `data-intent=\"tonal\"` hook + baseline chrome (hover/active/shadow).\n // The ambient container (e.g. `Alert`) paints the colour via a\n // descendant selector — `[&_[data-intent=tonal]]:bg-…` — so the\n // button picks up the surrounding tint (amber on `warning`, red on\n // `error`, etc.). Outside such a container the button falls back to\n // the primary palette so a loose `<Button intent=\"tonal\">` is never\n // invisible.\n tonal:\n 'ds:bg-primary ds:text-primary-foreground ds:hover:opacity-90 ds:active:opacity-80 ds:shadow-sm',\n },\n size: {\n sm: 'ds:h-8 ds:ps-3 ds:pe-3 ds:text-[length:var(--font-size-sm)] ds:min-h-[var(--min-target-size)] ds:sm:min-h-0 ds:before:absolute ds:before:inset-x-[calc((var(--min-target-size)-100%)/-2)] ds:before:inset-y-[calc((var(--min-target-size)-100%)/-2)] ds:before:content-[\"\"] ds:sm:before:hidden',\n md: 'ds:h-10 ds:ps-4 ds:pe-4 ds:text-[length:var(--font-size-base)]',\n lg: 'ds:h-12 ds:ps-6 ds:pe-6 ds:text-[length:var(--font-size-lg)]',\n },\n hideLabel: {\n true: 'ds:aspect-square ds:ps-0 ds:pe-0',\n false: '',\n },\n // Backing paint behind the outline intents. Only meaningful for\n // `outline` / `destructiveOutline` (the compound rules below);\n // ignored by the filled and deliberately see-through intents.\n background: {\n transparent: '',\n surface: '',\n },\n },\n // The outline intents carry NO bg utility of their own — the compound\n // rules below are the single source of the paint, so `transparent` vs\n // `surface` never depends on CSS order between competing bg-* classes.\n compoundVariants: [\n {\n intent: ['outline', 'destructiveOutline'],\n background: 'transparent',\n className: 'ds:bg-transparent',\n },\n {\n // 1.6.1 — the painted fill 1.4.6 baked into `outline` is now this\n // opt-in: it kept host pages legible but turned every toolbar\n // icon button on a tinted shell into a solid white square.\n intent: ['outline', 'destructiveOutline'],\n background: 'surface',\n className: 'ds:bg-[var(--background)]',\n },\n ],\n defaultVariants: {\n intent: 'primary',\n size: 'md',\n hideLabel: false,\n background: 'transparent',\n },\n },\n);\n\nexport interface ButtonProps\n extends\n ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean;\n loading?: boolean;\n startIcon?: React.ReactNode;\n endIcon?: React.ReactNode;\n /**\n * Mirror directional icons (arrows, chevrons) horizontally when the\n * interface renders in RTL. Default `false` — most icons (trash, calendar,\n * plus) must NOT flip. Opt in per call-site for arrow / chevron glyphs.\n */\n flipIconInRtl?: boolean;\n /**\n * Visually hide the label, leaving the icon(s) and a square footprint.\n * The children stay in the DOM screen-reader-only, so the accessible\n * name is preserved. Ignored with `asChild` (the label is slotted).\n */\n hideLabel?: boolean;\n /**\n * Backing paint behind `intent=\"outline\"` / `\"destructiveOutline\"`.\n * `'transparent'` (default) shows the surface behind the button —\n * correct on toolbars and tinted shells (app header, coloured bars).\n * `'surface'` paints `--background` behind the outline — for host\n * pages and split-button segments where a see-through outline reads\n * grey on grey. Ignored by the other intents.\n */\n background?: 'transparent' | 'surface';\n}\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n intent,\n size,\n background,\n className,\n asChild = false,\n loading = false,\n startIcon,\n endIcon,\n flipIconInRtl = false,\n hideLabel = false,\n disabled,\n children,\n ...props\n },\n ref,\n ) => {\n const Comp = asChild ? Slot : 'button';\n const labelHidden = hideLabel && !asChild;\n const isIconButton = !children && (startIcon || endIcon);\n\n const ariaLabel = props['aria-label'];\n useEffect(() => {\n if (import.meta.env.DEV && isIconButton && !ariaLabel) {\n console.warn(\n 'Button: Use IconButton for icon-only triggers to ensure accessibility and proper square sizing.',\n );\n }\n }, [isIconButton, ariaLabel]);\n\n const iconSize = size === 'sm' ? 16 : size === 'lg' ? 20 : 18;\n const iconSizeClass =\n size === 'sm'\n ? 'ds:size-4'\n : size === 'lg'\n ? 'ds:size-5'\n : 'ds:size-[18px]';\n const iconFlipClass = flipIconInRtl ? 'ds:rtl:rotate-180' : '';\n\n return (\n <Comp\n ref={ref}\n className={buttonVariants({\n intent,\n size,\n background,\n hideLabel: labelHidden,\n className,\n })}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n data-component=\"button\"\n data-intent={intent ?? undefined}\n {...props}\n >\n {loading && (\n <svg\n aria-hidden=\"true\"\n className=\"ds:animate-spin\"\n width={iconSize}\n height={iconSize}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.25\"\n strokeWidth=\"3\"\n />\n <path\n d=\"M22 12a10 10 0 0 1-10 10\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n {!loading && startIcon && (\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ${iconSizeClass} ${iconFlipClass}`.trim()}\n >\n {startIcon}\n </span>\n )}\n {asChild ? (\n <Slottable>{children}</Slottable>\n ) : (\n <span\n className={loading || labelHidden ? 'ds:sr-only' : 'ds:inline-flex'}\n >\n {children}\n </span>\n )}\n {!loading && endIcon && (\n <span\n aria-hidden=\"true\"\n className={`ds:inline-flex ds:items-center ${iconSizeClass} ${iconFlipClass}`.trim()}\n >\n {endIcon}\n </span>\n )}\n </Comp>\n );\n },\n);\n\nButton.displayName = 'Button';\n"],"names":["buttonVariants","cva","Button","forwardRef","intent","size","background","className","asChild","loading","startIcon","endIcon","flipIconInRtl","hideLabel","disabled","children","props","ref","Comp","Slot","labelHidden","isIconButton","ariaLabel","useEffect","iconSize","iconSizeClass","iconFlipClass","jsxs","jsx","Slottable"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { P as A } from "./progress-CK8otcQ-.js";
7
7
  import { T as C } from "./timestamp-BV2lC-wV.js";
8
8
  import { T as L } from "./transaction-chip-DJCstquX.js";
9
9
  import { A as O, b as G, c as Y, a as $ } from "./accordion-C11v9ouP.js";
10
- import { C as q } from "./care-plan-entry-card-ChWRMfMw.js";
10
+ import { C as q } from "./care-plan-entry-card-CMpoeNkb.js";
11
11
  import { u as J } from "./registry-DvAUVLHh.js";
12
12
  import { C as Q, e as W } from "./entity-card-9_62gY7l.js";
13
13
  import { i as X } from "./is-safe-url-DkETxeHz.js";
@@ -253,4 +253,4 @@ export {
253
253
  de as C,
254
254
  Z as c
255
255
  };
256
- //# sourceMappingURL=care-plan-card-CehAU7F_.js.map
256
+ //# sourceMappingURL=care-plan-card-DQjVRDxO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"care-plan-card-CehAU7F_.js","sources":["../../src/components/care-plan-card/care-plan-card.agent.ts","../../src/components/care-plan-card/care-plan-card.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CarePlanCard. */\n/* */\n/* Read-only surface: expose the plan's lifecycle state and line-progress */\n/* counts so an agent can introspect a care plan's status. State enum + */\n/* counts only — never the plan name, operator, treatment names, or any */\n/* patient identity. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CarePlanCardHandle } from './care-plan-card';\n\nexport const carePlanCardAgent: AgentAdapter<CarePlanCardHandle> = {\n id: 'care-plan-card',\n // `expand` is host-delegated: the treatment-line list is an in-component\n // Accordion the user (or a host) drives directly — there is no handle\n // method for it, so no backing action is registered. `view_change` was\n // dropped: the card has no view modes to switch between.\n capabilities: ['expand'],\n state: {\n state: {\n type: \"'estimate' | 'accepted' | 'discarded' | 'closed'\",\n descriptionKey: 'ui.agent.carePlanCard.state.state',\n description:\n 'The plan lifecycle state. Enum value only — never the localised label or any PHI.',\n read: (handle) => handle.getState(),\n },\n progress: {\n type: '{ done: number; total: number }',\n descriptionKey: 'ui.agent.carePlanCard.state.progress',\n description:\n 'Line progress as done / total counts. Counts only — never treatment names or operator identity.',\n read: (handle) => handle.getProgress(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'care-plan-card',\n description: 'Marks the CarePlanCard root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop. Addresses a specific plan.',\n },\n },\n};\n","import { forwardRef, useId, type HTMLAttributes } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Badge } from '../badge/badge';\nimport { Link } from '../link/link';\nimport { Progress } from '../progress/progress';\nimport { Timestamp } from '../timestamp/timestamp';\nimport { TransactionChip } from '../transaction-chip/transaction-chip';\nimport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from '../accordion/accordion';\nimport {\n CarePlanEntryCard,\n type CarePlanEntryCardProps,\n} from '../care-plan-entry-card';\nimport {\n entitySurfaceVariants,\n CARE_PLAN_STATE_BADGE,\n isSafeEntityUrl,\n type CarePlanState,\n} from '../_shared/entity-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { carePlanCardAgent } from './care-plan-card.agent';\n\n/* -------------------------------------------------------------------- */\n/* CarePlanCard */\n/* */\n/* The summary card for a whole care plan / estimate (\"preventivo\"). */\n/* Replaces the hand-rolled platform care-plan header that interleaves */\n/* the plan number + name, a lifecycle badge, the financial figures */\n/* (billed / due / overdue), an acceptance/closure date, a phase- */\n/* progress bar, an optional deep link, and an expandable list of the */\n/* plan's treatment lines. */\n/* */\n/* Composes: entitySurfaceVariants (shared card surface) + Badge */\n/* (lifecycle state) + TransactionChip (money) + Progress (done/total) */\n/* + Timestamp (dates) + Link (deep link) + Accordion (entries rendered */\n/* as <CarePlanEntryCard> rows). */\n/* */\n/* All visible text flows through useTranslation('ui') against the */\n/* `carePlanCard.*` namespace — the lifecycle state is ALWAYS shown as a */\n/* localised label, never the raw server string. Identifiers + structural */\n/* state only reach the agent layer — never patient identity. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/**\n * A single treatment line within the plan. Each ref is forwarded straight\n * to a `<CarePlanEntryCard>` rendered inside the Accordion. `entryId` keys\n * the row and surfaces as the line's `data-component-id`.\n */\nexport interface CarePlanEntryRef extends Omit<\n CarePlanEntryCardProps,\n 'id' | 'surface'\n> {\n /** Stable line id — identifier only, never PHI. */\n entryId: string;\n}\n\n/** Financial figures for the plan, all amounts in integer cents. */\nexport interface CarePlanAmounts {\n /** Full list price in cents (non-negative). */\n priceCents?: number;\n /** Discounted / agreed price in cents (non-negative). */\n discountedPriceCents?: number;\n /** Amount already invoiced in cents (non-negative). */\n billedAmountCents?: number;\n /** Outstanding amount still due in cents (non-negative). */\n dueCents?: number;\n /** How many days the due amount is overdue (non-negative). */\n overdueDays?: number;\n}\n\n/** Phase / line progress for the plan. */\nexport interface CarePlanProgress {\n /** Number of executed / completed lines. */\n done: number;\n /** Total number of lines. */\n total: number;\n}\n\n/** Lifecycle dates for the plan, all ISO-8601 strings. */\nexport interface CarePlanDates {\n /** When the plan was accepted. */\n acceptedIso?: string;\n /** When the plan was closed. */\n closedIso?: string;\n /** When the plan was discarded / rejected. */\n discardedIso?: string;\n}\n\n/** Curated read-only handle exposed to the agent registry. */\nexport interface CarePlanCardHandle {\n /** The plan's lifecycle state. */\n getState: () => CarePlanState;\n /** Line progress as `{ done, total }` — counts only, no PHI. */\n getProgress: () => { done: number; total: number };\n}\n\nexport interface CarePlanCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'aria-label' | 'title' | 'children'\n> {\n /**\n * Stable instance id — surfaced as `data-component-id` for the agent\n * registry and mirrored to the DOM `id`; also wires the heading ↔ region\n * relationship.\n */\n id?: string;\n /** Plan number (e.g. estimate number). Rendered beside the name. */\n number: string | number;\n /** Plan name / title. Rendered as the card heading. */\n name?: string;\n /** Lifecycle state — drives a localised Badge label. */\n state: CarePlanState;\n /** Optional deep link to the full plan. Guarded by `isSafeEntityUrl`. */\n url?: string;\n /** Financial figures (billed / due / overdue …). */\n amounts?: CarePlanAmounts;\n /** Line progress (done / total). */\n progress?: CarePlanProgress;\n /** Lifecycle dates (accepted / closed / discarded). */\n dates?: CarePlanDates;\n /** Reason the plan was discarded — shown only when `state === 'discarded'`. */\n discardReason?: string;\n /**\n * Dentition the plan applies to — forwarded to each entry card's tooth\n * display where relevant. Structural only.\n */\n dentitionMode?: 'permanent' | 'deciduous';\n /** Treatment lines — rendered as `<CarePlanEntryCard>` rows in an Accordion. */\n entries?: CarePlanEntryRef[];\n /** BCP 47 locale override for dates / currency. Defaults to i18n.language. */\n locale?: string;\n /** ISO 4217 currency code for the money chips. Defaults to `EUR`. */\n currency?: string;\n /**\n * `elevated` (default) paints the kit card chrome; `flat` drops it for use\n * inside an existing Card / Sheet.\n */\n surface?: 'flat' | 'elevated';\n /** Fires when the plan deep link / heading is activated. */\n onActivate?: () => void;\n /** Accessible label override for the plan region. */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\nconst DEFAULT_CURRENCY = 'EUR';\n\n/**\n * English fallbacks for the lifecycle-state labels. The canonical strings\n * live in the `ui.carePlanCard.state.*` bundle; these inline defaults guard\n * against a stale / not-yet-wired bundle so a raw key never reaches the UI.\n */\nconst STATE_LABEL_FALLBACK: Record<CarePlanState, string> = {\n estimate: 'Estimate',\n accepted: 'Accepted',\n discarded: 'Discarded',\n closed: 'Closed',\n};\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const CarePlanCard = forwardRef<HTMLDivElement, CarePlanCardProps>(\n (\n {\n id,\n number,\n name,\n state,\n url,\n amounts,\n progress,\n dates,\n discardReason,\n dentitionMode: _dentitionMode,\n entries,\n locale,\n currency = DEFAULT_CURRENCY,\n surface = 'elevated',\n onActivate,\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const headingId = useId();\n const progressLabelId = useId();\n const activeLocale = locale ?? i18n.language ?? 'en';\n\n useAgentRegistration(\n carePlanCardAgent,\n {\n getState: () => state,\n getProgress: () => ({\n done: progress?.done ?? 0,\n total: progress?.total ?? 0,\n }),\n },\n id,\n );\n\n const stateLabel = t(`carePlanCard.state.${state}`, {\n defaultValue: STATE_LABEL_FALLBACK[state],\n });\n const stateBadgeVariant = CARE_PLAN_STATE_BADGE[state];\n const hasSafeUrl = !!url && isSafeEntityUrl(url);\n const hasEntries = !!entries && entries.length > 0;\n\n // Money: prefer the outstanding \"due\" chip; mark it overdue when it has\n // run past its term. Anything billed shows a settled chip alongside.\n const dueCents = amounts?.dueCents;\n const billedCents = amounts?.billedAmountCents;\n const overdueDays = amounts?.overdueDays;\n const isOverdue =\n typeof overdueDays === 'number' &&\n overdueDays > 0 &&\n typeof dueCents === 'number' &&\n dueCents > 0;\n\n const headingNode = (\n <h3\n id={headingId}\n className=\"type-title-card ds:m-0 ds:text-[color:var(--foreground)]\"\n >\n {name ?? t('carePlanCard.untitled', 'Untitled plan')}\n </h3>\n );\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : headingId}\n data-component=\"care-plan-card\"\n data-component-id={id}\n data-state={state}\n id={id}\n className={entitySurfaceVariants({ surface, className })}\n {...rest}\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {/* Heading row: number + name + lifecycle badge */}\n <div className=\"ds:flex ds:items-start ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)] ds:tabular-nums\">\n {t('carePlanCard.number', {\n number,\n defaultValue: 'Plan #{{number}}',\n })}\n </span>\n {hasSafeUrl ? (\n <Link\n href={url as string}\n weight=\"strong\"\n onClick={(event) => {\n if (\n event.defaultPrevented ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey\n ) {\n return;\n }\n onActivate?.();\n }}\n >\n {headingNode}\n </Link>\n ) : (\n headingNode\n )}\n </div>\n\n <Badge\n variant={stateBadgeVariant}\n size=\"sm\"\n withDot\n className=\"ds:shrink-0\"\n >\n {stateLabel}\n </Badge>\n </div>\n\n {/* Discard reason — only when discarded */}\n {state === 'discarded' && discardReason ? (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n <span className=\"ds:font-medium ds:text-[color:var(--foreground)]\">\n {t('carePlanCard.discardReasonLabel', 'Discard reason:')}\n </span>{' '}\n {discardReason}\n </p>\n ) : null}\n\n {/* Lifecycle date line */}\n {dates ? (\n <div className=\"type-body-sm ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-md)] ds:text-[color:var(--muted-foreground)]\">\n {dates.acceptedIso ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span>{t('carePlanCard.date.accepted', 'Accepted')}</span>\n <Timestamp\n value={dates.acceptedIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n </span>\n ) : null}\n {dates.closedIso ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span>{t('carePlanCard.date.closed', 'Closed')}</span>\n <Timestamp\n value={dates.closedIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n </span>\n ) : null}\n {dates.discardedIso ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span>{t('carePlanCard.date.discarded', 'Discarded')}</span>\n <Timestamp\n value={dates.discardedIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n </span>\n ) : null}\n </div>\n ) : null}\n\n {/* Money: due / overdue / billed chips */}\n {typeof dueCents === 'number' || typeof billedCents === 'number' ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n {typeof dueCents === 'number' && dueCents > 0 ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <TransactionChip\n state=\"debt\"\n amount={dueCents / 100}\n currency={currency}\n locale={activeLocale}\n showLabel\n size=\"md\"\n />\n {isOverdue ? (\n <Badge variant=\"error\" size=\"sm\" withDot>\n {t('carePlanCard.overdue', {\n count: overdueDays,\n defaultValue: 'Overdue {{count}}d',\n })}\n </Badge>\n ) : null}\n </div>\n ) : null}\n {typeof billedCents === 'number' && billedCents > 0 ? (\n <TransactionChip\n state=\"settled\"\n amount={billedCents / 100}\n currency={currency}\n locale={activeLocale}\n showLabel\n size=\"md\"\n />\n ) : null}\n </div>\n ) : null}\n\n {/* Line / phase progress */}\n {progress && progress.total > 0 ? (\n <Progress\n value={progress.done}\n max={progress.total}\n size=\"sm\"\n aria-label={t('carePlanCard.progressLabel', {\n done: progress.done,\n total: progress.total,\n defaultValue: 'Progress: {{done}} of {{total}} completed',\n })}\n >\n <div className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <Progress.Label id={progressLabelId}>\n {t('carePlanCard.progressHeading', 'Progress')}\n </Progress.Label>\n <span className=\"type-body-sm ds:tabular-nums ds:text-[color:var(--muted-foreground)]\">\n {t('carePlanCard.progressCount', {\n done: progress.done,\n total: progress.total,\n defaultValue: '{{done}} / {{total}}',\n })}\n </span>\n </div>\n </Progress>\n ) : null}\n\n {/* Entries — expandable list of treatment lines */}\n {hasEntries ? (\n <Accordion type=\"single\" collapsible variant=\"separated\">\n <AccordionItem value=\"entries\">\n <AccordionTrigger>\n {t('carePlanCard.entries.toggle', {\n count: entries.length,\n defaultValue: 'Treatment lines ({{count}})',\n })}\n </AccordionTrigger>\n <AccordionContent>\n <ul className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0\">\n {entries.map(({ entryId, ...entry }) => (\n <li key={entryId}>\n <CarePlanEntryCard\n id={entryId}\n surface=\"flat\"\n locale={activeLocale}\n currency={currency}\n {...entry}\n />\n </li>\n ))}\n </ul>\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n ) : null}\n </div>\n </div>\n );\n },\n);\n\nCarePlanCard.displayName = 'CarePlanCard';\n\nexport type CarePlanCardSurface = NonNullable<\n VariantProps<typeof entitySurfaceVariants>['surface']\n>;\n\n/** The dentition the plan applies to. */\nexport type CarePlanCardDentition = NonNullable<\n CarePlanCardProps['dentitionMode']\n>;\n\n/* Re-export the shared lifecycle-state type for downstream typing. */\nexport type { CarePlanState } from '../_shared/entity-card';\n"],"names":["carePlanCardAgent","handle","DEFAULT_CURRENCY","STATE_LABEL_FALLBACK","CarePlanCard","forwardRef","id","number","name","state","url","amounts","progress","dates","discardReason","_dentitionMode","entries","locale","currency","surface","onActivate","ariaLabel","className","rest","ref","t","i18n","useTranslation","headingId","useId","progressLabelId","activeLocale","useAgentRegistration","stateLabel","stateBadgeVariant","CARE_PLAN_STATE_BADGE","hasSafeUrl","isSafeEntityUrl","hasEntries","dueCents","billedCents","overdueDays","isOverdue","headingNode","jsx","entitySurfaceVariants","jsxs","Link","event","Badge","Timestamp","TransactionChip","Progress","Accordion","AccordionItem","AccordionTrigger","AccordionContent","entryId","entry","CarePlanEntryCard"],"mappings":"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"}
1
+ {"version":3,"file":"care-plan-card-DQjVRDxO.js","sources":["../../src/components/care-plan-card/care-plan-card.agent.ts","../../src/components/care-plan-card/care-plan-card.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — CarePlanCard. */\n/* */\n/* Read-only surface: expose the plan's lifecycle state and line-progress */\n/* counts so an agent can introspect a care plan's status. State enum + */\n/* counts only — never the plan name, operator, treatment names, or any */\n/* patient identity. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { CarePlanCardHandle } from './care-plan-card';\n\nexport const carePlanCardAgent: AgentAdapter<CarePlanCardHandle> = {\n id: 'care-plan-card',\n // `expand` is host-delegated: the treatment-line list is an in-component\n // Accordion the user (or a host) drives directly — there is no handle\n // method for it, so no backing action is registered. `view_change` was\n // dropped: the card has no view modes to switch between.\n capabilities: ['expand'],\n state: {\n state: {\n type: \"'estimate' | 'accepted' | 'discarded' | 'closed'\",\n descriptionKey: 'ui.agent.carePlanCard.state.state',\n description:\n 'The plan lifecycle state. Enum value only — never the localised label or any PHI.',\n read: (handle) => handle.getState(),\n },\n progress: {\n type: '{ done: number; total: number }',\n descriptionKey: 'ui.agent.carePlanCard.state.progress',\n description:\n 'Line progress as done / total counts. Counts only — never treatment names or operator identity.',\n read: (handle) => handle.getProgress(),\n },\n },\n actions: {},\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'care-plan-card',\n description: 'Marks the CarePlanCard root region.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop. Addresses a specific plan.',\n },\n },\n};\n","import { forwardRef, useId, type HTMLAttributes } from 'react';\nimport { type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Badge } from '../badge/badge';\nimport { Link } from '../link/link';\nimport { Progress } from '../progress/progress';\nimport { Timestamp } from '../timestamp/timestamp';\nimport { TransactionChip } from '../transaction-chip/transaction-chip';\nimport {\n Accordion,\n AccordionItem,\n AccordionTrigger,\n AccordionContent,\n} from '../accordion/accordion';\nimport {\n CarePlanEntryCard,\n type CarePlanEntryCardProps,\n} from '../care-plan-entry-card';\nimport {\n entitySurfaceVariants,\n CARE_PLAN_STATE_BADGE,\n isSafeEntityUrl,\n type CarePlanState,\n} from '../_shared/entity-card';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { carePlanCardAgent } from './care-plan-card.agent';\n\n/* -------------------------------------------------------------------- */\n/* CarePlanCard */\n/* */\n/* The summary card for a whole care plan / estimate (\"preventivo\"). */\n/* Replaces the hand-rolled platform care-plan header that interleaves */\n/* the plan number + name, a lifecycle badge, the financial figures */\n/* (billed / due / overdue), an acceptance/closure date, a phase- */\n/* progress bar, an optional deep link, and an expandable list of the */\n/* plan's treatment lines. */\n/* */\n/* Composes: entitySurfaceVariants (shared card surface) + Badge */\n/* (lifecycle state) + TransactionChip (money) + Progress (done/total) */\n/* + Timestamp (dates) + Link (deep link) + Accordion (entries rendered */\n/* as <CarePlanEntryCard> rows). */\n/* */\n/* All visible text flows through useTranslation('ui') against the */\n/* `carePlanCard.*` namespace — the lifecycle state is ALWAYS shown as a */\n/* localised label, never the raw server string. Identifiers + structural */\n/* state only reach the agent layer — never patient identity. */\n/* -------------------------------------------------------------------- */\n\n/* -------------------------------------------------------------------- */\n/* Public types */\n/* -------------------------------------------------------------------- */\n\n/**\n * A single treatment line within the plan. Each ref is forwarded straight\n * to a `<CarePlanEntryCard>` rendered inside the Accordion. `entryId` keys\n * the row and surfaces as the line's `data-component-id`.\n */\nexport interface CarePlanEntryRef extends Omit<\n CarePlanEntryCardProps,\n 'id' | 'surface'\n> {\n /** Stable line id — identifier only, never PHI. */\n entryId: string;\n}\n\n/** Financial figures for the plan, all amounts in integer cents. */\nexport interface CarePlanAmounts {\n /** Full list price in cents (non-negative). */\n priceCents?: number;\n /** Discounted / agreed price in cents (non-negative). */\n discountedPriceCents?: number;\n /** Amount already invoiced in cents (non-negative). */\n billedAmountCents?: number;\n /** Outstanding amount still due in cents (non-negative). */\n dueCents?: number;\n /** How many days the due amount is overdue (non-negative). */\n overdueDays?: number;\n}\n\n/** Phase / line progress for the plan. */\nexport interface CarePlanProgress {\n /** Number of executed / completed lines. */\n done: number;\n /** Total number of lines. */\n total: number;\n}\n\n/** Lifecycle dates for the plan, all ISO-8601 strings. */\nexport interface CarePlanDates {\n /** When the plan was accepted. */\n acceptedIso?: string;\n /** When the plan was closed. */\n closedIso?: string;\n /** When the plan was discarded / rejected. */\n discardedIso?: string;\n}\n\n/** Curated read-only handle exposed to the agent registry. */\nexport interface CarePlanCardHandle {\n /** The plan's lifecycle state. */\n getState: () => CarePlanState;\n /** Line progress as `{ done, total }` — counts only, no PHI. */\n getProgress: () => { done: number; total: number };\n}\n\nexport interface CarePlanCardProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'aria-label' | 'title' | 'children'\n> {\n /**\n * Stable instance id — surfaced as `data-component-id` for the agent\n * registry and mirrored to the DOM `id`; also wires the heading ↔ region\n * relationship.\n */\n id?: string;\n /** Plan number (e.g. estimate number). Rendered beside the name. */\n number: string | number;\n /** Plan name / title. Rendered as the card heading. */\n name?: string;\n /** Lifecycle state — drives a localised Badge label. */\n state: CarePlanState;\n /** Optional deep link to the full plan. Guarded by `isSafeEntityUrl`. */\n url?: string;\n /** Financial figures (billed / due / overdue …). */\n amounts?: CarePlanAmounts;\n /** Line progress (done / total). */\n progress?: CarePlanProgress;\n /** Lifecycle dates (accepted / closed / discarded). */\n dates?: CarePlanDates;\n /** Reason the plan was discarded — shown only when `state === 'discarded'`. */\n discardReason?: string;\n /**\n * Dentition the plan applies to — forwarded to each entry card's tooth\n * display where relevant. Structural only.\n */\n dentitionMode?: 'permanent' | 'deciduous';\n /** Treatment lines — rendered as `<CarePlanEntryCard>` rows in an Accordion. */\n entries?: CarePlanEntryRef[];\n /** BCP 47 locale override for dates / currency. Defaults to i18n.language. */\n locale?: string;\n /** ISO 4217 currency code for the money chips. Defaults to `EUR`. */\n currency?: string;\n /**\n * `elevated` (default) paints the kit card chrome; `flat` drops it for use\n * inside an existing Card / Sheet.\n */\n surface?: 'flat' | 'elevated';\n /** Fires when the plan deep link / heading is activated. */\n onActivate?: () => void;\n /** Accessible label override for the plan region. */\n 'aria-label'?: string;\n}\n\n/* -------------------------------------------------------------------- */\n/* Helpers */\n/* -------------------------------------------------------------------- */\n\nconst DEFAULT_CURRENCY = 'EUR';\n\n/**\n * English fallbacks for the lifecycle-state labels. The canonical strings\n * live in the `ui.carePlanCard.state.*` bundle; these inline defaults guard\n * against a stale / not-yet-wired bundle so a raw key never reaches the UI.\n */\nconst STATE_LABEL_FALLBACK: Record<CarePlanState, string> = {\n estimate: 'Estimate',\n accepted: 'Accepted',\n discarded: 'Discarded',\n closed: 'Closed',\n};\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\nexport const CarePlanCard = forwardRef<HTMLDivElement, CarePlanCardProps>(\n (\n {\n id,\n number,\n name,\n state,\n url,\n amounts,\n progress,\n dates,\n discardReason,\n dentitionMode: _dentitionMode,\n entries,\n locale,\n currency = DEFAULT_CURRENCY,\n surface = 'elevated',\n onActivate,\n 'aria-label': ariaLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const headingId = useId();\n const progressLabelId = useId();\n const activeLocale = locale ?? i18n.language ?? 'en';\n\n useAgentRegistration(\n carePlanCardAgent,\n {\n getState: () => state,\n getProgress: () => ({\n done: progress?.done ?? 0,\n total: progress?.total ?? 0,\n }),\n },\n id,\n );\n\n const stateLabel = t(`carePlanCard.state.${state}`, {\n defaultValue: STATE_LABEL_FALLBACK[state],\n });\n const stateBadgeVariant = CARE_PLAN_STATE_BADGE[state];\n const hasSafeUrl = !!url && isSafeEntityUrl(url);\n const hasEntries = !!entries && entries.length > 0;\n\n // Money: prefer the outstanding \"due\" chip; mark it overdue when it has\n // run past its term. Anything billed shows a settled chip alongside.\n const dueCents = amounts?.dueCents;\n const billedCents = amounts?.billedAmountCents;\n const overdueDays = amounts?.overdueDays;\n const isOverdue =\n typeof overdueDays === 'number' &&\n overdueDays > 0 &&\n typeof dueCents === 'number' &&\n dueCents > 0;\n\n const headingNode = (\n <h3\n id={headingId}\n className=\"type-title-card ds:m-0 ds:text-[color:var(--foreground)]\"\n >\n {name ?? t('carePlanCard.untitled', 'Untitled plan')}\n </h3>\n );\n\n return (\n <div\n ref={ref}\n role=\"region\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : headingId}\n data-component=\"care-plan-card\"\n data-component-id={id}\n data-state={state}\n id={id}\n className={entitySurfaceVariants({ surface, className })}\n {...rest}\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {/* Heading row: number + name + lifecycle badge */}\n <div className=\"ds:flex ds:items-start ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:flex ds:min-w-0 ds:flex-1 ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)] ds:tabular-nums\">\n {t('carePlanCard.number', {\n number,\n defaultValue: 'Plan #{{number}}',\n })}\n </span>\n {hasSafeUrl ? (\n <Link\n href={url as string}\n weight=\"strong\"\n onClick={(event) => {\n if (\n event.defaultPrevented ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey\n ) {\n return;\n }\n onActivate?.();\n }}\n >\n {headingNode}\n </Link>\n ) : (\n headingNode\n )}\n </div>\n\n <Badge\n variant={stateBadgeVariant}\n size=\"sm\"\n withDot\n className=\"ds:shrink-0\"\n >\n {stateLabel}\n </Badge>\n </div>\n\n {/* Discard reason — only when discarded */}\n {state === 'discarded' && discardReason ? (\n <p className=\"type-body-sm ds:m-0 ds:text-[color:var(--muted-foreground)]\">\n <span className=\"ds:font-medium ds:text-[color:var(--foreground)]\">\n {t('carePlanCard.discardReasonLabel', 'Discard reason:')}\n </span>{' '}\n {discardReason}\n </p>\n ) : null}\n\n {/* Lifecycle date line */}\n {dates ? (\n <div className=\"type-body-sm ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-md)] ds:text-[color:var(--muted-foreground)]\">\n {dates.acceptedIso ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span>{t('carePlanCard.date.accepted', 'Accepted')}</span>\n <Timestamp\n value={dates.acceptedIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n </span>\n ) : null}\n {dates.closedIso ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span>{t('carePlanCard.date.closed', 'Closed')}</span>\n <Timestamp\n value={dates.closedIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n </span>\n ) : null}\n {dates.discardedIso ? (\n <span className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <span>{t('carePlanCard.date.discarded', 'Discarded')}</span>\n <Timestamp\n value={dates.discardedIso}\n format=\"absolute\"\n locale={activeLocale}\n />\n </span>\n ) : null}\n </div>\n ) : null}\n\n {/* Money: due / overdue / billed chips */}\n {typeof dueCents === 'number' || typeof billedCents === 'number' ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n {typeof dueCents === 'number' && dueCents > 0 ? (\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-xs)]\">\n <TransactionChip\n state=\"debt\"\n amount={dueCents / 100}\n currency={currency}\n locale={activeLocale}\n showLabel\n size=\"md\"\n />\n {isOverdue ? (\n <Badge variant=\"error\" size=\"sm\" withDot>\n {t('carePlanCard.overdue', {\n count: overdueDays,\n defaultValue: 'Overdue {{count}}d',\n })}\n </Badge>\n ) : null}\n </div>\n ) : null}\n {typeof billedCents === 'number' && billedCents > 0 ? (\n <TransactionChip\n state=\"settled\"\n amount={billedCents / 100}\n currency={currency}\n locale={activeLocale}\n showLabel\n size=\"md\"\n />\n ) : null}\n </div>\n ) : null}\n\n {/* Line / phase progress */}\n {progress && progress.total > 0 ? (\n <Progress\n value={progress.done}\n max={progress.total}\n size=\"sm\"\n aria-label={t('carePlanCard.progressLabel', {\n done: progress.done,\n total: progress.total,\n defaultValue: 'Progress: {{done}} of {{total}} completed',\n })}\n >\n <div className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <Progress.Label id={progressLabelId}>\n {t('carePlanCard.progressHeading', 'Progress')}\n </Progress.Label>\n <span className=\"type-body-sm ds:tabular-nums ds:text-[color:var(--muted-foreground)]\">\n {t('carePlanCard.progressCount', {\n done: progress.done,\n total: progress.total,\n defaultValue: '{{done}} / {{total}}',\n })}\n </span>\n </div>\n </Progress>\n ) : null}\n\n {/* Entries — expandable list of treatment lines */}\n {hasEntries ? (\n <Accordion type=\"single\" collapsible variant=\"separated\">\n <AccordionItem value=\"entries\">\n <AccordionTrigger>\n {t('carePlanCard.entries.toggle', {\n count: entries.length,\n defaultValue: 'Treatment lines ({{count}})',\n })}\n </AccordionTrigger>\n <AccordionContent>\n <ul className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0\">\n {entries.map(({ entryId, ...entry }) => (\n <li key={entryId}>\n <CarePlanEntryCard\n id={entryId}\n surface=\"flat\"\n locale={activeLocale}\n currency={currency}\n {...entry}\n />\n </li>\n ))}\n </ul>\n </AccordionContent>\n </AccordionItem>\n </Accordion>\n ) : null}\n </div>\n </div>\n );\n },\n);\n\nCarePlanCard.displayName = 'CarePlanCard';\n\nexport type CarePlanCardSurface = NonNullable<\n VariantProps<typeof entitySurfaceVariants>['surface']\n>;\n\n/** The dentition the plan applies to. */\nexport type CarePlanCardDentition = NonNullable<\n CarePlanCardProps['dentitionMode']\n>;\n\n/* Re-export the shared lifecycle-state type for downstream typing. */\nexport type { CarePlanState } from '../_shared/entity-card';\n"],"names":["carePlanCardAgent","handle","DEFAULT_CURRENCY","STATE_LABEL_FALLBACK","CarePlanCard","forwardRef","id","number","name","state","url","amounts","progress","dates","discardReason","_dentitionMode","entries","locale","currency","surface","onActivate","ariaLabel","className","rest","ref","t","i18n","useTranslation","headingId","useId","progressLabelId","activeLocale","useAgentRegistration","stateLabel","stateBadgeVariant","CARE_PLAN_STATE_BADGE","hasSafeUrl","isSafeEntityUrl","hasEntries","dueCents","billedCents","overdueDays","isOverdue","headingNode","jsx","entitySurfaceVariants","jsxs","Link","event","Badge","Timestamp","TransactionChip","Progress","Accordion","AccordionItem","AccordionTrigger","AccordionContent","entryId","entry","CarePlanEntryCard"],"mappings":"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"}
@@ -6,7 +6,7 @@ import { P as O } from "./progress-CK8otcQ-.js";
6
6
  import { T as q } from "./tag-3wgkwwDB.js";
7
7
  import { T as b } from "./timestamp-BV2lC-wV.js";
8
8
  import { T as G } from "./transaction-chip-DJCstquX.js";
9
- import { T as J } from "./tooth-scheme-BPXE1_3N.js";
9
+ import { T as J } from "./tooth-scheme-WdyVymQ1.js";
10
10
  import { C as Q, b as X, a as Z } from "./collapsible-CTjxzGuF.js";
11
11
  import { u as ee } from "./registry-DvAUVLHh.js";
12
12
  import { C as ae } from "./chevron-down-DWE7GSq9.js";
@@ -319,4 +319,4 @@ export {
319
319
  le as C,
320
320
  re as c
321
321
  };
322
- //# sourceMappingURL=care-plan-entry-card-ChWRMfMw.js.map
322
+ //# sourceMappingURL=care-plan-entry-card-CMpoeNkb.js.map