@alfadocs/ui-kit-debug 1.104.0 → 1.105.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 (324) hide show
  1. package/dist/_chunks/{ai-credits-exhausted-notice-CwZnSACy.js → ai-credits-exhausted-notice-Lws3113e.js} +2 -2
  2. package/dist/_chunks/{ai-credits-exhausted-notice-CwZnSACy.js.map → ai-credits-exhausted-notice-Lws3113e.js.map} +1 -1
  3. package/dist/_chunks/{ai-permission-notice-VNh3W57L.js → ai-permission-notice-BkgcGmu8.js} +2 -2
  4. package/dist/_chunks/{ai-permission-notice-VNh3W57L.js.map → ai-permission-notice-BkgcGmu8.js.map} +1 -1
  5. package/dist/_chunks/{alert-9kEwDza3.js → alert-C4WKViaS.js} +59 -50
  6. package/dist/_chunks/alert-C4WKViaS.js.map +1 -0
  7. package/dist/_chunks/{anamnesis-summary-rows-B9HqOGd7.js → anamnesis-summary-rows-QhbDdY7b.js} +4 -4
  8. package/dist/_chunks/{anamnesis-summary-rows-B9HqOGd7.js.map → anamnesis-summary-rows-QhbDdY7b.js.map} +1 -1
  9. package/dist/_chunks/{audio-recorder-BOm2FgEu.js → audio-recorder-BlDozxdU.js} +2 -2
  10. package/dist/_chunks/{audio-recorder-BOm2FgEu.js.map → audio-recorder-BlDozxdU.js.map} +1 -1
  11. package/dist/_chunks/{auth-form-parts-B3GWChvG.js → auth-form-parts-DVHfqnp6.js} +2 -2
  12. package/dist/_chunks/{auth-form-parts-B3GWChvG.js.map → auth-form-parts-DVHfqnp6.js.map} +1 -1
  13. package/dist/_chunks/{balance-badge-cell-DGFm2jfP.js → balance-badge-cell-wJ6cTD_h.js} +3 -3
  14. package/dist/_chunks/{balance-badge-cell-DGFm2jfP.js.map → balance-badge-cell-wJ6cTD_h.js.map} +1 -1
  15. package/dist/_chunks/{calendar-appointment-editor-dialog-DqyATSh3.js → calendar-appointment-editor-dialog-D8DblVjW.js} +8 -8
  16. package/dist/_chunks/{calendar-appointment-editor-dialog-DqyATSh3.js.map → calendar-appointment-editor-dialog-D8DblVjW.js.map} +1 -1
  17. package/dist/_chunks/{care-plan-card-YWKV8Kjq.js → care-plan-card-DMjlYlFc.js} +2 -2
  18. package/dist/_chunks/{care-plan-card-YWKV8Kjq.js.map → care-plan-card-DMjlYlFc.js.map} +1 -1
  19. package/dist/_chunks/{care-plan-entry-card-CApivtMW.js → care-plan-entry-card-3hguBW45.js} +2 -2
  20. package/dist/_chunks/{care-plan-entry-card-CApivtMW.js.map → care-plan-entry-card-3hguBW45.js.map} +1 -1
  21. package/dist/_chunks/{contact-profile-card-uExd3pKC.js → contact-profile-card-CAL66GaH.js} +120 -111
  22. package/dist/_chunks/contact-profile-card-CAL66GaH.js.map +1 -0
  23. package/dist/_chunks/{data-table-C5uN4ato.js → data-table-zXBxFYpJ.js} +761 -715
  24. package/dist/_chunks/data-table-zXBxFYpJ.js.map +1 -0
  25. package/dist/_chunks/{date-range-picker-B_j4VQlV.js → date-range-picker-DCADIR8o.js} +2 -2
  26. package/dist/_chunks/{date-range-picker-B_j4VQlV.js.map → date-range-picker-DCADIR8o.js.map} +1 -1
  27. package/dist/_chunks/{date-time-picker-cwsWiB4q.js → date-time-picker-CT2bC7-A.js} +2 -2
  28. package/dist/_chunks/{date-time-picker-cwsWiB4q.js.map → date-time-picker-CT2bC7-A.js.map} +1 -1
  29. package/dist/_chunks/{document-preview-U8H6tnDJ.js → document-preview-BalyZqnn.js} +2 -2
  30. package/dist/_chunks/{document-preview-U8H6tnDJ.js.map → document-preview-BalyZqnn.js.map} +1 -1
  31. package/dist/_chunks/{document-scanner-Bf3VUp00.js → document-scanner-5p-Uu8dy.js} +2 -2
  32. package/dist/_chunks/{document-scanner-Bf3VUp00.js.map → document-scanner-5p-Uu8dy.js.map} +1 -1
  33. package/dist/_chunks/{entity-summary-BKfR4Vws.js → entity-summary-BbqqYqF1.js} +2 -2
  34. package/dist/_chunks/{entity-summary-BKfR4Vws.js.map → entity-summary-BbqqYqF1.js.map} +1 -1
  35. package/dist/_chunks/{error-summary-mGxIyDAY.js → error-summary-DxNhwf_G.js} +2 -2
  36. package/dist/_chunks/{error-summary-mGxIyDAY.js.map → error-summary-DxNhwf_G.js.map} +1 -1
  37. package/dist/_chunks/{face-scheme-DdVLQ5dP.js → face-scheme-e2M2HJGz.js} +2 -2
  38. package/dist/_chunks/{face-scheme-DdVLQ5dP.js.map → face-scheme-e2M2HJGz.js.map} +1 -1
  39. package/dist/_chunks/{file-manager-CnGBVX_q.js → file-manager-BDKe59sg.js} +2 -2
  40. package/dist/_chunks/{file-manager-CnGBVX_q.js.map → file-manager-BDKe59sg.js.map} +1 -1
  41. package/dist/_chunks/{forgot-password-form-CeTb5p-x.js → forgot-password-form-vfCO2-Tt.js} +4 -4
  42. package/dist/_chunks/{forgot-password-form-CeTb5p-x.js.map → forgot-password-form-vfCO2-Tt.js.map} +1 -1
  43. package/dist/_chunks/{freemium-paywall-CM0zQSDE.js → freemium-paywall-BDeq9QWR.js} +2 -2
  44. package/dist/_chunks/{freemium-paywall-CM0zQSDE.js.map → freemium-paywall-BDeq9QWR.js.map} +1 -1
  45. package/dist/_chunks/{gestational-age-calculator-CXcDKQqC.js → gestational-age-calculator-AnaH00nk.js} +2 -2
  46. package/dist/_chunks/{gestational-age-calculator-CXcDKQqC.js.map → gestational-age-calculator-AnaH00nk.js.map} +1 -1
  47. package/dist/_chunks/{hcg-doubling-BJFR3onB.js → hcg-doubling-DdyUt4gz.js} +2 -2
  48. package/dist/_chunks/{hcg-doubling-BJFR3onB.js.map → hcg-doubling-DdyUt4gz.js.map} +1 -1
  49. package/dist/_chunks/{heatmap-Cz0Krieg.js → heatmap-D4qqpCEj.js} +1550 -1547
  50. package/dist/_chunks/{heatmap-Cz0Krieg.js.map → heatmap-D4qqpCEj.js.map} +1 -1
  51. package/dist/_chunks/{help-me-write-templates-ra5a__Yy.js → help-me-write-templates-YmceSxf5.js} +3 -3
  52. package/dist/_chunks/{help-me-write-templates-ra5a__Yy.js.map → help-me-write-templates-YmceSxf5.js.map} +1 -1
  53. package/dist/_chunks/info-tip-C-MPkShR.js +266 -0
  54. package/dist/_chunks/info-tip-C-MPkShR.js.map +1 -0
  55. package/dist/_chunks/{kit-extensions-C4o_tFN4.js → kit-extensions-BOnTM4Yf.js} +3 -3
  56. package/dist/_chunks/{kit-extensions-C4o_tFN4.js.map → kit-extensions-BOnTM4Yf.js.map} +1 -1
  57. package/dist/_chunks/{link-cell-renderer-BRek9kz7.js → link-cell-renderer-C8vfCOEp.js} +2 -2
  58. package/dist/_chunks/{link-cell-renderer-BRek9kz7.js.map → link-cell-renderer-C8vfCOEp.js.map} +1 -1
  59. package/dist/_chunks/{login-dev-card-D5BV5j1i.js → login-dev-card-Cz1Clugq.js} +3 -3
  60. package/dist/_chunks/{login-dev-card-D5BV5j1i.js.map → login-dev-card-Cz1Clugq.js.map} +1 -1
  61. package/dist/_chunks/{marketplace-app-shell-BsctSegT.js → marketplace-app-shell-C-4QF6mp.js} +2 -2
  62. package/dist/_chunks/{marketplace-app-shell-BsctSegT.js.map → marketplace-app-shell-C-4QF6mp.js.map} +1 -1
  63. package/dist/_chunks/{notes-panel-BjTpaz8d.js → notes-panel-SlzUL8in.js} +4 -4
  64. package/dist/_chunks/{notes-panel-BjTpaz8d.js.map → notes-panel-SlzUL8in.js.map} +1 -1
  65. package/dist/_chunks/{notice-group-DkYzKyAZ.js → notice-group-B-trhof8.js} +3 -3
  66. package/dist/_chunks/{notice-group-DkYzKyAZ.js.map → notice-group-B-trhof8.js.map} +1 -1
  67. package/dist/_chunks/{patient-details-BXM3dRKb.js → patient-details-wMgTFtpp.js} +2 -2
  68. package/dist/_chunks/{patient-details-BXM3dRKb.js.map → patient-details-wMgTFtpp.js.map} +1 -1
  69. package/dist/_chunks/{patient-field-row--dCDO5oB.js → patient-field-row-Bhm2Ig1P.js} +2 -2
  70. package/dist/_chunks/{patient-field-row--dCDO5oB.js.map → patient-field-row-Bhm2Ig1P.js.map} +1 -1
  71. package/dist/_chunks/{patient-summary-card-DB7fv-Tr.js → patient-summary-card-DMdPPG3n.js} +2 -2
  72. package/dist/_chunks/{patient-summary-card-DB7fv-Tr.js.map → patient-summary-card-DMdPPG3n.js.map} +1 -1
  73. package/dist/_chunks/{payment-automation-upsell-BPF0c-5D.js → payment-automation-upsell-u5EuFyCY.js} +2 -2
  74. package/dist/_chunks/{payment-automation-upsell-BPF0c-5D.js.map → payment-automation-upsell-u5EuFyCY.js.map} +1 -1
  75. package/dist/_chunks/{payment-form-PBuh8PIa.js → payment-form-C-s1x-bU.js} +2 -2
  76. package/dist/_chunks/{payment-form-PBuh8PIa.js.map → payment-form-C-s1x-bU.js.map} +1 -1
  77. package/dist/_chunks/{pdf-viewer-DlceXkfW.js → pdf-viewer-BnBKdx0y.js} +2 -2
  78. package/dist/_chunks/{pdf-viewer-DlceXkfW.js.map → pdf-viewer-BnBKdx0y.js.map} +1 -1
  79. package/dist/_chunks/{practice-profile-hero-BAvGdQmt.js → practice-profile-hero-Bb4YyxHA.js} +31 -29
  80. package/dist/_chunks/practice-profile-hero-Bb4YyxHA.js.map +1 -0
  81. package/dist/_chunks/{practice-results-ChBP9x2r.js → practice-results-BXz01sti.js} +485 -445
  82. package/dist/_chunks/practice-results-BXz01sti.js.map +1 -0
  83. package/dist/_chunks/{pregnancy-dating-D0Kf9s7s.js → pregnancy-dating-D6dLkMpl.js} +2 -2
  84. package/dist/_chunks/{pregnancy-dating-D0Kf9s7s.js.map → pregnancy-dating-D6dLkMpl.js.map} +1 -1
  85. package/dist/_chunks/{progress-notice-DiHWZ8Ms.js → progress-notice-F7ao70ZP.js} +2 -2
  86. package/dist/_chunks/{progress-notice-DiHWZ8Ms.js.map → progress-notice-F7ao70ZP.js.map} +1 -1
  87. package/dist/_chunks/{radiograph-panel.agent-BQ95uFCd.js → radiograph-panel.agent-0ngF2sGS.js} +2 -2
  88. package/dist/_chunks/{radiograph-panel.agent-BQ95uFCd.js.map → radiograph-panel.agent-0ngF2sGS.js.map} +1 -1
  89. package/dist/_chunks/{registration-form-JzzTomhd.js → registration-form-CEJRUS9G.js} +3 -3
  90. package/dist/_chunks/{registration-form-JzzTomhd.js.map → registration-form-CEJRUS9G.js.map} +1 -1
  91. package/dist/_chunks/{reserved.agent-BxD0gnbt.js → reserved.agent-C-C9cvO5.js} +2 -2
  92. package/dist/_chunks/{reserved.agent-BxD0gnbt.js.map → reserved.agent-C-C9cvO5.js.map} +1 -1
  93. package/dist/_chunks/{reset-password-form-DDdGEoIL.js → reset-password-form-B0acanDD.js} +4 -4
  94. package/dist/_chunks/{reset-password-form-DDdGEoIL.js.map → reset-password-form-B0acanDD.js.map} +1 -1
  95. package/dist/_chunks/{rich-text-editor-F04przIt.js → rich-text-editor-C3nANKZt.js} +2 -2
  96. package/dist/_chunks/{rich-text-editor-F04przIt.js.map → rich-text-editor-C3nANKZt.js.map} +1 -1
  97. package/dist/_chunks/{send-registration-link-form-DHCQpA4C.js → send-registration-link-form-Nn0jf65G.js} +3 -3
  98. package/dist/_chunks/{send-registration-link-form-DHCQpA4C.js.map → send-registration-link-form-Nn0jf65G.js.map} +1 -1
  99. package/dist/_chunks/{sign-document-B5qZhthO.js → sign-document-CQZVzfpk.js} +2 -2
  100. package/dist/_chunks/{sign-document-B5qZhthO.js.map → sign-document-CQZVzfpk.js.map} +1 -1
  101. package/dist/_chunks/{signature-request-DB6kePIm.js → signature-request-DtLph5Z4.js} +3 -3
  102. package/dist/_chunks/{signature-request-DB6kePIm.js.map → signature-request-DtLph5Z4.js.map} +1 -1
  103. package/dist/_chunks/{switch-D--x7n6h.js → switch-DO6uC4HJ.js} +40 -36
  104. package/dist/_chunks/switch-DO6uC4HJ.js.map +1 -0
  105. package/dist/_chunks/{task-editor-BiPGFXtB.js → task-editor-CmXcj6cC.js} +4 -4
  106. package/dist/_chunks/{task-editor-BiPGFXtB.js.map → task-editor-CmXcj6cC.js.map} +1 -1
  107. package/dist/_chunks/{tasks-panel-iVeuu9a8.js → tasks-panel-CFo5uIHx.js} +3 -3
  108. package/dist/_chunks/{tasks-panel-iVeuu9a8.js.map → tasks-panel-CFo5uIHx.js.map} +1 -1
  109. package/dist/_chunks/{theme-toggle-jZRbAidE.js → theme-toggle-Czq3K9jB.js} +2 -2
  110. package/dist/_chunks/{theme-toggle-jZRbAidE.js.map → theme-toggle-Czq3K9jB.js.map} +1 -1
  111. package/dist/_chunks/{time-picker-DSt-ns5F.js → time-picker-DDr5vhwQ.js} +344 -332
  112. package/dist/_chunks/time-picker-DDr5vhwQ.js.map +1 -0
  113. package/dist/_chunks/{tooth-scheme-Bd7xECuj.js → tooth-scheme-C-ALCHaV.js} +2 -2
  114. package/dist/_chunks/{tooth-scheme-Bd7xECuj.js.map → tooth-scheme-C-ALCHaV.js.map} +1 -1
  115. package/dist/_chunks/{use-appointment-details-read-CmqGGYCy.js → use-appointment-details-read-VI26Z-pc.js} +3 -3
  116. package/dist/_chunks/{use-appointment-details-read-CmqGGYCy.js.map → use-appointment-details-read-VI26Z-pc.js.map} +1 -1
  117. package/dist/_chunks/{voice-control-panel-BGJjUwnY.js → voice-control-panel-B0TUZAiP.js} +3 -3
  118. package/dist/_chunks/{voice-control-panel-BGJjUwnY.js.map → voice-control-panel-B0TUZAiP.js.map} +1 -1
  119. package/dist/_chunks/{warning-stack-3S7e2q07.js → warning-stack-Dx7cpj10.js} +2 -2
  120. package/dist/_chunks/{warning-stack-3S7e2q07.js.map → warning-stack-Dx7cpj10.js.map} +1 -1
  121. package/dist/_chunks/week-availability-CsTiwtYj.js +318 -0
  122. package/dist/_chunks/week-availability-CsTiwtYj.js.map +1 -0
  123. package/dist/_chunks/weekly-hours-editor-BsVsgeOc.js +252 -0
  124. package/dist/_chunks/weekly-hours-editor-BsVsgeOc.js.map +1 -0
  125. package/dist/_chunks/{workflow-map-B1jf6QaB.js → workflow-map-DWk-rZse.js} +2 -2
  126. package/dist/_chunks/{workflow-map-B1jf6QaB.js.map → workflow-map-DWk-rZse.js.map} +1 -1
  127. package/dist/_chunks/{workflow-webhook-action-B_52rH7O.js → workflow-webhook-action-DILFqAVd.js} +2 -2
  128. package/dist/_chunks/{workflow-webhook-action-B_52rH7O.js.map → workflow-webhook-action-DILFqAVd.js.map} +1 -1
  129. package/dist/ag-grid.css +5 -1
  130. package/dist/agent-catalog.json +1 -1
  131. package/dist/components/ai-credits-notice/index.js +1 -1
  132. package/dist/components/ai-permission-notice/index.js +1 -1
  133. package/dist/components/alert/alert.d.ts.map +1 -1
  134. package/dist/components/alert/index.js +1 -1
  135. package/dist/components/appointment-details-panel/index.js +1 -1
  136. package/dist/components/audio-recorder/index.js +1 -1
  137. package/dist/components/booking/index.js +1 -1
  138. package/dist/components/care-plan-card/index.js +1 -1
  139. package/dist/components/care-plan-entry-card/index.js +1 -1
  140. package/dist/components/contact-profile-card/contact-profile-card.d.ts +8 -0
  141. package/dist/components/contact-profile-card/contact-profile-card.d.ts.map +1 -1
  142. package/dist/components/contact-profile-card/index.js +1 -1
  143. package/dist/components/data-table/data-table.d.ts +6 -0
  144. package/dist/components/data-table/data-table.d.ts.map +1 -1
  145. package/dist/components/data-table/header-min-width.d.ts +21 -0
  146. package/dist/components/data-table/header-min-width.d.ts.map +1 -0
  147. package/dist/components/data-table/index.js +2 -2
  148. package/dist/components/date-range-picker/index.js +1 -1
  149. package/dist/components/date-time-picker/index.js +1 -1
  150. package/dist/components/document-preview/index.js +1 -1
  151. package/dist/components/document-scanner/index.js +1 -1
  152. package/dist/components/entity-summary/index.js +1 -1
  153. package/dist/components/error-summary/index.js +1 -1
  154. package/dist/components/face-scheme/index.js +1 -1
  155. package/dist/components/file-manager/index.js +1 -1
  156. package/dist/components/freemium-paywall/index.js +1 -1
  157. package/dist/components/gestational-age-calculator/index.js +1 -1
  158. package/dist/components/hcg-doubling/index.js +1 -1
  159. package/dist/components/heatmap/heatmap.d.ts +5 -0
  160. package/dist/components/heatmap/heatmap.d.ts.map +1 -1
  161. package/dist/components/heatmap/index.js +1 -1
  162. package/dist/components/index.d.ts +2 -0
  163. package/dist/components/index.d.ts.map +1 -1
  164. package/dist/components/info-tip/index.js +1 -1
  165. package/dist/components/info-tip/info-tip.d.ts +10 -0
  166. package/dist/components/info-tip/info-tip.d.ts.map +1 -1
  167. package/dist/components/notes-panel/index.js +1 -1
  168. package/dist/components/notice-group/index.js +1 -1
  169. package/dist/components/patient-details/index.js +1 -1
  170. package/dist/components/patient-summary-card/index.js +1 -1
  171. package/dist/components/patient-table/index.js +1 -1
  172. package/dist/components/payment-form/index.js +1 -1
  173. package/dist/components/pdf-viewer/index.js +1 -1
  174. package/dist/components/practice-profile-hero/index.js +1 -1
  175. package/dist/components/practice-profile-hero/practice-profile-hero.d.ts +7 -0
  176. package/dist/components/practice-profile-hero/practice-profile-hero.d.ts.map +1 -1
  177. package/dist/components/practice-results/index.js +1 -1
  178. package/dist/components/practice-results/practice-results.d.ts +13 -0
  179. package/dist/components/practice-results/practice-results.d.ts.map +1 -1
  180. package/dist/components/pregnancy-dating/index.js +1 -1
  181. package/dist/components/progress-notice/index.js +1 -1
  182. package/dist/components/radiograph-panel/index.js +1 -1
  183. package/dist/components/rich-text-editor/index.js +2 -2
  184. package/dist/components/sign-document/index.js +1 -1
  185. package/dist/components/switch/index.js +1 -1
  186. package/dist/components/switch/switch.d.ts +2 -0
  187. package/dist/components/switch/switch.d.ts.map +1 -1
  188. package/dist/components/task-editor/index.js +1 -1
  189. package/dist/components/tasks-panel/index.js +1 -1
  190. package/dist/components/theme-toggle/index.js +1 -1
  191. package/dist/components/time-picker/index.js +1 -1
  192. package/dist/components/time-picker/time-picker.d.ts.map +1 -1
  193. package/dist/components/tooth-scheme/index.js +1 -1
  194. package/dist/components/voice-control-panel/index.js +1 -1
  195. package/dist/components/warning-stack/index.js +1 -1
  196. package/dist/components/week-availability/index.d.ts +3 -0
  197. package/dist/components/week-availability/index.d.ts.map +1 -0
  198. package/dist/components/week-availability/index.js +10 -0
  199. package/dist/components/week-availability/index.js.map +1 -0
  200. package/dist/components/week-availability/week-availability.d.ts +68 -0
  201. package/dist/components/week-availability/week-availability.d.ts.map +1 -0
  202. package/dist/components/weekly-hours-editor/index.d.ts +3 -0
  203. package/dist/components/weekly-hours-editor/index.d.ts.map +1 -0
  204. package/dist/components/weekly-hours-editor/index.js +9 -0
  205. package/dist/components/weekly-hours-editor/index.js.map +1 -0
  206. package/dist/components/weekly-hours-editor/weekly-hours-editor.d.ts +42 -0
  207. package/dist/components/weekly-hours-editor/weekly-hours-editor.d.ts.map +1 -0
  208. package/dist/components/workflow/index.js +1 -1
  209. package/dist/core.css +1 -1
  210. package/dist/i18n/locales/ar.d.ts +34 -0
  211. package/dist/i18n/locales/ar.d.ts.map +1 -1
  212. package/dist/i18n/locales/ar.js +34 -0
  213. package/dist/i18n/locales/ar.js.map +1 -1
  214. package/dist/i18n/locales/de.d.ts +34 -0
  215. package/dist/i18n/locales/de.d.ts.map +1 -1
  216. package/dist/i18n/locales/de.js +34 -0
  217. package/dist/i18n/locales/de.js.map +1 -1
  218. package/dist/i18n/locales/el.d.ts +34 -0
  219. package/dist/i18n/locales/el.d.ts.map +1 -1
  220. package/dist/i18n/locales/el.js +34 -0
  221. package/dist/i18n/locales/el.js.map +1 -1
  222. package/dist/i18n/locales/en.d.ts +34 -0
  223. package/dist/i18n/locales/en.d.ts.map +1 -1
  224. package/dist/i18n/locales/en.js +34 -0
  225. package/dist/i18n/locales/en.js.map +1 -1
  226. package/dist/i18n/locales/es.d.ts +34 -0
  227. package/dist/i18n/locales/es.d.ts.map +1 -1
  228. package/dist/i18n/locales/es.js +34 -0
  229. package/dist/i18n/locales/es.js.map +1 -1
  230. package/dist/i18n/locales/fr.d.ts +34 -0
  231. package/dist/i18n/locales/fr.d.ts.map +1 -1
  232. package/dist/i18n/locales/fr.js +34 -0
  233. package/dist/i18n/locales/fr.js.map +1 -1
  234. package/dist/i18n/locales/hi.d.ts +34 -0
  235. package/dist/i18n/locales/hi.d.ts.map +1 -1
  236. package/dist/i18n/locales/hi.js +34 -0
  237. package/dist/i18n/locales/hi.js.map +1 -1
  238. package/dist/i18n/locales/it.d.ts +34 -0
  239. package/dist/i18n/locales/it.d.ts.map +1 -1
  240. package/dist/i18n/locales/it.js +34 -0
  241. package/dist/i18n/locales/it.js.map +1 -1
  242. package/dist/i18n/locales/ja.d.ts +34 -0
  243. package/dist/i18n/locales/ja.d.ts.map +1 -1
  244. package/dist/i18n/locales/ja.js +34 -0
  245. package/dist/i18n/locales/ja.js.map +1 -1
  246. package/dist/i18n/locales/nl.d.ts +34 -0
  247. package/dist/i18n/locales/nl.d.ts.map +1 -1
  248. package/dist/i18n/locales/nl.js +34 -0
  249. package/dist/i18n/locales/nl.js.map +1 -1
  250. package/dist/i18n/locales/pl.d.ts +34 -0
  251. package/dist/i18n/locales/pl.d.ts.map +1 -1
  252. package/dist/i18n/locales/pl.js +34 -0
  253. package/dist/i18n/locales/pl.js.map +1 -1
  254. package/dist/i18n/locales/pt.d.ts +34 -0
  255. package/dist/i18n/locales/pt.d.ts.map +1 -1
  256. package/dist/i18n/locales/pt.js +34 -0
  257. package/dist/i18n/locales/pt.js.map +1 -1
  258. package/dist/i18n/locales/ro.d.ts +34 -0
  259. package/dist/i18n/locales/ro.d.ts.map +1 -1
  260. package/dist/i18n/locales/ro.js +34 -0
  261. package/dist/i18n/locales/ro.js.map +1 -1
  262. package/dist/i18n/locales/ru.d.ts +34 -0
  263. package/dist/i18n/locales/ru.d.ts.map +1 -1
  264. package/dist/i18n/locales/ru.js +34 -0
  265. package/dist/i18n/locales/ru.js.map +1 -1
  266. package/dist/i18n/locales/sq.d.ts +34 -0
  267. package/dist/i18n/locales/sq.d.ts.map +1 -1
  268. package/dist/i18n/locales/sq.js +34 -0
  269. package/dist/i18n/locales/sq.js.map +1 -1
  270. package/dist/i18n/locales/sv.d.ts +34 -0
  271. package/dist/i18n/locales/sv.d.ts.map +1 -1
  272. package/dist/i18n/locales/sv.js +34 -0
  273. package/dist/i18n/locales/sv.js.map +1 -1
  274. package/dist/i18n/locales/tr.d.ts +34 -0
  275. package/dist/i18n/locales/tr.d.ts.map +1 -1
  276. package/dist/i18n/locales/tr.js +34 -0
  277. package/dist/i18n/locales/tr.js.map +1 -1
  278. package/dist/i18n/locales/zh.d.ts +34 -0
  279. package/dist/i18n/locales/zh.d.ts.map +1 -1
  280. package/dist/i18n/locales/zh.js +34 -0
  281. package/dist/i18n/locales/zh.js.map +1 -1
  282. package/dist/index.js +879 -866
  283. package/dist/index.js.map +1 -1
  284. package/dist/locales/ar.json +34 -0
  285. package/dist/locales/de.json +34 -0
  286. package/dist/locales/el.json +34 -0
  287. package/dist/locales/en.json +34 -0
  288. package/dist/locales/es.json +34 -0
  289. package/dist/locales/fr.json +34 -0
  290. package/dist/locales/hi.json +34 -0
  291. package/dist/locales/it.json +34 -0
  292. package/dist/locales/ja.json +34 -0
  293. package/dist/locales/nl.json +34 -0
  294. package/dist/locales/pl.json +34 -0
  295. package/dist/locales/pt.json +34 -0
  296. package/dist/locales/ro.json +34 -0
  297. package/dist/locales/ru.json +34 -0
  298. package/dist/locales/sq.json +34 -0
  299. package/dist/locales/sv.json +34 -0
  300. package/dist/locales/tr.json +34 -0
  301. package/dist/locales/zh.json +34 -0
  302. package/dist/patterns/anamnesis/index.js +1 -1
  303. package/dist/patterns/calendar/index.js +1 -1
  304. package/dist/patterns/forgot-password-form/index.js +1 -1
  305. package/dist/patterns/help-me-write-templates/index.js +2 -2
  306. package/dist/patterns/login-form/index.js +1 -1
  307. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  308. package/dist/patterns/payment-automation-upsell/index.js +1 -1
  309. package/dist/patterns/registration-form/index.js +1 -1
  310. package/dist/patterns/reset-password-form/index.js +1 -1
  311. package/dist/patterns/send-registration-link-form/index.js +1 -1
  312. package/dist/patterns/signature-request/index.js +1 -1
  313. package/dist/patterns/workflow-webhook-action/index.js +1 -1
  314. package/dist/tokens.css +3 -1
  315. package/package.json +9 -1
  316. package/dist/_chunks/alert-9kEwDza3.js.map +0 -1
  317. package/dist/_chunks/contact-profile-card-uExd3pKC.js.map +0 -1
  318. package/dist/_chunks/data-table-C5uN4ato.js.map +0 -1
  319. package/dist/_chunks/info-tip-1Xsq9GLi.js +0 -230
  320. package/dist/_chunks/info-tip-1Xsq9GLi.js.map +0 -1
  321. package/dist/_chunks/practice-profile-hero-BAvGdQmt.js.map +0 -1
  322. package/dist/_chunks/practice-results-ChBP9x2r.js.map +0 -1
  323. package/dist/_chunks/switch-D--x7n6h.js.map +0 -1
  324. package/dist/_chunks/time-picker-DSt-ns5F.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pregnancy-dating-D0Kf9s7s.js","sources":["../../src/components/pregnancy-dating/pregnancy-dating.agent.ts","../../src/components/pregnancy-dating/pregnancy-dating.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — PregnancyDating. */\n/* */\n/* Unified obstetric dating widget: takes any known anchor (LMP / */\n/* conception / IVF transfer / known EDD) and shows both the estimated */\n/* due date and the current gestational age, trimester and milestones, */\n/* with optional CRL re-dating and a ±days nudge. This is the adapter to */\n/* prefer — DueDateCalculator and GestationalAgeCalculator are deprecated */\n/* in favour of it. */\n/* */\n/* The agent surface is the dating inputs plus the computed EDD / GA; the */\n/* handle is the curated `PregnancyDatingHandle` (the public `ref` stays */\n/* the root <div>, exactly as `slider.tsx` and `bmi-calculator.tsx` keep */\n/* 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/* Host-delegated, deliberately WITHOUT actions: the optional antenatal- */\n/* schedule inputs (plurality, chorionicity, Rh status, GDM risk) only */\n/* appear under `showSchedule` and steer the appended exam timeline, not */\n/* the dating result. An agent reaches them through the DOM — the */\n/* Select / Switch controls inside `data-component=\"pregnancy-dating\"`. */\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 { PregnancyDatingHandle } from './pregnancy-dating';\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 pregnancyDatingAgent: AgentAdapter<PregnancyDatingHandle> = {\n id: 'pregnancy-dating',\n // set_value → the seven `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, datingAdjustment: number | null, asOfDate: string }',\n descriptionKey: 'ui.agent.pregnancyDating.state.inputs',\n description:\n 'The dating inputs as entered — anchor method, its reference date, cycle length (LMP), embryo age (IVF), the optional CRL + scan date, the manual ±days nudge, 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.pregnancyDating.state.result',\n description:\n 'Computed estimated delivery date, the GA day-0 anchor after any re-dating or adjustment, the gestational age in completed weeks + days as of the evaluation date, and the trimester band (preconception / first / second / third / postterm). 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' | 'edd' }\",\n argsSchema: {\n type: 'object',\n properties: {\n method: {\n enum: ['lmp', 'conception', 'ivf', 'edd'],\n description:\n 'Which anchor to date from — last menstrual period, conception, IVF transfer, or a known estimated delivery date.',\n },\n },\n required: ['method'],\n additionalProperties: false,\n },\n idempotent: true,\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 four supported anchors.',\n ],\n examples: [\n { args: { method: 'edd' }, note: 'Date backwards from a known EDD.' },\n ],\n descriptionKey: 'ui.agent.pregnancyDating.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 — only a known EDD may be in the future.',\n invoke: (\n handle,\n args: { method: 'lmp' | 'conception' | 'ivf' | 'edd' },\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, transfer, or known EDD — or null to clear it. Only a known EDD may be in the future.',\n },\n },\n required: ['date'],\n additionalProperties: false,\n },\n idempotent: true,\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 for a future date under any method but `edd` — the on-screen DatePicker caps those 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.pregnancyDating.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 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.pregnancyDating.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 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.pregnancyDating.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 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.pregnancyDating.actions.setCrl',\n description:\n 'LMP method only — set the first-trimester crown-rump length and its scan date. A confirmed re-dating wins over both the cycle length and the manual adjustment.',\n invoke: (\n handle,\n args: { crlMm?: number | null; scanDate?: string | null },\n ) => handle.setCrl(args),\n },\n set_dating_adjustment: {\n safety: 'write',\n argsType: '{ days: number | null }',\n argsSchema: {\n type: 'object',\n properties: {\n days: {\n oneOf: [{ type: 'integer' }, { type: 'null' }],\n description:\n 'Whole days to nudge the dating by — positive moves the pregnancy further along — or null for no adjustment.',\n },\n },\n required: ['days'],\n additionalProperties: false,\n },\n idempotent: true,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the value was applied.',\n },\n errors: [\n 'Returns false for a non-integer number of days.',\n 'Applies but changes nothing while a CRL re-dating is confirmed — the measurement wins.',\n ],\n examples: [\n {\n args: { days: 3 },\n note: 'An uncertain LMP judged three days earlier than entered.',\n },\n ],\n descriptionKey: 'ui.agent.pregnancyDating.actions.setDatingAdjustment',\n description:\n 'Nudge the dating by whole days for an uncertain anchor. Positive moves the pregnancy further along (earlier effective LMP, earlier due date).',\n invoke: (handle, args: { days: number | null }) =>\n handle.setDatingAdjustment(args.days),\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 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.pregnancyDating.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: 'pregnancy-dating',\n description: 'Marks the PregnancyDating 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/* PregnancyDating — the unified obstetric dating widget. */\n/* */\n/* Supersedes DueDateCalculator + GestationalAgeCalculator: takes any */\n/* known anchor (LMP / conception / IVF transfer / known EDD) and shows */\n/* BOTH the estimated due date AND the current gestational age, */\n/* trimester and milestones. Two dating refinements: a precise CRL + */\n/* scan-date ACOG CO 700 re-dating (LMP), and a quick manual ±days */\n/* adjustment for an uncertain LMP/conception. `showSchedule` appends */\n/* the antenatal exam schedule with plurality / chorionicity / risk */\n/* inputs. All maths lives in `_shared/obstetrics` + `_shared/antenatal- */\n/* schedule` (pure, separately tested). */\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, subDays } from 'date-fns';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { pregnancyDatingAgent } from './pregnancy-dating.agent';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Select } from '../select';\nimport { Switch } from '../switch';\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 EmbryoAge,\n type GestationalAge,\n type DueDateResult,\n type Plurality,\n type Chorionicity,\n computeDueDate,\n redateByCrl,\n gestationalMilestones,\n GESTATION_DAYS,\n CONCEPTION_OFFSET_DAYS,\n DEFAULT_CYCLE_LENGTH,\n TRIMESTER_BADGE_VARIANT,\n trimesterHighlightToken,\n} from '../_shared/obstetrics';\nimport {\n computeAntenatalSchedule,\n type AntenatalScheduleOptions,\n type GdmRisk,\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/** Any known anchor the pregnancy can be dated from. */\nexport type DatingMethod = 'lmp' | 'conception' | 'ivf' | 'edd';\n\n/** i18n key for each method's reference-date field. */\nconst DATE_LABEL_KEY: Record<DatingMethod, string> = {\n lmp: 'pregnancyDating.lmpDate',\n conception: 'pregnancyDating.conceptionDate',\n ivf: 'pregnancyDating.transferDate',\n edd: 'pregnancyDating.eddDate',\n};\n\nexport interface PregnancyDatingResult {\n /** Estimated date of delivery. */\n dueDate: Date;\n /** GA day-0 anchor (effective LMP) after any re-dating / adjustment. */\n gestationalStart: Date;\n /** Gestational age as of the evaluation date; `null` before conception. */\n gestationalAge: GestationalAge | null;\n trimester: DueDateResult['trimester'];\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 PregnancyDatingInputsSnapshot {\n /** Which anchor the pregnancy is dated from. */\n method: DatingMethod;\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 /** Manual ±days nudge applied to the dating, or null. */\n datingAdjustment: number | null;\n /** The date gestational age and trimester are evaluated against. */\n asOfDate: string;\n}\n\n/** `PregnancyDatingResult` projected onto the agent boundary — ISO dates. */\nexport interface PregnancyDatingSnapshot {\n /** Estimated date of delivery, `yyyy-MM-dd`. */\n dueDate: string;\n /** GA day-0 anchor after any re-dating / adjustment, `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 EDD + gestational age, and drives the inputs the way\n * a user would. Never exposes patient identity — only structural dates and\n * numbers. Consumed by `pregnancy-dating.agent.ts`; the public `ref` stays the\n * root DOM element.\n */\nexport interface PregnancyDatingHandle {\n /** The dating inputs as entered. */\n getInputs: () => PregnancyDatingInputsSnapshot;\n /** Computed due date, gestational age and trimester, or null until a reference date is set. */\n getResult: () => PregnancyDatingSnapshot | null;\n /** Switch the dating anchor. Keeps the reference date, which is re-interpreted. */\n setMethod: (method: DatingMethod) => boolean;\n /** Set the method's reference date (`yyyy-MM-dd`); only a known EDD may be 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 manual ±days dating nudge (positive = further along). */\n setDatingAdjustment: (days: number | null) => boolean;\n /** Set the date gestational age and trimester are evaluated against. */\n setAsOfDate: (isoDate: string) => boolean;\n}\n\nexport interface PregnancyDatingProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial dating method. Defaults to `'lmp'`. */\n defaultMethod?: DatingMethod;\n /** Pre-fill the reference date (e.g. a known LMP from the patient record). */\n defaultReferenceDate?: Date;\n /** Fires whenever a result can be computed (and `null` when it can't). */\n onResultChange?: (result: PregnancyDatingResult | null) => void;\n /** When provided, shows the result-action buttons that emit / copy the result. */\n onInsert?: (payload: InsertPayload) => void;\n /** Which verb the result button performs. Defaults to `'insert'`. */\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 /** Brand wordmark printed in the inserted/copied result-card footer. */\n insertBrand?: string | false;\n /** Append the antenatal exam schedule + reveal the plurality / risk inputs. */\n showSchedule?: boolean;\n /** `showSchedule` only — initial number of babies. Defaults to `'singleton'`. */\n defaultPlurality?: Plurality;\n /** `showSchedule` only — initial chorionicity for multiples. Defaults to `'unknown'`. */\n defaultChorionicity?: Chorionicity;\n /** `showSchedule` only — initial Rh-negative state (surfaces anti-D). */\n defaultRhNegative?: boolean;\n /** `showSchedule` only — initial gestational-diabetes risk tier (surfaces OGTT). */\n defaultGdmRisk?: GdmRisk;\n /**\n * Passthrough options for the appended schedule (national `schedule`,\n * `includeOnIndication`, `birthGuideline`). `today`, `plurality`,\n * `chorionicity`, `rhNegative` and `gdmRisk` come from the component's own\n * inputs. Ignored unless `showSchedule` is set.\n */\n scheduleOptions?: Omit<\n AntenatalScheduleOptions,\n 'today' | 'plurality' | 'chorionicity' | 'rhNegative' | 'gdmRisk'\n >;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport const PregnancyDating = forwardRef<HTMLDivElement, PregnancyDatingProps>(\n (\n {\n defaultMethod = 'lmp',\n defaultReferenceDate,\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n showSchedule = false,\n defaultPlurality = 'singleton',\n defaultChorionicity = 'unknown',\n defaultRhNegative = false,\n defaultGdmRisk,\n scheduleOptions,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n\n const [method, setMethod] = useState<DatingMethod>(defaultMethod);\n const [refDate, setRefDate] = useState<Date | undefined>(\n defaultReferenceDate,\n );\n const [cycleLength, setCycleLength] = useState<number | null>(\n DEFAULT_CYCLE_LENGTH,\n );\n const [embryoAge, setEmbryoAge] = useState<EmbryoAge>(5);\n // Precise re-dating (LMP method) and the quick ±days nudge.\n const [crlMm, setCrlMm] = useState<number | null>(null);\n const [scanDate, setScanDate] = useState<Date | undefined>(undefined);\n const [datingAdjustment, setDatingAdjustment] = useState<number | null>(\n null,\n );\n // Evaluation date (\"as of\") + multiple-pregnancy / risk inputs.\n const [asOfDate, setAsOfDate] = useState<Date>(() => new Date());\n const [plurality, setPlurality] = useState<Plurality>(defaultPlurality);\n const [chorionicity, setChorionicity] =\n useState<Chorionicity>(defaultChorionicity);\n const [rhNegative, setRhNegative] = useState<boolean>(defaultRhNegative);\n const [gdmRisk, setGdmRisk] = useState<GdmRisk | 'none'>(\n defaultGdmRisk ?? 'none',\n );\n\n // Real today caps the past-only date inputs (LMP, conception, transfer, scan).\n const today = useMemo(() => new Date(), []);\n\n // CRL re-dating (LMP method only) — the measurement-based path.\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 data = useMemo(() => {\n if (!refDate) return null;\n\n // Resolve the method's anchor to an effective LMP (GA day 0).\n let effectiveLmp: Date;\n let cycleForEdd = DEFAULT_CYCLE_LENGTH;\n if (method === 'lmp') {\n effectiveLmp = refDate;\n cycleForEdd = cycleLength ?? DEFAULT_CYCLE_LENGTH;\n } else if (method === 'conception') {\n effectiveLmp = subDays(refDate, CONCEPTION_OFFSET_DAYS);\n } else if (method === 'ivf') {\n effectiveLmp = subDays(refDate, embryoAge + CONCEPTION_OFFSET_DAYS);\n } else {\n effectiveLmp = subDays(refDate, GESTATION_DAYS);\n }\n\n // A confirmed CRL re-dating wins over everything (measurement-based); else\n // apply the quick ±days nudge (+ = pregnancy further along → earlier LMP).\n if (method === 'lmp' && redating?.redated) {\n effectiveLmp = redating.gestationalStart;\n cycleForEdd = DEFAULT_CYCLE_LENGTH;\n } else if (datingAdjustment) {\n effectiveLmp = subDays(effectiveLmp, datingAdjustment);\n }\n\n const r = computeDueDate(\n { method: 'lmp', date: effectiveLmp, cycleLength: cycleForEdd },\n asOfDate,\n );\n return {\n result: {\n dueDate: r.dueDate,\n gestationalStart: r.gestationalStart,\n gestationalAge: r.gestationalAge,\n trimester: r.trimester,\n } satisfies PregnancyDatingResult,\n milestones: gestationalMilestones(r.gestationalStart),\n };\n }, [\n method,\n refDate,\n cycleLength,\n embryoAge,\n redating,\n datingAdjustment,\n asOfDate,\n ]);\n\n const result = data?.result ?? null;\n\n const schedule = useMemo(() => {\n if (!showSchedule || !result) return null;\n return computeAntenatalSchedule(result.gestationalStart, {\n ...scheduleOptions,\n today: asOfDate,\n plurality,\n chorionicity,\n rhNegative,\n gdmRisk: gdmRisk === 'none' ? undefined : gdmRisk,\n });\n }, [\n showSchedule,\n result,\n asOfDate,\n scheduleOptions,\n plurality,\n chorionicity,\n rhNegative,\n gdmRisk,\n ]);\n\n const longDate = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'long' }),\n [i18n.language],\n );\n const medDate = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }),\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 datingAdjustment,\n asOfDate,\n result,\n });\n liveRef.current = {\n method,\n refDate,\n cycleLength,\n embryoAge,\n crlMm,\n scanDate,\n datingAdjustment,\n asOfDate,\n result,\n };\n\n const agentHandle = useMemo<PregnancyDatingHandle>(\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 datingAdjustment: live.datingAdjustment,\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 (\n next !== 'lmp' &&\n next !== 'conception' &&\n next !== 'ivf' &&\n next !== 'edd'\n ) {\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 if (!parsed) return false;\n // The DatePicker caps every anchor but a known EDD at today.\n if (liveRef.current.method !== 'edd' && isAfter(parsed, new Date())) {\n return false;\n }\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 setDatingAdjustment: (days) => {\n if (days !== null && !Number.isInteger(days)) return false;\n setDatingAdjustment(days);\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(pregnancyDatingAgent, agentHandle, id);\n\n const chorionicityOptions = useMemo(\n () =>\n (\n [\n 'unknown',\n 'dichorionic-diamniotic',\n 'monochorionic-diamniotic',\n 'monochorionic-monoamniotic',\n ] as const\n ).map((c) => ({\n value: c,\n label: t(`antenatalSchedule.chorionicity.${c}`),\n })),\n [t],\n );\n\n const gaText = (ga: GestationalAge | null): string =>\n ga\n ? t('pregnancyDating.result.gestation', {\n weeks: ga.weeks,\n days: ga.days,\n })\n : '—';\n\n return (\n <div\n ref={ref}\n data-component=\"pregnancy-dating\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <RadioGroup\n label={t('pregnancyDating.method.label')}\n variant=\"horizontal\"\n value={method}\n onValueChange={(next) => setMethod(next as DatingMethod)}\n >\n <Radio label={t('pregnancyDating.method.lmp')} value=\"lmp\" />\n <Radio\n label={t('pregnancyDating.method.conception')}\n value=\"conception\"\n />\n <Radio label={t('pregnancyDating.method.ivf')} value=\"ivf\" />\n <Radio label={t('pregnancyDating.method.edd')} value=\"edd\" />\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\n value={refDate}\n onChange={setRefDate}\n maxDate={method === 'edd' ? undefined : today}\n />\n </FormField>\n\n {method === 'lmp' && (\n <FormField\n label={t('pregnancyDating.cycleLength')}\n description={t('pregnancyDating.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('pregnancyDating.embryoAge')}\n variant=\"horizontal\"\n value={String(embryoAge)}\n onValueChange={(next) => setEmbryoAge(Number(next) as EmbryoAge)}\n >\n <Radio label={t('pregnancyDating.day3')} value=\"3\" />\n <Radio label={t('pregnancyDating.day5')} value=\"5\" />\n </RadioGroup>\n )}\n\n <FormField\n label={t('pregnancyDating.datingAdjustment')}\n description={t('pregnancyDating.datingAdjustmentHint')}\n >\n <NumberInput\n mode=\"integer\"\n value={datingAdjustment}\n onChange={setDatingAdjustment}\n />\n </FormField>\n\n <FormField\n label={t('pregnancyDating.asOfDate')}\n description={t('pregnancyDating.asOfDateHint')}\n >\n <DatePicker\n value={asOfDate}\n onChange={(d) => d && setAsOfDate(d)}\n />\n </FormField>\n </div>\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('pregnancyDating.crl')}\n description={t('pregnancyDating.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('pregnancyDating.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('pregnancyDating.redated', {\n days: redating.discrepancyDays,\n })\n : t('pregnancyDating.datesAgree')}\n </Badge>\n {!redating.crlInRange ? (\n <span className=\"type-meta ds:text-muted-foreground\">\n {t('pregnancyDating.crlOutOfRange')}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {showSchedule ? (\n <>\n <RadioGroup\n label={t('antenatalSchedule.plurality.label')}\n variant=\"horizontal\"\n value={plurality}\n onValueChange={(next) => setPlurality(next as Plurality)}\n >\n <Radio\n label={t('antenatalSchedule.plurality.singleton')}\n value=\"singleton\"\n />\n <Radio\n label={t('antenatalSchedule.plurality.twin')}\n value=\"twin\"\n />\n <Radio\n label={t('antenatalSchedule.plurality.triplet')}\n value=\"triplet\"\n />\n </RadioGroup>\n\n {plurality !== 'singleton' ? (\n <FormField label={t('antenatalSchedule.chorionicity.label')}>\n <Select\n options={chorionicityOptions}\n value={chorionicity}\n onValueChange={(next) =>\n setChorionicity(next as Chorionicity)\n }\n />\n </FormField>\n ) : null}\n\n <Switch\n label={t('antenatalSchedule.rhNegative')}\n checked={rhNegative}\n onCheckedChange={setRhNegative}\n />\n\n <RadioGroup\n label={t('antenatalSchedule.gdmRisk.label')}\n variant=\"horizontal\"\n value={gdmRisk}\n onValueChange={(next) => setGdmRisk(next as GdmRisk | 'none')}\n >\n <Radio label={t('antenatalSchedule.gdmRisk.none')} value=\"none\" />\n <Radio\n label={t('antenatalSchedule.gdmRisk.medium')}\n value=\"medium\"\n />\n <Radio label={t('antenatalSchedule.gdmRisk.high')} value=\"high\" />\n </RadioGroup>\n </>\n ) : null}\n\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('pregnancyDating.result.dueDateLabel')}: ${longDate.format(\n result.dueDate,\n )}. ${t('pregnancyDating.result.gestationLabel')}: ${gaText(\n result.gestationalAge,\n )}.`\n : ''}\n </p>\n\n {data && result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {/* EDD is the headline — full width so a long localized date\n never wraps; gestational age + trimester flow beneath it,\n packed to the start so they don't strand a gap at narrow /\n modal widths. */}\n <dl className=\"ds:flex ds:flex-wrap ds:items-start ds:gap-x-[var(--spacing-xl)] ds:gap-y-[var(--spacing-md)]\">\n <div className=\"ds:basis-full ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.result.dueDateLabel')}\n </dt>\n <dd className=\"type-metric ds:text-foreground\">\n {longDate.format(result.dueDate)}\n </dd>\n </div>\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('pregnancyDating.result.gestationLabel')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {gaText(result.gestationalAge)}\n </dd>\n </div>\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('pregnancyDating.result.trimesterLabel')}\n </dt>\n <dd>\n <Badge\n variant={TRIMESTER_BADGE_VARIANT[result.trimester]}\n size=\"lg\"\n >\n {t(`pregnancyDating.trimester.${result.trimester}`)}\n </Badge>\n </dd>\n </div>\n </dl>\n\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.milestonesLabel')}\n </span>\n <ul className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n {data.milestones.map((m) => {\n const reached = isAfter(asOfDate, m.date);\n return (\n <li\n key={m.key}\n className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-md)]\"\n >\n <span className=\"type-body ds:text-foreground\">\n {t(`pregnancyDating.milestone.${m.key}`)}\n </span>\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span className=\"type-body ds:text-muted-foreground\">\n {medDate.format(m.date)}\n </span>\n {reached ? (\n <Badge variant=\"success\">\n {t('pregnancyDating.reached')}\n </Badge>\n ) : null}\n </span>\n </li>\n );\n })}\n </ul>\n </div>\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('pregnancyDating.empty')}\n </p>\n )}\n\n {schedule ? <AntenatalScheduleTimeline events={schedule} /> : null}\n\n {result && (insertVariant === 'copy' || onInsert) ? (\n <InsertButton\n onInsert={onInsert}\n variant={insertVariant}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.pregnancyDating'),\n icon: 'calendar-heart',\n highlight: longDate.format(result.dueDate),\n highlightToken: trimesterHighlightToken(result.trimester),\n brand: insertBrand,\n fields: [\n {\n icon: 'calendar',\n label: t('pregnancyDating.result.dueDateLabel'),\n value: longDate.format(result.dueDate),\n },\n {\n icon: 'clock',\n label: t('pregnancyDating.result.gestationLabel'),\n value: gaText(result.gestationalAge),\n },\n {\n icon: 'tag',\n label: t('pregnancyDating.result.trimesterLabel'),\n value: t(`pregnancyDating.trimester.${result.trimester}`),\n },\n ...(schedule\n ? buildScheduleInsertFields(schedule, t, (d) =>\n medDate.format(d),\n )\n : []),\n ],\n }}\n />\n ) : null}\n </div>\n );\n },\n);\n\nPregnancyDating.displayName = 'PregnancyDating';\n"],"names":["isoDate","pregnancyDatingAgent","handle","args","rootVariants","cva","DATE_LABEL_KEY","toIsoDate","d","format","fromIsoDate","iso","parseISO","CYCLE_LENGTH_RANGE","PregnancyDating","forwardRef","defaultMethod","defaultReferenceDate","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","showSchedule","defaultPlurality","defaultChorionicity","defaultRhNegative","defaultGdmRisk","scheduleOptions","id","width","className","ref","i18n","useTranslation","method","setMethod","useState","refDate","setRefDate","cycleLength","setCycleLength","DEFAULT_CYCLE_LENGTH","embryoAge","setEmbryoAge","crlMm","setCrlMm","scanDate","setScanDate","datingAdjustment","setDatingAdjustment","asOfDate","setAsOfDate","plurality","setPlurality","chorionicity","setChorionicity","rhNegative","setRhNegative","gdmRisk","setGdmRisk","today","useMemo","redating","redateByCrl","data","effectiveLmp","cycleForEdd","subDays","CONCEPTION_OFFSET_DAYS","GESTATION_DAYS","r","computeDueDate","gestationalMilestones","result","schedule","computeAntenatalSchedule","longDate","medDate","useEffect","liveRef","useRef","agentHandle","live","next","parsed","isAfter","days","now","parsedScan","mm","useAgentRegistration","chorionicityOptions","c","gaText","ga","jsxs","RadioGroup","jsx","Radio","FormField","DatePicker","NumberInput","Badge","Fragment","Select","Switch","Card","TRIMESTER_BADGE_VARIANT","m","reached","AntenatalScheduleTimeline","InsertButton","trimesterHighlightToken","buildScheduleInsertFields"],"mappings":";;;;;;;;;;;;;;;;;;;;AAiCA,MAAMA,IAAU;AAAA,EACd,MAAM;AAAA,EACN,SAAS;AACX,GAEaC,KAA4D;AAAA,EACvE,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,OAAO,KAAK;AAAA,YACxC,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,QAAQ;AAAA,QACnB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;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,EAAE,MAAM,EAAE,QAAQ,MAAA,GAAS,MAAM,mCAAA;AAAA,MAAmC;AAAA,MAEtE,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CACNA,GACAC,MACGD,EAAO,UAAUC,EAAK,MAAM;AAAA,IAAA;AAAA,IAEnC,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,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,CAACE,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,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,CAACD,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,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,CAACD,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,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,CACNE,GACAC,MACGD,EAAO,OAAOC,CAAI;AAAA,IAAA;AAAA,IAEzB,uBAAuB;AAAA,MACrB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,OAAO,CAAC,EAAE,MAAM,aAAa,EAAE,MAAM,QAAQ;AAAA,YAC7C,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;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,MAAM,EAAA;AAAA,UACd,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACD,GAAQC,MACfD,EAAO,oBAAoBC,EAAK,IAAI;AAAA,IAAA;AAAA,IAExC,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,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,CAACE,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,GC3QMC,KAAeC,GAAI,kDAAkD;AAAA,EACzE,UAAU;AAAA,IACR,OAAO,EAAE,MAAM,aAAa,MAAM,iBAAA;AAAA,EAAiB;AAAA,EAErD,iBAAiB,EAAE,OAAO,OAAA;AAC5B,CAAC,GAMKC,KAA+C;AAAA,EACnD,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,KAAK;AACP,GAoBMC,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,GA8G9BC,KAAkBC;AAAA,EAC7B,CACE;AAAA,IACE,eAAAC,IAAgB;AAAA,IAChB,sBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,kBAAAC,KAAmB;AAAA,IACnB,qBAAAC,KAAsB;AAAA,IACtB,mBAAAC,KAAoB;AAAA,IACpB,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,IAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC;AAAA,EAAA,GAEFC,OACG;AACH,UAAM,EAAE,GAAG,MAAAC,MAASC,GAAe,IAAI,GAEjC,CAACC,GAAQC,CAAS,IAAIC,EAAuBtB,CAAa,GAC1D,CAACuB,GAASC,CAAU,IAAIF;AAAA,MAC5BrB;AAAA,IAAA,GAEI,CAACwB,GAAaC,CAAc,IAAIJ;AAAA,MACpCK;AAAA,IAAA,GAEI,CAACC,GAAWC,CAAY,IAAIP,EAAoB,CAAC,GAEjD,CAACQ,GAAOC,EAAQ,IAAIT,EAAwB,IAAI,GAChD,CAACU,GAAUC,EAAW,IAAIX,EAA2B,MAAS,GAC9D,CAACY,GAAkBC,EAAmB,IAAIb;AAAA,MAC9C;AAAA,IAAA,GAGI,CAACc,GAAUC,EAAW,IAAIf,EAAe,MAAM,oBAAI,MAAM,GACzD,CAACgB,GAAWC,EAAY,IAAIjB,EAAoBb,EAAgB,GAChE,CAAC+B,GAAcC,EAAe,IAClCnB,EAAuBZ,EAAmB,GACtC,CAACgC,GAAYC,EAAa,IAAIrB,EAAkBX,EAAiB,GACjE,CAACiC,GAASC,EAAU,IAAIvB;AAAA,MAC5BV,MAAkB;AAAA,IAAA,GAIdkC,KAAQC,EAAQ,0BAAU,KAAA,GAAQ,CAAA,CAAE,GAGpCC,IAAWD,EAAQ,MACnB3B,MAAW,SAAS,CAACG,KAAWO,MAAU,QAAQ,CAACE,IAC9C,OAEFiB,GAAY,EAAE,KAAK1B,GAAS,UAAAS,GAAU,OAAAF,GAAO,GACnD,CAACV,GAAQG,GAASO,GAAOE,CAAQ,CAAC,GAE/BkB,IAAOH,EAAQ,MAAM;AACzB,UAAI,CAACxB,EAAS,QAAO;AAGrB,UAAI4B,GACAC,IAAczB;AAClB,MAAIP,MAAW,SACb+B,IAAe5B,GACf6B,IAAc3B,KAAeE,KACpBP,MAAW,eACpB+B,IAAeE,EAAQ9B,GAAS+B,EAAsB,IAC7ClC,MAAW,QACpB+B,IAAeE,EAAQ9B,GAASK,IAAY0B,EAAsB,IAElEH,IAAeE,EAAQ9B,GAASgC,EAAc,GAK5CnC,MAAW,UAAS4B,KAAA,QAAAA,EAAU,YAChCG,IAAeH,EAAS,kBACxBI,IAAczB,KACLO,MACTiB,IAAeE,EAAQF,GAAcjB,CAAgB;AAGvD,YAAMsB,IAAIC;AAAA,QACR,EAAE,QAAQ,OAAO,MAAMN,GAAc,aAAaC,EAAA;AAAA,QAClDhB;AAAA,MAAA;AAEF,aAAO;AAAA,QACL,QAAQ;AAAA,UACN,SAASoB,EAAE;AAAA,UACX,kBAAkBA,EAAE;AAAA,UACpB,gBAAgBA,EAAE;AAAA,UAClB,WAAWA,EAAE;AAAA,QAAA;AAAA,QAEf,YAAYE,GAAsBF,EAAE,gBAAgB;AAAA,MAAA;AAAA,IAExD,GAAG;AAAA,MACDpC;AAAA,MACAG;AAAA,MACAE;AAAA,MACAG;AAAA,MACAoB;AAAA,MACAd;AAAA,MACAE;AAAA,IAAA,CACD,GAEKuB,KAAST,KAAA,gBAAAA,EAAM,WAAU,MAEzBU,IAAWb,EAAQ,MACnB,CAACvC,KAAgB,CAACmD,IAAe,OAC9BE,GAAyBF,EAAO,kBAAkB;AAAA,MACvD,GAAG9C;AAAA,MACH,OAAOuB;AAAA,MACP,WAAAE;AAAA,MACA,cAAAE;AAAA,MACA,YAAAE;AAAA,MACA,SAASE,MAAY,SAAS,SAAYA;AAAA,IAAA,CAC3C,GACA;AAAA,MACDpC;AAAA,MACAmD;AAAA,MACAvB;AAAA,MACAvB;AAAA,MACAyB;AAAA,MACAE;AAAA,MACAE;AAAA,MACAE;AAAA,IAAA,CACD,GAEKkB,IAAWf;AAAA,MACf,MAAM,IAAI,KAAK,eAAe7B,EAAK,UAAU,EAAE,WAAW,QAAQ;AAAA,MAClE,CAACA,EAAK,QAAQ;AAAA,IAAA,GAEV6C,KAAUhB;AAAA,MACd,MAAM,IAAI,KAAK,eAAe7B,EAAK,UAAU,EAAE,WAAW,UAAU;AAAA,MACpE,CAACA,EAAK,QAAQ;AAAA,IAAA;AAGhB,IAAA8C,GAAU,MAAM;AACd,MAAA9D,KAAA,QAAAA,EAAiByD;AAAA,IACnB,GAAG,CAACA,GAAQzD,CAAc,CAAC;AAG3B,UAAM+D,IAAUC,GAAO;AAAA,MACrB,QAAA9C;AAAA,MACA,SAAAG;AAAA,MACA,aAAAE;AAAA,MACA,WAAAG;AAAA,MACA,OAAAE;AAAA,MACA,UAAAE;AAAA,MACA,kBAAAE;AAAA,MACA,UAAAE;AAAA,MACA,QAAAuB;AAAA,IAAA,CACD;AACD,IAAAM,EAAQ,UAAU;AAAA,MAChB,QAAA7C;AAAA,MACA,SAAAG;AAAA,MACA,aAAAE;AAAA,MACA,WAAAG;AAAA,MACA,OAAAE;AAAA,MACA,UAAAE;AAAA,MACA,kBAAAE;AAAA,MACA,UAAAE;AAAA,MACA,QAAAuB;AAAA,IAAA;AAGF,UAAMQ,KAAcpB;AAAA,MAClB,OAAO;AAAA,QACL,WAAW,MAAM;AACf,gBAAMqB,IAAOH,EAAQ;AACrB,iBAAO;AAAA,YACL,QAAQG,EAAK;AAAA,YACb,eAAeA,EAAK,UAAU7E,EAAU6E,EAAK,OAAO,IAAI;AAAA,YACxD,aAAaA,EAAK;AAAA,YAClB,WAAWA,EAAK;AAAA,YAChB,OAAOA,EAAK;AAAA,YACZ,UAAUA,EAAK,WAAW7E,EAAU6E,EAAK,QAAQ,IAAI;AAAA,YACrD,kBAAkBA,EAAK;AAAA,YACvB,UAAU7E,EAAU6E,EAAK,QAAQ;AAAA,UAAA;AAAA,QAErC;AAAA,QACA,WAAW,MAAM;AACf,gBAAMZ,IAAIS,EAAQ,QAAQ;AAC1B,iBAAKT,IACE;AAAA,YACL,SAASjE,EAAUiE,EAAE,OAAO;AAAA,YAC5B,kBAAkBjE,EAAUiE,EAAE,gBAAgB;AAAA,YAC9C,gBAAgBA,EAAE,iBAAiB,EAAE,GAAGA,EAAE,mBAAmB;AAAA,YAC7D,WAAWA,EAAE;AAAA,UAAA,IALA;AAAA,QAOjB;AAAA,QACA,WAAW,CAACa,MAERA,MAAS,SACTA,MAAS,gBACTA,MAAS,SACTA,MAAS,QAEF,MAEThD,EAAUgD,CAAI,GACP;AAAA,QAET,kBAAkB,CAACrF,MAAY;AAC7B,cAAIA,MAAY;AACd,mBAAAwC,EAAW,MAAS,GACb;AAET,gBAAM8C,IAAS5E,EAAYV,CAAO;AAGlC,iBAFI,CAACsF,KAEDL,EAAQ,QAAQ,WAAW,SAASM,EAAQD,GAAQ,oBAAI,KAAA,CAAM,IACzD,MAET9C,EAAW8C,CAAM,GACV;AAAA,QACT;AAAA,QACA,gBAAgB,CAACE,MAEbA,MAAS,QACT,EACE,OAAO,SAASA,CAAI,KACpBA,KAAQ3E,EAAmB,OAC3B2E,KAAQ3E,EAAmB,OAGtB,MAET6B,EAAe8C,CAAI,GACZ;AAAA,QAET,cAAc,CAACA,MACTA,MAAS,KAAKA,MAAS,IAAU,MACrC3C,EAAa2C,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,kBAAM7E,IAAIE,EAAY2E,EAAK,QAAQ;AACnC,gBAAI,CAAC7E,KAAK+E,EAAQ/E,GAAGiF,CAAG,EAAG,QAAO;AAClC,YAAAC,IAAalF;AAAA,UACf;AACA,iBAAI,WAAW6E,KAAMtC,GAASsC,EAAK,SAAS,IAAI,GAC5C,cAAcA,KAAMpC,GAAYyC,CAAU,GACvC;AAAA,QACT;AAAA,QACA,qBAAqB,CAACF,MAChBA,MAAS,QAAQ,CAAC,OAAO,UAAUA,CAAI,IAAU,MACrDrC,GAAoBqC,CAAI,GACjB;AAAA,QAET,aAAa,CAACxF,MAAY;AACxB,gBAAMsF,IAAS5E,EAAYV,CAAO;AAClC,iBAAKsF,KACLjC,GAAYiC,CAAM,GACX,MAFa;AAAA,QAGtB;AAAA,MAAA;AAAA,MAEF,CAAA;AAAA,IAAC;AAEH,IAAAM,GAAqB3F,IAAsBkF,IAAarD,CAAE;AAE1D,UAAM+D,KAAsB9B;AAAA,MAC1B,MAEI;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,EAEF,IAAI,CAAC+B,OAAO;AAAA,QACZ,OAAOA;AAAA,QACP,OAAO,EAAE,kCAAkCA,CAAC,EAAE;AAAA,MAAA,EAC9C;AAAA,MACJ,CAAC,CAAC;AAAA,IAAA,GAGEC,IAAS,CAACC,MACdA,IACI,EAAE,oCAAoC;AAAA,MACpC,OAAOA,EAAG;AAAA,MACV,MAAMA,EAAG;AAAA,IAAA,CACV,IACD;AAEN,WACE,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAhE;AAAA,QACA,kBAAe;AAAA,QACf,qBAAmBH;AAAA,QACnB,WAAW1B,GAAa,EAAE,OAAA2B,IAAO,WAAAC,IAAW;AAAA,QAE5C,UAAA;AAAA,UAAA,gBAAAiE;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,OAAO,EAAE,8BAA8B;AAAA,cACvC,SAAQ;AAAA,cACR,OAAO9D;AAAA,cACP,eAAe,CAACiD,MAAShD,EAAUgD,CAAoB;AAAA,cAEvD,UAAA;AAAA,gBAAA,gBAAAc,EAACC,KAAM,OAAO,EAAE,4BAA4B,GAAG,OAAM,OAAM;AAAA,gBAC3D,gBAAAD;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,OAAO,EAAE,mCAAmC;AAAA,oBAC5C,OAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEPA,GAAA,EAAM,OAAO,EAAE,4BAA4B,GAAG,OAAM,OAAM;AAAA,kCAC1DA,GAAA,EAAM,OAAO,EAAE,4BAA4B,GAAG,OAAM,MAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAG7D,gBAAAH,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA;AAAA,YAAA,gBAAAE,EAACE,KAAU,OAAO,EAAE/F,GAAe8B,CAAM,CAAC,GACxC,UAAA,gBAAA+D;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,OAAO/D;AAAA,gBACP,UAAUC;AAAA,gBACV,SAASJ,MAAW,QAAQ,SAAY0B;AAAA,cAAA;AAAA,YAAA,GAE5C;AAAA,YAEC1B,MAAW,SACV,gBAAA+D;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,6BAA6B;AAAA,gBACtC,aAAa,EAAE,iCAAiC;AAAA,gBAEhD,UAAA,gBAAAF;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAK1F,EAAmB;AAAA,oBACxB,KAAKA,EAAmB;AAAA,oBACxB,OAAO4B;AAAA,oBACP,UAAUC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,YAIHN,MAAW,SACV,gBAAA6D;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,2BAA2B;AAAA,gBACpC,SAAQ;AAAA,gBACR,OAAO,OAAOtD,CAAS;AAAA,gBACvB,eAAe,CAACyC,MAASxC,EAAa,OAAOwC,CAAI,CAAc;AAAA,gBAE/D,UAAA;AAAA,kBAAA,gBAAAc,EAACC,KAAM,OAAO,EAAE,sBAAsB,GAAG,OAAM,KAAI;AAAA,oCAClDA,GAAA,EAAM,OAAO,EAAE,sBAAsB,GAAG,OAAM,IAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAIvD,gBAAAD;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,kCAAkC;AAAA,gBAC3C,aAAa,EAAE,sCAAsC;AAAA,gBAErD,UAAA,gBAAAF;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,OAAOrD;AAAA,oBACP,UAAUC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,YAGF,gBAAAgD;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,0BAA0B;AAAA,gBACnC,aAAa,EAAE,8BAA8B;AAAA,gBAE7C,UAAA,gBAAAF;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,OAAOlD;AAAA,oBACP,UAAU,CAAC5C,MAAMA,KAAK6C,GAAY7C,CAAC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACrC;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAEC4B,MAAW,QACV,gBAAA6D,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,qBAAqB;AAAA,kBAC9B,aAAa,EAAE,yBAAyB;AAAA,kBAExC,UAAA,gBAAAF;AAAA,oBAACI;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,KAAK;AAAA,sBACL,MAAM;AAAA,sBACN,OAAOzD;AAAA,sBACP,UAAUC;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACZ;AAAA,cAAA;AAAA,cAEF,gBAAAoD,EAACE,GAAA,EAAU,OAAO,EAAE,0BAA0B,GAC5C,UAAA,gBAAAF;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,OAAOtD;AAAA,kBACP,UAAUC;AAAA,kBACV,SAASa;AAAA,gBAAA;AAAA,cAAA,EACX,CACF;AAAA,YAAA,GACF;AAAA,YACCE,IACC,gBAAAiC,EAAC,OAAA,EAAI,WAAU,mEACb,UAAA;AAAA,cAAA,gBAAAE,EAACK,GAAA,EAAM,SAASxC,EAAS,UAAU,YAAY,WAC5C,UAAAA,EAAS,UACN,EAAE,2BAA2B;AAAA,gBAC3B,MAAMA,EAAS;AAAA,cAAA,CAChB,IACD,EAAE,4BAA4B,GACpC;AAAA,cACEA,EAAS,aAIP,OAHF,gBAAAmC,EAAC,QAAA,EAAK,WAAU,sCACb,UAAA,EAAE,+BAA+B,EAAA,CACpC;AAAA,YACE,EAAA,CACN,IACE;AAAA,UAAA,EAAA,CACN,IACE;AAAA,UAEH3E,IACC,gBAAAyE,EAAAQ,IAAA,EACE,UAAA;AAAA,YAAA,gBAAAR;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,mCAAmC;AAAA,gBAC5C,SAAQ;AAAA,gBACR,OAAO5C;AAAA,gBACP,eAAe,CAAC+B,MAAS9B,GAAa8B,CAAiB;AAAA,gBAEvD,UAAA;AAAA,kBAAA,gBAAAc;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,OAAO,EAAE,uCAAuC;AAAA,sBAChD,OAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAER,gBAAAD;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,OAAO,EAAE,kCAAkC;AAAA,sBAC3C,OAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAER,gBAAAD;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,OAAO,EAAE,qCAAqC;AAAA,sBAC9C,OAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACR;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD9C,MAAc,cACb,gBAAA6C,EAACE,KAAU,OAAO,EAAE,sCAAsC,GACxD,UAAA,gBAAAF;AAAA,cAACO;AAAA,cAAA;AAAA,gBACC,SAASb;AAAA,gBACT,OAAOrC;AAAA,gBACP,eAAe,CAAC6B,MACd5B,GAAgB4B,CAAoB;AAAA,cAAA;AAAA,YAAA,GAG1C,IACE;AAAA,YAEJ,gBAAAc;AAAA,cAACQ;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,8BAA8B;AAAA,gBACvC,SAASjD;AAAA,gBACT,iBAAiBC;AAAA,cAAA;AAAA,YAAA;AAAA,YAGnB,gBAAAsC;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,iCAAiC;AAAA,gBAC1C,SAAQ;AAAA,gBACR,OAAOtC;AAAA,gBACP,eAAe,CAACyB,MAASxB,GAAWwB,CAAwB;AAAA,gBAE5D,UAAA;AAAA,kBAAA,gBAAAc,EAACC,KAAM,OAAO,EAAE,gCAAgC,GAAG,OAAM,QAAO;AAAA,kBAChE,gBAAAD;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,OAAO,EAAE,kCAAkC;AAAA,sBAC3C,OAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,oCAEPA,GAAA,EAAM,OAAO,EAAE,gCAAgC,GAAG,OAAM,OAAA,CAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAClE,EAAA,CACF,IACE;AAAA,UAEJ,gBAAAD,EAAC,KAAA,EAAE,WAAU,cAAa,MAAK,UAAS,aAAU,UAC/C,UAAAxB,IACG,GAAG,EAAE,qCAAqC,CAAC,KAAKG,EAAS;AAAA,YACvDH,EAAO;AAAA,UAAA,CACR,KAAK,EAAE,uCAAuC,CAAC,KAAKoB;AAAA,YACnDpB,EAAO;AAAA,UAAA,CACR,MACD,IACN;AAAA,UAECT,KAAQS,IACP,gBAAAwB,EAACS,IAAA,EAAK,SAAQ,YACZ,UAAA,gBAAAX,EAACW,GAAK,MAAL,EAAU,WAAU,kDAKnB,UAAA;AAAA,YAAA,gBAAAX,EAAC,MAAA,EAAG,WAAU,iGACZ,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,+EACb,UAAA;AAAA,gBAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,qCAAqC,GAC1C;AAAA,gBACA,gBAAAA,EAAC,QAAG,WAAU,kCACX,YAAS,OAAOxB,EAAO,OAAO,EAAA,CACjC;AAAA,cAAA,GACF;AAAA,cACA,gBAAAsB,EAAC,OAAA,EAAI,WAAU,iEACb,UAAA;AAAA,gBAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,uCAAuC,GAC5C;AAAA,kCACC,MAAA,EAAG,WAAU,gCACX,UAAAJ,EAAOpB,EAAO,cAAc,EAAA,CAC/B;AAAA,cAAA,GACF;AAAA,cACA,gBAAAsB,EAAC,OAAA,EAAI,WAAU,iEACb,UAAA;AAAA,gBAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,uCAAuC,GAC5C;AAAA,kCACC,MAAA,EACC,UAAA,gBAAAA;AAAA,kBAACK;AAAA,kBAAA;AAAA,oBACC,SAASK,GAAwBlC,EAAO,SAAS;AAAA,oBACjD,MAAK;AAAA,oBAEJ,UAAA,EAAE,6BAA6BA,EAAO,SAAS,EAAE;AAAA,kBAAA;AAAA,gBAAA,EACpD,CACF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YAEA,gBAAAsB,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,uCACb,UAAA,EAAE,iCAAiC,GACtC;AAAA,cACA,gBAAAA,EAAC,QAAG,WAAU,kDACX,YAAK,WAAW,IAAI,CAACW,MAAM;AAC1B,sBAAMC,IAAUxB,EAAQnC,GAAU0D,EAAE,IAAI;AACxC,uBACE,gBAAAb;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,WAAU;AAAA,oBAEV,UAAA;AAAA,sBAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,gCACb,UAAA,EAAE,6BAA6BW,EAAE,GAAG,EAAE,EAAA,CACzC;AAAA,sBACA,gBAAAb,EAAC,QAAA,EAAK,WAAU,sDACd,UAAA;AAAA,wBAAA,gBAAAE,EAAC,UAAK,WAAU,sCACb,aAAQ,OAAOW,EAAE,IAAI,GACxB;AAAA,wBACCC,sBACEP,GAAA,EAAM,SAAQ,WACZ,UAAA,EAAE,yBAAyB,GAC9B,IACE;AAAA,sBAAA,EAAA,CACN;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAfKM,EAAE;AAAA,gBAAA;AAAA,cAkBb,CAAC,EAAA,CACH;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF,EAAA,CACF,IAEA,gBAAAX,EAAC,KAAA,EAAE,WAAU,sCACV,UAAA,EAAE,uBAAuB,EAAA,CAC5B;AAAA,UAGDvB,IAAW,gBAAAuB,EAACa,IAAA,EAA0B,QAAQpC,GAAU,IAAK;AAAA,UAE7DD,MAAWvD,MAAkB,UAAUD,KACtC,gBAAAgF;AAAA,YAACc;AAAA,YAAA;AAAA,cACC,UAAA9F;AAAA,cACA,SAASC;AAAA,cACT,QAAAC;AAAA,cACA,SAAAC;AAAA,cACA,MAAM;AAAA,gBACJ,OAAO,EAAE,8BAA8B;AAAA,gBACvC,MAAM;AAAA,gBACN,WAAWwD,EAAS,OAAOH,EAAO,OAAO;AAAA,gBACzC,gBAAgBuC,GAAwBvC,EAAO,SAAS;AAAA,gBACxD,OAAOpD;AAAA,gBACP,QAAQ;AAAA,kBACN;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO,EAAE,qCAAqC;AAAA,oBAC9C,OAAOuD,EAAS,OAAOH,EAAO,OAAO;AAAA,kBAAA;AAAA,kBAEvC;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO,EAAE,uCAAuC;AAAA,oBAChD,OAAOoB,EAAOpB,EAAO,cAAc;AAAA,kBAAA;AAAA,kBAErC;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO,EAAE,uCAAuC;AAAA,oBAChD,OAAO,EAAE,6BAA6BA,EAAO,SAAS,EAAE;AAAA,kBAAA;AAAA,kBAE1D,GAAIC,IACAuC;AAAA,oBAA0BvC;AAAA,oBAAU;AAAA,oBAAG,CAACpE,MACtCuE,GAAQ,OAAOvE,CAAC;AAAA,kBAAA,IAElB,CAAA;AAAA,gBAAC;AAAA,cACP;AAAA,YACF;AAAA,UAAA,IAEA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEAM,GAAgB,cAAc;"}
1
+ {"version":3,"file":"pregnancy-dating-D6dLkMpl.js","sources":["../../src/components/pregnancy-dating/pregnancy-dating.agent.ts","../../src/components/pregnancy-dating/pregnancy-dating.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — PregnancyDating. */\n/* */\n/* Unified obstetric dating widget: takes any known anchor (LMP / */\n/* conception / IVF transfer / known EDD) and shows both the estimated */\n/* due date and the current gestational age, trimester and milestones, */\n/* with optional CRL re-dating and a ±days nudge. This is the adapter to */\n/* prefer — DueDateCalculator and GestationalAgeCalculator are deprecated */\n/* in favour of it. */\n/* */\n/* The agent surface is the dating inputs plus the computed EDD / GA; the */\n/* handle is the curated `PregnancyDatingHandle` (the public `ref` stays */\n/* the root <div>, exactly as `slider.tsx` and `bmi-calculator.tsx` keep */\n/* 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/* Host-delegated, deliberately WITHOUT actions: the optional antenatal- */\n/* schedule inputs (plurality, chorionicity, Rh status, GDM risk) only */\n/* appear under `showSchedule` and steer the appended exam timeline, not */\n/* the dating result. An agent reaches them through the DOM — the */\n/* Select / Switch controls inside `data-component=\"pregnancy-dating\"`. */\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 { PregnancyDatingHandle } from './pregnancy-dating';\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 pregnancyDatingAgent: AgentAdapter<PregnancyDatingHandle> = {\n id: 'pregnancy-dating',\n // set_value → the seven `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, datingAdjustment: number | null, asOfDate: string }',\n descriptionKey: 'ui.agent.pregnancyDating.state.inputs',\n description:\n 'The dating inputs as entered — anchor method, its reference date, cycle length (LMP), embryo age (IVF), the optional CRL + scan date, the manual ±days nudge, 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.pregnancyDating.state.result',\n description:\n 'Computed estimated delivery date, the GA day-0 anchor after any re-dating or adjustment, the gestational age in completed weeks + days as of the evaluation date, and the trimester band (preconception / first / second / third / postterm). 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' | 'edd' }\",\n argsSchema: {\n type: 'object',\n properties: {\n method: {\n enum: ['lmp', 'conception', 'ivf', 'edd'],\n description:\n 'Which anchor to date from — last menstrual period, conception, IVF transfer, or a known estimated delivery date.',\n },\n },\n required: ['method'],\n additionalProperties: false,\n },\n idempotent: true,\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 four supported anchors.',\n ],\n examples: [\n { args: { method: 'edd' }, note: 'Date backwards from a known EDD.' },\n ],\n descriptionKey: 'ui.agent.pregnancyDating.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 — only a known EDD may be in the future.',\n invoke: (\n handle,\n args: { method: 'lmp' | 'conception' | 'ivf' | 'edd' },\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, transfer, or known EDD — or null to clear it. Only a known EDD may be in the future.',\n },\n },\n required: ['date'],\n additionalProperties: false,\n },\n idempotent: true,\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 for a future date under any method but `edd` — the on-screen DatePicker caps those 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.pregnancyDating.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 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.pregnancyDating.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 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.pregnancyDating.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 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.pregnancyDating.actions.setCrl',\n description:\n 'LMP method only — set the first-trimester crown-rump length and its scan date. A confirmed re-dating wins over both the cycle length and the manual adjustment.',\n invoke: (\n handle,\n args: { crlMm?: number | null; scanDate?: string | null },\n ) => handle.setCrl(args),\n },\n set_dating_adjustment: {\n safety: 'write',\n argsType: '{ days: number | null }',\n argsSchema: {\n type: 'object',\n properties: {\n days: {\n oneOf: [{ type: 'integer' }, { type: 'null' }],\n description:\n 'Whole days to nudge the dating by — positive moves the pregnancy further along — or null for no adjustment.',\n },\n },\n required: ['days'],\n additionalProperties: false,\n },\n idempotent: true,\n returns: 'boolean',\n returnsSchema: {\n type: 'boolean',\n description: 'True when the value was applied.',\n },\n errors: [\n 'Returns false for a non-integer number of days.',\n 'Applies but changes nothing while a CRL re-dating is confirmed — the measurement wins.',\n ],\n examples: [\n {\n args: { days: 3 },\n note: 'An uncertain LMP judged three days earlier than entered.',\n },\n ],\n descriptionKey: 'ui.agent.pregnancyDating.actions.setDatingAdjustment',\n description:\n 'Nudge the dating by whole days for an uncertain anchor. Positive moves the pregnancy further along (earlier effective LMP, earlier due date).',\n invoke: (handle, args: { days: number | null }) =>\n handle.setDatingAdjustment(args.days),\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 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.pregnancyDating.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: 'pregnancy-dating',\n description: 'Marks the PregnancyDating 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/* PregnancyDating — the unified obstetric dating widget. */\n/* */\n/* Supersedes DueDateCalculator + GestationalAgeCalculator: takes any */\n/* known anchor (LMP / conception / IVF transfer / known EDD) and shows */\n/* BOTH the estimated due date AND the current gestational age, */\n/* trimester and milestones. Two dating refinements: a precise CRL + */\n/* scan-date ACOG CO 700 re-dating (LMP), and a quick manual ±days */\n/* adjustment for an uncertain LMP/conception. `showSchedule` appends */\n/* the antenatal exam schedule with plurality / chorionicity / risk */\n/* inputs. All maths lives in `_shared/obstetrics` + `_shared/antenatal- */\n/* schedule` (pure, separately tested). */\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, subDays } from 'date-fns';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { pregnancyDatingAgent } from './pregnancy-dating.agent';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Select } from '../select';\nimport { Switch } from '../switch';\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 EmbryoAge,\n type GestationalAge,\n type DueDateResult,\n type Plurality,\n type Chorionicity,\n computeDueDate,\n redateByCrl,\n gestationalMilestones,\n GESTATION_DAYS,\n CONCEPTION_OFFSET_DAYS,\n DEFAULT_CYCLE_LENGTH,\n TRIMESTER_BADGE_VARIANT,\n trimesterHighlightToken,\n} from '../_shared/obstetrics';\nimport {\n computeAntenatalSchedule,\n type AntenatalScheduleOptions,\n type GdmRisk,\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/** Any known anchor the pregnancy can be dated from. */\nexport type DatingMethod = 'lmp' | 'conception' | 'ivf' | 'edd';\n\n/** i18n key for each method's reference-date field. */\nconst DATE_LABEL_KEY: Record<DatingMethod, string> = {\n lmp: 'pregnancyDating.lmpDate',\n conception: 'pregnancyDating.conceptionDate',\n ivf: 'pregnancyDating.transferDate',\n edd: 'pregnancyDating.eddDate',\n};\n\nexport interface PregnancyDatingResult {\n /** Estimated date of delivery. */\n dueDate: Date;\n /** GA day-0 anchor (effective LMP) after any re-dating / adjustment. */\n gestationalStart: Date;\n /** Gestational age as of the evaluation date; `null` before conception. */\n gestationalAge: GestationalAge | null;\n trimester: DueDateResult['trimester'];\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 PregnancyDatingInputsSnapshot {\n /** Which anchor the pregnancy is dated from. */\n method: DatingMethod;\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 /** Manual ±days nudge applied to the dating, or null. */\n datingAdjustment: number | null;\n /** The date gestational age and trimester are evaluated against. */\n asOfDate: string;\n}\n\n/** `PregnancyDatingResult` projected onto the agent boundary — ISO dates. */\nexport interface PregnancyDatingSnapshot {\n /** Estimated date of delivery, `yyyy-MM-dd`. */\n dueDate: string;\n /** GA day-0 anchor after any re-dating / adjustment, `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 EDD + gestational age, and drives the inputs the way\n * a user would. Never exposes patient identity — only structural dates and\n * numbers. Consumed by `pregnancy-dating.agent.ts`; the public `ref` stays the\n * root DOM element.\n */\nexport interface PregnancyDatingHandle {\n /** The dating inputs as entered. */\n getInputs: () => PregnancyDatingInputsSnapshot;\n /** Computed due date, gestational age and trimester, or null until a reference date is set. */\n getResult: () => PregnancyDatingSnapshot | null;\n /** Switch the dating anchor. Keeps the reference date, which is re-interpreted. */\n setMethod: (method: DatingMethod) => boolean;\n /** Set the method's reference date (`yyyy-MM-dd`); only a known EDD may be 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 manual ±days dating nudge (positive = further along). */\n setDatingAdjustment: (days: number | null) => boolean;\n /** Set the date gestational age and trimester are evaluated against. */\n setAsOfDate: (isoDate: string) => boolean;\n}\n\nexport interface PregnancyDatingProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial dating method. Defaults to `'lmp'`. */\n defaultMethod?: DatingMethod;\n /** Pre-fill the reference date (e.g. a known LMP from the patient record). */\n defaultReferenceDate?: Date;\n /** Fires whenever a result can be computed (and `null` when it can't). */\n onResultChange?: (result: PregnancyDatingResult | null) => void;\n /** When provided, shows the result-action buttons that emit / copy the result. */\n onInsert?: (payload: InsertPayload) => void;\n /** Which verb the result button performs. Defaults to `'insert'`. */\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 /** Brand wordmark printed in the inserted/copied result-card footer. */\n insertBrand?: string | false;\n /** Append the antenatal exam schedule + reveal the plurality / risk inputs. */\n showSchedule?: boolean;\n /** `showSchedule` only — initial number of babies. Defaults to `'singleton'`. */\n defaultPlurality?: Plurality;\n /** `showSchedule` only — initial chorionicity for multiples. Defaults to `'unknown'`. */\n defaultChorionicity?: Chorionicity;\n /** `showSchedule` only — initial Rh-negative state (surfaces anti-D). */\n defaultRhNegative?: boolean;\n /** `showSchedule` only — initial gestational-diabetes risk tier (surfaces OGTT). */\n defaultGdmRisk?: GdmRisk;\n /**\n * Passthrough options for the appended schedule (national `schedule`,\n * `includeOnIndication`, `birthGuideline`). `today`, `plurality`,\n * `chorionicity`, `rhNegative` and `gdmRisk` come from the component's own\n * inputs. Ignored unless `showSchedule` is set.\n */\n scheduleOptions?: Omit<\n AntenatalScheduleOptions,\n 'today' | 'plurality' | 'chorionicity' | 'rhNegative' | 'gdmRisk'\n >;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport const PregnancyDating = forwardRef<HTMLDivElement, PregnancyDatingProps>(\n (\n {\n defaultMethod = 'lmp',\n defaultReferenceDate,\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n showSchedule = false,\n defaultPlurality = 'singleton',\n defaultChorionicity = 'unknown',\n defaultRhNegative = false,\n defaultGdmRisk,\n scheduleOptions,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n\n const [method, setMethod] = useState<DatingMethod>(defaultMethod);\n const [refDate, setRefDate] = useState<Date | undefined>(\n defaultReferenceDate,\n );\n const [cycleLength, setCycleLength] = useState<number | null>(\n DEFAULT_CYCLE_LENGTH,\n );\n const [embryoAge, setEmbryoAge] = useState<EmbryoAge>(5);\n // Precise re-dating (LMP method) and the quick ±days nudge.\n const [crlMm, setCrlMm] = useState<number | null>(null);\n const [scanDate, setScanDate] = useState<Date | undefined>(undefined);\n const [datingAdjustment, setDatingAdjustment] = useState<number | null>(\n null,\n );\n // Evaluation date (\"as of\") + multiple-pregnancy / risk inputs.\n const [asOfDate, setAsOfDate] = useState<Date>(() => new Date());\n const [plurality, setPlurality] = useState<Plurality>(defaultPlurality);\n const [chorionicity, setChorionicity] =\n useState<Chorionicity>(defaultChorionicity);\n const [rhNegative, setRhNegative] = useState<boolean>(defaultRhNegative);\n const [gdmRisk, setGdmRisk] = useState<GdmRisk | 'none'>(\n defaultGdmRisk ?? 'none',\n );\n\n // Real today caps the past-only date inputs (LMP, conception, transfer, scan).\n const today = useMemo(() => new Date(), []);\n\n // CRL re-dating (LMP method only) — the measurement-based path.\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 data = useMemo(() => {\n if (!refDate) return null;\n\n // Resolve the method's anchor to an effective LMP (GA day 0).\n let effectiveLmp: Date;\n let cycleForEdd = DEFAULT_CYCLE_LENGTH;\n if (method === 'lmp') {\n effectiveLmp = refDate;\n cycleForEdd = cycleLength ?? DEFAULT_CYCLE_LENGTH;\n } else if (method === 'conception') {\n effectiveLmp = subDays(refDate, CONCEPTION_OFFSET_DAYS);\n } else if (method === 'ivf') {\n effectiveLmp = subDays(refDate, embryoAge + CONCEPTION_OFFSET_DAYS);\n } else {\n effectiveLmp = subDays(refDate, GESTATION_DAYS);\n }\n\n // A confirmed CRL re-dating wins over everything (measurement-based); else\n // apply the quick ±days nudge (+ = pregnancy further along → earlier LMP).\n if (method === 'lmp' && redating?.redated) {\n effectiveLmp = redating.gestationalStart;\n cycleForEdd = DEFAULT_CYCLE_LENGTH;\n } else if (datingAdjustment) {\n effectiveLmp = subDays(effectiveLmp, datingAdjustment);\n }\n\n const r = computeDueDate(\n { method: 'lmp', date: effectiveLmp, cycleLength: cycleForEdd },\n asOfDate,\n );\n return {\n result: {\n dueDate: r.dueDate,\n gestationalStart: r.gestationalStart,\n gestationalAge: r.gestationalAge,\n trimester: r.trimester,\n } satisfies PregnancyDatingResult,\n milestones: gestationalMilestones(r.gestationalStart),\n };\n }, [\n method,\n refDate,\n cycleLength,\n embryoAge,\n redating,\n datingAdjustment,\n asOfDate,\n ]);\n\n const result = data?.result ?? null;\n\n const schedule = useMemo(() => {\n if (!showSchedule || !result) return null;\n return computeAntenatalSchedule(result.gestationalStart, {\n ...scheduleOptions,\n today: asOfDate,\n plurality,\n chorionicity,\n rhNegative,\n gdmRisk: gdmRisk === 'none' ? undefined : gdmRisk,\n });\n }, [\n showSchedule,\n result,\n asOfDate,\n scheduleOptions,\n plurality,\n chorionicity,\n rhNegative,\n gdmRisk,\n ]);\n\n const longDate = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'long' }),\n [i18n.language],\n );\n const medDate = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }),\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 datingAdjustment,\n asOfDate,\n result,\n });\n liveRef.current = {\n method,\n refDate,\n cycleLength,\n embryoAge,\n crlMm,\n scanDate,\n datingAdjustment,\n asOfDate,\n result,\n };\n\n const agentHandle = useMemo<PregnancyDatingHandle>(\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 datingAdjustment: live.datingAdjustment,\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 (\n next !== 'lmp' &&\n next !== 'conception' &&\n next !== 'ivf' &&\n next !== 'edd'\n ) {\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 if (!parsed) return false;\n // The DatePicker caps every anchor but a known EDD at today.\n if (liveRef.current.method !== 'edd' && isAfter(parsed, new Date())) {\n return false;\n }\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 setDatingAdjustment: (days) => {\n if (days !== null && !Number.isInteger(days)) return false;\n setDatingAdjustment(days);\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(pregnancyDatingAgent, agentHandle, id);\n\n const chorionicityOptions = useMemo(\n () =>\n (\n [\n 'unknown',\n 'dichorionic-diamniotic',\n 'monochorionic-diamniotic',\n 'monochorionic-monoamniotic',\n ] as const\n ).map((c) => ({\n value: c,\n label: t(`antenatalSchedule.chorionicity.${c}`),\n })),\n [t],\n );\n\n const gaText = (ga: GestationalAge | null): string =>\n ga\n ? t('pregnancyDating.result.gestation', {\n weeks: ga.weeks,\n days: ga.days,\n })\n : '—';\n\n return (\n <div\n ref={ref}\n data-component=\"pregnancy-dating\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <RadioGroup\n label={t('pregnancyDating.method.label')}\n variant=\"horizontal\"\n value={method}\n onValueChange={(next) => setMethod(next as DatingMethod)}\n >\n <Radio label={t('pregnancyDating.method.lmp')} value=\"lmp\" />\n <Radio\n label={t('pregnancyDating.method.conception')}\n value=\"conception\"\n />\n <Radio label={t('pregnancyDating.method.ivf')} value=\"ivf\" />\n <Radio label={t('pregnancyDating.method.edd')} value=\"edd\" />\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\n value={refDate}\n onChange={setRefDate}\n maxDate={method === 'edd' ? undefined : today}\n />\n </FormField>\n\n {method === 'lmp' && (\n <FormField\n label={t('pregnancyDating.cycleLength')}\n description={t('pregnancyDating.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('pregnancyDating.embryoAge')}\n variant=\"horizontal\"\n value={String(embryoAge)}\n onValueChange={(next) => setEmbryoAge(Number(next) as EmbryoAge)}\n >\n <Radio label={t('pregnancyDating.day3')} value=\"3\" />\n <Radio label={t('pregnancyDating.day5')} value=\"5\" />\n </RadioGroup>\n )}\n\n <FormField\n label={t('pregnancyDating.datingAdjustment')}\n description={t('pregnancyDating.datingAdjustmentHint')}\n >\n <NumberInput\n mode=\"integer\"\n value={datingAdjustment}\n onChange={setDatingAdjustment}\n />\n </FormField>\n\n <FormField\n label={t('pregnancyDating.asOfDate')}\n description={t('pregnancyDating.asOfDateHint')}\n >\n <DatePicker\n value={asOfDate}\n onChange={(d) => d && setAsOfDate(d)}\n />\n </FormField>\n </div>\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('pregnancyDating.crl')}\n description={t('pregnancyDating.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('pregnancyDating.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('pregnancyDating.redated', {\n days: redating.discrepancyDays,\n })\n : t('pregnancyDating.datesAgree')}\n </Badge>\n {!redating.crlInRange ? (\n <span className=\"type-meta ds:text-muted-foreground\">\n {t('pregnancyDating.crlOutOfRange')}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {showSchedule ? (\n <>\n <RadioGroup\n label={t('antenatalSchedule.plurality.label')}\n variant=\"horizontal\"\n value={plurality}\n onValueChange={(next) => setPlurality(next as Plurality)}\n >\n <Radio\n label={t('antenatalSchedule.plurality.singleton')}\n value=\"singleton\"\n />\n <Radio\n label={t('antenatalSchedule.plurality.twin')}\n value=\"twin\"\n />\n <Radio\n label={t('antenatalSchedule.plurality.triplet')}\n value=\"triplet\"\n />\n </RadioGroup>\n\n {plurality !== 'singleton' ? (\n <FormField label={t('antenatalSchedule.chorionicity.label')}>\n <Select\n options={chorionicityOptions}\n value={chorionicity}\n onValueChange={(next) =>\n setChorionicity(next as Chorionicity)\n }\n />\n </FormField>\n ) : null}\n\n <Switch\n label={t('antenatalSchedule.rhNegative')}\n checked={rhNegative}\n onCheckedChange={setRhNegative}\n />\n\n <RadioGroup\n label={t('antenatalSchedule.gdmRisk.label')}\n variant=\"horizontal\"\n value={gdmRisk}\n onValueChange={(next) => setGdmRisk(next as GdmRisk | 'none')}\n >\n <Radio label={t('antenatalSchedule.gdmRisk.none')} value=\"none\" />\n <Radio\n label={t('antenatalSchedule.gdmRisk.medium')}\n value=\"medium\"\n />\n <Radio label={t('antenatalSchedule.gdmRisk.high')} value=\"high\" />\n </RadioGroup>\n </>\n ) : null}\n\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('pregnancyDating.result.dueDateLabel')}: ${longDate.format(\n result.dueDate,\n )}. ${t('pregnancyDating.result.gestationLabel')}: ${gaText(\n result.gestationalAge,\n )}.`\n : ''}\n </p>\n\n {data && result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {/* EDD is the headline — full width so a long localized date\n never wraps; gestational age + trimester flow beneath it,\n packed to the start so they don't strand a gap at narrow /\n modal widths. */}\n <dl className=\"ds:flex ds:flex-wrap ds:items-start ds:gap-x-[var(--spacing-xl)] ds:gap-y-[var(--spacing-md)]\">\n <div className=\"ds:basis-full ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.result.dueDateLabel')}\n </dt>\n <dd className=\"type-metric ds:text-foreground\">\n {longDate.format(result.dueDate)}\n </dd>\n </div>\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('pregnancyDating.result.gestationLabel')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {gaText(result.gestationalAge)}\n </dd>\n </div>\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('pregnancyDating.result.trimesterLabel')}\n </dt>\n <dd>\n <Badge\n variant={TRIMESTER_BADGE_VARIANT[result.trimester]}\n size=\"lg\"\n >\n {t(`pregnancyDating.trimester.${result.trimester}`)}\n </Badge>\n </dd>\n </div>\n </dl>\n\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.milestonesLabel')}\n </span>\n <ul className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n {data.milestones.map((m) => {\n const reached = isAfter(asOfDate, m.date);\n return (\n <li\n key={m.key}\n className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-md)]\"\n >\n <span className=\"type-body ds:text-foreground\">\n {t(`pregnancyDating.milestone.${m.key}`)}\n </span>\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span className=\"type-body ds:text-muted-foreground\">\n {medDate.format(m.date)}\n </span>\n {reached ? (\n <Badge variant=\"success\">\n {t('pregnancyDating.reached')}\n </Badge>\n ) : null}\n </span>\n </li>\n );\n })}\n </ul>\n </div>\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('pregnancyDating.empty')}\n </p>\n )}\n\n {schedule ? <AntenatalScheduleTimeline events={schedule} /> : null}\n\n {result && (insertVariant === 'copy' || onInsert) ? (\n <InsertButton\n onInsert={onInsert}\n variant={insertVariant}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.pregnancyDating'),\n icon: 'calendar-heart',\n highlight: longDate.format(result.dueDate),\n highlightToken: trimesterHighlightToken(result.trimester),\n brand: insertBrand,\n fields: [\n {\n icon: 'calendar',\n label: t('pregnancyDating.result.dueDateLabel'),\n value: longDate.format(result.dueDate),\n },\n {\n icon: 'clock',\n label: t('pregnancyDating.result.gestationLabel'),\n value: gaText(result.gestationalAge),\n },\n {\n icon: 'tag',\n label: t('pregnancyDating.result.trimesterLabel'),\n value: t(`pregnancyDating.trimester.${result.trimester}`),\n },\n ...(schedule\n ? buildScheduleInsertFields(schedule, t, (d) =>\n medDate.format(d),\n )\n : []),\n ],\n }}\n />\n ) : null}\n </div>\n );\n },\n);\n\nPregnancyDating.displayName = 'PregnancyDating';\n"],"names":["isoDate","pregnancyDatingAgent","handle","args","rootVariants","cva","DATE_LABEL_KEY","toIsoDate","d","format","fromIsoDate","iso","parseISO","CYCLE_LENGTH_RANGE","PregnancyDating","forwardRef","defaultMethod","defaultReferenceDate","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","showSchedule","defaultPlurality","defaultChorionicity","defaultRhNegative","defaultGdmRisk","scheduleOptions","id","width","className","ref","i18n","useTranslation","method","setMethod","useState","refDate","setRefDate","cycleLength","setCycleLength","DEFAULT_CYCLE_LENGTH","embryoAge","setEmbryoAge","crlMm","setCrlMm","scanDate","setScanDate","datingAdjustment","setDatingAdjustment","asOfDate","setAsOfDate","plurality","setPlurality","chorionicity","setChorionicity","rhNegative","setRhNegative","gdmRisk","setGdmRisk","today","useMemo","redating","redateByCrl","data","effectiveLmp","cycleForEdd","subDays","CONCEPTION_OFFSET_DAYS","GESTATION_DAYS","r","computeDueDate","gestationalMilestones","result","schedule","computeAntenatalSchedule","longDate","medDate","useEffect","liveRef","useRef","agentHandle","live","next","parsed","isAfter","days","now","parsedScan","mm","useAgentRegistration","chorionicityOptions","c","gaText","ga","jsxs","RadioGroup","jsx","Radio","FormField","DatePicker","NumberInput","Badge","Fragment","Select","Switch","Card","TRIMESTER_BADGE_VARIANT","m","reached","AntenatalScheduleTimeline","InsertButton","trimesterHighlightToken","buildScheduleInsertFields"],"mappings":";;;;;;;;;;;;;;;;;;;;AAiCA,MAAMA,IAAU;AAAA,EACd,MAAM;AAAA,EACN,SAAS;AACX,GAEaC,KAA4D;AAAA,EACvE,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,OAAO,KAAK;AAAA,YACxC,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,QAAQ;AAAA,QACnB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;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,EAAE,MAAM,EAAE,QAAQ,MAAA,GAAS,MAAM,mCAAA;AAAA,MAAmC;AAAA,MAEtE,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CACNA,GACAC,MACGD,EAAO,UAAUC,EAAK,MAAM;AAAA,IAAA;AAAA,IAEnC,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,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,CAACE,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,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,CAACD,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,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,CAACD,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,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,CACNE,GACAC,MACGD,EAAO,OAAOC,CAAI;AAAA,IAAA;AAAA,IAEzB,uBAAuB;AAAA,MACrB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,QACV,MAAM;AAAA,QACN,YAAY;AAAA,UACV,MAAM;AAAA,YACJ,OAAO,CAAC,EAAE,MAAM,aAAa,EAAE,MAAM,QAAQ;AAAA,YAC7C,aACE;AAAA,UAAA;AAAA,QACJ;AAAA,QAEF,UAAU,CAAC,MAAM;AAAA,QACjB,sBAAsB;AAAA,MAAA;AAAA,MAExB,YAAY;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,MAAM,EAAA;AAAA,UACd,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,MAEF,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACD,GAAQC,MACfD,EAAO,oBAAoBC,EAAK,IAAI;AAAA,IAAA;AAAA,IAExC,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,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,CAACE,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,GC3QMC,KAAeC,GAAI,kDAAkD;AAAA,EACzE,UAAU;AAAA,IACR,OAAO,EAAE,MAAM,aAAa,MAAM,iBAAA;AAAA,EAAiB;AAAA,EAErD,iBAAiB,EAAE,OAAO,OAAA;AAC5B,CAAC,GAMKC,KAA+C;AAAA,EACnD,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,KAAK;AACP,GAoBMC,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,GA8G9BC,KAAkBC;AAAA,EAC7B,CACE;AAAA,IACE,eAAAC,IAAgB;AAAA,IAChB,sBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,eAAAC,IAAgB;AAAA,IAChB,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,aAAAC;AAAA,IACA,cAAAC,IAAe;AAAA,IACf,kBAAAC,KAAmB;AAAA,IACnB,qBAAAC,KAAsB;AAAA,IACtB,mBAAAC,KAAoB;AAAA,IACpB,gBAAAC;AAAA,IACA,iBAAAC;AAAA,IACA,IAAAC;AAAA,IACA,OAAAC;AAAA,IACA,WAAAC;AAAA,EAAA,GAEFC,OACG;AACH,UAAM,EAAE,GAAG,MAAAC,MAASC,GAAe,IAAI,GAEjC,CAACC,GAAQC,CAAS,IAAIC,EAAuBtB,CAAa,GAC1D,CAACuB,GAASC,CAAU,IAAIF;AAAA,MAC5BrB;AAAA,IAAA,GAEI,CAACwB,GAAaC,CAAc,IAAIJ;AAAA,MACpCK;AAAA,IAAA,GAEI,CAACC,GAAWC,CAAY,IAAIP,EAAoB,CAAC,GAEjD,CAACQ,GAAOC,EAAQ,IAAIT,EAAwB,IAAI,GAChD,CAACU,GAAUC,EAAW,IAAIX,EAA2B,MAAS,GAC9D,CAACY,GAAkBC,EAAmB,IAAIb;AAAA,MAC9C;AAAA,IAAA,GAGI,CAACc,GAAUC,EAAW,IAAIf,EAAe,MAAM,oBAAI,MAAM,GACzD,CAACgB,GAAWC,EAAY,IAAIjB,EAAoBb,EAAgB,GAChE,CAAC+B,GAAcC,EAAe,IAClCnB,EAAuBZ,EAAmB,GACtC,CAACgC,GAAYC,EAAa,IAAIrB,EAAkBX,EAAiB,GACjE,CAACiC,GAASC,EAAU,IAAIvB;AAAA,MAC5BV,MAAkB;AAAA,IAAA,GAIdkC,KAAQC,EAAQ,0BAAU,KAAA,GAAQ,CAAA,CAAE,GAGpCC,IAAWD,EAAQ,MACnB3B,MAAW,SAAS,CAACG,KAAWO,MAAU,QAAQ,CAACE,IAC9C,OAEFiB,GAAY,EAAE,KAAK1B,GAAS,UAAAS,GAAU,OAAAF,GAAO,GACnD,CAACV,GAAQG,GAASO,GAAOE,CAAQ,CAAC,GAE/BkB,IAAOH,EAAQ,MAAM;AACzB,UAAI,CAACxB,EAAS,QAAO;AAGrB,UAAI4B,GACAC,IAAczB;AAClB,MAAIP,MAAW,SACb+B,IAAe5B,GACf6B,IAAc3B,KAAeE,KACpBP,MAAW,eACpB+B,IAAeE,EAAQ9B,GAAS+B,EAAsB,IAC7ClC,MAAW,QACpB+B,IAAeE,EAAQ9B,GAASK,IAAY0B,EAAsB,IAElEH,IAAeE,EAAQ9B,GAASgC,EAAc,GAK5CnC,MAAW,UAAS4B,KAAA,QAAAA,EAAU,YAChCG,IAAeH,EAAS,kBACxBI,IAAczB,KACLO,MACTiB,IAAeE,EAAQF,GAAcjB,CAAgB;AAGvD,YAAMsB,IAAIC;AAAA,QACR,EAAE,QAAQ,OAAO,MAAMN,GAAc,aAAaC,EAAA;AAAA,QAClDhB;AAAA,MAAA;AAEF,aAAO;AAAA,QACL,QAAQ;AAAA,UACN,SAASoB,EAAE;AAAA,UACX,kBAAkBA,EAAE;AAAA,UACpB,gBAAgBA,EAAE;AAAA,UAClB,WAAWA,EAAE;AAAA,QAAA;AAAA,QAEf,YAAYE,GAAsBF,EAAE,gBAAgB;AAAA,MAAA;AAAA,IAExD,GAAG;AAAA,MACDpC;AAAA,MACAG;AAAA,MACAE;AAAA,MACAG;AAAA,MACAoB;AAAA,MACAd;AAAA,MACAE;AAAA,IAAA,CACD,GAEKuB,KAAST,KAAA,gBAAAA,EAAM,WAAU,MAEzBU,IAAWb,EAAQ,MACnB,CAACvC,KAAgB,CAACmD,IAAe,OAC9BE,GAAyBF,EAAO,kBAAkB;AAAA,MACvD,GAAG9C;AAAA,MACH,OAAOuB;AAAA,MACP,WAAAE;AAAA,MACA,cAAAE;AAAA,MACA,YAAAE;AAAA,MACA,SAASE,MAAY,SAAS,SAAYA;AAAA,IAAA,CAC3C,GACA;AAAA,MACDpC;AAAA,MACAmD;AAAA,MACAvB;AAAA,MACAvB;AAAA,MACAyB;AAAA,MACAE;AAAA,MACAE;AAAA,MACAE;AAAA,IAAA,CACD,GAEKkB,IAAWf;AAAA,MACf,MAAM,IAAI,KAAK,eAAe7B,EAAK,UAAU,EAAE,WAAW,QAAQ;AAAA,MAClE,CAACA,EAAK,QAAQ;AAAA,IAAA,GAEV6C,KAAUhB;AAAA,MACd,MAAM,IAAI,KAAK,eAAe7B,EAAK,UAAU,EAAE,WAAW,UAAU;AAAA,MACpE,CAACA,EAAK,QAAQ;AAAA,IAAA;AAGhB,IAAA8C,GAAU,MAAM;AACd,MAAA9D,KAAA,QAAAA,EAAiByD;AAAA,IACnB,GAAG,CAACA,GAAQzD,CAAc,CAAC;AAG3B,UAAM+D,IAAUC,GAAO;AAAA,MACrB,QAAA9C;AAAA,MACA,SAAAG;AAAA,MACA,aAAAE;AAAA,MACA,WAAAG;AAAA,MACA,OAAAE;AAAA,MACA,UAAAE;AAAA,MACA,kBAAAE;AAAA,MACA,UAAAE;AAAA,MACA,QAAAuB;AAAA,IAAA,CACD;AACD,IAAAM,EAAQ,UAAU;AAAA,MAChB,QAAA7C;AAAA,MACA,SAAAG;AAAA,MACA,aAAAE;AAAA,MACA,WAAAG;AAAA,MACA,OAAAE;AAAA,MACA,UAAAE;AAAA,MACA,kBAAAE;AAAA,MACA,UAAAE;AAAA,MACA,QAAAuB;AAAA,IAAA;AAGF,UAAMQ,KAAcpB;AAAA,MAClB,OAAO;AAAA,QACL,WAAW,MAAM;AACf,gBAAMqB,IAAOH,EAAQ;AACrB,iBAAO;AAAA,YACL,QAAQG,EAAK;AAAA,YACb,eAAeA,EAAK,UAAU7E,EAAU6E,EAAK,OAAO,IAAI;AAAA,YACxD,aAAaA,EAAK;AAAA,YAClB,WAAWA,EAAK;AAAA,YAChB,OAAOA,EAAK;AAAA,YACZ,UAAUA,EAAK,WAAW7E,EAAU6E,EAAK,QAAQ,IAAI;AAAA,YACrD,kBAAkBA,EAAK;AAAA,YACvB,UAAU7E,EAAU6E,EAAK,QAAQ;AAAA,UAAA;AAAA,QAErC;AAAA,QACA,WAAW,MAAM;AACf,gBAAMZ,IAAIS,EAAQ,QAAQ;AAC1B,iBAAKT,IACE;AAAA,YACL,SAASjE,EAAUiE,EAAE,OAAO;AAAA,YAC5B,kBAAkBjE,EAAUiE,EAAE,gBAAgB;AAAA,YAC9C,gBAAgBA,EAAE,iBAAiB,EAAE,GAAGA,EAAE,mBAAmB;AAAA,YAC7D,WAAWA,EAAE;AAAA,UAAA,IALA;AAAA,QAOjB;AAAA,QACA,WAAW,CAACa,MAERA,MAAS,SACTA,MAAS,gBACTA,MAAS,SACTA,MAAS,QAEF,MAEThD,EAAUgD,CAAI,GACP;AAAA,QAET,kBAAkB,CAACrF,MAAY;AAC7B,cAAIA,MAAY;AACd,mBAAAwC,EAAW,MAAS,GACb;AAET,gBAAM8C,IAAS5E,EAAYV,CAAO;AAGlC,iBAFI,CAACsF,KAEDL,EAAQ,QAAQ,WAAW,SAASM,EAAQD,GAAQ,oBAAI,KAAA,CAAM,IACzD,MAET9C,EAAW8C,CAAM,GACV;AAAA,QACT;AAAA,QACA,gBAAgB,CAACE,MAEbA,MAAS,QACT,EACE,OAAO,SAASA,CAAI,KACpBA,KAAQ3E,EAAmB,OAC3B2E,KAAQ3E,EAAmB,OAGtB,MAET6B,EAAe8C,CAAI,GACZ;AAAA,QAET,cAAc,CAACA,MACTA,MAAS,KAAKA,MAAS,IAAU,MACrC3C,EAAa2C,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,kBAAM7E,IAAIE,EAAY2E,EAAK,QAAQ;AACnC,gBAAI,CAAC7E,KAAK+E,EAAQ/E,GAAGiF,CAAG,EAAG,QAAO;AAClC,YAAAC,IAAalF;AAAA,UACf;AACA,iBAAI,WAAW6E,KAAMtC,GAASsC,EAAK,SAAS,IAAI,GAC5C,cAAcA,KAAMpC,GAAYyC,CAAU,GACvC;AAAA,QACT;AAAA,QACA,qBAAqB,CAACF,MAChBA,MAAS,QAAQ,CAAC,OAAO,UAAUA,CAAI,IAAU,MACrDrC,GAAoBqC,CAAI,GACjB;AAAA,QAET,aAAa,CAACxF,MAAY;AACxB,gBAAMsF,IAAS5E,EAAYV,CAAO;AAClC,iBAAKsF,KACLjC,GAAYiC,CAAM,GACX,MAFa;AAAA,QAGtB;AAAA,MAAA;AAAA,MAEF,CAAA;AAAA,IAAC;AAEH,IAAAM,GAAqB3F,IAAsBkF,IAAarD,CAAE;AAE1D,UAAM+D,KAAsB9B;AAAA,MAC1B,MAEI;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA,EAEF,IAAI,CAAC+B,OAAO;AAAA,QACZ,OAAOA;AAAA,QACP,OAAO,EAAE,kCAAkCA,CAAC,EAAE;AAAA,MAAA,EAC9C;AAAA,MACJ,CAAC,CAAC;AAAA,IAAA,GAGEC,IAAS,CAACC,MACdA,IACI,EAAE,oCAAoC;AAAA,MACpC,OAAOA,EAAG;AAAA,MACV,MAAMA,EAAG;AAAA,IAAA,CACV,IACD;AAEN,WACE,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAAhE;AAAA,QACA,kBAAe;AAAA,QACf,qBAAmBH;AAAA,QACnB,WAAW1B,GAAa,EAAE,OAAA2B,IAAO,WAAAC,IAAW;AAAA,QAE5C,UAAA;AAAA,UAAA,gBAAAiE;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,OAAO,EAAE,8BAA8B;AAAA,cACvC,SAAQ;AAAA,cACR,OAAO9D;AAAA,cACP,eAAe,CAACiD,MAAShD,EAAUgD,CAAoB;AAAA,cAEvD,UAAA;AAAA,gBAAA,gBAAAc,EAACC,KAAM,OAAO,EAAE,4BAA4B,GAAG,OAAM,OAAM;AAAA,gBAC3D,gBAAAD;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,OAAO,EAAE,mCAAmC;AAAA,oBAC5C,OAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEPA,GAAA,EAAM,OAAO,EAAE,4BAA4B,GAAG,OAAM,OAAM;AAAA,kCAC1DA,GAAA,EAAM,OAAO,EAAE,4BAA4B,GAAG,OAAM,MAAA,CAAM;AAAA,cAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAG7D,gBAAAH,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA;AAAA,YAAA,gBAAAE,EAACE,KAAU,OAAO,EAAE/F,GAAe8B,CAAM,CAAC,GACxC,UAAA,gBAAA+D;AAAA,cAACG;AAAA,cAAA;AAAA,gBACC,OAAO/D;AAAA,gBACP,UAAUC;AAAA,gBACV,SAASJ,MAAW,QAAQ,SAAY0B;AAAA,cAAA;AAAA,YAAA,GAE5C;AAAA,YAEC1B,MAAW,SACV,gBAAA+D;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,6BAA6B;AAAA,gBACtC,aAAa,EAAE,iCAAiC;AAAA,gBAEhD,UAAA,gBAAAF;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAK1F,EAAmB;AAAA,oBACxB,KAAKA,EAAmB;AAAA,oBACxB,OAAO4B;AAAA,oBACP,UAAUC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,YAIHN,MAAW,SACV,gBAAA6D;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,2BAA2B;AAAA,gBACpC,SAAQ;AAAA,gBACR,OAAO,OAAOtD,CAAS;AAAA,gBACvB,eAAe,CAACyC,MAASxC,EAAa,OAAOwC,CAAI,CAAc;AAAA,gBAE/D,UAAA;AAAA,kBAAA,gBAAAc,EAACC,KAAM,OAAO,EAAE,sBAAsB,GAAG,OAAM,KAAI;AAAA,oCAClDA,GAAA,EAAM,OAAO,EAAE,sBAAsB,GAAG,OAAM,IAAA,CAAI;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAIvD,gBAAAD;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,kCAAkC;AAAA,gBAC3C,aAAa,EAAE,sCAAsC;AAAA,gBAErD,UAAA,gBAAAF;AAAA,kBAACI;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,OAAOrD;AAAA,oBACP,UAAUC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA;AAAA,YAGF,gBAAAgD;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,0BAA0B;AAAA,gBACnC,aAAa,EAAE,8BAA8B;AAAA,gBAE7C,UAAA,gBAAAF;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,OAAOlD;AAAA,oBACP,UAAU,CAAC5C,MAAMA,KAAK6C,GAAY7C,CAAC;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACrC;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAEC4B,MAAW,QACV,gBAAA6D,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,qBAAqB;AAAA,kBAC9B,aAAa,EAAE,yBAAyB;AAAA,kBAExC,UAAA,gBAAAF;AAAA,oBAACI;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,KAAK;AAAA,sBACL,MAAM;AAAA,sBACN,OAAOzD;AAAA,sBACP,UAAUC;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACZ;AAAA,cAAA;AAAA,cAEF,gBAAAoD,EAACE,GAAA,EAAU,OAAO,EAAE,0BAA0B,GAC5C,UAAA,gBAAAF;AAAA,gBAACG;AAAA,gBAAA;AAAA,kBACC,OAAOtD;AAAA,kBACP,UAAUC;AAAA,kBACV,SAASa;AAAA,gBAAA;AAAA,cAAA,EACX,CACF;AAAA,YAAA,GACF;AAAA,YACCE,IACC,gBAAAiC,EAAC,OAAA,EAAI,WAAU,mEACb,UAAA;AAAA,cAAA,gBAAAE,EAACK,GAAA,EAAM,SAASxC,EAAS,UAAU,YAAY,WAC5C,UAAAA,EAAS,UACN,EAAE,2BAA2B;AAAA,gBAC3B,MAAMA,EAAS;AAAA,cAAA,CAChB,IACD,EAAE,4BAA4B,GACpC;AAAA,cACEA,EAAS,aAIP,OAHF,gBAAAmC,EAAC,QAAA,EAAK,WAAU,sCACb,UAAA,EAAE,+BAA+B,EAAA,CACpC;AAAA,YACE,EAAA,CACN,IACE;AAAA,UAAA,EAAA,CACN,IACE;AAAA,UAEH3E,IACC,gBAAAyE,EAAAQ,IAAA,EACE,UAAA;AAAA,YAAA,gBAAAR;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,mCAAmC;AAAA,gBAC5C,SAAQ;AAAA,gBACR,OAAO5C;AAAA,gBACP,eAAe,CAAC+B,MAAS9B,GAAa8B,CAAiB;AAAA,gBAEvD,UAAA;AAAA,kBAAA,gBAAAc;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,OAAO,EAAE,uCAAuC;AAAA,sBAChD,OAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAER,gBAAAD;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,OAAO,EAAE,kCAAkC;AAAA,sBAC3C,OAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAER,gBAAAD;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,OAAO,EAAE,qCAAqC;AAAA,sBAC9C,OAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACR;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD9C,MAAc,cACb,gBAAA6C,EAACE,KAAU,OAAO,EAAE,sCAAsC,GACxD,UAAA,gBAAAF;AAAA,cAACO;AAAA,cAAA;AAAA,gBACC,SAASb;AAAA,gBACT,OAAOrC;AAAA,gBACP,eAAe,CAAC6B,MACd5B,GAAgB4B,CAAoB;AAAA,cAAA;AAAA,YAAA,GAG1C,IACE;AAAA,YAEJ,gBAAAc;AAAA,cAACQ;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,8BAA8B;AAAA,gBACvC,SAASjD;AAAA,gBACT,iBAAiBC;AAAA,cAAA;AAAA,YAAA;AAAA,YAGnB,gBAAAsC;AAAA,cAACC;AAAA,cAAA;AAAA,gBACC,OAAO,EAAE,iCAAiC;AAAA,gBAC1C,SAAQ;AAAA,gBACR,OAAOtC;AAAA,gBACP,eAAe,CAACyB,MAASxB,GAAWwB,CAAwB;AAAA,gBAE5D,UAAA;AAAA,kBAAA,gBAAAc,EAACC,KAAM,OAAO,EAAE,gCAAgC,GAAG,OAAM,QAAO;AAAA,kBAChE,gBAAAD;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,OAAO,EAAE,kCAAkC;AAAA,sBAC3C,OAAM;AAAA,oBAAA;AAAA,kBAAA;AAAA,oCAEPA,GAAA,EAAM,OAAO,EAAE,gCAAgC,GAAG,OAAM,OAAA,CAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAClE,EAAA,CACF,IACE;AAAA,UAEJ,gBAAAD,EAAC,KAAA,EAAE,WAAU,cAAa,MAAK,UAAS,aAAU,UAC/C,UAAAxB,IACG,GAAG,EAAE,qCAAqC,CAAC,KAAKG,EAAS;AAAA,YACvDH,EAAO;AAAA,UAAA,CACR,KAAK,EAAE,uCAAuC,CAAC,KAAKoB;AAAA,YACnDpB,EAAO;AAAA,UAAA,CACR,MACD,IACN;AAAA,UAECT,KAAQS,IACP,gBAAAwB,EAACS,IAAA,EAAK,SAAQ,YACZ,UAAA,gBAAAX,EAACW,GAAK,MAAL,EAAU,WAAU,kDAKnB,UAAA;AAAA,YAAA,gBAAAX,EAAC,MAAA,EAAG,WAAU,iGACZ,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,+EACb,UAAA;AAAA,gBAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,qCAAqC,GAC1C;AAAA,gBACA,gBAAAA,EAAC,QAAG,WAAU,kCACX,YAAS,OAAOxB,EAAO,OAAO,EAAA,CACjC;AAAA,cAAA,GACF;AAAA,cACA,gBAAAsB,EAAC,OAAA,EAAI,WAAU,iEACb,UAAA;AAAA,gBAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,uCAAuC,GAC5C;AAAA,kCACC,MAAA,EAAG,WAAU,gCACX,UAAAJ,EAAOpB,EAAO,cAAc,EAAA,CAC/B;AAAA,cAAA,GACF;AAAA,cACA,gBAAAsB,EAAC,OAAA,EAAI,WAAU,iEACb,UAAA;AAAA,gBAAA,gBAAAE,EAAC,MAAA,EAAG,WAAU,uCACX,UAAA,EAAE,uCAAuC,GAC5C;AAAA,kCACC,MAAA,EACC,UAAA,gBAAAA;AAAA,kBAACK;AAAA,kBAAA;AAAA,oBACC,SAASK,GAAwBlC,EAAO,SAAS;AAAA,oBACjD,MAAK;AAAA,oBAEJ,UAAA,EAAE,6BAA6BA,EAAO,SAAS,EAAE;AAAA,kBAAA;AAAA,gBAAA,EACpD,CACF;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YAEA,gBAAAsB,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,uCACb,UAAA,EAAE,iCAAiC,GACtC;AAAA,cACA,gBAAAA,EAAC,QAAG,WAAU,kDACX,YAAK,WAAW,IAAI,CAACW,MAAM;AAC1B,sBAAMC,IAAUxB,EAAQnC,GAAU0D,EAAE,IAAI;AACxC,uBACE,gBAAAb;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,WAAU;AAAA,oBAEV,UAAA;AAAA,sBAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,gCACb,UAAA,EAAE,6BAA6BW,EAAE,GAAG,EAAE,EAAA,CACzC;AAAA,sBACA,gBAAAb,EAAC,QAAA,EAAK,WAAU,sDACd,UAAA;AAAA,wBAAA,gBAAAE,EAAC,UAAK,WAAU,sCACb,aAAQ,OAAOW,EAAE,IAAI,GACxB;AAAA,wBACCC,sBACEP,GAAA,EAAM,SAAQ,WACZ,UAAA,EAAE,yBAAyB,GAC9B,IACE;AAAA,sBAAA,EAAA,CACN;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAfKM,EAAE;AAAA,gBAAA;AAAA,cAkBb,CAAC,EAAA,CACH;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF,EAAA,CACF,IAEA,gBAAAX,EAAC,KAAA,EAAE,WAAU,sCACV,UAAA,EAAE,uBAAuB,EAAA,CAC5B;AAAA,UAGDvB,IAAW,gBAAAuB,EAACa,IAAA,EAA0B,QAAQpC,GAAU,IAAK;AAAA,UAE7DD,MAAWvD,MAAkB,UAAUD,KACtC,gBAAAgF;AAAA,YAACc;AAAA,YAAA;AAAA,cACC,UAAA9F;AAAA,cACA,SAASC;AAAA,cACT,QAAAC;AAAA,cACA,SAAAC;AAAA,cACA,MAAM;AAAA,gBACJ,OAAO,EAAE,8BAA8B;AAAA,gBACvC,MAAM;AAAA,gBACN,WAAWwD,EAAS,OAAOH,EAAO,OAAO;AAAA,gBACzC,gBAAgBuC,GAAwBvC,EAAO,SAAS;AAAA,gBACxD,OAAOpD;AAAA,gBACP,QAAQ;AAAA,kBACN;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO,EAAE,qCAAqC;AAAA,oBAC9C,OAAOuD,EAAS,OAAOH,EAAO,OAAO;AAAA,kBAAA;AAAA,kBAEvC;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO,EAAE,uCAAuC;AAAA,oBAChD,OAAOoB,EAAOpB,EAAO,cAAc;AAAA,kBAAA;AAAA,kBAErC;AAAA,oBACE,MAAM;AAAA,oBACN,OAAO,EAAE,uCAAuC;AAAA,oBAChD,OAAO,EAAE,6BAA6BA,EAAO,SAAS,EAAE;AAAA,kBAAA;AAAA,kBAE1D,GAAIC,IACAuC;AAAA,oBAA0BvC;AAAA,oBAAU;AAAA,oBAAG,CAACpE,MACtCuE,GAAQ,OAAOvE,CAAC;AAAA,kBAAA,IAElB,CAAA;AAAA,gBAAC;AAAA,cACP;AAAA,YACF;AAAA,UAAA,IAEA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AAEAM,GAAgB,cAAc;"}
@@ -5,7 +5,7 @@ import { useTranslation as ne } from "react-i18next";
5
5
  import { u as F } from "./use-controllable-state-BiY4xTzM.js";
6
6
  import { c as L, u as de } from "./use-dismissed-CTOWqA0e.js";
7
7
  import { u as le } from "./registry-DvAUVLHh.js";
8
- import { A as z } from "./alert-9kEwDza3.js";
8
+ import { A as z } from "./alert-C4WKViaS.js";
9
9
  import { C as ce, b as pe, a as ue } from "./collapsible-DVPM46bq.js";
10
10
  import { L as me } from "./live-region-C41SO3cA.js";
11
11
  import { P as ge } from "./progress-D_g_Sl2g.js";
@@ -276,4 +276,4 @@ export {
276
276
  Ce as P,
277
277
  ve as p
278
278
  };
279
- //# sourceMappingURL=progress-notice-DiHWZ8Ms.js.map
279
+ //# sourceMappingURL=progress-notice-F7ao70ZP.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"progress-notice-DiHWZ8Ms.js","sources":["../../src/components/progress-notice/progress-notice.agent.ts","../../src/components/progress-notice/progress-notice.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter: ProgressNotice. */\n/* */\n/* One notice for a long first data import: a determinate bar and an */\n/* optional details list. State is counts and flags only, never item */\n/* names. Dismissal is the inner Alert's own close button (self-owned, */\n/* like Alert); the details list opens through `set_details_open`. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { ProgressNoticeHandle } from './progress-notice';\n\nexport const progressNoticeAgent: AgentAdapter<ProgressNoticeHandle> = {\n id: 'progress-notice',\n capabilities: ['expand', 'dismiss'],\n state: {\n value: {\n type: 'number',\n descriptionKey: 'ui.agent.progressNotice.state.value',\n description: 'Progress so far, in the units of max.',\n read: (handle) => handle.getState().value,\n },\n max: {\n type: 'number',\n descriptionKey: 'ui.agent.progressNotice.state.max',\n description: 'The value at which the import is done.',\n read: (handle) => handle.getState().max,\n },\n complete: {\n type: 'boolean',\n descriptionKey: 'ui.agent.progressNotice.state.complete',\n description:\n 'True once every item is ready or the value has reached max.',\n read: (handle) => handle.getState().complete,\n },\n readyCount: {\n type: 'number',\n descriptionKey: 'ui.agent.progressNotice.state.readyCount',\n description: 'How many items in the details list are ready.',\n read: (handle) => handle.getState().readyCount,\n },\n itemCount: {\n type: 'number',\n descriptionKey: 'ui.agent.progressNotice.state.itemCount',\n description: 'How many items the details list has (0: no list).',\n read: (handle) => handle.getState().itemCount,\n },\n detailsOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.progressNotice.state.detailsOpen',\n description: 'Whether the details list is open.',\n read: (handle) => handle.getState().detailsOpen,\n },\n },\n actions: {\n set_details_open: {\n // Shows or hides rows already on the page; changes no data.\n safety: 'read',\n argsType: 'open',\n argsSchema: {\n type: 'object',\n properties: {\n open: {\n type: 'boolean',\n description: 'True to open the details list, false to close it.',\n },\n },\n required: ['open'],\n },\n returns: 'boolean (applied)',\n returnsSchema: {\n type: 'boolean',\n description: 'True when applied; false when the notice has no list.',\n },\n idempotent: true,\n errors: ['No details list (itemCount is 0): returns false.'],\n descriptionKey: 'ui.agent.progressNotice.actions.setDetailsOpen',\n description: 'Open or close the details list of the import.',\n invoke: (handle, args: { open: boolean }) =>\n handle.setDetailsOpen(args.open),\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'progress-notice',\n description:\n 'Marks the ProgressNotice. Also carries data-complete=\"true\" once the import is complete. The notice inside is a kit Alert; its close control is [data-alert-dismiss].',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-item-id',\n sourceProp: 'items[].id',\n description:\n 'Each row of the details list, from ProgressNoticeItem.id. A ready row also carries data-ready=\"true\".',\n },\n },\n};\n","/* ------------------------------------------------------------------ */\n/* ProgressNotice: one notice for a long first data import. */\n/* */\n/* Built on the Alert surface, so it reads as one of the kit's */\n/* notices: a title, a determinate Progress bar with a summary line, */\n/* and an optional expandable list with one row per item (for example */\n/* per practice). The Alert is not a live region; milestones (an item */\n/* becoming ready, the whole import completing) go through one polite */\n/* LiveRegion instead, so a progress tick is never announced. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown, CircleCheck, CircleDashed } from 'lucide-react';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useDismissed, usableDismissKey } from '../../hooks/use-dismissed';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { Alert } from '../alert/alert';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../collapsible/collapsible';\nimport { LiveRegion } from '../live-region/live-region';\nimport { Progress } from '../progress/progress';\nimport { progressNoticeAgent } from './progress-notice.agent';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface ProgressNoticeItem {\n /** Stable key. */\n id: string;\n /** What is being prepared, for example a practice's name. Translated. */\n name: string;\n /**\n * One line on where it stands, for example \"Money ready, statistics 6\n * of 24 months\". Translated.\n */\n status?: string;\n /** True once this item is ready. */\n ready: boolean;\n}\n\nexport interface ProgressNoticeHandle {\n /** What the notice shows now: counts and flags, no item names. */\n getState: () => {\n value: number;\n max: number;\n complete: boolean;\n readyCount: number;\n itemCount: number;\n detailsOpen: boolean;\n };\n /** Open or close the details list. False when there is no list. */\n setDetailsOpen: (open: boolean) => boolean;\n}\n\nexport interface ProgressNoticeProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title' | 'role' | 'children'\n> {\n /** Heading, for example \"Preparing your figures\". Translated. */\n title: string;\n /**\n * Heading level of the title. Set it one below the heading that\n * introduces the page or board. Unset, it is Alert's default (h5).\n */\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n /** Progress so far, in the units of `max`. */\n value: number;\n /** The value at which the import is done. Defaults to 100. */\n max?: number;\n /**\n * One line under the title, for example \"2 of 4 practices ready\".\n * Translated. Also the progress bar's value text.\n */\n summary?: string;\n /** One row each in the expandable details list. Omit for no list. */\n items?: ProgressNoticeItem[];\n /** Controlled: whether the details list is open. */\n detailsOpen?: boolean;\n /** Uncontrolled: whether the details list starts open. Defaults to false. */\n defaultDetailsOpen?: boolean;\n /** Fires when the details list opens or closes. */\n onDetailsOpenChange?: (open: boolean) => void;\n /** Controlled visibility. Defaults to shown. */\n open?: boolean;\n /** Fires when the user dismisses the notice (`dismissible`). */\n onOpenChange?: (open: boolean) => void;\n /** Shows the close button. Defaults to true when `dismissKey` is set. */\n dismissible?: boolean;\n /**\n * Remember a dismissal in this browser, as on Alert: the notice stays\n * hidden for this key, and a new key shows it again. Put the import in\n * the key (for example its id). Never personal or patient data.\n */\n dismissKey?: string;\n /** How long a `dismissKey` dismissal lasts, in ms (default 30 days). */\n dismissLifetimeMs?: number;\n /**\n * Fires once each time the import becomes complete: every item is\n * ready, or `value` reaches `max`. Also on mount when it already is.\n */\n onComplete?: () => void;\n /**\n * Announced when the import completes. Translated. Defaults to the\n * kit's \"Everything is ready.\"\n */\n completeAnnouncement?: string;\n /** Opaque instance id, emitted as `data-component-id` for agents. */\n id?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst progressNoticeVariants = cva('ds:block');\n\n// The details toggle: text in the notice's own colour, like Alert's \"Read\n// more\", but a full --min-target-size tall, since it stands on its own row.\nconst detailsToggleVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] ds:self-start',\n 'ds:min-h-[var(--min-target-size)] ds:rounded-[var(--radius-sm)]',\n 'type-body-sm ds:font-semibold ds:text-current',\n 'ds:underline ds:underline-offset-2 ds:hover:no-underline',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:[&_svg]:size-4 ds:[&_svg]:shrink-0',\n 'ds:[&_svg]:transition-transform ds:[&_svg]:duration-[var(--animation-duration)] ds:motion-reduce:[&_svg]:transition-none',\n 'ds:data-[state=open]:[&_svg]:rotate-180',\n ].join(' '),\n);\n\nconst itemRowVariants = cva(\n 'ds:flex ds:items-start ds:gap-[var(--spacing-sm)] ds:[&_svg]:mt-0.5 ds:[&_svg]:size-4 ds:[&_svg]:shrink-0',\n);\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const ProgressNotice = forwardRef<HTMLDivElement, ProgressNoticeProps>(\n (\n {\n title,\n headingLevel,\n value,\n max = 100,\n summary,\n items,\n detailsOpen: detailsOpenProp,\n defaultDetailsOpen = false,\n onDetailsOpenChange,\n open: openProp,\n onOpenChange,\n dismissKey: dismissKeyProp,\n dismissLifetimeMs,\n dismissible = usableDismissKey(dismissKeyProp) !== undefined,\n onComplete,\n completeAnnouncement,\n id,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const dismissKey = usableDismissKey(dismissKeyProp);\n const [openRaw, setOpen] = useControllableState<boolean>({\n value: openProp,\n defaultValue: true,\n onChange: onOpenChange,\n });\n const isOpen = openRaw ?? true;\n const { dismissed } = useDismissed(dismissKey);\n const [detailsOpenRaw, setDetailsOpen] = useControllableState<boolean>({\n value: detailsOpenProp,\n defaultValue: defaultDetailsOpen,\n onChange: onDetailsOpenChange,\n });\n const detailsOpen = detailsOpenRaw ?? false;\n\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const safeValue = Number.isFinite(value) ? value : 0;\n const list = useMemo(() => items ?? [], [items]);\n const readyCount = list.filter((item) => item.ready).length;\n const complete =\n safeValue >= safeMax || (list.length > 0 && readyCount === list.length);\n\n /* ---- milestones ------------------------------------------------- */\n // Only transitions are announced: an item turning ready, then the\n // whole import completing. The first render announces nothing.\n const [message, setMessage] = useState('');\n const previousReadyRef = useRef<Map<string, boolean> | null>(null);\n const completedRef = useRef(false);\n const onCompleteRef = useRef(onComplete);\n onCompleteRef.current = onComplete;\n const completeText = completeAnnouncement ?? t('progressNotice.complete');\n const readySignature = list\n .map((item) => `${item.id}:${item.ready ? 1 : 0}`)\n .join('|');\n\n useEffect(() => {\n const previous = previousReadyRef.current;\n previousReadyRef.current = new Map(\n list.map((item) => [item.id, item.ready]),\n );\n if (complete) {\n if (completedRef.current) return;\n completedRef.current = true;\n onCompleteRef.current?.();\n if (previous !== null) setMessage(completeText);\n return;\n }\n if (completedRef.current) {\n // A new import started after a finished one: start afresh.\n completedRef.current = false;\n setMessage('');\n }\n if (previous === null) return;\n const newlyReady = list.filter(\n (item) => item.ready && previous.get(item.id) === false,\n );\n if (newlyReady.length > 0) {\n setMessage(\n newlyReady\n .map((item) => t('progressNotice.itemReady', { name: item.name }))\n .join(' '),\n );\n }\n // `readySignature` stands for `list`: a host passing a new array\n // with the same flags each render changes nothing here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [readySignature, complete, completeText, t]);\n\n /* ---- agent ------------------------------------------------------ */\n const stateRef = useRef({\n value: safeValue,\n max: safeMax,\n complete,\n readyCount,\n itemCount: list.length,\n detailsOpen,\n });\n stateRef.current = {\n value: safeValue,\n max: safeMax,\n complete,\n readyCount,\n itemCount: list.length,\n detailsOpen,\n };\n const hasList = list.length > 0;\n const hasListRef = useRef(hasList);\n hasListRef.current = hasList;\n const handle = useMemo<ProgressNoticeHandle>(\n () => ({\n getState: () => ({ ...stateRef.current }),\n setDetailsOpen: (next) => {\n if (!hasListRef.current) return false;\n setDetailsOpen(next);\n return true;\n },\n }),\n [setDetailsOpen],\n );\n useAgentRegistration(progressNoticeAgent, handle, id);\n\n if (!isOpen || dismissed) return null;\n\n return (\n <div\n ref={ref}\n data-component=\"progress-notice\"\n data-component-id={id}\n data-complete={complete || undefined}\n className={[progressNoticeVariants(), className]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n <Alert\n variant={complete ? 'success' : 'info'}\n // Not a live region: the summary changes with every tick. The\n // milestones below are announced on their own.\n announce=\"off\"\n open={isOpen}\n // With a key, the stored dismissal hides it: internal state stays\n // open, so a new key brings the notice back.\n onOpenChange={dismissKey === undefined ? setOpen : onOpenChange}\n dismissible={dismissible}\n dismissKey={dismissKey}\n dismissLifetimeMs={dismissLifetimeMs}\n >\n <Alert.Title\n as={headingLevel ? (`h${headingLevel}` as const) : undefined}\n >\n {title}\n </Alert.Title>\n <div className=\"ds:mt-[var(--spacing-sm)] ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <Progress\n value={safeValue}\n max={safeMax}\n ariaLabel={title}\n ariaValueText={summary}\n >\n <div className=\"ds:flex ds:items-baseline ds:justify-between ds:gap-[var(--spacing-sm)] type-body-sm\">\n {summary ? <span className=\"ds:min-w-0\">{summary}</span> : null}\n {/* In the notice's own colour, like the summary: Progress.Value\n is muted, which is too faint on a tinted surface. */}\n <span className=\"ds:ms-auto ds:shrink-0 ds:tabular-nums\">\n {new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format(Math.min(1, Math.max(0, safeValue / safeMax)))}\n </span>\n </div>\n </Progress>\n {hasList ? (\n <Collapsible open={detailsOpen} onOpenChange={setDetailsOpen}>\n <CollapsibleTrigger className={detailsToggleVariants()}>\n {detailsOpen\n ? t('progressNotice.hideDetails')\n : t('progressNotice.showDetails')}\n <ChevronDown aria-hidden=\"true\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- role=\"list\" is not redundant: WebKit drops list semantics under list-style: none */}\n <ul\n role=\"list\"\n className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0 ds:pb-[var(--spacing-xs)]\"\n >\n {list.map((item) => (\n <li\n key={item.id}\n data-item-id={item.id}\n data-ready={item.ready || undefined}\n className={itemRowVariants()}\n >\n {item.ready ? (\n <CircleCheck aria-hidden=\"true\" />\n ) : (\n <CircleDashed aria-hidden=\"true\" />\n )}\n <div className=\"ds:flex ds:min-w-0 ds:flex-col\">\n <span className=\"ds:font-medium type-body-sm\">\n {item.name}\n </span>\n {/* The icon's meaning, for screen readers. */}\n <span className=\"ds:sr-only\">\n {item.ready\n ? t('progressNotice.ready')\n : t('progressNotice.notReady')}\n </span>\n {item.status ? (\n <span className=\"type-body-sm\">{item.status}</span>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n </CollapsibleContent>\n </Collapsible>\n ) : null}\n </div>\n <LiveRegion politeness=\"polite\">{message}</LiveRegion>\n </Alert>\n </div>\n );\n },\n);\nProgressNotice.displayName = 'ProgressNotice';\n"],"names":["progressNoticeAgent","handle","args","progressNoticeVariants","cva","detailsToggleVariants","itemRowVariants","ProgressNotice","forwardRef","title","headingLevel","value","max","summary","items","detailsOpenProp","defaultDetailsOpen","onDetailsOpenChange","openProp","onOpenChange","dismissKeyProp","dismissLifetimeMs","dismissible","usableDismissKey","onComplete","completeAnnouncement","id","className","rest","ref","t","i18n","useTranslation","dismissKey","openRaw","setOpen","useControllableState","isOpen","dismissed","useDismissed","detailsOpenRaw","setDetailsOpen","detailsOpen","safeMax","safeValue","list","useMemo","readyCount","item","complete","message","setMessage","useState","previousReadyRef","useRef","completedRef","onCompleteRef","completeText","readySignature","useEffect","previous","_a","newlyReady","stateRef","hasList","hasListRef","next","useAgentRegistration","jsx","jsxs","Alert","Progress","Collapsible","CollapsibleTrigger","ChevronDown","CollapsibleContent","CircleCheck","CircleDashed","LiveRegion"],"mappings":"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"}
1
+ {"version":3,"file":"progress-notice-F7ao70ZP.js","sources":["../../src/components/progress-notice/progress-notice.agent.ts","../../src/components/progress-notice/progress-notice.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter: ProgressNotice. */\n/* */\n/* One notice for a long first data import: a determinate bar and an */\n/* optional details list. State is counts and flags only, never item */\n/* names. Dismissal is the inner Alert's own close button (self-owned, */\n/* like Alert); the details list opens through `set_details_open`. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { ProgressNoticeHandle } from './progress-notice';\n\nexport const progressNoticeAgent: AgentAdapter<ProgressNoticeHandle> = {\n id: 'progress-notice',\n capabilities: ['expand', 'dismiss'],\n state: {\n value: {\n type: 'number',\n descriptionKey: 'ui.agent.progressNotice.state.value',\n description: 'Progress so far, in the units of max.',\n read: (handle) => handle.getState().value,\n },\n max: {\n type: 'number',\n descriptionKey: 'ui.agent.progressNotice.state.max',\n description: 'The value at which the import is done.',\n read: (handle) => handle.getState().max,\n },\n complete: {\n type: 'boolean',\n descriptionKey: 'ui.agent.progressNotice.state.complete',\n description:\n 'True once every item is ready or the value has reached max.',\n read: (handle) => handle.getState().complete,\n },\n readyCount: {\n type: 'number',\n descriptionKey: 'ui.agent.progressNotice.state.readyCount',\n description: 'How many items in the details list are ready.',\n read: (handle) => handle.getState().readyCount,\n },\n itemCount: {\n type: 'number',\n descriptionKey: 'ui.agent.progressNotice.state.itemCount',\n description: 'How many items the details list has (0: no list).',\n read: (handle) => handle.getState().itemCount,\n },\n detailsOpen: {\n type: 'boolean',\n descriptionKey: 'ui.agent.progressNotice.state.detailsOpen',\n description: 'Whether the details list is open.',\n read: (handle) => handle.getState().detailsOpen,\n },\n },\n actions: {\n set_details_open: {\n // Shows or hides rows already on the page; changes no data.\n safety: 'read',\n argsType: 'open',\n argsSchema: {\n type: 'object',\n properties: {\n open: {\n type: 'boolean',\n description: 'True to open the details list, false to close it.',\n },\n },\n required: ['open'],\n },\n returns: 'boolean (applied)',\n returnsSchema: {\n type: 'boolean',\n description: 'True when applied; false when the notice has no list.',\n },\n idempotent: true,\n errors: ['No details list (itemCount is 0): returns false.'],\n descriptionKey: 'ui.agent.progressNotice.actions.setDetailsOpen',\n description: 'Open or close the details list of the import.',\n invoke: (handle, args: { open: boolean }) =>\n handle.setDetailsOpen(args.open),\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'progress-notice',\n description:\n 'Marks the ProgressNotice. Also carries data-complete=\"true\" once the import is complete. The notice inside is a kit Alert; its close control is [data-alert-dismiss].',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n item: {\n attr: 'data-item-id',\n sourceProp: 'items[].id',\n description:\n 'Each row of the details list, from ProgressNoticeItem.id. A ready row also carries data-ready=\"true\".',\n },\n },\n};\n","/* ------------------------------------------------------------------ */\n/* ProgressNotice: one notice for a long first data import. */\n/* */\n/* Built on the Alert surface, so it reads as one of the kit's */\n/* notices: a title, a determinate Progress bar with a summary line, */\n/* and an optional expandable list with one row per item (for example */\n/* per practice). The Alert is not a live region; milestones (an item */\n/* becoming ready, the whole import completing) go through one polite */\n/* LiveRegion instead, so a progress tick is never announced. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { ChevronDown, CircleCheck, CircleDashed } from 'lucide-react';\nimport { useControllableState } from '../../hooks/use-controllable-state';\nimport { useDismissed, usableDismissKey } from '../../hooks/use-dismissed';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { Alert } from '../alert/alert';\nimport {\n Collapsible,\n CollapsibleContent,\n CollapsibleTrigger,\n} from '../collapsible/collapsible';\nimport { LiveRegion } from '../live-region/live-region';\nimport { Progress } from '../progress/progress';\nimport { progressNoticeAgent } from './progress-notice.agent';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport interface ProgressNoticeItem {\n /** Stable key. */\n id: string;\n /** What is being prepared, for example a practice's name. Translated. */\n name: string;\n /**\n * One line on where it stands, for example \"Money ready, statistics 6\n * of 24 months\". Translated.\n */\n status?: string;\n /** True once this item is ready. */\n ready: boolean;\n}\n\nexport interface ProgressNoticeHandle {\n /** What the notice shows now: counts and flags, no item names. */\n getState: () => {\n value: number;\n max: number;\n complete: boolean;\n readyCount: number;\n itemCount: number;\n detailsOpen: boolean;\n };\n /** Open or close the details list. False when there is no list. */\n setDetailsOpen: (open: boolean) => boolean;\n}\n\nexport interface ProgressNoticeProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n 'title' | 'role' | 'children'\n> {\n /** Heading, for example \"Preparing your figures\". Translated. */\n title: string;\n /**\n * Heading level of the title. Set it one below the heading that\n * introduces the page or board. Unset, it is Alert's default (h5).\n */\n headingLevel?: 2 | 3 | 4 | 5 | 6;\n /** Progress so far, in the units of `max`. */\n value: number;\n /** The value at which the import is done. Defaults to 100. */\n max?: number;\n /**\n * One line under the title, for example \"2 of 4 practices ready\".\n * Translated. Also the progress bar's value text.\n */\n summary?: string;\n /** One row each in the expandable details list. Omit for no list. */\n items?: ProgressNoticeItem[];\n /** Controlled: whether the details list is open. */\n detailsOpen?: boolean;\n /** Uncontrolled: whether the details list starts open. Defaults to false. */\n defaultDetailsOpen?: boolean;\n /** Fires when the details list opens or closes. */\n onDetailsOpenChange?: (open: boolean) => void;\n /** Controlled visibility. Defaults to shown. */\n open?: boolean;\n /** Fires when the user dismisses the notice (`dismissible`). */\n onOpenChange?: (open: boolean) => void;\n /** Shows the close button. Defaults to true when `dismissKey` is set. */\n dismissible?: boolean;\n /**\n * Remember a dismissal in this browser, as on Alert: the notice stays\n * hidden for this key, and a new key shows it again. Put the import in\n * the key (for example its id). Never personal or patient data.\n */\n dismissKey?: string;\n /** How long a `dismissKey` dismissal lasts, in ms (default 30 days). */\n dismissLifetimeMs?: number;\n /**\n * Fires once each time the import becomes complete: every item is\n * ready, or `value` reaches `max`. Also on mount when it already is.\n */\n onComplete?: () => void;\n /**\n * Announced when the import completes. Translated. Defaults to the\n * kit's \"Everything is ready.\"\n */\n completeAnnouncement?: string;\n /** Opaque instance id, emitted as `data-component-id` for agents. */\n id?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst progressNoticeVariants = cva('ds:block');\n\n// The details toggle: text in the notice's own colour, like Alert's \"Read\n// more\", but a full --min-target-size tall, since it stands on its own row.\nconst detailsToggleVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] ds:self-start',\n 'ds:min-h-[var(--min-target-size)] ds:rounded-[var(--radius-sm)]',\n 'type-body-sm ds:font-semibold ds:text-current',\n 'ds:underline ds:underline-offset-2 ds:hover:no-underline',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[color:var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:[&_svg]:size-4 ds:[&_svg]:shrink-0',\n 'ds:[&_svg]:transition-transform ds:[&_svg]:duration-[var(--animation-duration)] ds:motion-reduce:[&_svg]:transition-none',\n 'ds:data-[state=open]:[&_svg]:rotate-180',\n ].join(' '),\n);\n\nconst itemRowVariants = cva(\n 'ds:flex ds:items-start ds:gap-[var(--spacing-sm)] ds:[&_svg]:mt-0.5 ds:[&_svg]:size-4 ds:[&_svg]:shrink-0',\n);\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const ProgressNotice = forwardRef<HTMLDivElement, ProgressNoticeProps>(\n (\n {\n title,\n headingLevel,\n value,\n max = 100,\n summary,\n items,\n detailsOpen: detailsOpenProp,\n defaultDetailsOpen = false,\n onDetailsOpenChange,\n open: openProp,\n onOpenChange,\n dismissKey: dismissKeyProp,\n dismissLifetimeMs,\n dismissible = usableDismissKey(dismissKeyProp) !== undefined,\n onComplete,\n completeAnnouncement,\n id,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation('ui');\n const dismissKey = usableDismissKey(dismissKeyProp);\n const [openRaw, setOpen] = useControllableState<boolean>({\n value: openProp,\n defaultValue: true,\n onChange: onOpenChange,\n });\n const isOpen = openRaw ?? true;\n const { dismissed } = useDismissed(dismissKey);\n const [detailsOpenRaw, setDetailsOpen] = useControllableState<boolean>({\n value: detailsOpenProp,\n defaultValue: defaultDetailsOpen,\n onChange: onDetailsOpenChange,\n });\n const detailsOpen = detailsOpenRaw ?? false;\n\n const safeMax = Number.isFinite(max) && max > 0 ? max : 100;\n const safeValue = Number.isFinite(value) ? value : 0;\n const list = useMemo(() => items ?? [], [items]);\n const readyCount = list.filter((item) => item.ready).length;\n const complete =\n safeValue >= safeMax || (list.length > 0 && readyCount === list.length);\n\n /* ---- milestones ------------------------------------------------- */\n // Only transitions are announced: an item turning ready, then the\n // whole import completing. The first render announces nothing.\n const [message, setMessage] = useState('');\n const previousReadyRef = useRef<Map<string, boolean> | null>(null);\n const completedRef = useRef(false);\n const onCompleteRef = useRef(onComplete);\n onCompleteRef.current = onComplete;\n const completeText = completeAnnouncement ?? t('progressNotice.complete');\n const readySignature = list\n .map((item) => `${item.id}:${item.ready ? 1 : 0}`)\n .join('|');\n\n useEffect(() => {\n const previous = previousReadyRef.current;\n previousReadyRef.current = new Map(\n list.map((item) => [item.id, item.ready]),\n );\n if (complete) {\n if (completedRef.current) return;\n completedRef.current = true;\n onCompleteRef.current?.();\n if (previous !== null) setMessage(completeText);\n return;\n }\n if (completedRef.current) {\n // A new import started after a finished one: start afresh.\n completedRef.current = false;\n setMessage('');\n }\n if (previous === null) return;\n const newlyReady = list.filter(\n (item) => item.ready && previous.get(item.id) === false,\n );\n if (newlyReady.length > 0) {\n setMessage(\n newlyReady\n .map((item) => t('progressNotice.itemReady', { name: item.name }))\n .join(' '),\n );\n }\n // `readySignature` stands for `list`: a host passing a new array\n // with the same flags each render changes nothing here.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [readySignature, complete, completeText, t]);\n\n /* ---- agent ------------------------------------------------------ */\n const stateRef = useRef({\n value: safeValue,\n max: safeMax,\n complete,\n readyCount,\n itemCount: list.length,\n detailsOpen,\n });\n stateRef.current = {\n value: safeValue,\n max: safeMax,\n complete,\n readyCount,\n itemCount: list.length,\n detailsOpen,\n };\n const hasList = list.length > 0;\n const hasListRef = useRef(hasList);\n hasListRef.current = hasList;\n const handle = useMemo<ProgressNoticeHandle>(\n () => ({\n getState: () => ({ ...stateRef.current }),\n setDetailsOpen: (next) => {\n if (!hasListRef.current) return false;\n setDetailsOpen(next);\n return true;\n },\n }),\n [setDetailsOpen],\n );\n useAgentRegistration(progressNoticeAgent, handle, id);\n\n if (!isOpen || dismissed) return null;\n\n return (\n <div\n ref={ref}\n data-component=\"progress-notice\"\n data-component-id={id}\n data-complete={complete || undefined}\n className={[progressNoticeVariants(), className]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n <Alert\n variant={complete ? 'success' : 'info'}\n // Not a live region: the summary changes with every tick. The\n // milestones below are announced on their own.\n announce=\"off\"\n open={isOpen}\n // With a key, the stored dismissal hides it: internal state stays\n // open, so a new key brings the notice back.\n onOpenChange={dismissKey === undefined ? setOpen : onOpenChange}\n dismissible={dismissible}\n dismissKey={dismissKey}\n dismissLifetimeMs={dismissLifetimeMs}\n >\n <Alert.Title\n as={headingLevel ? (`h${headingLevel}` as const) : undefined}\n >\n {title}\n </Alert.Title>\n <div className=\"ds:mt-[var(--spacing-sm)] ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <Progress\n value={safeValue}\n max={safeMax}\n ariaLabel={title}\n ariaValueText={summary}\n >\n <div className=\"ds:flex ds:items-baseline ds:justify-between ds:gap-[var(--spacing-sm)] type-body-sm\">\n {summary ? <span className=\"ds:min-w-0\">{summary}</span> : null}\n {/* In the notice's own colour, like the summary: Progress.Value\n is muted, which is too faint on a tinted surface. */}\n <span className=\"ds:ms-auto ds:shrink-0 ds:tabular-nums\">\n {new Intl.NumberFormat(i18n.language, {\n style: 'percent',\n maximumFractionDigits: 0,\n }).format(Math.min(1, Math.max(0, safeValue / safeMax)))}\n </span>\n </div>\n </Progress>\n {hasList ? (\n <Collapsible open={detailsOpen} onOpenChange={setDetailsOpen}>\n <CollapsibleTrigger className={detailsToggleVariants()}>\n {detailsOpen\n ? t('progressNotice.hideDetails')\n : t('progressNotice.showDetails')}\n <ChevronDown aria-hidden=\"true\" />\n </CollapsibleTrigger>\n <CollapsibleContent>\n {/* eslint-disable-next-line jsx-a11y/no-redundant-roles -- role=\"list\" is not redundant: WebKit drops list semantics under list-style: none */}\n <ul\n role=\"list\"\n className=\"ds:m-0 ds:flex ds:list-none ds:flex-col ds:gap-[var(--spacing-sm)] ds:p-0 ds:pb-[var(--spacing-xs)]\"\n >\n {list.map((item) => (\n <li\n key={item.id}\n data-item-id={item.id}\n data-ready={item.ready || undefined}\n className={itemRowVariants()}\n >\n {item.ready ? (\n <CircleCheck aria-hidden=\"true\" />\n ) : (\n <CircleDashed aria-hidden=\"true\" />\n )}\n <div className=\"ds:flex ds:min-w-0 ds:flex-col\">\n <span className=\"ds:font-medium type-body-sm\">\n {item.name}\n </span>\n {/* The icon's meaning, for screen readers. */}\n <span className=\"ds:sr-only\">\n {item.ready\n ? t('progressNotice.ready')\n : t('progressNotice.notReady')}\n </span>\n {item.status ? (\n <span className=\"type-body-sm\">{item.status}</span>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n </CollapsibleContent>\n </Collapsible>\n ) : null}\n </div>\n <LiveRegion politeness=\"polite\">{message}</LiveRegion>\n </Alert>\n </div>\n );\n },\n);\nProgressNotice.displayName = 'ProgressNotice';\n"],"names":["progressNoticeAgent","handle","args","progressNoticeVariants","cva","detailsToggleVariants","itemRowVariants","ProgressNotice","forwardRef","title","headingLevel","value","max","summary","items","detailsOpenProp","defaultDetailsOpen","onDetailsOpenChange","openProp","onOpenChange","dismissKeyProp","dismissLifetimeMs","dismissible","usableDismissKey","onComplete","completeAnnouncement","id","className","rest","ref","t","i18n","useTranslation","dismissKey","openRaw","setOpen","useControllableState","isOpen","dismissed","useDismissed","detailsOpenRaw","setDetailsOpen","detailsOpen","safeMax","safeValue","list","useMemo","readyCount","item","complete","message","setMessage","useState","previousReadyRef","useRef","completedRef","onCompleteRef","completeText","readySignature","useEffect","previous","_a","newlyReady","stateRef","hasList","hasListRef","next","useAgentRegistration","jsx","jsxs","Alert","Progress","Collapsible","CollapsibleTrigger","ChevronDown","CollapsibleContent","CircleCheck","CircleDashed","LiveRegion"],"mappings":"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"}
@@ -9,7 +9,7 @@ import { F as V } from "./form-field-CyHfOVKF.js";
9
9
  import { T as oe } from "./text-area-COMVJ1yE.js";
10
10
  import { F as de } from "./file-upload-CxjCs7TX.js";
11
11
  import { D as te } from "./date-picker-CdhXlgVI.js";
12
- import { D as le } from "./date-range-picker-B_j4VQlV.js";
12
+ import { D as le } from "./date-range-picker-DCADIR8o.js";
13
13
  import { E } from "./empty-state-DwJ5YNzz.js";
14
14
  import { P as ne } from "./panel-header-CbtlTe85.js";
15
15
  import { c as $ } from "./createLucideIcon-DhHxpK9K.js";
@@ -533,4 +533,4 @@ export {
533
533
  qe as R,
534
534
  Ae as r
535
535
  };
536
- //# sourceMappingURL=radiograph-panel.agent-BQ95uFCd.js.map
536
+ //# sourceMappingURL=radiograph-panel.agent-0ngF2sGS.js.map