@alfadocs/ui-kit-debug 1.50.1 → 1.51.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 (513) hide show
  1. package/dist/_chunks/{actions-cell-renderer-DMittsR3.js → actions-cell-renderer-DBI33cMp.js} +4 -4
  2. package/dist/_chunks/{actions-cell-renderer-DMittsR3.js.map → actions-cell-renderer-DBI33cMp.js.map} +1 -1
  3. package/dist/_chunks/{agenda-tray-BhZASyJm.js → agenda-tray-CGhEEnFE.js} +3 -3
  4. package/dist/_chunks/{agenda-tray-BhZASyJm.js.map → agenda-tray-CGhEEnFE.js.map} +1 -1
  5. package/dist/_chunks/{ai-credits-notice-C-kz_RrY.js → ai-credits-notice-C9K_ley1.js} +3 -3
  6. package/dist/_chunks/{ai-credits-notice-C-kz_RrY.js.map → ai-credits-notice-C9K_ley1.js.map} +1 -1
  7. package/dist/_chunks/{ai-permission-notice-BRZeS3mT.js → ai-permission-notice-DMG1o4Qa.js} +2 -2
  8. package/dist/_chunks/{ai-permission-notice-BRZeS3mT.js.map → ai-permission-notice-DMG1o4Qa.js.map} +1 -1
  9. package/dist/_chunks/{ai-prompt-input-CxvnXsAs.js → ai-prompt-input-ucwO-z8g.js} +2 -2
  10. package/dist/_chunks/{ai-prompt-input-CxvnXsAs.js.map → ai-prompt-input-ucwO-z8g.js.map} +1 -1
  11. package/dist/_chunks/{alia-sidebar-Dx-oeOV2.js → alia-sidebar-K3gaNH94.js} +7 -7
  12. package/dist/_chunks/{alia-sidebar-Dx-oeOV2.js.map → alia-sidebar-K3gaNH94.js.map} +1 -1
  13. package/dist/_chunks/{anamnesis-card-D8Si-2GV.js → anamnesis-card-CPjry4ur.js} +2 -2
  14. package/dist/_chunks/{anamnesis-card-D8Si-2GV.js.map → anamnesis-card-CPjry4ur.js.map} +1 -1
  15. package/dist/_chunks/{anamnesis-summary-rows-CZirLRuv.js → anamnesis-summary-rows-D9LZZHLw.js} +9 -9
  16. package/dist/_chunks/{anamnesis-summary-rows-CZirLRuv.js.map → anamnesis-summary-rows-D9LZZHLw.js.map} +1 -1
  17. package/dist/_chunks/{appointment-card-BgLpE6T5.js → appointment-card-DETaIfBb.js} +2 -2
  18. package/dist/_chunks/{appointment-card-BgLpE6T5.js.map → appointment-card-DETaIfBb.js.map} +1 -1
  19. package/dist/_chunks/{appointment-peek-Dk11UOVW.js → appointment-peek-B79v56Zc.js} +4 -4
  20. package/dist/_chunks/{appointment-peek-Dk11UOVW.js.map → appointment-peek-B79v56Zc.js.map} +1 -1
  21. package/dist/_chunks/{appointment-timeline-wQ-PdkFV.js → appointment-timeline-tyJJPgVU.js} +5 -5
  22. package/dist/_chunks/{appointment-timeline-wQ-PdkFV.js.map → appointment-timeline-tyJJPgVU.js.map} +1 -1
  23. package/dist/_chunks/{appointment-tray-D7Gt6m8x.js → appointment-tray-Dq4zto_L.js} +4 -4
  24. package/dist/_chunks/{appointment-tray-D7Gt6m8x.js.map → appointment-tray-Dq4zto_L.js.map} +1 -1
  25. package/dist/_chunks/{audio-recorder-DZBtAvLH.js → audio-recorder-Ddlp5rVg.js} +3 -3
  26. package/dist/_chunks/{audio-recorder-DZBtAvLH.js.map → audio-recorder-Ddlp5rVg.js.map} +1 -1
  27. package/dist/_chunks/{balance-badge-cell-klaxFNL_.js → balance-badge-cell-BCEsdEOe.js} +4 -4
  28. package/dist/_chunks/{balance-badge-cell-klaxFNL_.js.map → balance-badge-cell-BCEsdEOe.js.map} +1 -1
  29. package/dist/_chunks/{bishop-score-BMLRvXYF.js → bishop-score-1NAiZh0K.js} +2 -2
  30. package/dist/_chunks/{bishop-score-BMLRvXYF.js.map → bishop-score-1NAiZh0K.js.map} +1 -1
  31. package/dist/_chunks/{bmi-calculator-DUhRyyrA.js → bmi-calculator-ZzzPZhhI.js} +2 -2
  32. package/dist/_chunks/{bmi-calculator-DUhRyyrA.js.map → bmi-calculator-ZzzPZhhI.js.map} +1 -1
  33. package/dist/_chunks/{booking-Cdzd8kyY.js → booking-DmyX24Ls.js} +5 -5
  34. package/dist/_chunks/{booking-Cdzd8kyY.js.map → booking-DmyX24Ls.js.map} +1 -1
  35. package/dist/_chunks/{button-18oBsI3n.js → button-CYPx2xFq.js} +38 -36
  36. package/dist/_chunks/button-CYPx2xFq.js.map +1 -0
  37. package/dist/_chunks/{button-group-BSDqso_C.js → button-group-t9RrsCS6.js} +3 -3
  38. package/dist/_chunks/{button-group-BSDqso_C.js.map → button-group-t9RrsCS6.js.map} +1 -1
  39. package/dist/_chunks/{calendar-E6Yu4lzC.js → calendar-aqzmITxw.js} +542 -510
  40. package/dist/_chunks/calendar-aqzmITxw.js.map +1 -0
  41. package/dist/_chunks/calendar-workspace-BqoPkCUp.js +10597 -0
  42. package/dist/_chunks/calendar-workspace-BqoPkCUp.js.map +1 -0
  43. package/dist/_chunks/{care-plan-card-ciBaaguw.js → care-plan-card-amX33mMF.js} +2 -2
  44. package/dist/_chunks/{care-plan-card-ciBaaguw.js.map → care-plan-card-amX33mMF.js.map} +1 -1
  45. package/dist/_chunks/{care-plan-entry-card-D7A0whiZ.js → care-plan-entry-card-DNkEucjN.js} +2 -2
  46. package/dist/_chunks/{care-plan-entry-card-D7A0whiZ.js.map → care-plan-entry-card-DNkEucjN.js.map} +1 -1
  47. package/dist/_chunks/{care-plan-header-DKV1gLqv.js → care-plan-header-CJi853Rf.js} +2 -2
  48. package/dist/_chunks/{care-plan-header-DKV1gLqv.js.map → care-plan-header-CJi853Rf.js.map} +1 -1
  49. package/dist/_chunks/{carousel.agent-DqDGR2yH.js → carousel.agent-2EhJsAtl.js} +2 -2
  50. package/dist/_chunks/{carousel.agent-DqDGR2yH.js.map → carousel.agent-2EhJsAtl.js.map} +1 -1
  51. package/dist/_chunks/{chart-VjuXDXOZ.js → chart-B2HnwMP5.js} +3 -3
  52. package/dist/_chunks/{chart-VjuXDXOZ.js.map → chart-B2HnwMP5.js.map} +1 -1
  53. package/dist/_chunks/{chat-input-BVho_SqP.js → chat-input-CHUsUFOD.js} +2 -2
  54. package/dist/_chunks/{chat-input-BVho_SqP.js.map → chat-input-CHUsUFOD.js.map} +1 -1
  55. package/dist/_chunks/{chat-message-B4ihjNy3.js → chat-message-DTcRGhNo.js} +3 -3
  56. package/dist/_chunks/{chat-message-B4ihjNy3.js.map → chat-message-DTcRGhNo.js.map} +1 -1
  57. package/dist/_chunks/{code-block-C_eNHWaa.js → code-block-BrwcZNPq.js} +2 -2
  58. package/dist/_chunks/{code-block-C_eNHWaa.js.map → code-block-BrwcZNPq.js.map} +1 -1
  59. package/dist/_chunks/{connection-status-Cfux3TvH.js → connection-status-DMheLE65.js} +3 -3
  60. package/dist/_chunks/{connection-status-Cfux3TvH.js.map → connection-status-DMheLE65.js.map} +1 -1
  61. package/dist/_chunks/{contact-profile-card-Dj4NgBL-.js → contact-profile-card-zQLGGFKG.js} +2 -2
  62. package/dist/_chunks/{contact-profile-card-Dj4NgBL-.js.map → contact-profile-card-zQLGGFKG.js.map} +1 -1
  63. package/dist/_chunks/{control-room-rail-DAO0qfOI.js → control-room-rail-5iuM3jcm.js} +3 -3
  64. package/dist/_chunks/{control-room-rail-DAO0qfOI.js.map → control-room-rail-5iuM3jcm.js.map} +1 -1
  65. package/dist/_chunks/{copy-field-Cm4y5Bff.js → copy-field-C-KvrgOG.js} +2 -2
  66. package/dist/_chunks/{copy-field-Cm4y5Bff.js.map → copy-field-C-KvrgOG.js.map} +1 -1
  67. package/dist/_chunks/{cycle-calculator-B9lBRNiZ.js → cycle-calculator-DQMCeEzn.js} +2 -2
  68. package/dist/_chunks/{cycle-calculator-B9lBRNiZ.js.map → cycle-calculator-DQMCeEzn.js.map} +1 -1
  69. package/dist/_chunks/{dashboard-grid-uX7x1ePj.js → dashboard-grid-H7uph3HO.js} +2 -2
  70. package/dist/_chunks/{dashboard-grid-uX7x1ePj.js.map → dashboard-grid-H7uph3HO.js.map} +1 -1
  71. package/dist/_chunks/{data-table-CrI3_bjH.js → data-table-C4yPR89K.js} +7 -7
  72. package/dist/_chunks/{data-table-CrI3_bjH.js.map → data-table-C4yPR89K.js.map} +1 -1
  73. package/dist/_chunks/{data-table-tabs-CzYYKp2_.js → data-table-tabs-Dd_O1nPY.js} +3 -3
  74. package/dist/_chunks/{data-table-tabs-CzYYKp2_.js.map → data-table-tabs-Dd_O1nPY.js.map} +1 -1
  75. package/dist/_chunks/{description-list-1A2DEbE6.js → description-list-DOPu69Jg.js} +2 -2
  76. package/dist/_chunks/{description-list-1A2DEbE6.js.map → description-list-DOPu69Jg.js.map} +1 -1
  77. package/dist/_chunks/{document-preview-Od2Hz4z5.js → document-preview-Dzh1YAz8.js} +3 -3
  78. package/dist/_chunks/{document-preview-Od2Hz4z5.js.map → document-preview-Dzh1YAz8.js.map} +1 -1
  79. package/dist/_chunks/{document-scanner-p0aGlzCy.js → document-scanner-BSVwMR4V.js} +2 -2
  80. package/dist/_chunks/{document-scanner-p0aGlzCy.js.map → document-scanner-BSVwMR4V.js.map} +1 -1
  81. package/dist/_chunks/dropdown-menu-DIzxr_lp.js +594 -0
  82. package/dist/_chunks/dropdown-menu-DIzxr_lp.js.map +1 -0
  83. package/dist/_chunks/{due-date-calculator-BVqJaxzd.js → due-date-calculator-DUjw4w5O.js} +2 -2
  84. package/dist/_chunks/{due-date-calculator-BVqJaxzd.js.map → due-date-calculator-DUjw4w5O.js.map} +1 -1
  85. package/dist/_chunks/{editable-currency-cell-renderer-D_G2Ap61.js → editable-currency-cell-renderer-Cch3RIJL.js} +3 -3
  86. package/dist/_chunks/{editable-currency-cell-renderer-D_G2Ap61.js.map → editable-currency-cell-renderer-Cch3RIJL.js.map} +1 -1
  87. package/dist/_chunks/{editable-description-B4NVdjvd.js → editable-description-CRQib91p.js} +3 -3
  88. package/dist/_chunks/{editable-description-B4NVdjvd.js.map → editable-description-CRQib91p.js.map} +1 -1
  89. package/dist/_chunks/{editor-overlay-BDiBvQmL.js → editor-overlay-DsA7vR5C.js} +2 -2
  90. package/dist/_chunks/{editor-overlay-BDiBvQmL.js.map → editor-overlay-DsA7vR5C.js.map} +1 -1
  91. package/dist/_chunks/{empty-state-DTBZ1ENT.js → empty-state-Ck1wVWdN.js} +2 -2
  92. package/dist/_chunks/{empty-state-DTBZ1ENT.js.map → empty-state-Ck1wVWdN.js.map} +1 -1
  93. package/dist/_chunks/{entity-summary-CFJfBdVP.js → entity-summary-Cvs21xPr.js} +3 -3
  94. package/dist/_chunks/{entity-summary-CFJfBdVP.js.map → entity-summary-Cvs21xPr.js.map} +1 -1
  95. package/dist/_chunks/{error-boundary-BxTqEXqj.js → error-boundary-C_HAzVLO.js} +2 -2
  96. package/dist/_chunks/{error-boundary-BxTqEXqj.js.map → error-boundary-C_HAzVLO.js.map} +1 -1
  97. package/dist/_chunks/{face-scheme-fku-RShg.js → face-scheme-DVZZTuXT.js} +5 -5
  98. package/dist/_chunks/{face-scheme-fku-RShg.js.map → face-scheme-DVZZTuXT.js.map} +1 -1
  99. package/dist/_chunks/{fetal-weight-B69yOS9W.js → fetal-weight-B-lO-948.js} +2 -2
  100. package/dist/_chunks/{fetal-weight-B69yOS9W.js.map → fetal-weight-B-lO-948.js.map} +1 -1
  101. package/dist/_chunks/{field-array-lIXrFWS0.js → field-array-B3IDOct8.js} +3 -3
  102. package/dist/_chunks/{field-array-lIXrFWS0.js.map → field-array-B3IDOct8.js.map} +1 -1
  103. package/dist/_chunks/{file-manager-C6QQPQV5.js → file-manager-COUb-w8j.js} +7 -7
  104. package/dist/_chunks/{file-manager-C6QQPQV5.js.map → file-manager-COUb-w8j.js.map} +1 -1
  105. package/dist/_chunks/{finished-terminal-B2oqXO0Y.js → finished-terminal-BrAWwfOw.js} +2 -2
  106. package/dist/_chunks/{finished-terminal-B2oqXO0Y.js.map → finished-terminal-BrAWwfOw.js.map} +1 -1
  107. package/dist/_chunks/{fiscal-code-input-BEF8eKIG.js → fiscal-code-input-CwUwhUZy.js} +2 -2
  108. package/dist/_chunks/{fiscal-code-input-BEF8eKIG.js.map → fiscal-code-input-CwUwhUZy.js.map} +1 -1
  109. package/dist/_chunks/floating-action-button-pojvb9gG.js.map +1 -1
  110. package/dist/_chunks/{freemium-paywall-B6JITu4l.js → freemium-paywall-DiPJrL18.js} +2 -2
  111. package/dist/_chunks/{freemium-paywall-B6JITu4l.js.map → freemium-paywall-DiPJrL18.js.map} +1 -1
  112. package/dist/_chunks/{gestational-age-calculator-DsGN6_HS.js → gestational-age-calculator-BVPtrWKf.js} +2 -2
  113. package/dist/_chunks/{gestational-age-calculator-DsGN6_HS.js.map → gestational-age-calculator-BVPtrWKf.js.map} +1 -1
  114. package/dist/_chunks/{hcg-doubling-D2SH-e7t.js → hcg-doubling-CPktiA3H.js} +2 -2
  115. package/dist/_chunks/{hcg-doubling-D2SH-e7t.js.map → hcg-doubling-CPktiA3H.js.map} +1 -1
  116. package/dist/_chunks/{header-CCjp5GvE.js → header-C8NbLgVq.js} +2 -2
  117. package/dist/_chunks/{header-CCjp5GvE.js.map → header-C8NbLgVq.js.map} +1 -1
  118. package/dist/_chunks/header-settings-D0M3WNTS.js +305 -0
  119. package/dist/_chunks/header-settings-D0M3WNTS.js.map +1 -0
  120. package/dist/_chunks/{help-me-write-templates-DQtT1qs_.js → help-me-write-templates-CYAKuXZ3.js} +5 -5
  121. package/dist/_chunks/{help-me-write-templates-DQtT1qs_.js.map → help-me-write-templates-CYAKuXZ3.js.map} +1 -1
  122. package/dist/_chunks/{hover-card-BplP5SzQ.js → hover-card-BM0vNmq4.js} +2 -2
  123. package/dist/_chunks/{hover-card-BplP5SzQ.js.map → hover-card-BM0vNmq4.js.map} +1 -1
  124. package/dist/_chunks/{icon-button-CY7GU_Se.js → icon-button-JAXAkqWC.js} +2 -2
  125. package/dist/_chunks/icon-button-JAXAkqWC.js.map +1 -0
  126. package/dist/_chunks/{icon-button-group-B_426QN_.js → icon-button-group-ud2BLmxe.js} +3 -3
  127. package/dist/_chunks/{icon-button-group-B_426QN_.js.map → icon-button-group-ud2BLmxe.js.map} +1 -1
  128. package/dist/_chunks/{icon-picker-ZLebyB0U.js → icon-picker-B1PwkUHy.js} +3 -3
  129. package/dist/_chunks/{icon-picker-ZLebyB0U.js.map → icon-picker-B1PwkUHy.js.map} +1 -1
  130. package/dist/_chunks/{image-cropper-_HiNN79d.js → image-cropper-DM6hpXUw.js} +2 -2
  131. package/dist/_chunks/{image-cropper-_HiNN79d.js.map → image-cropper-DM6hpXUw.js.map} +1 -1
  132. package/dist/_chunks/{info-tip-laBxZhKu.js → info-tip-CywkQ1NX.js} +2 -2
  133. package/dist/_chunks/{info-tip-laBxZhKu.js.map → info-tip-CywkQ1NX.js.map} +1 -1
  134. package/dist/_chunks/{insert-result-CSuPQyKL.js → insert-result-Fu9AHxR6.js} +2 -2
  135. package/dist/_chunks/{insert-result-CSuPQyKL.js.map → insert-result-Fu9AHxR6.js.map} +1 -1
  136. package/dist/_chunks/{key-value-pair-Dcdl3Gni.js → key-value-pair-BL1J3_Km.js} +2 -2
  137. package/dist/_chunks/{key-value-pair-Dcdl3Gni.js.map → key-value-pair-BL1J3_Km.js.map} +1 -1
  138. package/dist/_chunks/{kit-extensions-BTJSnM_H.js → kit-extensions-B9Qn6VIc.js} +6 -6
  139. package/dist/_chunks/{kit-extensions-BTJSnM_H.js.map → kit-extensions-B9Qn6VIc.js.map} +1 -1
  140. package/dist/_chunks/{link-cell-renderer-CkNbUsBM.js → link-cell-renderer-BcW3F1j9.js} +2 -2
  141. package/dist/_chunks/{link-cell-renderer-CkNbUsBM.js.map → link-cell-renderer-BcW3F1j9.js.map} +1 -1
  142. package/dist/_chunks/{locale-picker-DGkQmhV9.js → locale-picker-Z42P8T-i.js} +218 -213
  143. package/dist/_chunks/locale-picker-Z42P8T-i.js.map +1 -0
  144. package/dist/_chunks/{map-view-Bb7ClKSF.js → map-view-DxYPJjM9.js} +2 -2
  145. package/dist/_chunks/{map-view-Bb7ClKSF.js.map → map-view-DxYPJjM9.js.map} +1 -1
  146. package/dist/_chunks/{marketplace-app-shell-1uKqs4gD.js → marketplace-app-shell-rTTvWRrE.js} +6 -6
  147. package/dist/_chunks/{marketplace-app-shell-1uKqs4gD.js.map → marketplace-app-shell-rTTvWRrE.js.map} +1 -1
  148. package/dist/_chunks/{message-card-C2zsvyj0.js → message-card-CUBPPn4Z.js} +3 -3
  149. package/dist/_chunks/{message-card-C2zsvyj0.js.map → message-card-CUBPPn4Z.js.map} +1 -1
  150. package/dist/_chunks/{message-tray-CMlmxdH2.js → message-tray-uy3DAIbn.js} +4 -4
  151. package/dist/_chunks/{message-tray-CMlmxdH2.js.map → message-tray-uy3DAIbn.js.map} +1 -1
  152. package/dist/_chunks/{muscle-scheme-Co0NIgbU.js → muscle-scheme-CH-vQ7Ch.js} +2 -2
  153. package/dist/_chunks/{muscle-scheme-Co0NIgbU.js.map → muscle-scheme-CH-vQ7Ch.js.map} +1 -1
  154. package/dist/_chunks/{notes-panel-xxpFt-I1.js → notes-panel-Dka4Z2M7.js} +4 -4
  155. package/dist/_chunks/{notes-panel-xxpFt-I1.js.map → notes-panel-Dka4Z2M7.js.map} +1 -1
  156. package/dist/_chunks/{notification-card-DDzBCi8l.js → notification-card-Hy8w3UWx.js} +3 -3
  157. package/dist/_chunks/{notification-card-DDzBCi8l.js.map → notification-card-Hy8w3UWx.js.map} +1 -1
  158. package/dist/_chunks/{notification-tray-PnH2PBlZ.js → notification-tray-VuV3XXB8.js} +4 -4
  159. package/dist/_chunks/{notification-tray-PnH2PBlZ.js.map → notification-tray-VuV3XXB8.js.map} +1 -1
  160. package/dist/_chunks/{optical-prescription-DUufWXfZ.js → optical-prescription-C2n6d0HO.js} +2 -2
  161. package/dist/_chunks/{optical-prescription-DUufWXfZ.js.map → optical-prescription-C2n6d0HO.js.map} +1 -1
  162. package/dist/_chunks/{panel-subview-CzHutkA8.js → panel-subview-DAY-ToM3.js} +2 -2
  163. package/dist/_chunks/{panel-subview-CzHutkA8.js.map → panel-subview-DAY-ToM3.js.map} +1 -1
  164. package/dist/_chunks/{patient-details-tTlvrJSU.js → patient-details-D9sAM3qh.js} +3 -3
  165. package/dist/_chunks/{patient-details-tTlvrJSU.js.map → patient-details-D9sAM3qh.js.map} +1 -1
  166. package/dist/_chunks/{patient-field-row-DElFbpKc.js → patient-field-row-CT04C_lZ.js} +277 -257
  167. package/dist/_chunks/patient-field-row-CT04C_lZ.js.map +1 -0
  168. package/dist/_chunks/{patient-search-DgXdGkhK.js → patient-search-DkIukAMQ.js} +3 -3
  169. package/dist/_chunks/{patient-search-DgXdGkhK.js.map → patient-search-DkIukAMQ.js.map} +1 -1
  170. package/dist/_chunks/{patient-summary-card-DQ__6DR-.js → patient-summary-card-DI0BH-Fe.js} +5 -5
  171. package/dist/_chunks/{patient-summary-card-DQ__6DR-.js.map → patient-summary-card-DI0BH-Fe.js.map} +1 -1
  172. package/dist/_chunks/{payment-automation-upsell-ugi4np1l.js → payment-automation-upsell-vQBIyUky.js} +2 -2
  173. package/dist/_chunks/{payment-automation-upsell-ugi4np1l.js.map → payment-automation-upsell-vQBIyUky.js.map} +1 -1
  174. package/dist/_chunks/{payment-request-card-DMJB57Tv.js → payment-request-card-BSaJzhxz.js} +3 -3
  175. package/dist/_chunks/{payment-request-card-DMJB57Tv.js.map → payment-request-card-BSaJzhxz.js.map} +1 -1
  176. package/dist/_chunks/{periodontal-chart-DbGzKDj7.js → periodontal-chart-BcTcOc79.js} +2 -2
  177. package/dist/_chunks/{periodontal-chart-DbGzKDj7.js.map → periodontal-chart-BcTcOc79.js.map} +1 -1
  178. package/dist/_chunks/{periodontal-chart-card-DvHyP47v.js → periodontal-chart-card-NS_nToBf.js} +2 -2
  179. package/dist/_chunks/{periodontal-chart-card-DvHyP47v.js.map → periodontal-chart-card-NS_nToBf.js.map} +1 -1
  180. package/dist/_chunks/{popover-Dvb40vPH.js → popover-SASSeAdY.js} +2 -2
  181. package/dist/_chunks/{popover-Dvb40vPH.js.map → popover-SASSeAdY.js.map} +1 -1
  182. package/dist/_chunks/{practice-results-EKRiqWtQ.js → practice-results-C3ifcObw.js} +6 -6
  183. package/dist/_chunks/{practice-results-EKRiqWtQ.js.map → practice-results-C3ifcObw.js.map} +1 -1
  184. package/dist/_chunks/{pregnancy-dating-lfjjZVZH.js → pregnancy-dating-CpJ3iYvD.js} +2 -2
  185. package/dist/_chunks/{pregnancy-dating-lfjjZVZH.js.map → pregnancy-dating-CpJ3iYvD.js.map} +1 -1
  186. package/dist/_chunks/{pregnancy-weight-gain-WpNt-S0q.js → pregnancy-weight-gain-kDOhA2vZ.js} +2 -2
  187. package/dist/_chunks/{pregnancy-weight-gain-WpNt-S0q.js.map → pregnancy-weight-gain-kDOhA2vZ.js.map} +1 -1
  188. package/dist/_chunks/{privacy-lock-D6gq0GDg.js → privacy-lock-CEyvNpC8.js} +3 -3
  189. package/dist/_chunks/{privacy-lock-D6gq0GDg.js.map → privacy-lock-CEyvNpC8.js.map} +1 -1
  190. package/dist/_chunks/{privacy-mask-BC5lw2zB.js → privacy-mask-TzMlEu3Q.js} +2 -2
  191. package/dist/_chunks/{privacy-mask-BC5lw2zB.js.map → privacy-mask-TzMlEu3Q.js.map} +1 -1
  192. package/dist/_chunks/{product-hub-panel-CKeSCSeE.js → product-hub-panel-b70i9Hi1.js} +3 -3
  193. package/dist/_chunks/{product-hub-panel-CKeSCSeE.js.map → product-hub-panel-b70i9Hi1.js.map} +1 -1
  194. package/dist/_chunks/{public-header.agent-B9wDmUeB.js → public-header.agent-D0ApOrmx.js} +3 -3
  195. package/dist/_chunks/{public-header.agent-B9wDmUeB.js.map → public-header.agent-D0ApOrmx.js.map} +1 -1
  196. package/dist/_chunks/{radiograph-panel.agent-TmyIvTOa.js → radiograph-panel.agent-jhwaIW8U.js} +4 -4
  197. package/dist/_chunks/{radiograph-panel.agent-TmyIvTOa.js.map → radiograph-panel.agent-jhwaIW8U.js.map} +1 -1
  198. package/dist/_chunks/resource-chip-DQeCJzJf.js +143 -0
  199. package/dist/_chunks/resource-chip-DQeCJzJf.js.map +1 -0
  200. package/dist/_chunks/{reviews-panel-BdwFp_0c.js → reviews-panel-B5QC4FIp.js} +4 -4
  201. package/dist/_chunks/{reviews-panel-BdwFp_0c.js.map → reviews-panel-B5QC4FIp.js.map} +1 -1
  202. package/dist/_chunks/{rich-text-editor-y6ML0KeV.js → rich-text-editor-DoBXdwmx.js} +930 -943
  203. package/dist/_chunks/rich-text-editor-DoBXdwmx.js.map +1 -0
  204. package/dist/_chunks/{session-countdown-ACJyTXH2.js → session-countdown-26XB5u38.js} +2 -2
  205. package/dist/_chunks/{session-countdown-ACJyTXH2.js.map → session-countdown-26XB5u38.js.map} +1 -1
  206. package/dist/_chunks/{sheet-D0Lh0KR2.js → sheet-CwhNzxbr.js} +2 -2
  207. package/dist/_chunks/{sheet-D0Lh0KR2.js.map → sheet-CwhNzxbr.js.map} +1 -1
  208. package/dist/_chunks/{sign-in-with-alfadocs-button-CDyJAIzW.js → sign-in-with-alfadocs-button-jxbze77L.js} +2 -2
  209. package/dist/_chunks/{sign-in-with-alfadocs-button-CDyJAIzW.js.map → sign-in-with-alfadocs-button-jxbze77L.js.map} +1 -1
  210. package/dist/_chunks/{signature-request-BUGeG8oD.js → signature-request-BorHf3CY.js} +4 -4
  211. package/dist/_chunks/{signature-request-BUGeG8oD.js.map → signature-request-BorHf3CY.js.map} +1 -1
  212. package/dist/_chunks/{slot-grid-4fWH3Euk.js → slot-grid-xgf2UKLS.js} +4 -4
  213. package/dist/_chunks/{slot-grid-4fWH3Euk.js.map → slot-grid-xgf2UKLS.js.map} +1 -1
  214. package/dist/_chunks/social-sign-in-button-dlpPI5l7.js.map +1 -1
  215. package/dist/_chunks/{streaming-text-eRiizArc.js → streaming-text-Cos2fVTw.js} +2 -2
  216. package/dist/_chunks/{streaming-text-eRiizArc.js.map → streaming-text-Cos2fVTw.js.map} +1 -1
  217. package/dist/_chunks/{tab-bar-BHFf6knq.js → tab-bar-BrkMUW0c.js} +2 -2
  218. package/dist/_chunks/{tab-bar-BHFf6knq.js.map → tab-bar-BrkMUW0c.js.map} +1 -1
  219. package/dist/_chunks/tabs-tK22Mz7r.js +413 -0
  220. package/dist/_chunks/tabs-tK22Mz7r.js.map +1 -0
  221. package/dist/_chunks/{task-card-jaOhnj_q.js → task-card-CLpHmqEY.js} +2 -2
  222. package/dist/_chunks/{task-card-jaOhnj_q.js.map → task-card-CLpHmqEY.js.map} +1 -1
  223. package/dist/_chunks/{task-editor-DlvTwAfv.js → task-editor-B4UGsU7l.js} +6 -6
  224. package/dist/_chunks/{task-editor-DlvTwAfv.js.map → task-editor-B4UGsU7l.js.map} +1 -1
  225. package/dist/_chunks/{task-tray-HHyxi9ga.js → task-tray-dsmYgjVb.js} +4 -4
  226. package/dist/_chunks/{task-tray-HHyxi9ga.js.map → task-tray-dsmYgjVb.js.map} +1 -1
  227. package/dist/_chunks/{tasks-panel-DbSjq_mz.js → tasks-panel-CwwVw491.js} +6 -6
  228. package/dist/_chunks/{tasks-panel-DbSjq_mz.js.map → tasks-panel-CwwVw491.js.map} +1 -1
  229. package/dist/_chunks/{theme-toggle-LUBxlNDm.js → theme-toggle-jyoyhbJL.js} +4 -4
  230. package/dist/_chunks/{theme-toggle-LUBxlNDm.js.map → theme-toggle-jyoyhbJL.js.map} +1 -1
  231. package/dist/_chunks/{toast-CT8hjr9r.js → toast-FijDyPnv.js} +2 -2
  232. package/dist/_chunks/{toast-CT8hjr9r.js.map → toast-FijDyPnv.js.map} +1 -1
  233. package/dist/_chunks/{token-insert-menu-klwbxVKh.js → token-insert-menu-Cjf99IdN.js} +3 -3
  234. package/dist/_chunks/{token-insert-menu-klwbxVKh.js.map → token-insert-menu-Cjf99IdN.js.map} +1 -1
  235. package/dist/_chunks/{tool-rail-DEeX4PdN.js → tool-rail-DphMl1hX.js} +2 -2
  236. package/dist/_chunks/{tool-rail-DEeX4PdN.js.map → tool-rail-DphMl1hX.js.map} +1 -1
  237. package/dist/_chunks/{tooth-scheme-BkjhkI8g.js → tooth-scheme-BaCJnyg9.js} +663 -718
  238. package/dist/_chunks/tooth-scheme-BaCJnyg9.js.map +1 -0
  239. package/dist/_chunks/{unit-converter-Dp_KDxE6.js → unit-converter-CGpOgarU.js} +2 -2
  240. package/dist/_chunks/{unit-converter-Dp_KDxE6.js.map → unit-converter-CGpOgarU.js.map} +1 -1
  241. package/dist/_chunks/{use-appointment-details-read-5-hV-2xA.js → use-appointment-details-read-uEnJLVfA.js} +14 -14
  242. package/dist/_chunks/{use-appointment-details-read-5-hV-2xA.js.map → use-appointment-details-read-uEnJLVfA.js.map} +1 -1
  243. package/dist/_chunks/wallet-pay-button--dnR6NfJ.js.map +1 -1
  244. package/dist/_chunks/{warning-stack-CEgYkI1z.js → warning-stack-7Hffm7K1.js} +3 -3
  245. package/dist/_chunks/{warning-stack-CEgYkI1z.js.map → warning-stack-7Hffm7K1.js.map} +1 -1
  246. package/dist/_chunks/{workflow-map-qGkQTNvS.js → workflow-map-Jfe9L9Wt.js} +6 -6
  247. package/dist/_chunks/{workflow-map-qGkQTNvS.js.map → workflow-map-Jfe9L9Wt.js.map} +1 -1
  248. package/dist/_chunks/{workflow-status-ClHfz4Kr.js → workflow-status-jHfsIDzi.js} +2 -2
  249. package/dist/_chunks/{workflow-status-ClHfz4Kr.js.map → workflow-status-jHfsIDzi.js.map} +1 -1
  250. package/dist/agent-catalog.json +103 -38
  251. package/dist/agent-i18n/en.json +7 -4
  252. package/dist/components/_shared/entity-card/entity-card.d.ts +1 -1
  253. package/dist/components/_shared/field-visibility-cog.d.ts.map +1 -1
  254. package/dist/components/agenda-tray/index.js +1 -1
  255. package/dist/components/ai-credits-notice/index.js +1 -1
  256. package/dist/components/ai-permission-notice/index.js +1 -1
  257. package/dist/components/ai-prompt-input/index.js +1 -1
  258. package/dist/components/anamnesis-card/index.js +1 -1
  259. package/dist/components/anamnesis-summary-card/anamnesis-summary-card.d.ts +1 -1
  260. package/dist/components/appointment-card/index.js +2 -2
  261. package/dist/components/appointment-details-panel/index.js +1 -1
  262. package/dist/components/appointment-peek/index.js +1 -1
  263. package/dist/components/appointment-timeline/index.js +1 -1
  264. package/dist/components/audio-recorder/index.js +1 -1
  265. package/dist/components/bishop-score/index.js +1 -1
  266. package/dist/components/bmi-calculator/index.js +1 -1
  267. package/dist/components/booking/index.js +1 -1
  268. package/dist/components/button/button.d.ts +11 -0
  269. package/dist/components/button/button.d.ts.map +1 -1
  270. package/dist/components/button/icon-button.d.ts +4 -0
  271. package/dist/components/button/icon-button.d.ts.map +1 -1
  272. package/dist/components/button/index.js +2 -2
  273. package/dist/components/button-group/index.js +1 -1
  274. package/dist/components/calendar/calendar.d.ts +5 -3
  275. package/dist/components/calendar/calendar.d.ts.map +1 -1
  276. package/dist/components/calendar/index.js +1 -1
  277. package/dist/components/care-plan-card/index.js +1 -1
  278. package/dist/components/care-plan-entry-card/index.js +1 -1
  279. package/dist/components/care-plan-header/index.js +1 -1
  280. package/dist/components/carousel/index.js +1 -1
  281. package/dist/components/chart/chart.d.ts +1 -1
  282. package/dist/components/chart/index.js +1 -1
  283. package/dist/components/chat-input/index.js +1 -1
  284. package/dist/components/chat-message/index.js +1 -1
  285. package/dist/components/connection-status/index.js +1 -1
  286. package/dist/components/contact-profile-card/index.js +1 -1
  287. package/dist/components/control-room-rail/index.js +1 -1
  288. package/dist/components/copy-field/index.js +1 -1
  289. package/dist/components/cycle-calculator/index.js +1 -1
  290. package/dist/components/dashboard-grid/index.js +1 -1
  291. package/dist/components/data-table/index.js +4 -4
  292. package/dist/components/data-table-tabs/index.js +1 -1
  293. package/dist/components/description-list/index.js +1 -1
  294. package/dist/components/document-preview/index.js +1 -1
  295. package/dist/components/document-scanner/index.js +1 -1
  296. package/dist/components/dropdown-menu/dropdown-menu.agent.d.ts.map +1 -1
  297. package/dist/components/dropdown-menu/dropdown-menu.d.ts +52 -2
  298. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  299. package/dist/components/dropdown-menu/index.d.ts +1 -1
  300. package/dist/components/dropdown-menu/index.d.ts.map +1 -1
  301. package/dist/components/dropdown-menu/index.js +1 -1
  302. package/dist/components/due-date-calculator/index.js +1 -1
  303. package/dist/components/editable-description/index.js +1 -1
  304. package/dist/components/editor-overlay/index.js +1 -1
  305. package/dist/components/empty-state/index.js +1 -1
  306. package/dist/components/entity-summary/index.js +1 -1
  307. package/dist/components/error-boundary/index.js +1 -1
  308. package/dist/components/face-scheme/index.js +1 -1
  309. package/dist/components/fetal-weight/index.js +1 -1
  310. package/dist/components/field-array/index.js +1 -1
  311. package/dist/components/file-manager/index.js +1 -1
  312. package/dist/components/finished-terminal/index.js +1 -1
  313. package/dist/components/fiscal-code-input/index.js +1 -1
  314. package/dist/components/floating-action-button/floating-action-button.d.ts.map +1 -1
  315. package/dist/components/freemium-paywall/index.js +1 -1
  316. package/dist/components/gestational-age-calculator/index.js +1 -1
  317. package/dist/components/hcg-doubling/index.js +1 -1
  318. package/dist/components/header/index.js +1 -1
  319. package/dist/components/header-settings/header-settings.d.ts +3 -3
  320. package/dist/components/header-settings/header-settings.d.ts.map +1 -1
  321. package/dist/components/header-settings/index.js +1 -1
  322. package/dist/components/hover-card/index.js +1 -1
  323. package/dist/components/icon-button/index.js +1 -1
  324. package/dist/components/icon-button-group/index.js +1 -1
  325. package/dist/components/icon-picker/index.js +1 -1
  326. package/dist/components/image-cropper/index.js +1 -1
  327. package/dist/components/info-tip/index.js +1 -1
  328. package/dist/components/key-value-pair/index.js +1 -1
  329. package/dist/components/locale-picker/index.js +1 -1
  330. package/dist/components/locale-picker/locale-picker.d.ts +7 -0
  331. package/dist/components/locale-picker/locale-picker.d.ts.map +1 -1
  332. package/dist/components/map-view/index.js +1 -1
  333. package/dist/components/message-card/index.js +1 -1
  334. package/dist/components/message-tray/index.js +1 -1
  335. package/dist/components/muscle-scheme/index.js +1 -1
  336. package/dist/components/notes-panel/index.js +1 -1
  337. package/dist/components/notification-card/index.js +1 -1
  338. package/dist/components/notification-tray/index.js +1 -1
  339. package/dist/components/operator-hero/operator-hero.d.ts +1 -1
  340. package/dist/components/optical-prescription/index.js +1 -1
  341. package/dist/components/panel-subview/index.js +1 -1
  342. package/dist/components/patient-details/index.js +1 -1
  343. package/dist/components/patient-details/patient-details.d.ts +1 -1
  344. package/dist/components/patient-search/index.js +1 -1
  345. package/dist/components/patient-summary-card/index.js +1 -1
  346. package/dist/components/patient-summary-card/patient-summary-card.d.ts +1 -1
  347. package/dist/components/patient-table/index.js +1 -1
  348. package/dist/components/payment-card/index.js +1 -1
  349. package/dist/components/periodontal-chart/index.js +1 -1
  350. package/dist/components/periodontal-chart-card/index.js +1 -1
  351. package/dist/components/popover/index.js +1 -1
  352. package/dist/components/practice-results/index.js +1 -1
  353. package/dist/components/pregnancy-dating/index.js +1 -1
  354. package/dist/components/pregnancy-weight-gain/index.js +1 -1
  355. package/dist/components/privacy-lock/index.js +1 -1
  356. package/dist/components/product-hub-tray/index.js +1 -1
  357. package/dist/components/public-header/index.js +1 -1
  358. package/dist/components/radiograph-panel/index.js +1 -1
  359. package/dist/components/resource-chip/index.d.ts +1 -1
  360. package/dist/components/resource-chip/index.d.ts.map +1 -1
  361. package/dist/components/resource-chip/index.js +3 -2
  362. package/dist/components/resource-chip/resource-chip.d.ts +20 -0
  363. package/dist/components/resource-chip/resource-chip.d.ts.map +1 -1
  364. package/dist/components/reviews-panel/index.js +1 -1
  365. package/dist/components/rich-text-editor/editor-toolbar.d.ts.map +1 -1
  366. package/dist/components/rich-text-editor/index.js +2 -2
  367. package/dist/components/session-countdown/index.js +1 -1
  368. package/dist/components/sheet/index.js +1 -1
  369. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  370. package/dist/components/skeleton-scheme/index.js +1 -1
  371. package/dist/components/slot-grid/index.js +1 -1
  372. package/dist/components/social-sign-in-button/social-sign-in-button.d.ts.map +1 -1
  373. package/dist/components/streaming-text/index.js +1 -1
  374. package/dist/components/tab-bar/index.js +1 -1
  375. package/dist/components/tabs/index.js +1 -1
  376. package/dist/components/tabs/tabs.d.ts.map +1 -1
  377. package/dist/components/task-card/index.js +1 -1
  378. package/dist/components/task-editor/index.js +1 -1
  379. package/dist/components/task-tray/index.js +1 -1
  380. package/dist/components/tasks-panel/index.js +1 -1
  381. package/dist/components/theme-toggle/index.js +1 -1
  382. package/dist/components/toast/index.js +1 -1
  383. package/dist/components/token-insert-menu/index.js +1 -1
  384. package/dist/components/tool-rail/index.js +1 -1
  385. package/dist/components/tooth-scheme/index.js +1 -1
  386. package/dist/components/tooth-scheme/tooth-scheme.d.ts +2 -2
  387. package/dist/components/tooth-scheme/tooth-scheme.d.ts.map +1 -1
  388. package/dist/components/unit-converter/index.js +1 -1
  389. package/dist/components/wallet-pay-button/wallet-pay-button.d.ts.map +1 -1
  390. package/dist/components/warning-stack/index.js +1 -1
  391. package/dist/components/workflow/index.js +1 -1
  392. package/dist/components/workflow/workflow-card.d.ts +1 -1
  393. package/dist/components/workflow-status/index.js +1 -1
  394. package/dist/i18n/locales/ar.d.ts +5 -0
  395. package/dist/i18n/locales/ar.d.ts.map +1 -1
  396. package/dist/i18n/locales/ar.js +5 -0
  397. package/dist/i18n/locales/ar.js.map +1 -1
  398. package/dist/i18n/locales/de.d.ts +5 -0
  399. package/dist/i18n/locales/de.d.ts.map +1 -1
  400. package/dist/i18n/locales/de.js +5 -0
  401. package/dist/i18n/locales/de.js.map +1 -1
  402. package/dist/i18n/locales/el.d.ts +5 -0
  403. package/dist/i18n/locales/el.d.ts.map +1 -1
  404. package/dist/i18n/locales/el.js +5 -0
  405. package/dist/i18n/locales/el.js.map +1 -1
  406. package/dist/i18n/locales/en.d.ts +5 -0
  407. package/dist/i18n/locales/en.d.ts.map +1 -1
  408. package/dist/i18n/locales/en.js +5 -0
  409. package/dist/i18n/locales/en.js.map +1 -1
  410. package/dist/i18n/locales/es.d.ts +5 -0
  411. package/dist/i18n/locales/es.d.ts.map +1 -1
  412. package/dist/i18n/locales/es.js +5 -0
  413. package/dist/i18n/locales/es.js.map +1 -1
  414. package/dist/i18n/locales/fr.d.ts +5 -0
  415. package/dist/i18n/locales/fr.d.ts.map +1 -1
  416. package/dist/i18n/locales/fr.js +5 -0
  417. package/dist/i18n/locales/fr.js.map +1 -1
  418. package/dist/i18n/locales/hi.d.ts +5 -0
  419. package/dist/i18n/locales/hi.d.ts.map +1 -1
  420. package/dist/i18n/locales/hi.js +5 -0
  421. package/dist/i18n/locales/hi.js.map +1 -1
  422. package/dist/i18n/locales/it.d.ts +5 -0
  423. package/dist/i18n/locales/it.d.ts.map +1 -1
  424. package/dist/i18n/locales/it.js +5 -0
  425. package/dist/i18n/locales/it.js.map +1 -1
  426. package/dist/i18n/locales/ja.d.ts +5 -0
  427. package/dist/i18n/locales/ja.d.ts.map +1 -1
  428. package/dist/i18n/locales/ja.js +5 -0
  429. package/dist/i18n/locales/ja.js.map +1 -1
  430. package/dist/i18n/locales/nl.d.ts +5 -0
  431. package/dist/i18n/locales/nl.d.ts.map +1 -1
  432. package/dist/i18n/locales/nl.js +5 -0
  433. package/dist/i18n/locales/nl.js.map +1 -1
  434. package/dist/i18n/locales/pl.d.ts +5 -0
  435. package/dist/i18n/locales/pl.d.ts.map +1 -1
  436. package/dist/i18n/locales/pl.js +5 -0
  437. package/dist/i18n/locales/pl.js.map +1 -1
  438. package/dist/i18n/locales/pt.d.ts +5 -0
  439. package/dist/i18n/locales/pt.d.ts.map +1 -1
  440. package/dist/i18n/locales/pt.js +5 -0
  441. package/dist/i18n/locales/pt.js.map +1 -1
  442. package/dist/i18n/locales/ro.d.ts +5 -0
  443. package/dist/i18n/locales/ro.d.ts.map +1 -1
  444. package/dist/i18n/locales/ro.js +5 -0
  445. package/dist/i18n/locales/ro.js.map +1 -1
  446. package/dist/i18n/locales/ru.d.ts +5 -0
  447. package/dist/i18n/locales/ru.d.ts.map +1 -1
  448. package/dist/i18n/locales/ru.js +5 -0
  449. package/dist/i18n/locales/ru.js.map +1 -1
  450. package/dist/i18n/locales/sq.d.ts +5 -0
  451. package/dist/i18n/locales/sq.d.ts.map +1 -1
  452. package/dist/i18n/locales/sq.js +5 -0
  453. package/dist/i18n/locales/sq.js.map +1 -1
  454. package/dist/i18n/locales/sv.d.ts +5 -0
  455. package/dist/i18n/locales/sv.d.ts.map +1 -1
  456. package/dist/i18n/locales/sv.js +5 -0
  457. package/dist/i18n/locales/sv.js.map +1 -1
  458. package/dist/i18n/locales/tr.d.ts +5 -0
  459. package/dist/i18n/locales/tr.d.ts.map +1 -1
  460. package/dist/i18n/locales/tr.js +5 -0
  461. package/dist/i18n/locales/tr.js.map +1 -1
  462. package/dist/i18n/locales/zh.d.ts +5 -0
  463. package/dist/i18n/locales/zh.d.ts.map +1 -1
  464. package/dist/i18n/locales/zh.js +5 -0
  465. package/dist/i18n/locales/zh.js.map +1 -1
  466. package/dist/index.js +477 -476
  467. package/dist/locales/ar.json +5 -0
  468. package/dist/locales/de.json +5 -0
  469. package/dist/locales/el.json +5 -0
  470. package/dist/locales/en.json +5 -0
  471. package/dist/locales/es.json +5 -0
  472. package/dist/locales/fr.json +5 -0
  473. package/dist/locales/hi.json +5 -0
  474. package/dist/locales/it.json +5 -0
  475. package/dist/locales/ja.json +5 -0
  476. package/dist/locales/nl.json +5 -0
  477. package/dist/locales/pl.json +5 -0
  478. package/dist/locales/pt.json +5 -0
  479. package/dist/locales/ro.json +5 -0
  480. package/dist/locales/ru.json +5 -0
  481. package/dist/locales/sq.json +5 -0
  482. package/dist/locales/sv.json +5 -0
  483. package/dist/locales/tr.json +5 -0
  484. package/dist/locales/zh.json +5 -0
  485. package/dist/patterns/alia-assistant/index.js +1 -1
  486. package/dist/patterns/anamnesis/index.js +1 -1
  487. package/dist/patterns/calendar/calendar.sheets.d.ts.map +1 -1
  488. package/dist/patterns/calendar/calendar.surface.d.ts +4 -1
  489. package/dist/patterns/calendar/calendar.surface.d.ts.map +1 -1
  490. package/dist/patterns/calendar/index.js +1 -1
  491. package/dist/patterns/help-me-write-templates/index.js +1 -1
  492. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  493. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  494. package/dist/patterns/signature-request/index.js +1 -1
  495. package/dist/tokens.css +2 -1
  496. package/package.json +1 -1
  497. package/dist/_chunks/button-18oBsI3n.js.map +0 -1
  498. package/dist/_chunks/calendar-E6Yu4lzC.js.map +0 -1
  499. package/dist/_chunks/calendar-workspace-DjbGFjg1.js +0 -10584
  500. package/dist/_chunks/calendar-workspace-DjbGFjg1.js.map +0 -1
  501. package/dist/_chunks/dropdown-menu-C8PaW3lR.js +0 -369
  502. package/dist/_chunks/dropdown-menu-C8PaW3lR.js.map +0 -1
  503. package/dist/_chunks/header-settings-ZXa6hXuu.js +0 -335
  504. package/dist/_chunks/header-settings-ZXa6hXuu.js.map +0 -1
  505. package/dist/_chunks/icon-button-CY7GU_Se.js.map +0 -1
  506. package/dist/_chunks/locale-picker-DGkQmhV9.js.map +0 -1
  507. package/dist/_chunks/patient-field-row-DElFbpKc.js.map +0 -1
  508. package/dist/_chunks/resource-chip-DYTG0IQQ.js +0 -83
  509. package/dist/_chunks/resource-chip-DYTG0IQQ.js.map +0 -1
  510. package/dist/_chunks/rich-text-editor-y6ML0KeV.js.map +0 -1
  511. package/dist/_chunks/tabs-CFsuMQ5H.js +0 -409
  512. package/dist/_chunks/tabs-CFsuMQ5H.js.map +0 -1
  513. package/dist/_chunks/tooth-scheme-BkjhkI8g.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu-DIzxr_lp.js","sources":["../../src/components/dropdown-menu/dropdown-menu.agent.ts","../../src/components/dropdown-menu/dropdown-menu.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { DropdownMenuHandle } from './dropdown-menu';\n\n// The handle cannot run an arbitrary item (Radix owns item activation), so\n// there is no 'pick' capability. It CAN drive settings rows: a ChoiceSub or\n// SwitchItem given a `name` registers with its Root, and set_value /\n// set_checked call that row's own onValueChange / onCheckedChange, exactly\n// as a click would. Rows mount with the menu, so a closed menu opens for the\n// moment and closes again.\nexport const dropdownMenuAgent: AgentAdapter<DropdownMenuHandle> = {\n id: 'dropdown-menu',\n capabilities: ['open', 'close', 'set_value'],\n state: {\n isOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.dropdownMenu.state.isOpen',\n description: 'True when the menu is currently open.',\n read: (handle) => handle.getIsOpen(),\n },\n settings: {\n type: 'Array<{ setting: string; kind: \"choice\" | \"switch\"; value?: string; options?: string[]; checked?: boolean; disabled: boolean }>',\n descriptionKey: 'ui.agent.dropdownMenu.state.settings',\n description:\n \"The menu's named settings rows and their current values: choice rows with the selected value and every option's value, switch rows with whether they are on. Rows are listed only while the menu is open; open it first to read them.\",\n read: (handle) => handle.getSettings(),\n },\n },\n actions: {\n open: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.dropdownMenu.actions.open',\n description: 'Open the menu.',\n invoke: (handle) => {\n handle.open();\n },\n },\n close: {\n safety: 'read',\n idempotent: true,\n descriptionKey: 'ui.agent.dropdownMenu.actions.close',\n description: 'Close the menu.',\n invoke: (handle) => {\n handle.close();\n },\n },\n set_value: {\n safety: 'write',\n argsType: '{ setting: string; value: string }',\n argsSchema: {\n type: 'object',\n properties: {\n setting: {\n type: 'string',\n description: \"The row's name (its data-setting attribute).\",\n },\n value: {\n type: 'string',\n description: \"One of the row's option values.\",\n },\n },\n required: ['setting', 'value'],\n },\n idempotent: true,\n errors: [\n 'No choice row with that name in this menu',\n 'The value is not one of the options, or it or the row is disabled',\n ],\n examples: [\n {\n args: { setting: 'slotDensity', value: 'comfortable' },\n note: 'Calendar display settings: switch to comfortable rows.',\n },\n ],\n descriptionKey: 'ui.agent.dropdownMenu.actions.setValue',\n description:\n 'Pick an option on a named choice row (ChoiceSub), as clicking it would. A closed menu opens for the moment and closes again.',\n invoke: (handle, args: { setting: string; value: string }) =>\n handle.setValue(args.setting, args.value),\n },\n set_checked: {\n safety: 'write',\n argsType: '{ setting: string; checked: boolean }',\n argsSchema: {\n type: 'object',\n properties: {\n setting: {\n type: 'string',\n description: \"The row's name (its data-setting attribute).\",\n },\n checked: { type: 'boolean' },\n },\n required: ['setting', 'checked'],\n },\n idempotent: true,\n errors: [\n 'No switch row with that name in this menu',\n 'The row is disabled',\n ],\n examples: [\n {\n args: { setting: 'zebraRows', checked: true },\n note: 'Calendar display settings: turn zebra rows on.',\n },\n ],\n descriptionKey: 'ui.agent.dropdownMenu.actions.setChecked',\n description:\n 'Turn a named switch row (SwitchItem) on or off, as clicking it would. A closed menu opens for the moment and closes again.',\n invoke: (handle, args: { setting: string; checked: boolean }) =>\n handle.setChecked(args.setting, args.checked),\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'dropdown-menu' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop on DropdownMenu.Root.',\n },\n item: {\n attr: 'data-setting',\n sourceProp: 'name',\n description:\n 'On a ChoiceSub or SwitchItem row given a name: the setting that set_value / set_checked address.',\n },\n },\n};\n","import {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport * as RadixDropdownMenu from '@radix-ui/react-dropdown-menu';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Check, ChevronRight } from 'lucide-react';\nimport { Separator as DsSeparator } from '../separator/separator';\nimport { Kbd, type KbdNamedKey } from '../kbd/kbd';\nimport { useDocumentDirection } from '../_shared/use-direction';\nimport { MENU_ROW_HIGHLIGHT } from '../_shared/menu-row';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useAgentRegistration } from '../../agent';\nimport { dropdownMenuAgent } from './dropdown-menu.agent';\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst contentVariants = cva(\n [\n 'ds:z-[var(--z-dropdown)]',\n // Roomier panel: wider floor, larger radius, deeper float and a\n // breath more padding so menus read as elevated surfaces rather\n // than flat lists hugging their trigger.\n 'ds:min-w-[14rem]',\n 'ds:rounded-[var(--radius-lg)]',\n // Border kept (transparent) so the forced-colors override below can\n // repaint a visible edge in HCM. In normal modes the soft drop-shadow\n // carries the edge cue; the heavy `--border` (grey-800 since WCAG\n // 1.4.11 bump in 67fef8c) made the menu read as a charcoal box.\n 'ds:border ds:border-transparent',\n 'ds:bg-[var(--popover)] ds:text-[color:var(--popover-foreground)]',\n 'ds:shadow-[var(--shadow-xl)]',\n 'ds:p-[var(--spacing-sm)]',\n // Never taller than the room Radix measures beside the trigger: a long\n // menu scrolls instead of running off the screen. Submenus portal out,\n // so the scroll never clips them. Radix sets the same variable on\n // Content and SubContent.\n 'ds:max-h-[var(--radix-dropdown-menu-content-available-height)] ds:overflow-y-auto',\n // Motion — gated on --animation-duration via Tailwind's animate-in\n // preset. motion-reduce disables via the no-preference query.\n 'ds:data-[state=open]:animate-in ds:data-[state=closed]:animate-out',\n 'ds:data-[state=open]:fade-in ds:data-[state=closed]:fade-out',\n 'ds:data-[state=open]:zoom-in-95 ds:data-[state=closed]:zoom-out-95',\n 'ds:data-[state=open]:slide-in-from-top-1',\n 'ds:motion-reduce:animate-none',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' '),\n);\n\nconst itemClasses = cva(\n [\n 'ds:relative ds:flex ds:items-center ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-md)]',\n 'ds:min-h-[var(--min-target-size)]',\n 'ds:text-[length:var(--font-size-sm)] ds:text-[color:var(--foreground)]',\n 'ds:cursor-pointer ds:select-none ds:outline-none',\n // Radix highlights on hover and on keyboard focus alike.\n MENU_ROW_HIGHLIGHT.highlighted,\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid ds:focus-visible:outline-[color:var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n // Disabled\n 'ds:data-[disabled]:opacity-50 ds:data-[disabled]:cursor-not-allowed',\n 'ds:data-[disabled]:pointer-events-none',\n ].join(' '),\n);\n\nconst labelClasses = cva(\n [\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-2xs)]',\n // Quiet sentence-case caption — the shouty uppercase eyebrow made\n // every menu read as a form. Groups should lean on separators first\n // and reach for a Label only when the grouping is genuinely unclear.\n 'ds:text-[length:var(--font-size-xs)]',\n 'ds:font-[var(--font-weight-medium)]',\n 'ds:text-[color:var(--muted-foreground)]',\n 'ds:select-none',\n ].join(' '),\n);\n\nconst indicatorSlotClasses =\n 'ds:inline-flex ds:items-center ds:justify-center ds:size-4 ds:shrink-0';\n\n/* ------------------------------------------------------------------ */\n/* Root / Trigger / Portal */\n/* ------------------------------------------------------------------ */\n\n/** A named settings row (a ChoiceSub or SwitchItem given a `name`) and\n * its current state, as an agent reads it. Values only, never labels. */\nexport interface DropdownMenuSetting {\n setting: string;\n kind: 'choice' | 'switch';\n /** ChoiceSub: the selected value and every option's value. */\n value?: string;\n options?: string[];\n /** SwitchItem: whether it is on. */\n checked?: boolean;\n disabled: boolean;\n}\n\n// Curated agent-readiness handle — see dropdown-menu.agent.ts.\nexport interface DropdownMenuHandle {\n getIsOpen: () => boolean;\n open: () => void;\n close: () => void;\n /** The named settings rows, while the menu is open (closed: none). */\n getSettings: () => DropdownMenuSetting[];\n /** Pick `value` on the named ChoiceSub. A closed menu opens for the\n * moment and closes again. Rejects on an unknown row, value or a\n * disabled one. */\n setValue: (setting: string, value: string) => Promise<void>;\n /** Turn the named SwitchItem on or off, as `setValue` does. */\n setChecked: (setting: string, checked: boolean) => Promise<void>;\n}\n\n/* A named row registers with its Root so the handle can drive it. */\ntype SettingRow =\n | {\n kind: 'choice';\n read: () => {\n value: string;\n options: ReadonlyArray<{ value: string; disabled?: boolean }>;\n disabled: boolean;\n closeOnSelect: boolean;\n };\n pick: (value: string) => void;\n }\n | {\n kind: 'switch';\n read: () => { checked: boolean; disabled: boolean };\n pick: (checked: boolean) => void;\n };\n\ntype RegisterSettingRow = (name: string, row: SettingRow) => () => void;\n\nconst SettingRowsContext = createContext<RegisterSettingRow | undefined>(\n undefined,\n);\n\nconst nextFrame = () =>\n new Promise<void>((resolve) => {\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => resolve());\n } else {\n setTimeout(resolve, 16);\n }\n });\n\nexport interface DropdownMenuRootProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Root\n> {\n /** Opaque instance id — forwarded to DropdownMenu.Content as `data-component-id`. */\n id?: string;\n}\n\nconst DropdownMenuIdContext = createContext<string | undefined>(undefined);\n\nconst Root = ({\n dir,\n id,\n open: openProp,\n defaultOpen,\n onOpenChange,\n ...props\n}: DropdownMenuRootProps) => {\n const autoDir = useDocumentDirection();\n const [openRaw, setOpen] = useControllableState<boolean>({\n value: openProp,\n defaultValue: defaultOpen ?? false,\n onChange: onOpenChange,\n });\n const open = openRaw ?? false;\n\n const openRef = useRef(open);\n useEffect(() => {\n openRef.current = open;\n }, [open]);\n\n const rowsRef = useRef(new Map<string, SettingRow>());\n // Counts explicit open/close calls on the handle.\n const openRequestsRef = useRef(0);\n const registerRow = useMemo<RegisterSettingRow>(\n () => (name, row) => {\n rowsRef.current.set(name, row);\n return () => {\n if (rowsRef.current.get(name) === row) rowsRef.current.delete(name);\n };\n },\n [],\n );\n\n const handle = useMemo<DropdownMenuHandle>(() => {\n /* Rows mount with the menu. A closed menu opens for the moment, waits\n for the row to register, and closes again once the change lands. */\n // open/close update the ref at once, not a render later, so a set\n // right after an explicit open() sees the menu as open and leaves it so.\n const show = (next: boolean) => {\n openRef.current = next;\n setOpen(next);\n };\n const withRow = async <K extends SettingRow['kind']>(\n setting: string,\n kind: K,\n apply: (row: Extract<SettingRow, { kind: K }>) => void,\n ) => {\n const opened = !openRef.current;\n if (opened) show(true);\n const requests = openRequestsRef.current;\n try {\n // A row mounts a render or two after the menu opens.\n let row = rowsRef.current.get(setting);\n for (let frame = 0; !row && frame < 30; frame += 1) {\n await nextFrame();\n row = rowsRef.current.get(setting);\n }\n if (!row || row.kind !== kind) {\n throw new Error(`No ${kind} setting named \"${setting}\" in this menu`);\n }\n apply(row as Extract<SettingRow, { kind: K }>);\n } finally {\n // Close only a menu this call opened, and nobody asked for since.\n if (opened && openRequestsRef.current === requests) show(false);\n }\n };\n return {\n getIsOpen: () => openRef.current,\n open: () => {\n openRequestsRef.current += 1;\n show(true);\n },\n close: () => {\n openRequestsRef.current += 1;\n show(false);\n },\n getSettings: () =>\n [...rowsRef.current].map(([setting, row]) => {\n if (row.kind === 'choice') {\n const { value, options, disabled } = row.read();\n return {\n setting,\n kind: 'choice' as const,\n value,\n options: options.map((option) => option.value),\n disabled,\n };\n }\n const { checked, disabled } = row.read();\n return { setting, kind: 'switch' as const, checked, disabled };\n }),\n setValue: (setting, value) =>\n withRow(setting, 'choice', (row) => {\n const { options, disabled, closeOnSelect } = row.read();\n const option = options.find((o) => o.value === value);\n if (disabled || !option || option.disabled) {\n throw new Error(\n `\"${value}\" is not an option that \"${setting}\" can take now`,\n );\n }\n row.pick(value);\n // As a click on the option would.\n if (closeOnSelect) show(false);\n }),\n setChecked: (setting, checked) =>\n withRow(setting, 'switch', (row) => {\n if (row.read().disabled) {\n throw new Error(`\"${setting}\" is disabled`);\n }\n row.pick(checked);\n }),\n };\n }, [setOpen]);\n useAgentRegistration(dropdownMenuAgent, handle, id);\n\n return (\n <DropdownMenuIdContext.Provider value={id}>\n <SettingRowsContext.Provider value={registerRow}>\n <RadixDropdownMenu.Root\n dir={dir ?? autoDir}\n open={open}\n onOpenChange={setOpen}\n {...props}\n />\n </SettingRowsContext.Provider>\n </DropdownMenuIdContext.Provider>\n );\n};\nRoot.displayName = 'DropdownMenu.Root';\n\nconst Trigger = RadixDropdownMenu.Trigger;\nconst Portal = RadixDropdownMenu.Portal;\nconst RadixGroup = RadixDropdownMenu.Group;\nconst RadixRadioGroup = RadixDropdownMenu.RadioGroup;\n\n/* ------------------------------------------------------------------ */\n/* Content */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuContentProps\n extends\n ComponentPropsWithoutRef<typeof RadixDropdownMenu.Content>,\n VariantProps<typeof contentVariants> {}\n\nconst Content = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Content>,\n DropdownMenuContentProps\n>(({ className, sideOffset = 8, ...props }, ref) => {\n const instanceId = useContext(DropdownMenuIdContext);\n return (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.Content\n ref={ref}\n sideOffset={sideOffset}\n className={contentVariants({ className })}\n data-component=\"dropdown-menu\"\n data-component-id={instanceId}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n );\n});\nContent.displayName = 'DropdownMenu.Content';\n\n/* ------------------------------------------------------------------ */\n/* Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuItemProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Item\n> {\n startIcon?: ReactNode;\n endIcon?: ReactNode;\n description?: ReactNode;\n /** Convenience — renders a DS <Kbd keys={…}> on the inline-end. */\n shortcut?: Array<KbdNamedKey | string>;\n}\n\nconst Item = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Item>,\n DropdownMenuItemProps\n>(\n (\n {\n className,\n startIcon,\n endIcon,\n description,\n shortcut,\n children,\n ...props\n },\n ref,\n ) => (\n <RadixDropdownMenu.Item\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:flex ds:flex-col ds:min-w-0\">\n <span className=\"ds:truncate\">{children}</span>\n {description ? (\n <span className=\"type-meta ds:text-[color:var(--muted-foreground)] ds:truncate\">\n {description}\n </span>\n ) : null}\n </span>\n {shortcut ? (\n <span className=\"ds:ms-auto\">\n <Kbd keys={shortcut} size=\"sm\" />\n </span>\n ) : endIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:ms-auto ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {endIcon}\n </span>\n ) : null}\n </RadixDropdownMenu.Item>\n ),\n);\nItem.displayName = 'DropdownMenu.Item';\n\n/* ------------------------------------------------------------------ */\n/* CheckboxItem */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuCheckboxItemProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.CheckboxItem\n>;\n\nconst CheckboxItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.CheckboxItem>,\n DropdownMenuCheckboxItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.CheckboxItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n <span className={indicatorSlotClasses}>\n <RadixDropdownMenu.ItemIndicator>\n <Check aria-hidden className=\"ds:size-4\" />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.CheckboxItem>\n));\nCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\n/* Registers a named row with its Root for as long as it is mounted. The\n row object is rebuilt each render; the Root reads it through a ref, so\n it always sees the latest value and callback. */\nfunction useSettingRow(name: string | undefined, row: SettingRow): void {\n const register = useContext(SettingRowsContext);\n const latest = useRef(row);\n useLayoutEffect(() => {\n latest.current = row;\n });\n useEffect(() => {\n if (!name || !register) return undefined;\n const proxy: SettingRow =\n latest.current.kind === 'choice'\n ? {\n kind: 'choice',\n read: () =>\n (\n latest.current as Extract<SettingRow, { kind: 'choice' }>\n ).read(),\n pick: (value) =>\n (latest.current as Extract<SettingRow, { kind: 'choice' }>).pick(\n value,\n ),\n }\n : {\n kind: 'switch',\n read: () =>\n (\n latest.current as Extract<SettingRow, { kind: 'switch' }>\n ).read(),\n pick: (checked) =>\n (latest.current as Extract<SettingRow, { kind: 'switch' }>).pick(\n checked,\n ),\n };\n return register(name, proxy);\n }, [name, register]);\n}\n\n/* ------------------------------------------------------------------ */\n/* SwitchItem */\n/* */\n/* A persistent on/off toggle row (menuitemcheckbox semantics) whose */\n/* indicator is a trailing switch glyph instead of a tick — for */\n/* settings that live inside a menu (e.g. accessible mode). Selecting */\n/* keeps the menu open so the user sees the toggle land. */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuSwitchItemProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.CheckboxItem\n> {\n /** Names the row for agents (the menu's `set_checked` action and\n * `settings` state) and emits `data-setting`. */\n name?: string;\n}\n\n// Mirrors the kit Switch's `sm` metrics (track h-4 w-7, thumb size-3)\n// and its primary checked fill so the two switch affordances stay kin.\n// The muted-foreground border keeps the OFF state perceivable — without\n// it the muted track sits at ~1.2:1 on the popover (WCAG 1.4.11).\nconst switchTrackClasses = [\n 'ds:ms-auto ds:inline-flex ds:items-center ds:shrink-0',\n 'ds:h-4 ds:w-7 ds:p-[2px]',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:border ds:border-[length:var(--border-width-sm)] ds:border-[color:var(--muted-foreground)]',\n 'ds:bg-[color:var(--muted)]',\n 'ds:[[data-state=checked]_&]:bg-[color:var(--primary)]',\n 'ds:[[data-state=checked]_&]:border-[color:var(--primary)]',\n // Thumb slides via justify swap — logical-direction safe, no\n // transform to fight under prefers-reduced-motion.\n 'ds:justify-start ds:[[data-state=checked]_&]:justify-end',\n 'ds:forced-colors:border-[CanvasText]',\n // HCM strips fills — paint the checked track with the system\n // selection colour so state isn't conveyed by thumb position alone.\n 'ds:forced-colors:[[data-state=checked]_&]:bg-[SelectedItem]',\n].join(' ');\n\nconst switchThumbClasses = [\n 'ds:block ds:size-3',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:bg-[color:var(--background)]',\n 'ds:border ds:border-[length:var(--border-width-sm)] ds:border-[color:var(--muted-foreground)]',\n 'ds:[[data-state=checked]_&]:border-transparent',\n 'ds:shadow-[var(--shadow-sm)]',\n 'ds:forced-colors:bg-[CanvasText]',\n].join(' ');\n\nconst SwitchItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.CheckboxItem>,\n DropdownMenuSwitchItemProps\n>(({ className, children, onSelect, name, ...props }, ref) => {\n const { checked, onCheckedChange, disabled } = props;\n useSettingRow(name, {\n kind: 'switch',\n read: () => ({ checked: checked === true, disabled: disabled === true }),\n // What a click does, and only when it would change something: the\n // consumer's onSelect, then the new state.\n pick: (next) => {\n if (next === (checked === true)) return;\n onSelect?.(new Event('menu.itemSelect', { cancelable: true }));\n onCheckedChange?.(next);\n },\n });\n return (\n <RadixDropdownMenu.CheckboxItem\n ref={ref}\n className={itemClasses({ className })}\n data-setting={name}\n onSelect={(event) => {\n // Keep-open is unconditional — prevent first so a throwing consumer\n // handler can't close the menu as a side effect.\n event.preventDefault();\n onSelect?.(event);\n }}\n {...props}\n >\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n <span aria-hidden=\"true\" className={switchTrackClasses}>\n <span className={switchThumbClasses} />\n </span>\n </RadixDropdownMenu.CheckboxItem>\n );\n});\nSwitchItem.displayName = 'DropdownMenu.SwitchItem';\n\n/* ------------------------------------------------------------------ */\n/* RadioGroup / RadioItem */\n/* ------------------------------------------------------------------ */\n\nconst RadioGroup = RadixRadioGroup;\n\nexport type DropdownMenuRadioItemProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.RadioItem\n>;\n\nconst RadioItem = forwardRef<\n ElementRef<typeof RadixDropdownMenu.RadioItem>,\n DropdownMenuRadioItemProps\n>(({ className, children, ...props }, ref) => (\n <RadixDropdownMenu.RadioItem\n ref={ref}\n className={itemClasses({ className })}\n {...props}\n >\n {/* Real radio affordance: an always-visible ring with a filled dot\n when selected — a tick reads as a checkbox, not a single choice.\n The ring colours via the item's own data-state so the unchecked\n options still advertise that they are part of a radio set. */}\n <span className={indicatorSlotClasses} aria-hidden=\"true\">\n <span\n className={[\n 'ds:inline-flex ds:size-4 ds:items-center ds:justify-center ds:shrink-0',\n 'ds:rounded-[var(--radius-full)]',\n 'ds:border ds:border-[length:var(--border-width-sm)] ds:border-[color:var(--muted-foreground)]',\n 'ds:[[data-state=checked]_&]:border-[color:var(--accent)]',\n // Accent on the lit row would vanish, so ring and dot take its ink.\n 'ds:not-forced-colors:[[data-highlighted][data-state=checked]_&]:border-[color:var(--accent-foreground)]',\n 'ds:forced-colors:border-[CanvasText]',\n ].join(' ')}\n >\n <RadixDropdownMenu.ItemIndicator>\n <span\n className={[\n 'ds:block ds:size-2 ds:rounded-[var(--radius-full)] ds:bg-[color:var(--accent)]',\n 'ds:not-forced-colors:group-data-[highlighted]/menu-row:bg-[color:var(--accent-foreground)]',\n 'ds:forced-colors:bg-[CanvasText]',\n ].join(' ')}\n />\n </RadixDropdownMenu.ItemIndicator>\n </span>\n </span>\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n </RadixDropdownMenu.RadioItem>\n));\nRadioItem.displayName = 'DropdownMenu.RadioItem';\n\n/* ------------------------------------------------------------------ */\n/* Label */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuLabelProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Label\n>;\n\nconst Label = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Label>,\n DropdownMenuLabelProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Label\n ref={ref}\n className={labelClasses({ className })}\n {...props}\n />\n));\nLabel.displayName = 'DropdownMenu.Label';\n\n/* ------------------------------------------------------------------ */\n/* Separator */\n/* ------------------------------------------------------------------ */\n\nexport type DropdownMenuSeparatorProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.Separator\n>;\n\nconst MenuSeparator = forwardRef<\n ElementRef<typeof RadixDropdownMenu.Separator>,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Separator ref={ref} asChild {...props}>\n <DsSeparator\n className={['ds:my-[calc(var(--spacing-xs)/2)]', className ?? '']\n .filter(Boolean)\n .join(' ')}\n />\n </RadixDropdownMenu.Separator>\n));\nMenuSeparator.displayName = 'DropdownMenu.Separator';\n\n/* ------------------------------------------------------------------ */\n/* Shortcut — thin wrapper over DS Kbd for the right side of an Item */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuShortcutProps {\n keys: Array<KbdNamedKey | string>;\n separator?: 'none' | 'plus' | 'then';\n}\n\nconst Shortcut = forwardRef<HTMLSpanElement, DropdownMenuShortcutProps>(\n ({ keys, separator = 'none' }, ref) => (\n <span ref={ref} className=\"ds:ms-auto ds:ps-[var(--spacing-sm)]\">\n <Kbd keys={keys} separator={separator} size=\"sm\" />\n </span>\n ),\n);\nShortcut.displayName = 'DropdownMenu.Shortcut';\n\n/* ------------------------------------------------------------------ */\n/* Sub-menu */\n/* ------------------------------------------------------------------ */\n\nconst Sub = RadixDropdownMenu.Sub;\n\nexport interface DropdownMenuSubTriggerProps extends ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.SubTrigger\n> {\n startIcon?: ReactNode;\n}\n\nconst SubTrigger = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubTrigger>,\n DropdownMenuSubTriggerProps\n>(({ className, startIcon, children, ...props }, ref) => (\n <RadixDropdownMenu.SubTrigger\n ref={ref}\n // Stays lit while focus is in its submenu, so the path is visible.\n className={itemClasses({\n className: [MENU_ROW_HIGHLIGHT.open, className].filter(Boolean).join(' '),\n })}\n {...props}\n >\n {startIcon ? (\n <span\n aria-hidden=\"true\"\n className=\"ds:inline-flex ds:size-4 ds:shrink-0 ds:items-center ds:justify-center\"\n >\n {startIcon}\n </span>\n ) : null}\n <span className=\"ds:flex-1 ds:truncate\">{children}</span>\n <ChevronRight\n aria-hidden\n className=\"ds:ms-auto ds:size-4 ds:shrink-0 ds:rtl:-scale-x-100\"\n />\n </RadixDropdownMenu.SubTrigger>\n));\nSubTrigger.displayName = 'DropdownMenu.SubTrigger';\n\nexport type DropdownMenuSubContentProps = ComponentPropsWithoutRef<\n typeof RadixDropdownMenu.SubContent\n>;\n\nconst SubContent = forwardRef<\n ElementRef<typeof RadixDropdownMenu.SubContent>,\n DropdownMenuSubContentProps\n>(({ className, ...props }, ref) => (\n <RadixDropdownMenu.Portal>\n <RadixDropdownMenu.SubContent\n ref={ref}\n sideOffset={8}\n data-component=\"dropdown-menu-sub-content\"\n className={contentVariants({ className })}\n {...props}\n />\n </RadixDropdownMenu.Portal>\n));\nSubContent.displayName = 'DropdownMenu.SubContent';\n\n/* ------------------------------------------------------------------ */\n/* ChoiceSub */\n/* */\n/* One setting with a few exclusive options, as a single menu row that */\n/* names the setting and shows its current value (\"Row density · */\n/* Compact ›\"). The row opens a submenu of radio items. It replaces the */\n/* \"label + Select\" row inside popovers: no Select ever opens inside a */\n/* menu, and the whole settings menu stays keyboard-native. Picking an */\n/* option keeps the menu open by default, like SwitchItem, so the user */\n/* sees the value land and can adjust the next setting. */\n/* ------------------------------------------------------------------ */\n\nexport interface DropdownMenuChoiceOption<T extends string = string> {\n value: T;\n label: ReactNode;\n disabled?: boolean;\n}\n\nexport interface DropdownMenuChoiceSubProps<T extends string = string> {\n /** The setting's name, shown at the start of the row. */\n label: ReactNode;\n /** The selected option's value; its label shows at the end of the row. */\n value: T;\n onValueChange: (value: T) => void;\n options: ReadonlyArray<DropdownMenuChoiceOption<T>>;\n startIcon?: ReactNode;\n disabled?: boolean;\n /** Close the whole menu after a pick. @default false */\n closeOnSelect?: boolean;\n /** Names the row for agents (the menu's `set_value` action and\n * `settings` state) and emits `data-setting`. */\n name?: string;\n className?: string;\n}\n\nfunction ChoiceSub<T extends string>({\n label,\n value,\n onValueChange,\n options,\n startIcon,\n disabled,\n closeOnSelect = false,\n name,\n className,\n}: DropdownMenuChoiceSubProps<T>) {\n const current = options.find((option) => option.value === value);\n useSettingRow(name, {\n kind: 'choice',\n read: () => ({\n value,\n options,\n disabled: disabled === true,\n closeOnSelect,\n }),\n pick: (next) => onValueChange(next as T),\n });\n return (\n <Sub>\n <SubTrigger\n startIcon={startIcon}\n disabled={disabled}\n className={className}\n data-component=\"dropdown-menu-choice\"\n data-value={value}\n data-setting={name}\n >\n <span className=\"ds:flex ds:min-w-0 ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <span className=\"ds:truncate\">{label}</span>\n {current ? (\n <span className=\"ds:shrink-0 ds:text-[color:var(--muted-foreground)] ds:[[data-highlighted]_&]:text-current\">\n {current.label}\n </span>\n ) : null}\n </span>\n </SubTrigger>\n <SubContent>\n <RadioGroup\n value={value}\n onValueChange={(next) => onValueChange(next as T)}\n >\n {options.map((option) => (\n <RadioItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n onSelect={\n closeOnSelect ? undefined : (event) => event.preventDefault()\n }\n >\n {option.label}\n </RadioItem>\n ))}\n </RadioGroup>\n </SubContent>\n </Sub>\n );\n}\nChoiceSub.displayName = 'DropdownMenu.ChoiceSub';\n\n/* ------------------------------------------------------------------ */\n/* Assembled namespace export */\n/* ------------------------------------------------------------------ */\n\nexport const DropdownMenu = {\n Root,\n Trigger,\n Portal,\n Content,\n Group: RadixGroup,\n Item,\n CheckboxItem,\n SwitchItem,\n RadioGroup,\n RadioItem,\n Label,\n Separator: MenuSeparator,\n Shortcut,\n Sub,\n SubTrigger,\n SubContent,\n ChoiceSub,\n};\n"],"names":["dropdownMenuAgent","handle","args","contentVariants","cva","itemClasses","MENU_ROW_HIGHLIGHT","labelClasses","indicatorSlotClasses","SettingRowsContext","createContext","nextFrame","resolve","DropdownMenuIdContext","Root","dir","id","openProp","defaultOpen","onOpenChange","props","autoDir","useDocumentDirection","openRaw","setOpen","useControllableState","open","openRef","useRef","useEffect","rowsRef","openRequestsRef","registerRow","useMemo","name","row","show","next","withRow","setting","kind","apply","opened","requests","frame","value","options","disabled","option","checked","closeOnSelect","o","useAgentRegistration","jsx","RadixDropdownMenu","Trigger","Portal","RadixGroup","RadixRadioGroup","Content","forwardRef","className","sideOffset","ref","instanceId","useContext","Item","startIcon","endIcon","description","shortcut","children","jsxs","Kbd","CheckboxItem","Check","useSettingRow","register","latest","useLayoutEffect","proxy","switchTrackClasses","switchThumbClasses","SwitchItem","onSelect","onCheckedChange","event","RadioGroup","RadioItem","Label","MenuSeparator","DsSeparator","Shortcut","keys","separator","Sub","SubTrigger","ChevronRight","SubContent","ChoiceSub","label","onValueChange","current","DropdownMenu"],"mappings":"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"}
@@ -10,7 +10,7 @@ import { D as T } from "./date-picker-6tFnKFty.js";
10
10
  import { N as Y } from "./number-input-Cgu2TtA8.js";
11
11
  import { C as U } from "./card-DPmk26CL.js";
12
12
  import { B as W } from "./badge-BAkd6_Pj.js";
13
- import { I as ce } from "./insert-result-CSuPQyKL.js";
13
+ import { I as ce } from "./insert-result-Fu9AHxR6.js";
14
14
  import { D as x, r as ue, c as me, e as pe, f as he, A as ge, h as fe, i as ye } from "./antenatal-schedule-timeline-8fm3vPSV.js";
15
15
  import { c as J } from "./date-picker-variants-B9NLAfUK.js";
16
16
  import { p as De } from "./parseISO-fOGpHKXm.js";
@@ -568,4 +568,4 @@ Ae.displayName = "DueDateCalculator";
568
568
  export {
569
569
  Ae as D
570
570
  };
571
- //# sourceMappingURL=due-date-calculator-BVqJaxzd.js.map
571
+ //# sourceMappingURL=due-date-calculator-DUjw4w5O.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"due-date-calculator-BVqJaxzd.js","sources":["../../src/components/due-date-calculator/due-date-calculator.agent.ts","../../src/components/due-date-calculator/due-date-calculator.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — DueDateCalculator. */\n/* */\n/* Estimates the date of delivery from one of three dating methods (LMP / */\n/* conception / IVF transfer) plus current gestational age + trimester. */\n/* The agent surface is the dating inputs plus the computed EDD / GA; the */\n/* handle is the curated `DueDateCalculatorHandle` (the public `ref` */\n/* stays the root <div>, exactly as `slider.tsx` and `bmi-calculator.tsx` */\n/* keep theirs). */\n/* */\n/* Dates cross the boundary as local-time `yyyy-MM-dd` strings, never */\n/* `Date` objects, so nothing shifts a day under JSON/UTC serialisation. */\n/* */\n/* DEPRECATED surface: this component is superseded by PregnancyDating, */\n/* which unifies dating + gestational age. Prefer the `pregnancy-dating` */\n/* adapter for new work — every action here is marked deprecated. */\n/* */\n/* PHI (§7): never exposes patient identity — the slots return the */\n/* operator's own structural dating inputs and the dates derived from */\n/* them. See `src/docs/26-agent-readiness.mdx`. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { DueDateCalculatorHandle } from './due-date-calculator';\n\nconst DEPRECATED = 'Superseded by the `pregnancy-dating` adapter.';\n\n/** Shared JSON Schema fragment for a local calendar date. */\nconst isoDate = {\n type: 'string',\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$',\n} as const;\n\nexport const dueDateCalculatorAgent: AgentAdapter<DueDateCalculatorHandle> = {\n id: 'due-date-calculator',\n // set_value → the six `set_*` actions + the `inputs` state slot.\n capabilities: ['set_value'],\n state: {\n inputs: {\n type: '{ method: string, referenceDate: string | null, cycleLength: number | null, embryoAge: 3 | 5, crlMm: number | null, scanDate: string | null, asOfDate: string }',\n descriptionKey: 'ui.agent.dueDateCalculator.state.inputs',\n description:\n 'The dating inputs as entered — method, its reference date, cycle length (LMP), embryo age (IVF), the optional CRL + scan date, and the evaluation date. Dates are `yyyy-MM-dd`. Read this to see which method a reference date will be interpreted under.',\n read: (handle) => handle.getInputs(),\n },\n result: {\n type: '{ dueDate: string, gestationalStart: string, gestationalAge: { weeks: number, days: number, totalDays: number } | null, trimester: string } | null',\n descriptionKey: 'ui.agent.dueDateCalculator.state.result',\n description:\n 'Computed estimated delivery date, the GA day-0 anchor after any CRL re-dating, the gestational age as of the evaluation date, and the trimester band. Null until a reference date is set.',\n read: (handle) => handle.getResult(),\n },\n },\n actions: {\n set_method: {\n // Drives the same local input state a user picks; nothing is persisted\n // to a record, and the choice is reversible in the same UI.\n safety: 'write',\n argsType: \"{ method: 'lmp' | 'conception' | 'ivf' }\",\n argsSchema: {\n type: 'object',\n properties: {\n method: {\n enum: ['lmp', 'conception', 'ivf'],\n description:\n 'Which anchor to date from — last menstrual period, conception, or IVF transfer.',\n },\n },\n required: ['method'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the method was applied.',\n },\n errors: [\n 'Returns false for a method outside the three supported anchors.',\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setMethod',\n description:\n 'Choose which anchor the pregnancy is dated from. The reference date is kept and re-interpreted under the new method, so set the method first.',\n invoke: (handle, args: { method: 'lmp' | 'conception' | 'ivf' }) =>\n handle.setMethod(args.method),\n },\n set_reference_date: {\n safety: 'write',\n argsType: '{ date: string | null }',\n argsSchema: {\n type: 'object',\n properties: {\n date: {\n oneOf: [\n { ...isoDate, description: 'Local calendar date, `yyyy-MM-dd`.' },\n { type: 'null' },\n ],\n description:\n 'The date the active method anchors on — LMP, conception, or transfer — or null to clear it. Must not be in the future.',\n },\n },\n required: ['date'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the date was applied.',\n },\n errors: [\n 'Returns false for an unparseable date or a date in the future — the on-screen DatePicker caps at today.',\n ],\n examples: [\n {\n args: { date: '2026-01-12' },\n note: 'Under the default LMP method, a last period starting 12 January.',\n },\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setReferenceDate',\n description:\n 'Set the reference date for the active method. This is the only required input — the result stays null without it.',\n invoke: (handle, args: { date: string | null }) =>\n handle.setReferenceDate(args.date),\n },\n set_cycle_length: {\n safety: 'write',\n argsType: '{ days: number | null }',\n argsSchema: {\n type: 'object',\n properties: {\n days: {\n oneOf: [\n { type: 'integer', minimum: 20, maximum: 45 },\n { type: 'null' },\n ],\n description:\n 'Average cycle length in days (20–45), or null to fall back to the 28-day default.',\n },\n },\n required: ['days'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the value was applied.',\n },\n errors: [\n 'Returns false outside 20–45 days — the same bounds the on-screen NumberInput enforces.',\n 'Applies but changes nothing unless the method is `lmp`, and is ignored once a CRL re-dating is confirmed.',\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setCycleLength',\n description:\n 'LMP method only — set the average cycle length, which shifts Naegele dating off the 28-day assumption.',\n invoke: (handle, args: { days: number | null }) =>\n handle.setCycleLength(args.days),\n },\n set_embryo_age: {\n safety: 'write',\n argsType: '{ days: 3 | 5 }',\n argsSchema: {\n type: 'object',\n properties: {\n days: {\n enum: [3, 5],\n description:\n 'Embryo age at transfer in days — 3 (cleavage) or 5 (blastocyst).',\n },\n },\n required: ['days'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the value was applied.',\n },\n errors: [\n 'Returns false for any value other than 3 or 5.',\n 'Applies but changes nothing unless the method is `ivf`.',\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setEmbryoAge',\n description:\n 'IVF method only — set the embryo age at transfer, which offsets the transfer date back to a notional LMP.',\n invoke: (handle, args: { days: 3 | 5 }) => handle.setEmbryoAge(args.days),\n },\n set_crl: {\n safety: 'write',\n argsType: '{ crlMm?: number | null, scanDate?: string | null }',\n argsSchema: {\n type: 'object',\n properties: {\n crlMm: {\n oneOf: [{ type: 'number', exclusiveMinimum: 0 }, { type: 'null' }],\n description:\n 'Crown-rump length in millimetres, or null to clear it.',\n },\n scanDate: {\n oneOf: [{ ...isoDate }, { type: 'null' }],\n description:\n 'Date of the CRL scan (`yyyy-MM-dd`, not in the future), or null to clear it.',\n },\n },\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the measurement was applied.',\n },\n errors: [\n 'Returns false and writes nothing when the length is not positive or the scan date is unparseable or in the future — the payload applies all-or-nothing.',\n 'Re-dating only happens under the `lmp` method, and only when both the length and the scan date are set.',\n ],\n examples: [\n {\n args: { crlMm: 42, scanDate: '2026-02-20' },\n note: 'A first-trimester CRL that may re-date the pregnancy per ACOG CO 700.',\n },\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setCrl',\n description:\n 'LMP method only — set the first-trimester crown-rump length and its scan date. When the two disagree with the LMP beyond the ACOG threshold, the scan re-dates the pregnancy and overrides cycle length.',\n invoke: (\n handle,\n args: { crlMm?: number | null; scanDate?: string | null },\n ) => handle.setCrl(args),\n },\n set_as_of_date: {\n safety: 'write',\n argsType: '{ date: string }',\n argsSchema: {\n type: 'object',\n properties: {\n date: {\n ...isoDate,\n description:\n 'Date to evaluate gestational age and trimester against, `yyyy-MM-dd`. May be in the future to project forward.',\n },\n },\n required: ['date'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the date was applied.',\n },\n errors: ['Returns false for an unparseable date.'],\n examples: [\n {\n args: { date: '2026-09-15' },\n note: 'Project gestational age forward to an upcoming appointment.',\n },\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setAsOfDate',\n description:\n 'Set the date gestational age, trimester and the antenatal schedule are evaluated against. Defaults to today; the estimated delivery date itself does not depend on it.',\n invoke: (handle, args: { date: string }) => handle.setAsOfDate(args.date),\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'due-date-calculator',\n description: 'Marks the DueDateCalculator wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Also the registry key — without an `id` the instance does not register and the handle-driven actions/state are unreachable.',\n },\n },\n};\n","/* ------------------------------------------------------------------ */\n/* DueDateCalculator — estimate the date of delivery from one of three */\n/* dating methods, with current gestational age + trimester. */\n/* */\n/* - Maths lives in `./gestation` (pure, separately tested). */\n/* - Three methods: LMP (Naegele, cycle-length adjustable), conception, */\n/* and IVF transfer (Day-3 vs Day-5 embryo). */\n/* - The reference date can't be in the future, so the DatePicker caps */\n/* at today. */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useRef, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { format, isAfter, parseISO } from 'date-fns';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { dueDateCalculatorAgent } from './due-date-calculator.agent';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Card } from '../card';\nimport { Badge } from '../badge';\nimport {\n InsertButton,\n type InsertPayload,\n type InsertVariant,\n type InsertMode,\n} from '../_shared/insert-result';\nimport {\n type DueDateMethod,\n type EmbryoAge,\n type DueDateResult,\n computeDueDate,\n redateByCrl,\n DEFAULT_CYCLE_LENGTH,\n TRIMESTER_BADGE_VARIANT,\n trimesterHighlightToken,\n} from '../_shared/obstetrics';\nimport {\n computeAntenatalSchedule,\n type AntenatalScheduleOptions,\n} from '../_shared/antenatal-schedule';\nimport {\n AntenatalScheduleTimeline,\n buildScheduleInsertFields,\n} from '../_shared/antenatal-schedule-timeline';\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]', {\n variants: {\n width: { full: 'ds:w-full', auto: 'ds:inline-flex' },\n },\n defaultVariants: { width: 'full' },\n});\n\n/** Reference-date i18n key per method. */\nconst DATE_LABEL_KEY: Record<DueDateMethod, string> = {\n lmp: 'dueDateCalculator.lmpDate',\n conception: 'dueDateCalculator.conceptionDate',\n ivf: 'dueDateCalculator.transferDate',\n};\n\n/* ------------------------------------------------------------------ */\n/* Agent boundary */\n/* */\n/* Dates cross the agent boundary as local-time `yyyy-MM-dd` strings, */\n/* never `Date` objects — a Date JSON-serialises to UTC and silently */\n/* shifts the day for anyone east or west of Greenwich. */\n/* ------------------------------------------------------------------ */\n\nconst toIsoDate = (d: Date): string => format(d, 'yyyy-MM-dd');\n\nconst fromIsoDate = (iso: string): Date | null => {\n const d = parseISO(iso);\n return Number.isNaN(d.getTime()) ? null : d;\n};\n\n/** UI input bounds, mirrored by the agent handle so it can't out-type a user. */\nconst CYCLE_LENGTH_RANGE = { min: 20, max: 45 } as const;\n\n/** The dating inputs as entered. */\nexport interface DueDateInputsSnapshot {\n /** Which anchor the pregnancy is dated from. */\n method: DueDateMethod;\n /** The method's reference date (`yyyy-MM-dd`), or null when unset. */\n referenceDate: string | null;\n /** LMP only — average cycle length in days, or null for the 28-day default. */\n cycleLength: number | null;\n /** IVF only — embryo age at transfer, in days. */\n embryoAge: EmbryoAge;\n /** LMP only — crown-rump length in millimetres, or null. */\n crlMm: number | null;\n /** LMP only — date of the CRL scan (`yyyy-MM-dd`), or null. */\n scanDate: string | null;\n /** The date gestational age and trimester are evaluated against. */\n asOfDate: string;\n}\n\n/** `DueDateResult` projected onto the agent boundary — ISO dates, no Dates. */\nexport interface DueDateSnapshot {\n /** Estimated date of delivery, `yyyy-MM-dd`. */\n dueDate: string;\n /** GA day-0 anchor (effective LMP) after any CRL re-dating, `yyyy-MM-dd`. */\n gestationalStart: string;\n /** Gestational age as of the evaluation date; null before conception. */\n gestationalAge: { weeks: number; days: number; totalDays: number } | null;\n /** Trimester band as of the evaluation date. */\n trimester: DueDateResult['trimester'];\n}\n\n/**\n * Curated imperative handle for agent / external automation. Reads the dating\n * inputs and the computed due date, and drives the inputs the way a user\n * would. Never exposes patient identity — only structural dates and numbers.\n * Consumed by `due-date-calculator.agent.ts`; the public `ref` stays the root\n * DOM element.\n */\nexport interface DueDateCalculatorHandle {\n /** The dating inputs as entered. */\n getInputs: () => DueDateInputsSnapshot;\n /** Computed due date, gestational age and trimester, or null until a reference date is set. */\n getResult: () => DueDateSnapshot | null;\n /** Switch the dating method. Keeps the reference date, which is re-interpreted. */\n setMethod: (method: DueDateMethod) => boolean;\n /** Set the method's reference date (`yyyy-MM-dd`, not in the future). */\n setReferenceDate: (isoDate: string | null) => boolean;\n /** LMP only — set the average cycle length in days (20–45). */\n setCycleLength: (days: number | null) => boolean;\n /** IVF only — set the embryo age at transfer (3 or 5 days). */\n setEmbryoAge: (days: EmbryoAge) => boolean;\n /** LMP only — set the CRL measurement and/or its scan date for ACOG re-dating. */\n setCrl: (next: {\n crlMm?: number | null;\n scanDate?: string | null;\n }) => boolean;\n /** Set the date gestational age and trimester are evaluated against. */\n setAsOfDate: (isoDate: string) => boolean;\n}\n\nexport interface DueDateCalculatorProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial dating method. Defaults to `'lmp'`. */\n defaultMethod?: DueDateMethod;\n /** Fires whenever a due date can be computed (and with `null` when it can't). */\n onResultChange?: (result: DueDateResult | null) => void;\n /** When provided, shows an \"Insert\" button that emits the result for an editor. */\n onInsert?: (payload: InsertPayload) => void;\n /**\n * Which verb the result button performs. Defaults to `'insert'`.\n * Use `'copy'` in an app-shell surface (no editor to insert into) — the\n * button writes the result to the clipboard as a multi-format `ClipboardItem`.\n */\n insertVariant?: InsertVariant;\n /** `copy` variant only — fired after a successful clipboard write. */\n onCopy?: (mode: InsertMode) => void;\n /** `copy` variant only — fired if the clipboard write can't proceed. */\n onError?: (error: unknown) => void;\n /**\n * Brand wordmark printed in the inserted/copied result-card footer.\n * Omitted → no brand line (and no footer hairline); a string → that custom\n * brand; `false` → no brand line. Brand is opt-in.\n */\n insertBrand?: string | false;\n /**\n * Append the antenatal exam schedule (the time-sensitive screening windows)\n * below the result, dated from the computed gestational start.\n */\n showSchedule?: boolean;\n /**\n * Passthrough options for the appended schedule (national `schedule`,\n * `plurality`, `chorionicity`, `rhNegative`, `gdmRisk`, …). `today` is\n * supplied by the component. Ignored unless `showSchedule` is set.\n */\n scheduleOptions?: Omit<AntenatalScheduleOptions, 'today'>;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\n/**\n * @deprecated Superseded by `PregnancyDating`, which unifies the due-date and\n * gestational-age calculators (any anchor → both EDD and current GA) and adds a\n * manual ±days dating adjustment. This component will be removed in a future\n * release; migrate to `PregnancyDating` (`defaultMethod=\"lmp\"`).\n */\nexport const DueDateCalculator = forwardRef<\n HTMLDivElement,\n DueDateCalculatorProps\n>(\n (\n {\n defaultMethod = 'lmp',\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n showSchedule = false,\n scheduleOptions,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n const [method, setMethod] = useState<DueDateMethod>(defaultMethod);\n const [refDate, setRefDate] = useState<Date | undefined>(undefined);\n const [cycleLength, setCycleLength] = useState<number | null>(\n DEFAULT_CYCLE_LENGTH,\n );\n const [embryoAge, setEmbryoAge] = useState<EmbryoAge>(5);\n // Optional first-trimester ultrasound (LMP method only) for ACOG CO700 redating.\n const [crlMm, setCrlMm] = useState<number | null>(null);\n const [scanDate, setScanDate] = useState<Date | undefined>(undefined);\n\n // Real today — caps the date inputs (LMP / ultrasound can't be in the future).\n const today = useMemo(() => new Date(), []);\n // The date GA, trimester and schedule status are evaluated against; defaults\n // to today but can be a future appointment date to project forward. (The EDD\n // itself is dating-anchored and does not depend on this.)\n const [asOfDate, setAsOfDate] = useState<Date>(() => new Date());\n\n // ACOG CO700 CRL redating — only when an LMP, a CRL and a scan date are set.\n const redating = useMemo(() => {\n if (method !== 'lmp' || !refDate || crlMm === null || !scanDate) {\n return null;\n }\n return redateByCrl({ lmp: refDate, scanDate, crlMm });\n }, [method, refDate, crlMm, scanDate]);\n\n const result = useMemo<DueDateResult | null>(() => {\n if (!refDate) return null;\n // A confirmed redating moves the effective LMP to the ultrasound's; the\n // CRL already reflects true gestation, so cycle adjustment no longer applies.\n const effectiveDate =\n method === 'lmp' && redating?.redated\n ? redating.gestationalStart\n : refDate;\n const effectiveCycle =\n method === 'lmp' && redating?.redated\n ? DEFAULT_CYCLE_LENGTH\n : (cycleLength ?? DEFAULT_CYCLE_LENGTH);\n return computeDueDate(\n {\n method,\n date: effectiveDate,\n cycleLength: effectiveCycle,\n embryoAge,\n },\n asOfDate,\n );\n }, [method, refDate, cycleLength, embryoAge, redating, asOfDate]);\n\n const dateFormatter = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'long' }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n /* ── Agent handle ────────────────────────────────────────────────── */\n const liveRef = useRef({\n method,\n refDate,\n cycleLength,\n embryoAge,\n crlMm,\n scanDate,\n asOfDate,\n result,\n });\n liveRef.current = {\n method,\n refDate,\n cycleLength,\n embryoAge,\n crlMm,\n scanDate,\n asOfDate,\n result,\n };\n\n const agentHandle = useMemo<DueDateCalculatorHandle>(\n () => ({\n getInputs: () => {\n const live = liveRef.current;\n return {\n method: live.method,\n referenceDate: live.refDate ? toIsoDate(live.refDate) : null,\n cycleLength: live.cycleLength,\n embryoAge: live.embryoAge,\n crlMm: live.crlMm,\n scanDate: live.scanDate ? toIsoDate(live.scanDate) : null,\n asOfDate: toIsoDate(live.asOfDate),\n };\n },\n getResult: () => {\n const r = liveRef.current.result;\n if (!r) return null;\n return {\n dueDate: toIsoDate(r.dueDate),\n gestationalStart: toIsoDate(r.gestationalStart),\n gestationalAge: r.gestationalAge ? { ...r.gestationalAge } : null,\n trimester: r.trimester,\n };\n },\n setMethod: (next) => {\n if (next !== 'lmp' && next !== 'conception' && next !== 'ivf') {\n return false;\n }\n setMethod(next);\n return true;\n },\n setReferenceDate: (isoDate) => {\n if (isoDate === null) {\n setRefDate(undefined);\n return true;\n }\n const parsed = fromIsoDate(isoDate);\n // The DatePicker caps at today; the handle honours the same bound.\n if (!parsed || isAfter(parsed, new Date())) return false;\n setRefDate(parsed);\n return true;\n },\n setCycleLength: (days) => {\n if (\n days !== null &&\n !(\n Number.isFinite(days) &&\n days >= CYCLE_LENGTH_RANGE.min &&\n days <= CYCLE_LENGTH_RANGE.max\n )\n ) {\n return false;\n }\n setCycleLength(days);\n return true;\n },\n setEmbryoAge: (days) => {\n if (days !== 3 && days !== 5) return false;\n setEmbryoAge(days);\n return true;\n },\n setCrl: (next) => {\n const now = new Date();\n let parsedScan: Date | undefined;\n // Validate the whole payload before writing any of it, so a bad\n // value can't leave the form half-updated.\n if ('crlMm' in next) {\n const mm = next.crlMm;\n if (\n mm !== null &&\n mm !== undefined &&\n !(Number.isFinite(mm) && mm > 0)\n ) {\n return false;\n }\n }\n if ('scanDate' in next && next.scanDate != null) {\n const d = fromIsoDate(next.scanDate);\n if (!d || isAfter(d, now)) return false;\n parsedScan = d;\n }\n if ('crlMm' in next) setCrlMm(next.crlMm ?? null);\n if ('scanDate' in next) setScanDate(parsedScan);\n return true;\n },\n setAsOfDate: (isoDate) => {\n const parsed = fromIsoDate(isoDate);\n if (!parsed) return false;\n setAsOfDate(parsed);\n return true;\n },\n }),\n [],\n );\n useAgentRegistration(dueDateCalculatorAgent, agentHandle, id);\n\n const schedule = useMemo(() => {\n if (!showSchedule || !result) return null;\n return computeAntenatalSchedule(result.gestationalStart, {\n ...scheduleOptions,\n today: asOfDate,\n });\n }, [showSchedule, result, asOfDate, scheduleOptions]);\n\n return (\n <div\n ref={ref}\n data-component=\"due-date-calculator\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <RadioGroup\n label={t('dueDateCalculator.method.label')}\n variant=\"horizontal\"\n value={method}\n onValueChange={(next) => setMethod(next as DueDateMethod)}\n >\n <Radio label={t('dueDateCalculator.method.lmp')} value=\"lmp\" />\n <Radio\n label={t('dueDateCalculator.method.conception')}\n value=\"conception\"\n />\n <Radio label={t('dueDateCalculator.method.ivf')} value=\"ivf\" />\n </RadioGroup>\n\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField label={t(DATE_LABEL_KEY[method])}>\n <DatePicker value={refDate} onChange={setRefDate} maxDate={today} />\n </FormField>\n\n {method === 'lmp' && (\n <FormField\n label={t('dueDateCalculator.cycleLength')}\n description={t('dueDateCalculator.cycleLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={CYCLE_LENGTH_RANGE.min}\n max={CYCLE_LENGTH_RANGE.max}\n value={cycleLength}\n onChange={setCycleLength}\n />\n </FormField>\n )}\n\n {method === 'ivf' && (\n <RadioGroup\n label={t('dueDateCalculator.embryoAge')}\n variant=\"horizontal\"\n value={String(embryoAge)}\n onValueChange={(next) => setEmbryoAge(Number(next) as EmbryoAge)}\n >\n <Radio label={t('dueDateCalculator.day3')} value=\"3\" />\n <Radio label={t('dueDateCalculator.day5')} value=\"5\" />\n </RadioGroup>\n )}\n </div>\n\n <FormField\n label={t('dueDateCalculator.asOfDate')}\n description={t('dueDateCalculator.asOfDateHint')}\n >\n <DatePicker value={asOfDate} onChange={(d) => d && setAsOfDate(d)} />\n </FormField>\n\n {method === 'lmp' ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField\n label={t('dueDateCalculator.crl')}\n description={t('dueDateCalculator.crlHint')}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.1}\n value={crlMm}\n onChange={setCrlMm}\n />\n </FormField>\n <FormField label={t('dueDateCalculator.scanDate')}>\n <DatePicker\n value={scanDate}\n onChange={setScanDate}\n maxDate={today}\n />\n </FormField>\n </div>\n {redating ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Badge variant={redating.redated ? 'warning' : 'success'}>\n {redating.redated\n ? t('dueDateCalculator.redated', {\n days: redating.discrepancyDays,\n })\n : t('dueDateCalculator.datesAgree')}\n </Badge>\n {!redating.crlInRange ? (\n <span className=\"type-meta ds:text-muted-foreground\">\n {t('dueDateCalculator.crlOutOfRange')}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {/* Concise polite announcement when a due date resolves. */}\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('dueDateCalculator.result.dueDateLabel')}: ${dateFormatter.format(\n result.dueDate,\n )}. ${t('dueDateCalculator.result.trimesterLabel')}: ${t(\n `dueDateCalculator.trimester.${result.trimester}`,\n )}.`\n : ''}\n </p>\n\n {result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <dl className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3\">\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('dueDateCalculator.result.trimesterLabel')}\n </dt>\n <dd>\n <Badge\n variant={TRIMESTER_BADGE_VARIANT[result.trimester]}\n size=\"lg\"\n >\n {t(`dueDateCalculator.trimester.${result.trimester}`)}\n </Badge>\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('dueDateCalculator.result.gestationLabel')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {result.gestationalAge\n ? t('dueDateCalculator.result.gestation', {\n weeks: result.gestationalAge.weeks,\n days: result.gestationalAge.days,\n })\n : '—'}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('dueDateCalculator.result.dueDateLabel')}\n </dt>\n <dd className=\"type-metric ds:text-foreground\">\n {dateFormatter.format(result.dueDate)}\n </dd>\n </div>\n </dl>\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('dueDateCalculator.empty')}\n </p>\n )}\n\n {schedule ? <AntenatalScheduleTimeline events={schedule} /> : null}\n\n {/* One result-action group for the whole result — sits after both the\n due-date card and the schedule, and its payload carries the schedule\n rows when shown (no per-card buttons). */}\n {result && (insertVariant === 'copy' || onInsert) ? (\n <InsertButton\n variant={insertVariant}\n onInsert={onInsert}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.dueDate'),\n icon: 'calendar-heart',\n highlight: dateFormatter.format(result.dueDate),\n // Chip tinted with the trimester's semantic token so the inserted\n // PNG carries the same clinical-stage colour as the on-screen\n // trimester badge — with the contrast-safe orange override for the\n // `--warning` third trimester.\n highlightToken: trimesterHighlightToken(result.trimester),\n brand: insertBrand,\n fields: [\n {\n // The estimated date of delivery → calendar glyph.\n icon: 'calendar',\n label: t('dueDateCalculator.result.dueDateLabel'),\n value: dateFormatter.format(result.dueDate),\n },\n {\n // Gestational age is an elapsed duration → clock glyph.\n icon: 'clock',\n label: t('dueDateCalculator.result.gestationLabel'),\n value: result.gestationalAge\n ? t('dueDateCalculator.result.gestation', {\n weeks: result.gestationalAge.weeks,\n days: result.gestationalAge.days,\n })\n : '—',\n },\n {\n // Trimester is a clinical-stage classification → tag.\n icon: 'tag',\n label: t('dueDateCalculator.result.trimesterLabel'),\n value: t(`dueDateCalculator.trimester.${result.trimester}`),\n },\n // When the schedule is shown, the single Insert button carries\n // the exam windows too (no second button).\n ...(schedule\n ? buildScheduleInsertFields(schedule, t, (d) =>\n dateFormatter.format(d),\n )\n : []),\n ],\n }}\n />\n ) : null}\n </div>\n );\n },\n);\n\nDueDateCalculator.displayName = 'DueDateCalculator';\n"],"names":["DEPRECATED","isoDate","dueDateCalculatorAgent","handle","args","rootVariants","cva","DATE_LABEL_KEY","toIsoDate","d","format","fromIsoDate","iso","parseISO","CYCLE_LENGTH_RANGE","DueDateCalculator","forwardRef","defaultMethod","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","showSchedule","scheduleOptions","id","width","className","ref","i18n","useTranslation","method","setMethod","useState","refDate","setRefDate","cycleLength","setCycleLength","DEFAULT_CYCLE_LENGTH","embryoAge","setEmbryoAge","crlMm","setCrlMm","scanDate","setScanDate","today","useMemo","asOfDate","setAsOfDate","redating","redateByCrl","result","effectiveDate","effectiveCycle","computeDueDate","dateFormatter","useEffect","liveRef","useRef","agentHandle","live","r","next","parsed","isAfter","days","now","parsedScan","mm","useAgentRegistration","schedule","computeAntenatalSchedule","jsxs","RadioGroup","jsx","Radio","FormField","DatePicker","NumberInput","Badge","Card","TRIMESTER_BADGE_VARIANT","AntenatalScheduleTimeline","InsertButton","trimesterHighlightToken","buildScheduleInsertFields"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,MAAMA,IAAa,iDAGbC,IAAU;AAAA,EACd,MAAM;AAAA,EACN,SAAS;AACX,GAEaC,KAAgE;AAAA,EAC3E,IAAI;AAAA;AAAA,EAEJ,cAAc,CAAC,WAAW;AAAA,EAC1B,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,UAAA;AAAA,IAAU;AAAA,IAErC,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,UAAA;AAAA,IAAU;AAAA,EACrC;AAAA,EAEF,SAAS;AAAA,IACP,YAAY;AAAA;AAAA;AAAA,MAGV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,QAAQ;AAAA,YACN,MAAM,CAAC,OAAO,cAAc,KAAK;AAAA,YACjC,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,QAAQ;AAAA,QACnB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYH;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MACfD,EAAO,UAAUC,EAAK,MAAM;AAAA,IAAA;AAAA,IAEhC,oBAAoB;AAAA,MAClB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,OAAO;AAAA,cACL,EAAE,GAAGH,GAAS,aAAa,qCAAA;AAAA,cAC3B,EAAE,MAAM,OAAA;AAAA,YAAO;AAAA,YAEjB,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYD;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,MAAA;AAAA,MAEF,UAAU;AAAA,QACR;AAAA,UACE,MAAM,EAAE,MAAM,aAAA;AAAA,UACd,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MACfD,EAAO,iBAAiBC,EAAK,IAAI;AAAA,IAAA;AAAA,IAErC,kBAAkB;AAAA,MAChB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,OAAO;AAAA,cACL,EAAE,MAAM,WAAW,SAAS,IAAI,SAAS,GAAA;AAAA,cACzC,EAAE,MAAM,OAAA;AAAA,YAAO;AAAA,YAEjB,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYJ;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MACfD,EAAO,eAAeC,EAAK,IAAI;AAAA,IAAA;AAAA,IAEnC,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,MAAM,CAAC,GAAG,CAAC;AAAA,YACX,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYJ;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MAA0BD,EAAO,aAAaC,EAAK,IAAI;AAAA,IAAA;AAAA,IAE1E,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,OAAO;AAAA,YACL,OAAO,CAAC,EAAE,MAAM,UAAU,kBAAkB,KAAK,EAAE,MAAM,QAAQ;AAAA,YACjE,aACE;AAAA,UAAA;AAAA,UAEJ,UAAU;AAAA,YACR,OAAO,CAAC,EAAE,GAAGH,KAAW,EAAE,MAAM,QAAQ;AAAA,YACxC,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYD;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,UAAU;AAAA,QACR;AAAA,UACE,MAAM,EAAE,OAAO,IAAI,UAAU,aAAA;AAAA,UAC7B,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CACNG,GACAC,MACGD,EAAO,OAAOC,CAAI;AAAA,IAAA;AAAA,IAEzB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,GAAGH;AAAA,YACH,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYD;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ,CAAC,wCAAwC;AAAA,MACjD,UAAU;AAAA,QACR;AAAA,UACE,MAAM,EAAE,MAAM,aAAA;AAAA,UACd,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MAA2BD,EAAO,YAAYC,EAAK,IAAI;AAAA,IAAA;AAAA,EAC1E;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GC7OMC,KAAeC,GAAI,kDAAkD;AAAA,EACzE,UAAU;AAAA,IACR,OAAO,EAAE,MAAM,aAAa,MAAM,iBAAA;AAAA,EAAiB;AAAA,EAErD,iBAAiB,EAAE,OAAO,OAAA;AAC5B,CAAC,GAGKC,KAAgD;AAAA,EACpD,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,KAAK;AACP,GAUMC,IAAY,CAACC,MAAoBC,GAAOD,GAAG,YAAY,GAEvDE,IAAc,CAACC,MAA6B;AAChD,QAAMH,IAAII,GAASD,CAAG;AACtB,SAAO,OAAO,MAAMH,EAAE,QAAA,CAAS,IAAI,OAAOA;AAC5C,GAGMK,IAAqB,EAAE,KAAK,IAAI,KAAK,GAAA,GA6G9BC,KAAoBC;AAAA,EAI/B,CACE;AAAA,IACE,eAAAC,IAAgB;AAAA,IAChB,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,iBAAAC;AAAA,IACA,IAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC;AAAA,EAAA,GAEFC,OACG;AACH,UAAM,EAAE,GAAG,MAAAC,EAAA,IAASC,GAAA,GAEd,CAACC,GAAQC,CAAS,IAAIC,EAAwBjB,CAAa,GAC3D,CAACkB,GAASC,CAAU,IAAIF,EAA2B,MAAS,GAC5D,CAACG,GAAaC,CAAc,IAAIJ;AAAA,MACpCK;AAAA,IAAA,GAEI,CAACC,GAAWC,CAAY,IAAIP,EAAoB,CAAC,GAEjD,CAACQ,GAAOC,CAAQ,IAAIT,EAAwB,IAAI,GAChD,CAACU,GAAUC,CAAW,IAAIX,EAA2B,MAAS,GAG9DY,IAAQC,EAAQ,0BAAU,KAAA,GAAQ,CAAA,CAAE,GAIpC,CAACC,GAAUC,CAAW,IAAIf,EAAe,MAAM,oBAAI,MAAM,GAGzDgB,IAAWH,EAAQ,MACnBf,MAAW,SAAS,CAACG,KAAWO,MAAU,QAAQ,CAACE,IAC9C,OAEFO,GAAY,EAAE,KAAKhB,GAAS,UAAAS,GAAU,OAAAF,GAAO,GACnD,CAACV,GAAQG,GAASO,GAAOE,CAAQ,CAAC,GAE/BQ,IAASL,EAA8B,MAAM;AACjD,UAAI,CAACZ,EAAS,QAAO;AAGrB,YAAMkB,IACJrB,MAAW,UAASkB,KAAA,QAAAA,EAAU,WAC1BA,EAAS,mBACTf,GACAmB,IACJtB,MAAW,UAASkB,KAAA,QAAAA,EAAU,WAC1BX,IACCF,KAAeE;AACtB,aAAOgB;AAAA,QACL;AAAA,UACE,QAAAvB;AAAA,UACA,MAAMqB;AAAA,UACN,aAAaC;AAAA,UACb,WAAAd;AAAA,QAAA;AAAA,QAEFQ;AAAA,MAAA;AAAA,IAEJ,GAAG,CAAChB,GAAQG,GAASE,GAAaG,GAAWU,GAAUF,CAAQ,CAAC,GAE1DQ,IAAgBT;AAAA,MACpB,MAAM,IAAI,KAAK,eAAejB,EAAK,UAAU,EAAE,WAAW,QAAQ;AAAA,MAClE,CAACA,EAAK,QAAQ;AAAA,IAAA;AAGhB,IAAA2B,GAAU,MAAM;AACd,MAAAvC,KAAA,QAAAA,EAAiBkC;AAAA,IACnB,GAAG,CAACA,GAAQlC,CAAc,CAAC;AAG3B,UAAMwC,IAAUC,GAAO;AAAA,MACrB,QAAA3B;AAAA,MACA,SAAAG;AAAA,MACA,aAAAE;AAAA,MACA,WAAAG;AAAA,MACA,OAAAE;AAAA,MACA,UAAAE;AAAA,MACA,UAAAI;AAAA,MACA,QAAAI;AAAA,IAAA,CACD;AACD,IAAAM,EAAQ,UAAU;AAAA,MAChB,QAAA1B;AAAA,MACA,SAAAG;AAAA,MACA,aAAAE;AAAA,MACA,WAAAG;AAAA,MACA,OAAAE;AAAA,MACA,UAAAE;AAAA,MACA,UAAAI;AAAA,MACA,QAAAI;AAAA,IAAA;AAGF,UAAMQ,KAAcb;AAAA,MAClB,OAAO;AAAA,QACL,WAAW,MAAM;AACf,gBAAMc,IAAOH,EAAQ;AACrB,iBAAO;AAAA,YACL,QAAQG,EAAK;AAAA,YACb,eAAeA,EAAK,UAAUrD,EAAUqD,EAAK,OAAO,IAAI;AAAA,YACxD,aAAaA,EAAK;AAAA,YAClB,WAAWA,EAAK;AAAA,YAChB,OAAOA,EAAK;AAAA,YACZ,UAAUA,EAAK,WAAWrD,EAAUqD,EAAK,QAAQ,IAAI;AAAA,YACrD,UAAUrD,EAAUqD,EAAK,QAAQ;AAAA,UAAA;AAAA,QAErC;AAAA,QACA,WAAW,MAAM;AACf,gBAAMC,IAAIJ,EAAQ,QAAQ;AAC1B,iBAAKI,IACE;AAAA,YACL,SAAStD,EAAUsD,EAAE,OAAO;AAAA,YAC5B,kBAAkBtD,EAAUsD,EAAE,gBAAgB;AAAA,YAC9C,gBAAgBA,EAAE,iBAAiB,EAAE,GAAGA,EAAE,mBAAmB;AAAA,YAC7D,WAAWA,EAAE;AAAA,UAAA,IALA;AAAA,QAOjB;AAAA,QACA,WAAW,CAACC,MACNA,MAAS,SAASA,MAAS,gBAAgBA,MAAS,QAC/C,MAET9B,EAAU8B,CAAI,GACP;AAAA,QAET,kBAAkB,CAAC9D,MAAY;AAC7B,cAAIA,MAAY;AACd,mBAAAmC,EAAW,MAAS,GACb;AAET,gBAAM4B,IAASrD,EAAYV,CAAO;AAElC,iBAAI,CAAC+D,KAAUC,EAAQD,uBAAY,KAAA,CAAM,IAAU,MACnD5B,EAAW4B,CAAM,GACV;AAAA,QACT;AAAA,QACA,gBAAgB,CAACE,MAEbA,MAAS,QACT,EACE,OAAO,SAASA,CAAI,KACpBA,KAAQpD,EAAmB,OAC3BoD,KAAQpD,EAAmB,OAGtB,MAETwB,EAAe4B,CAAI,GACZ;AAAA,QAET,cAAc,CAACA,MACTA,MAAS,KAAKA,MAAS,IAAU,MACrCzB,EAAayB,CAAI,GACV;AAAA,QAET,QAAQ,CAACH,MAAS;AAChB,gBAAMI,wBAAU,KAAA;AAChB,cAAIC;AAGJ,cAAI,WAAWL,GAAM;AACnB,kBAAMM,IAAKN,EAAK;AAChB,gBACEM,KAAO,QAEP,EAAE,OAAO,SAASA,CAAE,KAAKA,IAAK;AAE9B,qBAAO;AAAA,UAEX;AACA,cAAI,cAAcN,KAAQA,EAAK,YAAY,MAAM;AAC/C,kBAAMtD,IAAIE,EAAYoD,EAAK,QAAQ;AACnC,gBAAI,CAACtD,KAAKwD,EAAQxD,GAAG0D,CAAG,EAAG,QAAO;AAClC,YAAAC,IAAa3D;AAAA,UACf;AACA,iBAAI,WAAWsD,KAAMpB,EAASoB,EAAK,SAAS,IAAI,GAC5C,cAAcA,KAAMlB,EAAYuB,CAAU,GACvC;AAAA,QACT;AAAA,QACA,aAAa,CAACnE,MAAY;AACxB,gBAAM+D,IAASrD,EAAYV,CAAO;AAClC,iBAAK+D,KACLf,EAAYe,CAAM,GACX,MAFa;AAAA,QAGtB;AAAA,MAAA;AAAA,MAEF,CAAA;AAAA,IAAC;AAEH,IAAAM,GAAqBpE,IAAwB0D,IAAalC,CAAE;AAE5D,UAAM6C,IAAWxB,EAAQ,MACnB,CAACvB,KAAgB,CAAC4B,IAAe,OAC9BoB,GAAyBpB,EAAO,kBAAkB;AAAA,MACvD,GAAG3B;AAAA,MACH,OAAOuB;AAAA,IAAA,CACR,GACA,CAACxB,GAAc4B,GAAQJ,GAAUvB,CAAe,CAAC;AAEpD,WACE,gBAAAgD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA5C;AAAA,QACA,kBAAe;AAAA,QACf,qBAAmBH;AAAA,QACnB,WAAWrB,GAAa,EAAE,OAAAsB,IAAO,WAAAC,IAAW;AAAA,QAE5C,UAAA;AAAA,UAAA,gBAAA6C;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,OAAO,EAAE,gCAAgC;AAAA,cACzC,SAAQ;AAAA,cACR,OAAO1C;AAAA,cACP,eAAe,CAAC+B,MAAS9B,EAAU8B,CAAqB;AAAA,cAExD,UAAA;AAAA,gBAAA,gBAAAY,EAACC,KAAM,OAAO,EAAE,8BAA8B,GAAG,OAAM,OAAM;AAAA,gBAC7D,gBAAAD;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,OAAO,EAAE,qCAAqC;AAAA,oBAC9C,OAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEPA,GAAA,EAAM,OAAO,EAAE,8BAA8B,GAAG,OAAM,MAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAG/D,gBAAAH,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA;AAAA,YAAA,gBAAAE,EAACE,GAAA,EAAU,OAAO,EAAEtE,GAAeyB,CAAM,CAAC,GACxC,UAAA,gBAAA2C,EAACG,GAAA,EAAW,OAAO3C,GAAS,UAAUC,GAAY,SAASU,GAAO,GACpE;AAAA,YAECd,MAAW,SACV,gBAAA2C;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,+BAA+B;AAAA,gBACxC,aAAa,EAAE,mCAAmC;AAAA,gBAElD,UAAA,gBAAAF;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAKjE,EAAmB;AAAA,oBACxB,KAAKA,EAAmB;AAAA,oBACxB,OAAOuB;AAAA,oBACP,UAAUC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,YAIHN,MAAW,SACV,gBAAAyC;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,6BAA6B;AAAA,gBACtC,SAAQ;AAAA,gBACR,OAAO,OAAOlC,CAAS;AAAA,gBACvB,eAAe,CAACuB,MAAStB,EAAa,OAAOsB,CAAI,CAAc;AAAA,gBAE/D,UAAA;AAAA,kBAAA,gBAAAY,EAACC,KAAM,OAAO,EAAE,wBAAwB,GAAG,OAAM,KAAI;AAAA,oCACpDA,GAAA,EAAM,OAAO,EAAE,wBAAwB,GAAG,OAAM,IAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACvD,GAEJ;AAAA,UAEA,gBAAAD;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,OAAO,EAAE,4BAA4B;AAAA,cACrC,aAAa,EAAE,gCAAgC;AAAA,cAE/C,UAAA,gBAAAF,EAACG,GAAA,EAAW,OAAO9B,GAAU,UAAU,CAACvC,MAAMA,KAAKwC,EAAYxC,CAAC,EAAA,CAAG;AAAA,YAAA;AAAA,UAAA;AAAA,UAGpEuB,MAAW,QACV,gBAAAyC,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACE;AAAA,gBAAA;AAAA,kBACC,OAAO,EAAE,uBAAuB;AAAA,kBAChC,aAAa,EAAE,2BAA2B;AAAA,kBAE1C,UAAA,gBAAAF;AAAA,oBAACI;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,KAAK;AAAA,sBACL,MAAM;AAAA,sBACN,OAAOrC;AAAA,sBACP,UAAUC;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACZ;AAAA,cAAA;AAAA,cAEF,gBAAAgC,EAACE,GAAA,EAAU,OAAO,EAAE,4BAA4B,GAC9C,UAAA,gBAAAF;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,OAAOlC;AAAA,kBACP,UAAUC;AAAA,kBACV,SAASC;AAAA,gBAAA;AAAA,cAAA,EACX,CACF;AAAA,YAAA,GACF;AAAA,YACCI,IACC,gBAAAuB,EAAC,OAAA,EAAI,WAAU,mEACb,UAAA;AAAA,cAAA,gBAAAE,EAACK,GAAA,EAAM,SAAS9B,EAAS,UAAU,YAAY,WAC5C,UAAAA,EAAS,UACN,EAAE,6BAA6B;AAAA,gBAC7B,MAAMA,EAAS;AAAA,cAAA,CAChB,IACD,EAAE,8BAA8B,GACtC;AAAA,cACEA,EAAS,aAIP,OAHF,gBAAAyB,EAAC,QAAA,EAAK,WAAU,sCACb,UAAA,EAAE,iCAAiC,EAAA,CACtC;AAAA,YACE,EAAA,CACN,IACE;AAAA,UAAA,EAAA,CACN,IACE;AAAA,UAGJ,gBAAAA,EAAC,KAAA,EAAE,WAAU,cAAa,MAAK,UAAS,aAAU,UAC/C,UAAAvB,IACG,GAAG,EAAE,uCAAuC,CAAC,KAAKI,EAAc;AAAA,YAC9DJ,EAAO;AAAA,UAAA,CACR,KAAK,EAAE,yCAAyC,CAAC,KAAK;AAAA,YACrD,+BAA+BA,EAAO,SAAS;AAAA,UAAA,CAChD,MACD,IACN;AAAA,UAECA,IACC,gBAAAuB,EAACM,GAAA,EAAK,SAAQ,YACZ,UAAA,gBAAAN,EAACM,EAAK,MAAL,EAAU,WAAU,kDACnB,UAAA,gBAAAR,EAAC,MAAA,EAAG,WAAU,uEACZ,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iEACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,yCAAyC,GAC9C;AAAA,gCACC,MAAA,EACC,UAAA,gBAAAA;AAAA,gBAACK;AAAA,gBAAA;AAAA,kBACC,SAASE,GAAwB9B,EAAO,SAAS;AAAA,kBACjD,MAAK;AAAA,kBAEJ,UAAA,EAAE,+BAA+BA,EAAO,SAAS,EAAE;AAAA,gBAAA;AAAA,cAAA,EACtD,CACF;AAAA,YAAA,GACF;AAAA,YACA,gBAAAqB,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,yCAAyC,GAC9C;AAAA,gCACC,MAAA,EAAG,WAAU,gCACX,UAAAvB,EAAO,iBACJ,EAAE,sCAAsC;AAAA,gBACtC,OAAOA,EAAO,eAAe;AAAA,gBAC7B,MAAMA,EAAO,eAAe;AAAA,cAAA,CAC7B,IACD,IAAA,CACN;AAAA,YAAA,GACF;AAAA,YACA,gBAAAqB,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,uCAAuC,GAC5C;AAAA,cACA,gBAAAA,EAAC,QAAG,WAAU,kCACX,YAAc,OAAOvB,EAAO,OAAO,EAAA,CACtC;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF,EAAA,CACF,GACF,IAEA,gBAAAuB,EAAC,OAAE,WAAU,sCACV,UAAA,EAAE,yBAAyB,EAAA,CAC9B;AAAA,UAGDJ,IAAW,gBAAAI,EAACQ,IAAA,EAA0B,QAAQZ,GAAU,IAAK;AAAA,UAK7DnB,MAAWhC,MAAkB,UAAUD,KACtC,gBAAAwD;AAAA,YAACS;AAAA,YAAA;AAAA,cACC,SAAShE;AAAA,cACT,UAAAD;AAAA,cACA,QAAAE;AAAA,cACA,SAAAC;AAAA,cACA,MAAM;AAAA,gBACJ,OAAO,EAAE,sBAAsB;AAAA,gBAC/B,MAAM;AAAA,gBACN,WAAWkC,EAAc,OAAOJ,EAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,gBAK9C,gBAAgBiC,GAAwBjC,EAAO,SAAS;AAAA,gBACxD,OAAO7B;AAAA,gBACP,QAAQ;AAAA,kBACN;AAAA;AAAA,oBAEE,MAAM;AAAA,oBACN,OAAO,EAAE,uCAAuC;AAAA,oBAChD,OAAOiC,EAAc,OAAOJ,EAAO,OAAO;AAAA,kBAAA;AAAA,kBAE5C;AAAA;AAAA,oBAEE,MAAM;AAAA,oBACN,OAAO,EAAE,yCAAyC;AAAA,oBAClD,OAAOA,EAAO,iBACV,EAAE,sCAAsC;AAAA,sBACtC,OAAOA,EAAO,eAAe;AAAA,sBAC7B,MAAMA,EAAO,eAAe;AAAA,oBAAA,CAC7B,IACD;AAAA,kBAAA;AAAA,kBAEN;AAAA;AAAA,oBAEE,MAAM;AAAA,oBACN,OAAO,EAAE,yCAAyC;AAAA,oBAClD,OAAO,EAAE,+BAA+BA,EAAO,SAAS,EAAE;AAAA,kBAAA;AAAA;AAAA;AAAA,kBAI5D,GAAImB,IACAe;AAAA,oBAA0Bf;AAAA,oBAAU;AAAA,oBAAG,CAAC9D,MACtC+C,EAAc,OAAO/C,CAAC;AAAA,kBAAA,IAExB,CAAA;AAAA,gBAAC;AAAA,cACP;AAAA,YACF;AAAA,UAAA,IAEA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEAM,GAAkB,cAAc;"}
1
+ {"version":3,"file":"due-date-calculator-DUjw4w5O.js","sources":["../../src/components/due-date-calculator/due-date-calculator.agent.ts","../../src/components/due-date-calculator/due-date-calculator.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — DueDateCalculator. */\n/* */\n/* Estimates the date of delivery from one of three dating methods (LMP / */\n/* conception / IVF transfer) plus current gestational age + trimester. */\n/* The agent surface is the dating inputs plus the computed EDD / GA; the */\n/* handle is the curated `DueDateCalculatorHandle` (the public `ref` */\n/* stays the root <div>, exactly as `slider.tsx` and `bmi-calculator.tsx` */\n/* keep theirs). */\n/* */\n/* Dates cross the boundary as local-time `yyyy-MM-dd` strings, never */\n/* `Date` objects, so nothing shifts a day under JSON/UTC serialisation. */\n/* */\n/* DEPRECATED surface: this component is superseded by PregnancyDating, */\n/* which unifies dating + gestational age. Prefer the `pregnancy-dating` */\n/* adapter for new work — every action here is marked deprecated. */\n/* */\n/* PHI (§7): never exposes patient identity — the slots return the */\n/* operator's own structural dating inputs and the dates derived from */\n/* them. See `src/docs/26-agent-readiness.mdx`. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { DueDateCalculatorHandle } from './due-date-calculator';\n\nconst DEPRECATED = 'Superseded by the `pregnancy-dating` adapter.';\n\n/** Shared JSON Schema fragment for a local calendar date. */\nconst isoDate = {\n type: 'string',\n pattern: '^\\\\d{4}-\\\\d{2}-\\\\d{2}$',\n} as const;\n\nexport const dueDateCalculatorAgent: AgentAdapter<DueDateCalculatorHandle> = {\n id: 'due-date-calculator',\n // set_value → the six `set_*` actions + the `inputs` state slot.\n capabilities: ['set_value'],\n state: {\n inputs: {\n type: '{ method: string, referenceDate: string | null, cycleLength: number | null, embryoAge: 3 | 5, crlMm: number | null, scanDate: string | null, asOfDate: string }',\n descriptionKey: 'ui.agent.dueDateCalculator.state.inputs',\n description:\n 'The dating inputs as entered — method, its reference date, cycle length (LMP), embryo age (IVF), the optional CRL + scan date, and the evaluation date. Dates are `yyyy-MM-dd`. Read this to see which method a reference date will be interpreted under.',\n read: (handle) => handle.getInputs(),\n },\n result: {\n type: '{ dueDate: string, gestationalStart: string, gestationalAge: { weeks: number, days: number, totalDays: number } | null, trimester: string } | null',\n descriptionKey: 'ui.agent.dueDateCalculator.state.result',\n description:\n 'Computed estimated delivery date, the GA day-0 anchor after any CRL re-dating, the gestational age as of the evaluation date, and the trimester band. Null until a reference date is set.',\n read: (handle) => handle.getResult(),\n },\n },\n actions: {\n set_method: {\n // Drives the same local input state a user picks; nothing is persisted\n // to a record, and the choice is reversible in the same UI.\n safety: 'write',\n argsType: \"{ method: 'lmp' | 'conception' | 'ivf' }\",\n argsSchema: {\n type: 'object',\n properties: {\n method: {\n enum: ['lmp', 'conception', 'ivf'],\n description:\n 'Which anchor to date from — last menstrual period, conception, or IVF transfer.',\n },\n },\n required: ['method'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the method was applied.',\n },\n errors: [\n 'Returns false for a method outside the three supported anchors.',\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setMethod',\n description:\n 'Choose which anchor the pregnancy is dated from. The reference date is kept and re-interpreted under the new method, so set the method first.',\n invoke: (handle, args: { method: 'lmp' | 'conception' | 'ivf' }) =>\n handle.setMethod(args.method),\n },\n set_reference_date: {\n safety: 'write',\n argsType: '{ date: string | null }',\n argsSchema: {\n type: 'object',\n properties: {\n date: {\n oneOf: [\n { ...isoDate, description: 'Local calendar date, `yyyy-MM-dd`.' },\n { type: 'null' },\n ],\n description:\n 'The date the active method anchors on — LMP, conception, or transfer — or null to clear it. Must not be in the future.',\n },\n },\n required: ['date'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the date was applied.',\n },\n errors: [\n 'Returns false for an unparseable date or a date in the future — the on-screen DatePicker caps at today.',\n ],\n examples: [\n {\n args: { date: '2026-01-12' },\n note: 'Under the default LMP method, a last period starting 12 January.',\n },\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setReferenceDate',\n description:\n 'Set the reference date for the active method. This is the only required input — the result stays null without it.',\n invoke: (handle, args: { date: string | null }) =>\n handle.setReferenceDate(args.date),\n },\n set_cycle_length: {\n safety: 'write',\n argsType: '{ days: number | null }',\n argsSchema: {\n type: 'object',\n properties: {\n days: {\n oneOf: [\n { type: 'integer', minimum: 20, maximum: 45 },\n { type: 'null' },\n ],\n description:\n 'Average cycle length in days (20–45), or null to fall back to the 28-day default.',\n },\n },\n required: ['days'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the value was applied.',\n },\n errors: [\n 'Returns false outside 20–45 days — the same bounds the on-screen NumberInput enforces.',\n 'Applies but changes nothing unless the method is `lmp`, and is ignored once a CRL re-dating is confirmed.',\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setCycleLength',\n description:\n 'LMP method only — set the average cycle length, which shifts Naegele dating off the 28-day assumption.',\n invoke: (handle, args: { days: number | null }) =>\n handle.setCycleLength(args.days),\n },\n set_embryo_age: {\n safety: 'write',\n argsType: '{ days: 3 | 5 }',\n argsSchema: {\n type: 'object',\n properties: {\n days: {\n enum: [3, 5],\n description:\n 'Embryo age at transfer in days — 3 (cleavage) or 5 (blastocyst).',\n },\n },\n required: ['days'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the value was applied.',\n },\n errors: [\n 'Returns false for any value other than 3 or 5.',\n 'Applies but changes nothing unless the method is `ivf`.',\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setEmbryoAge',\n description:\n 'IVF method only — set the embryo age at transfer, which offsets the transfer date back to a notional LMP.',\n invoke: (handle, args: { days: 3 | 5 }) => handle.setEmbryoAge(args.days),\n },\n set_crl: {\n safety: 'write',\n argsType: '{ crlMm?: number | null, scanDate?: string | null }',\n argsSchema: {\n type: 'object',\n properties: {\n crlMm: {\n oneOf: [{ type: 'number', exclusiveMinimum: 0 }, { type: 'null' }],\n description:\n 'Crown-rump length in millimetres, or null to clear it.',\n },\n scanDate: {\n oneOf: [{ ...isoDate }, { type: 'null' }],\n description:\n 'Date of the CRL scan (`yyyy-MM-dd`, not in the future), or null to clear it.',\n },\n },\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the measurement was applied.',\n },\n errors: [\n 'Returns false and writes nothing when the length is not positive or the scan date is unparseable or in the future — the payload applies all-or-nothing.',\n 'Re-dating only happens under the `lmp` method, and only when both the length and the scan date are set.',\n ],\n examples: [\n {\n args: { crlMm: 42, scanDate: '2026-02-20' },\n note: 'A first-trimester CRL that may re-date the pregnancy per ACOG CO 700.',\n },\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setCrl',\n description:\n 'LMP method only — set the first-trimester crown-rump length and its scan date. When the two disagree with the LMP beyond the ACOG threshold, the scan re-dates the pregnancy and overrides cycle length.',\n invoke: (\n handle,\n args: { crlMm?: number | null; scanDate?: string | null },\n ) => handle.setCrl(args),\n },\n set_as_of_date: {\n safety: 'write',\n argsType: '{ date: string }',\n argsSchema: {\n type: 'object',\n properties: {\n date: {\n ...isoDate,\n description:\n 'Date to evaluate gestational age and trimester against, `yyyy-MM-dd`. May be in the future to project forward.',\n },\n },\n required: ['date'],\n additionalProperties: false,\n },\n idempotent: true,\n deprecated: DEPRECATED,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the date was applied.',\n },\n errors: ['Returns false for an unparseable date.'],\n examples: [\n {\n args: { date: '2026-09-15' },\n note: 'Project gestational age forward to an upcoming appointment.',\n },\n ],\n descriptionKey: 'ui.agent.dueDateCalculator.actions.setAsOfDate',\n description:\n 'Set the date gestational age, trimester and the antenatal schedule are evaluated against. Defaults to today; the estimated delivery date itself does not depend on it.',\n invoke: (handle, args: { date: string }) => handle.setAsOfDate(args.date),\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'due-date-calculator',\n description: 'Marks the DueDateCalculator wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop. Also the registry key — without an `id` the instance does not register and the handle-driven actions/state are unreachable.',\n },\n },\n};\n","/* ------------------------------------------------------------------ */\n/* DueDateCalculator — estimate the date of delivery from one of three */\n/* dating methods, with current gestational age + trimester. */\n/* */\n/* - Maths lives in `./gestation` (pure, separately tested). */\n/* - Three methods: LMP (Naegele, cycle-length adjustable), conception, */\n/* and IVF transfer (Day-3 vs Day-5 embryo). */\n/* - The reference date can't be in the future, so the DatePicker caps */\n/* at today. */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useRef, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { format, isAfter, parseISO } from 'date-fns';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { dueDateCalculatorAgent } from './due-date-calculator.agent';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Card } from '../card';\nimport { Badge } from '../badge';\nimport {\n InsertButton,\n type InsertPayload,\n type InsertVariant,\n type InsertMode,\n} from '../_shared/insert-result';\nimport {\n type DueDateMethod,\n type EmbryoAge,\n type DueDateResult,\n computeDueDate,\n redateByCrl,\n DEFAULT_CYCLE_LENGTH,\n TRIMESTER_BADGE_VARIANT,\n trimesterHighlightToken,\n} from '../_shared/obstetrics';\nimport {\n computeAntenatalSchedule,\n type AntenatalScheduleOptions,\n} from '../_shared/antenatal-schedule';\nimport {\n AntenatalScheduleTimeline,\n buildScheduleInsertFields,\n} from '../_shared/antenatal-schedule-timeline';\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]', {\n variants: {\n width: { full: 'ds:w-full', auto: 'ds:inline-flex' },\n },\n defaultVariants: { width: 'full' },\n});\n\n/** Reference-date i18n key per method. */\nconst DATE_LABEL_KEY: Record<DueDateMethod, string> = {\n lmp: 'dueDateCalculator.lmpDate',\n conception: 'dueDateCalculator.conceptionDate',\n ivf: 'dueDateCalculator.transferDate',\n};\n\n/* ------------------------------------------------------------------ */\n/* Agent boundary */\n/* */\n/* Dates cross the agent boundary as local-time `yyyy-MM-dd` strings, */\n/* never `Date` objects — a Date JSON-serialises to UTC and silently */\n/* shifts the day for anyone east or west of Greenwich. */\n/* ------------------------------------------------------------------ */\n\nconst toIsoDate = (d: Date): string => format(d, 'yyyy-MM-dd');\n\nconst fromIsoDate = (iso: string): Date | null => {\n const d = parseISO(iso);\n return Number.isNaN(d.getTime()) ? null : d;\n};\n\n/** UI input bounds, mirrored by the agent handle so it can't out-type a user. */\nconst CYCLE_LENGTH_RANGE = { min: 20, max: 45 } as const;\n\n/** The dating inputs as entered. */\nexport interface DueDateInputsSnapshot {\n /** Which anchor the pregnancy is dated from. */\n method: DueDateMethod;\n /** The method's reference date (`yyyy-MM-dd`), or null when unset. */\n referenceDate: string | null;\n /** LMP only — average cycle length in days, or null for the 28-day default. */\n cycleLength: number | null;\n /** IVF only — embryo age at transfer, in days. */\n embryoAge: EmbryoAge;\n /** LMP only — crown-rump length in millimetres, or null. */\n crlMm: number | null;\n /** LMP only — date of the CRL scan (`yyyy-MM-dd`), or null. */\n scanDate: string | null;\n /** The date gestational age and trimester are evaluated against. */\n asOfDate: string;\n}\n\n/** `DueDateResult` projected onto the agent boundary — ISO dates, no Dates. */\nexport interface DueDateSnapshot {\n /** Estimated date of delivery, `yyyy-MM-dd`. */\n dueDate: string;\n /** GA day-0 anchor (effective LMP) after any CRL re-dating, `yyyy-MM-dd`. */\n gestationalStart: string;\n /** Gestational age as of the evaluation date; null before conception. */\n gestationalAge: { weeks: number; days: number; totalDays: number } | null;\n /** Trimester band as of the evaluation date. */\n trimester: DueDateResult['trimester'];\n}\n\n/**\n * Curated imperative handle for agent / external automation. Reads the dating\n * inputs and the computed due date, and drives the inputs the way a user\n * would. Never exposes patient identity — only structural dates and numbers.\n * Consumed by `due-date-calculator.agent.ts`; the public `ref` stays the root\n * DOM element.\n */\nexport interface DueDateCalculatorHandle {\n /** The dating inputs as entered. */\n getInputs: () => DueDateInputsSnapshot;\n /** Computed due date, gestational age and trimester, or null until a reference date is set. */\n getResult: () => DueDateSnapshot | null;\n /** Switch the dating method. Keeps the reference date, which is re-interpreted. */\n setMethod: (method: DueDateMethod) => boolean;\n /** Set the method's reference date (`yyyy-MM-dd`, not in the future). */\n setReferenceDate: (isoDate: string | null) => boolean;\n /** LMP only — set the average cycle length in days (20–45). */\n setCycleLength: (days: number | null) => boolean;\n /** IVF only — set the embryo age at transfer (3 or 5 days). */\n setEmbryoAge: (days: EmbryoAge) => boolean;\n /** LMP only — set the CRL measurement and/or its scan date for ACOG re-dating. */\n setCrl: (next: {\n crlMm?: number | null;\n scanDate?: string | null;\n }) => boolean;\n /** Set the date gestational age and trimester are evaluated against. */\n setAsOfDate: (isoDate: string) => boolean;\n}\n\nexport interface DueDateCalculatorProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial dating method. Defaults to `'lmp'`. */\n defaultMethod?: DueDateMethod;\n /** Fires whenever a due date can be computed (and with `null` when it can't). */\n onResultChange?: (result: DueDateResult | null) => void;\n /** When provided, shows an \"Insert\" button that emits the result for an editor. */\n onInsert?: (payload: InsertPayload) => void;\n /**\n * Which verb the result button performs. Defaults to `'insert'`.\n * Use `'copy'` in an app-shell surface (no editor to insert into) — the\n * button writes the result to the clipboard as a multi-format `ClipboardItem`.\n */\n insertVariant?: InsertVariant;\n /** `copy` variant only — fired after a successful clipboard write. */\n onCopy?: (mode: InsertMode) => void;\n /** `copy` variant only — fired if the clipboard write can't proceed. */\n onError?: (error: unknown) => void;\n /**\n * Brand wordmark printed in the inserted/copied result-card footer.\n * Omitted → no brand line (and no footer hairline); a string → that custom\n * brand; `false` → no brand line. Brand is opt-in.\n */\n insertBrand?: string | false;\n /**\n * Append the antenatal exam schedule (the time-sensitive screening windows)\n * below the result, dated from the computed gestational start.\n */\n showSchedule?: boolean;\n /**\n * Passthrough options for the appended schedule (national `schedule`,\n * `plurality`, `chorionicity`, `rhNegative`, `gdmRisk`, …). `today` is\n * supplied by the component. Ignored unless `showSchedule` is set.\n */\n scheduleOptions?: Omit<AntenatalScheduleOptions, 'today'>;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\n/**\n * @deprecated Superseded by `PregnancyDating`, which unifies the due-date and\n * gestational-age calculators (any anchor → both EDD and current GA) and adds a\n * manual ±days dating adjustment. This component will be removed in a future\n * release; migrate to `PregnancyDating` (`defaultMethod=\"lmp\"`).\n */\nexport const DueDateCalculator = forwardRef<\n HTMLDivElement,\n DueDateCalculatorProps\n>(\n (\n {\n defaultMethod = 'lmp',\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n showSchedule = false,\n scheduleOptions,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n const [method, setMethod] = useState<DueDateMethod>(defaultMethod);\n const [refDate, setRefDate] = useState<Date | undefined>(undefined);\n const [cycleLength, setCycleLength] = useState<number | null>(\n DEFAULT_CYCLE_LENGTH,\n );\n const [embryoAge, setEmbryoAge] = useState<EmbryoAge>(5);\n // Optional first-trimester ultrasound (LMP method only) for ACOG CO700 redating.\n const [crlMm, setCrlMm] = useState<number | null>(null);\n const [scanDate, setScanDate] = useState<Date | undefined>(undefined);\n\n // Real today — caps the date inputs (LMP / ultrasound can't be in the future).\n const today = useMemo(() => new Date(), []);\n // The date GA, trimester and schedule status are evaluated against; defaults\n // to today but can be a future appointment date to project forward. (The EDD\n // itself is dating-anchored and does not depend on this.)\n const [asOfDate, setAsOfDate] = useState<Date>(() => new Date());\n\n // ACOG CO700 CRL redating — only when an LMP, a CRL and a scan date are set.\n const redating = useMemo(() => {\n if (method !== 'lmp' || !refDate || crlMm === null || !scanDate) {\n return null;\n }\n return redateByCrl({ lmp: refDate, scanDate, crlMm });\n }, [method, refDate, crlMm, scanDate]);\n\n const result = useMemo<DueDateResult | null>(() => {\n if (!refDate) return null;\n // A confirmed redating moves the effective LMP to the ultrasound's; the\n // CRL already reflects true gestation, so cycle adjustment no longer applies.\n const effectiveDate =\n method === 'lmp' && redating?.redated\n ? redating.gestationalStart\n : refDate;\n const effectiveCycle =\n method === 'lmp' && redating?.redated\n ? DEFAULT_CYCLE_LENGTH\n : (cycleLength ?? DEFAULT_CYCLE_LENGTH);\n return computeDueDate(\n {\n method,\n date: effectiveDate,\n cycleLength: effectiveCycle,\n embryoAge,\n },\n asOfDate,\n );\n }, [method, refDate, cycleLength, embryoAge, redating, asOfDate]);\n\n const dateFormatter = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'long' }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n /* ── Agent handle ────────────────────────────────────────────────── */\n const liveRef = useRef({\n method,\n refDate,\n cycleLength,\n embryoAge,\n crlMm,\n scanDate,\n asOfDate,\n result,\n });\n liveRef.current = {\n method,\n refDate,\n cycleLength,\n embryoAge,\n crlMm,\n scanDate,\n asOfDate,\n result,\n };\n\n const agentHandle = useMemo<DueDateCalculatorHandle>(\n () => ({\n getInputs: () => {\n const live = liveRef.current;\n return {\n method: live.method,\n referenceDate: live.refDate ? toIsoDate(live.refDate) : null,\n cycleLength: live.cycleLength,\n embryoAge: live.embryoAge,\n crlMm: live.crlMm,\n scanDate: live.scanDate ? toIsoDate(live.scanDate) : null,\n asOfDate: toIsoDate(live.asOfDate),\n };\n },\n getResult: () => {\n const r = liveRef.current.result;\n if (!r) return null;\n return {\n dueDate: toIsoDate(r.dueDate),\n gestationalStart: toIsoDate(r.gestationalStart),\n gestationalAge: r.gestationalAge ? { ...r.gestationalAge } : null,\n trimester: r.trimester,\n };\n },\n setMethod: (next) => {\n if (next !== 'lmp' && next !== 'conception' && next !== 'ivf') {\n return false;\n }\n setMethod(next);\n return true;\n },\n setReferenceDate: (isoDate) => {\n if (isoDate === null) {\n setRefDate(undefined);\n return true;\n }\n const parsed = fromIsoDate(isoDate);\n // The DatePicker caps at today; the handle honours the same bound.\n if (!parsed || isAfter(parsed, new Date())) return false;\n setRefDate(parsed);\n return true;\n },\n setCycleLength: (days) => {\n if (\n days !== null &&\n !(\n Number.isFinite(days) &&\n days >= CYCLE_LENGTH_RANGE.min &&\n days <= CYCLE_LENGTH_RANGE.max\n )\n ) {\n return false;\n }\n setCycleLength(days);\n return true;\n },\n setEmbryoAge: (days) => {\n if (days !== 3 && days !== 5) return false;\n setEmbryoAge(days);\n return true;\n },\n setCrl: (next) => {\n const now = new Date();\n let parsedScan: Date | undefined;\n // Validate the whole payload before writing any of it, so a bad\n // value can't leave the form half-updated.\n if ('crlMm' in next) {\n const mm = next.crlMm;\n if (\n mm !== null &&\n mm !== undefined &&\n !(Number.isFinite(mm) && mm > 0)\n ) {\n return false;\n }\n }\n if ('scanDate' in next && next.scanDate != null) {\n const d = fromIsoDate(next.scanDate);\n if (!d || isAfter(d, now)) return false;\n parsedScan = d;\n }\n if ('crlMm' in next) setCrlMm(next.crlMm ?? null);\n if ('scanDate' in next) setScanDate(parsedScan);\n return true;\n },\n setAsOfDate: (isoDate) => {\n const parsed = fromIsoDate(isoDate);\n if (!parsed) return false;\n setAsOfDate(parsed);\n return true;\n },\n }),\n [],\n );\n useAgentRegistration(dueDateCalculatorAgent, agentHandle, id);\n\n const schedule = useMemo(() => {\n if (!showSchedule || !result) return null;\n return computeAntenatalSchedule(result.gestationalStart, {\n ...scheduleOptions,\n today: asOfDate,\n });\n }, [showSchedule, result, asOfDate, scheduleOptions]);\n\n return (\n <div\n ref={ref}\n data-component=\"due-date-calculator\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <RadioGroup\n label={t('dueDateCalculator.method.label')}\n variant=\"horizontal\"\n value={method}\n onValueChange={(next) => setMethod(next as DueDateMethod)}\n >\n <Radio label={t('dueDateCalculator.method.lmp')} value=\"lmp\" />\n <Radio\n label={t('dueDateCalculator.method.conception')}\n value=\"conception\"\n />\n <Radio label={t('dueDateCalculator.method.ivf')} value=\"ivf\" />\n </RadioGroup>\n\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField label={t(DATE_LABEL_KEY[method])}>\n <DatePicker value={refDate} onChange={setRefDate} maxDate={today} />\n </FormField>\n\n {method === 'lmp' && (\n <FormField\n label={t('dueDateCalculator.cycleLength')}\n description={t('dueDateCalculator.cycleLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={CYCLE_LENGTH_RANGE.min}\n max={CYCLE_LENGTH_RANGE.max}\n value={cycleLength}\n onChange={setCycleLength}\n />\n </FormField>\n )}\n\n {method === 'ivf' && (\n <RadioGroup\n label={t('dueDateCalculator.embryoAge')}\n variant=\"horizontal\"\n value={String(embryoAge)}\n onValueChange={(next) => setEmbryoAge(Number(next) as EmbryoAge)}\n >\n <Radio label={t('dueDateCalculator.day3')} value=\"3\" />\n <Radio label={t('dueDateCalculator.day5')} value=\"5\" />\n </RadioGroup>\n )}\n </div>\n\n <FormField\n label={t('dueDateCalculator.asOfDate')}\n description={t('dueDateCalculator.asOfDateHint')}\n >\n <DatePicker value={asOfDate} onChange={(d) => d && setAsOfDate(d)} />\n </FormField>\n\n {method === 'lmp' ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField\n label={t('dueDateCalculator.crl')}\n description={t('dueDateCalculator.crlHint')}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.1}\n value={crlMm}\n onChange={setCrlMm}\n />\n </FormField>\n <FormField label={t('dueDateCalculator.scanDate')}>\n <DatePicker\n value={scanDate}\n onChange={setScanDate}\n maxDate={today}\n />\n </FormField>\n </div>\n {redating ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Badge variant={redating.redated ? 'warning' : 'success'}>\n {redating.redated\n ? t('dueDateCalculator.redated', {\n days: redating.discrepancyDays,\n })\n : t('dueDateCalculator.datesAgree')}\n </Badge>\n {!redating.crlInRange ? (\n <span className=\"type-meta ds:text-muted-foreground\">\n {t('dueDateCalculator.crlOutOfRange')}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {/* Concise polite announcement when a due date resolves. */}\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('dueDateCalculator.result.dueDateLabel')}: ${dateFormatter.format(\n result.dueDate,\n )}. ${t('dueDateCalculator.result.trimesterLabel')}: ${t(\n `dueDateCalculator.trimester.${result.trimester}`,\n )}.`\n : ''}\n </p>\n\n {result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <dl className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3\">\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('dueDateCalculator.result.trimesterLabel')}\n </dt>\n <dd>\n <Badge\n variant={TRIMESTER_BADGE_VARIANT[result.trimester]}\n size=\"lg\"\n >\n {t(`dueDateCalculator.trimester.${result.trimester}`)}\n </Badge>\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('dueDateCalculator.result.gestationLabel')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {result.gestationalAge\n ? t('dueDateCalculator.result.gestation', {\n weeks: result.gestationalAge.weeks,\n days: result.gestationalAge.days,\n })\n : '—'}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('dueDateCalculator.result.dueDateLabel')}\n </dt>\n <dd className=\"type-metric ds:text-foreground\">\n {dateFormatter.format(result.dueDate)}\n </dd>\n </div>\n </dl>\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('dueDateCalculator.empty')}\n </p>\n )}\n\n {schedule ? <AntenatalScheduleTimeline events={schedule} /> : null}\n\n {/* One result-action group for the whole result — sits after both the\n due-date card and the schedule, and its payload carries the schedule\n rows when shown (no per-card buttons). */}\n {result && (insertVariant === 'copy' || onInsert) ? (\n <InsertButton\n variant={insertVariant}\n onInsert={onInsert}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.dueDate'),\n icon: 'calendar-heart',\n highlight: dateFormatter.format(result.dueDate),\n // Chip tinted with the trimester's semantic token so the inserted\n // PNG carries the same clinical-stage colour as the on-screen\n // trimester badge — with the contrast-safe orange override for the\n // `--warning` third trimester.\n highlightToken: trimesterHighlightToken(result.trimester),\n brand: insertBrand,\n fields: [\n {\n // The estimated date of delivery → calendar glyph.\n icon: 'calendar',\n label: t('dueDateCalculator.result.dueDateLabel'),\n value: dateFormatter.format(result.dueDate),\n },\n {\n // Gestational age is an elapsed duration → clock glyph.\n icon: 'clock',\n label: t('dueDateCalculator.result.gestationLabel'),\n value: result.gestationalAge\n ? t('dueDateCalculator.result.gestation', {\n weeks: result.gestationalAge.weeks,\n days: result.gestationalAge.days,\n })\n : '—',\n },\n {\n // Trimester is a clinical-stage classification → tag.\n icon: 'tag',\n label: t('dueDateCalculator.result.trimesterLabel'),\n value: t(`dueDateCalculator.trimester.${result.trimester}`),\n },\n // When the schedule is shown, the single Insert button carries\n // the exam windows too (no second button).\n ...(schedule\n ? buildScheduleInsertFields(schedule, t, (d) =>\n dateFormatter.format(d),\n )\n : []),\n ],\n }}\n />\n ) : null}\n </div>\n );\n },\n);\n\nDueDateCalculator.displayName = 'DueDateCalculator';\n"],"names":["DEPRECATED","isoDate","dueDateCalculatorAgent","handle","args","rootVariants","cva","DATE_LABEL_KEY","toIsoDate","d","format","fromIsoDate","iso","parseISO","CYCLE_LENGTH_RANGE","DueDateCalculator","forwardRef","defaultMethod","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","showSchedule","scheduleOptions","id","width","className","ref","i18n","useTranslation","method","setMethod","useState","refDate","setRefDate","cycleLength","setCycleLength","DEFAULT_CYCLE_LENGTH","embryoAge","setEmbryoAge","crlMm","setCrlMm","scanDate","setScanDate","today","useMemo","asOfDate","setAsOfDate","redating","redateByCrl","result","effectiveDate","effectiveCycle","computeDueDate","dateFormatter","useEffect","liveRef","useRef","agentHandle","live","r","next","parsed","isAfter","days","now","parsedScan","mm","useAgentRegistration","schedule","computeAntenatalSchedule","jsxs","RadioGroup","jsx","Radio","FormField","DatePicker","NumberInput","Badge","Card","TRIMESTER_BADGE_VARIANT","AntenatalScheduleTimeline","InsertButton","trimesterHighlightToken","buildScheduleInsertFields"],"mappings":";;;;;;;;;;;;;;;;;AAyBA,MAAMA,IAAa,iDAGbC,IAAU;AAAA,EACd,MAAM;AAAA,EACN,SAAS;AACX,GAEaC,KAAgE;AAAA,EAC3E,IAAI;AAAA;AAAA,EAEJ,cAAc,CAAC,WAAW;AAAA,EAC1B,OAAO;AAAA,IACL,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,UAAA;AAAA,IAAU;AAAA,IAErC,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACA,MAAWA,EAAO,UAAA;AAAA,IAAU;AAAA,EACrC;AAAA,EAEF,SAAS;AAAA,IACP,YAAY;AAAA;AAAA;AAAA,MAGV,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,QAAQ;AAAA,YACN,MAAM,CAAC,OAAO,cAAc,KAAK;AAAA,YACjC,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,QAAQ;AAAA,QACnB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYH;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MACfD,EAAO,UAAUC,EAAK,MAAM;AAAA,IAAA;AAAA,IAEhC,oBAAoB;AAAA,MAClB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,OAAO;AAAA,cACL,EAAE,GAAGH,GAAS,aAAa,qCAAA;AAAA,cAC3B,EAAE,MAAM,OAAA;AAAA,YAAO;AAAA,YAEjB,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYD;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,MAAA;AAAA,MAEF,UAAU;AAAA,QACR;AAAA,UACE,MAAM,EAAE,MAAM,aAAA;AAAA,UACd,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MACfD,EAAO,iBAAiBC,EAAK,IAAI;AAAA,IAAA;AAAA,IAErC,kBAAkB;AAAA,MAChB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,OAAO;AAAA,cACL,EAAE,MAAM,WAAW,SAAS,IAAI,SAAS,GAAA;AAAA,cACzC,EAAE,MAAM,OAAA;AAAA,YAAO;AAAA,YAEjB,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYJ;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MACfD,EAAO,eAAeC,EAAK,IAAI;AAAA,IAAA;AAAA,IAEnC,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,MAAM,CAAC,GAAG,CAAC;AAAA,YACX,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYJ;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MAA0BD,EAAO,aAAaC,EAAK,IAAI;AAAA,IAAA;AAAA,IAE1E,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,OAAO;AAAA,YACL,OAAO,CAAC,EAAE,MAAM,UAAU,kBAAkB,KAAK,EAAE,MAAM,QAAQ;AAAA,YACjE,aACE;AAAA,UAAA;AAAA,UAEJ,UAAU;AAAA,YACR,OAAO,CAAC,EAAE,GAAGH,KAAW,EAAE,MAAM,QAAQ;AAAA,YACxC,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYD;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ;AAAA,QACN;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,UAAU;AAAA,QACR;AAAA,UACE,MAAM,EAAE,OAAO,IAAI,UAAU,aAAA;AAAA,UAC7B,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CACNG,GACAC,MACGD,EAAO,OAAOC,CAAI;AAAA,IAAA;AAAA,IAEzB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,GAAGH;AAAA,YACH,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;AAAA,MACZ,YAAYD;AAAA,MACZ,SAAS;AAAA,MACT,eAAe;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,MAAA;AAAA,MAEf,QAAQ,CAAC,wCAAwC;AAAA,MACjD,UAAU;AAAA,QACR;AAAA,UACE,MAAM,EAAE,MAAM,aAAA;AAAA,UACd,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACG,GAAQC,MAA2BD,EAAO,YAAYC,EAAK,IAAI;AAAA,IAAA;AAAA,EAC1E;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GC7OMC,KAAeC,GAAI,kDAAkD;AAAA,EACzE,UAAU;AAAA,IACR,OAAO,EAAE,MAAM,aAAa,MAAM,iBAAA;AAAA,EAAiB;AAAA,EAErD,iBAAiB,EAAE,OAAO,OAAA;AAC5B,CAAC,GAGKC,KAAgD;AAAA,EACpD,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,KAAK;AACP,GAUMC,IAAY,CAACC,MAAoBC,GAAOD,GAAG,YAAY,GAEvDE,IAAc,CAACC,MAA6B;AAChD,QAAMH,IAAII,GAASD,CAAG;AACtB,SAAO,OAAO,MAAMH,EAAE,QAAA,CAAS,IAAI,OAAOA;AAC5C,GAGMK,IAAqB,EAAE,KAAK,IAAI,KAAK,GAAA,GA6G9BC,KAAoBC;AAAA,EAI/B,CACE;AAAA,IACE,eAAAC,IAAgB;AAAA,IAChB,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,iBAAAC;AAAA,IACA,IAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC;AAAA,EAAA,GAEFC,OACG;AACH,UAAM,EAAE,GAAG,MAAAC,EAAA,IAASC,GAAA,GAEd,CAACC,GAAQC,CAAS,IAAIC,EAAwBjB,CAAa,GAC3D,CAACkB,GAASC,CAAU,IAAIF,EAA2B,MAAS,GAC5D,CAACG,GAAaC,CAAc,IAAIJ;AAAA,MACpCK;AAAA,IAAA,GAEI,CAACC,GAAWC,CAAY,IAAIP,EAAoB,CAAC,GAEjD,CAACQ,GAAOC,CAAQ,IAAIT,EAAwB,IAAI,GAChD,CAACU,GAAUC,CAAW,IAAIX,EAA2B,MAAS,GAG9DY,IAAQC,EAAQ,0BAAU,KAAA,GAAQ,CAAA,CAAE,GAIpC,CAACC,GAAUC,CAAW,IAAIf,EAAe,MAAM,oBAAI,MAAM,GAGzDgB,IAAWH,EAAQ,MACnBf,MAAW,SAAS,CAACG,KAAWO,MAAU,QAAQ,CAACE,IAC9C,OAEFO,GAAY,EAAE,KAAKhB,GAAS,UAAAS,GAAU,OAAAF,GAAO,GACnD,CAACV,GAAQG,GAASO,GAAOE,CAAQ,CAAC,GAE/BQ,IAASL,EAA8B,MAAM;AACjD,UAAI,CAACZ,EAAS,QAAO;AAGrB,YAAMkB,IACJrB,MAAW,UAASkB,KAAA,QAAAA,EAAU,WAC1BA,EAAS,mBACTf,GACAmB,IACJtB,MAAW,UAASkB,KAAA,QAAAA,EAAU,WAC1BX,IACCF,KAAeE;AACtB,aAAOgB;AAAA,QACL;AAAA,UACE,QAAAvB;AAAA,UACA,MAAMqB;AAAA,UACN,aAAaC;AAAA,UACb,WAAAd;AAAA,QAAA;AAAA,QAEFQ;AAAA,MAAA;AAAA,IAEJ,GAAG,CAAChB,GAAQG,GAASE,GAAaG,GAAWU,GAAUF,CAAQ,CAAC,GAE1DQ,IAAgBT;AAAA,MACpB,MAAM,IAAI,KAAK,eAAejB,EAAK,UAAU,EAAE,WAAW,QAAQ;AAAA,MAClE,CAACA,EAAK,QAAQ;AAAA,IAAA;AAGhB,IAAA2B,GAAU,MAAM;AACd,MAAAvC,KAAA,QAAAA,EAAiBkC;AAAA,IACnB,GAAG,CAACA,GAAQlC,CAAc,CAAC;AAG3B,UAAMwC,IAAUC,GAAO;AAAA,MACrB,QAAA3B;AAAA,MACA,SAAAG;AAAA,MACA,aAAAE;AAAA,MACA,WAAAG;AAAA,MACA,OAAAE;AAAA,MACA,UAAAE;AAAA,MACA,UAAAI;AAAA,MACA,QAAAI;AAAA,IAAA,CACD;AACD,IAAAM,EAAQ,UAAU;AAAA,MAChB,QAAA1B;AAAA,MACA,SAAAG;AAAA,MACA,aAAAE;AAAA,MACA,WAAAG;AAAA,MACA,OAAAE;AAAA,MACA,UAAAE;AAAA,MACA,UAAAI;AAAA,MACA,QAAAI;AAAA,IAAA;AAGF,UAAMQ,KAAcb;AAAA,MAClB,OAAO;AAAA,QACL,WAAW,MAAM;AACf,gBAAMc,IAAOH,EAAQ;AACrB,iBAAO;AAAA,YACL,QAAQG,EAAK;AAAA,YACb,eAAeA,EAAK,UAAUrD,EAAUqD,EAAK,OAAO,IAAI;AAAA,YACxD,aAAaA,EAAK;AAAA,YAClB,WAAWA,EAAK;AAAA,YAChB,OAAOA,EAAK;AAAA,YACZ,UAAUA,EAAK,WAAWrD,EAAUqD,EAAK,QAAQ,IAAI;AAAA,YACrD,UAAUrD,EAAUqD,EAAK,QAAQ;AAAA,UAAA;AAAA,QAErC;AAAA,QACA,WAAW,MAAM;AACf,gBAAMC,IAAIJ,EAAQ,QAAQ;AAC1B,iBAAKI,IACE;AAAA,YACL,SAAStD,EAAUsD,EAAE,OAAO;AAAA,YAC5B,kBAAkBtD,EAAUsD,EAAE,gBAAgB;AAAA,YAC9C,gBAAgBA,EAAE,iBAAiB,EAAE,GAAGA,EAAE,mBAAmB;AAAA,YAC7D,WAAWA,EAAE;AAAA,UAAA,IALA;AAAA,QAOjB;AAAA,QACA,WAAW,CAACC,MACNA,MAAS,SAASA,MAAS,gBAAgBA,MAAS,QAC/C,MAET9B,EAAU8B,CAAI,GACP;AAAA,QAET,kBAAkB,CAAC9D,MAAY;AAC7B,cAAIA,MAAY;AACd,mBAAAmC,EAAW,MAAS,GACb;AAET,gBAAM4B,IAASrD,EAAYV,CAAO;AAElC,iBAAI,CAAC+D,KAAUC,EAAQD,uBAAY,KAAA,CAAM,IAAU,MACnD5B,EAAW4B,CAAM,GACV;AAAA,QACT;AAAA,QACA,gBAAgB,CAACE,MAEbA,MAAS,QACT,EACE,OAAO,SAASA,CAAI,KACpBA,KAAQpD,EAAmB,OAC3BoD,KAAQpD,EAAmB,OAGtB,MAETwB,EAAe4B,CAAI,GACZ;AAAA,QAET,cAAc,CAACA,MACTA,MAAS,KAAKA,MAAS,IAAU,MACrCzB,EAAayB,CAAI,GACV;AAAA,QAET,QAAQ,CAACH,MAAS;AAChB,gBAAMI,wBAAU,KAAA;AAChB,cAAIC;AAGJ,cAAI,WAAWL,GAAM;AACnB,kBAAMM,IAAKN,EAAK;AAChB,gBACEM,KAAO,QAEP,EAAE,OAAO,SAASA,CAAE,KAAKA,IAAK;AAE9B,qBAAO;AAAA,UAEX;AACA,cAAI,cAAcN,KAAQA,EAAK,YAAY,MAAM;AAC/C,kBAAMtD,IAAIE,EAAYoD,EAAK,QAAQ;AACnC,gBAAI,CAACtD,KAAKwD,EAAQxD,GAAG0D,CAAG,EAAG,QAAO;AAClC,YAAAC,IAAa3D;AAAA,UACf;AACA,iBAAI,WAAWsD,KAAMpB,EAASoB,EAAK,SAAS,IAAI,GAC5C,cAAcA,KAAMlB,EAAYuB,CAAU,GACvC;AAAA,QACT;AAAA,QACA,aAAa,CAACnE,MAAY;AACxB,gBAAM+D,IAASrD,EAAYV,CAAO;AAClC,iBAAK+D,KACLf,EAAYe,CAAM,GACX,MAFa;AAAA,QAGtB;AAAA,MAAA;AAAA,MAEF,CAAA;AAAA,IAAC;AAEH,IAAAM,GAAqBpE,IAAwB0D,IAAalC,CAAE;AAE5D,UAAM6C,IAAWxB,EAAQ,MACnB,CAACvB,KAAgB,CAAC4B,IAAe,OAC9BoB,GAAyBpB,EAAO,kBAAkB;AAAA,MACvD,GAAG3B;AAAA,MACH,OAAOuB;AAAA,IAAA,CACR,GACA,CAACxB,GAAc4B,GAAQJ,GAAUvB,CAAe,CAAC;AAEpD,WACE,gBAAAgD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA5C;AAAA,QACA,kBAAe;AAAA,QACf,qBAAmBH;AAAA,QACnB,WAAWrB,GAAa,EAAE,OAAAsB,IAAO,WAAAC,IAAW;AAAA,QAE5C,UAAA;AAAA,UAAA,gBAAA6C;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,OAAO,EAAE,gCAAgC;AAAA,cACzC,SAAQ;AAAA,cACR,OAAO1C;AAAA,cACP,eAAe,CAAC+B,MAAS9B,EAAU8B,CAAqB;AAAA,cAExD,UAAA;AAAA,gBAAA,gBAAAY,EAACC,KAAM,OAAO,EAAE,8BAA8B,GAAG,OAAM,OAAM;AAAA,gBAC7D,gBAAAD;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,OAAO,EAAE,qCAAqC;AAAA,oBAC9C,OAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEPA,GAAA,EAAM,OAAO,EAAE,8BAA8B,GAAG,OAAM,MAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAG/D,gBAAAH,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA;AAAA,YAAA,gBAAAE,EAACE,GAAA,EAAU,OAAO,EAAEtE,GAAeyB,CAAM,CAAC,GACxC,UAAA,gBAAA2C,EAACG,GAAA,EAAW,OAAO3C,GAAS,UAAUC,GAAY,SAASU,GAAO,GACpE;AAAA,YAECd,MAAW,SACV,gBAAA2C;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,+BAA+B;AAAA,gBACxC,aAAa,EAAE,mCAAmC;AAAA,gBAElD,UAAA,gBAAAF;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAKjE,EAAmB;AAAA,oBACxB,KAAKA,EAAmB;AAAA,oBACxB,OAAOuB;AAAA,oBACP,UAAUC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,YAIHN,MAAW,SACV,gBAAAyC;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,6BAA6B;AAAA,gBACtC,SAAQ;AAAA,gBACR,OAAO,OAAOlC,CAAS;AAAA,gBACvB,eAAe,CAACuB,MAAStB,EAAa,OAAOsB,CAAI,CAAc;AAAA,gBAE/D,UAAA;AAAA,kBAAA,gBAAAY,EAACC,KAAM,OAAO,EAAE,wBAAwB,GAAG,OAAM,KAAI;AAAA,oCACpDA,GAAA,EAAM,OAAO,EAAE,wBAAwB,GAAG,OAAM,IAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACvD,GAEJ;AAAA,UAEA,gBAAAD;AAAA,YAACE;AAAA,YAAA;AAAA,cACC,OAAO,EAAE,4BAA4B;AAAA,cACrC,aAAa,EAAE,gCAAgC;AAAA,cAE/C,UAAA,gBAAAF,EAACG,GAAA,EAAW,OAAO9B,GAAU,UAAU,CAACvC,MAAMA,KAAKwC,EAAYxC,CAAC,EAAA,CAAG;AAAA,YAAA;AAAA,UAAA;AAAA,UAGpEuB,MAAW,QACV,gBAAAyC,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA;AAAA,cAAA,gBAAAE;AAAA,gBAACE;AAAA,gBAAA;AAAA,kBACC,OAAO,EAAE,uBAAuB;AAAA,kBAChC,aAAa,EAAE,2BAA2B;AAAA,kBAE1C,UAAA,gBAAAF;AAAA,oBAACI;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,KAAK;AAAA,sBACL,MAAM;AAAA,sBACN,OAAOrC;AAAA,sBACP,UAAUC;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACZ;AAAA,cAAA;AAAA,cAEF,gBAAAgC,EAACE,GAAA,EAAU,OAAO,EAAE,4BAA4B,GAC9C,UAAA,gBAAAF;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,OAAOlC;AAAA,kBACP,UAAUC;AAAA,kBACV,SAASC;AAAA,gBAAA;AAAA,cAAA,EACX,CACF;AAAA,YAAA,GACF;AAAA,YACCI,IACC,gBAAAuB,EAAC,OAAA,EAAI,WAAU,mEACb,UAAA;AAAA,cAAA,gBAAAE,EAACK,GAAA,EAAM,SAAS9B,EAAS,UAAU,YAAY,WAC5C,UAAAA,EAAS,UACN,EAAE,6BAA6B;AAAA,gBAC7B,MAAMA,EAAS;AAAA,cAAA,CAChB,IACD,EAAE,8BAA8B,GACtC;AAAA,cACEA,EAAS,aAIP,OAHF,gBAAAyB,EAAC,QAAA,EAAK,WAAU,sCACb,UAAA,EAAE,iCAAiC,EAAA,CACtC;AAAA,YACE,EAAA,CACN,IACE;AAAA,UAAA,EAAA,CACN,IACE;AAAA,UAGJ,gBAAAA,EAAC,KAAA,EAAE,WAAU,cAAa,MAAK,UAAS,aAAU,UAC/C,UAAAvB,IACG,GAAG,EAAE,uCAAuC,CAAC,KAAKI,EAAc;AAAA,YAC9DJ,EAAO;AAAA,UAAA,CACR,KAAK,EAAE,yCAAyC,CAAC,KAAK;AAAA,YACrD,+BAA+BA,EAAO,SAAS;AAAA,UAAA,CAChD,MACD,IACN;AAAA,UAECA,IACC,gBAAAuB,EAACM,GAAA,EAAK,SAAQ,YACZ,UAAA,gBAAAN,EAACM,EAAK,MAAL,EAAU,WAAU,kDACnB,UAAA,gBAAAR,EAAC,MAAA,EAAG,WAAU,uEACZ,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iEACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,yCAAyC,GAC9C;AAAA,gCACC,MAAA,EACC,UAAA,gBAAAA;AAAA,gBAACK;AAAA,gBAAA;AAAA,kBACC,SAASE,GAAwB9B,EAAO,SAAS;AAAA,kBACjD,MAAK;AAAA,kBAEJ,UAAA,EAAE,+BAA+BA,EAAO,SAAS,EAAE;AAAA,gBAAA;AAAA,cAAA,EACtD,CACF;AAAA,YAAA,GACF;AAAA,YACA,gBAAAqB,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,yCAAyC,GAC9C;AAAA,gCACC,MAAA,EAAG,WAAU,gCACX,UAAAvB,EAAO,iBACJ,EAAE,sCAAsC;AAAA,gBACtC,OAAOA,EAAO,eAAe;AAAA,gBAC7B,MAAMA,EAAO,eAAe;AAAA,cAAA,CAC7B,IACD,IAAA,CACN;AAAA,YAAA,GACF;AAAA,YACA,gBAAAqB,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,uCAAuC,GAC5C;AAAA,cACA,gBAAAA,EAAC,QAAG,WAAU,kCACX,YAAc,OAAOvB,EAAO,OAAO,EAAA,CACtC;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF,EAAA,CACF,GACF,IAEA,gBAAAuB,EAAC,OAAE,WAAU,sCACV,UAAA,EAAE,yBAAyB,EAAA,CAC9B;AAAA,UAGDJ,IAAW,gBAAAI,EAACQ,IAAA,EAA0B,QAAQZ,GAAU,IAAK;AAAA,UAK7DnB,MAAWhC,MAAkB,UAAUD,KACtC,gBAAAwD;AAAA,YAACS;AAAA,YAAA;AAAA,cACC,SAAShE;AAAA,cACT,UAAAD;AAAA,cACA,QAAAE;AAAA,cACA,SAAAC;AAAA,cACA,MAAM;AAAA,gBACJ,OAAO,EAAE,sBAAsB;AAAA,gBAC/B,MAAM;AAAA,gBACN,WAAWkC,EAAc,OAAOJ,EAAO,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,gBAK9C,gBAAgBiC,GAAwBjC,EAAO,SAAS;AAAA,gBACxD,OAAO7B;AAAA,gBACP,QAAQ;AAAA,kBACN;AAAA;AAAA,oBAEE,MAAM;AAAA,oBACN,OAAO,EAAE,uCAAuC;AAAA,oBAChD,OAAOiC,EAAc,OAAOJ,EAAO,OAAO;AAAA,kBAAA;AAAA,kBAE5C;AAAA;AAAA,oBAEE,MAAM;AAAA,oBACN,OAAO,EAAE,yCAAyC;AAAA,oBAClD,OAAOA,EAAO,iBACV,EAAE,sCAAsC;AAAA,sBACtC,OAAOA,EAAO,eAAe;AAAA,sBAC7B,MAAMA,EAAO,eAAe;AAAA,oBAAA,CAC7B,IACD;AAAA,kBAAA;AAAA,kBAEN;AAAA;AAAA,oBAEE,MAAM;AAAA,oBACN,OAAO,EAAE,yCAAyC;AAAA,oBAClD,OAAO,EAAE,+BAA+BA,EAAO,SAAS,EAAE;AAAA,kBAAA;AAAA;AAAA;AAAA,kBAI5D,GAAImB,IACAe;AAAA,oBAA0Bf;AAAA,oBAAU;AAAA,oBAAG,CAAC9D,MACtC+C,EAAc,OAAO/C,CAAC;AAAA,kBAAA,IAExB,CAAA;AAAA,gBAAC;AAAA,cACP;AAAA,YACF;AAAA,UAAA,IAEA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEAM,GAAkB,cAAc;"}
@@ -2,8 +2,8 @@ import { useMemo as M, useState as E, useRef as T, useEffect as _ } from "react"
2
2
  import { jsx as i, jsxs as L } from "react/jsx-runtime";
3
3
  import { T as P } from "./tag-B65tLWvD.js";
4
4
  import { useTranslation as x } from "react-i18next";
5
- import { I as S } from "./icon-button-CY7GU_Se.js";
6
- import { I as V } from "./icon-button-group-B_426QN_.js";
5
+ import { I as S } from "./icon-button-JAXAkqWC.js";
6
+ import { I as V } from "./icon-button-group-ud2BLmxe.js";
7
7
  import { A as $, a as H } from "./arrow-up-BYvcvTkB.js";
8
8
  import { S as G } from "./square-check-big-dj0o8yA3.js";
9
9
  import { S as O } from "./square-DASBRZ0U.js";
@@ -409,4 +409,4 @@ export {
409
409
  ge as r,
410
410
  me as u
411
411
  };
412
- //# sourceMappingURL=editable-currency-cell-renderer-D_G2Ap61.js.map
412
+ //# sourceMappingURL=editable-currency-cell-renderer-Cch3RIJL.js.map