@alfadocs/ui-kit-debug 0.37.0 → 0.38.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 (357) hide show
  1. package/dist/_chunks/Alfadocs_Logo_Mark-7o3L3WBI.js +56 -0
  2. package/dist/_chunks/Alfadocs_Logo_Mark-7o3L3WBI.js.map +1 -0
  3. package/dist/_chunks/{alia-sidebar-BEoMl6UL.js → alia-sidebar-DXsYPinm.js} +2 -2
  4. package/dist/_chunks/{alia-sidebar-BEoMl6UL.js.map → alia-sidebar-DXsYPinm.js.map} +1 -1
  5. package/dist/_chunks/{ar-D1RwVZFj.js → ar-Cn_NxqkN.js} +2 -2
  6. package/dist/_chunks/{ar-D1RwVZFj.js.map → ar-Cn_NxqkN.js.map} +1 -1
  7. package/dist/_chunks/bmi-BxD-tFzU.js +32 -0
  8. package/dist/_chunks/bmi-BxD-tFzU.js.map +1 -0
  9. package/dist/_chunks/bmi-calculator-BRUru9QX.js +213 -0
  10. package/dist/_chunks/bmi-calculator-BRUru9QX.js.map +1 -0
  11. package/dist/_chunks/{booking-DqXsd1Mv.js → booking-DK_BPHnQ.js} +4 -4
  12. package/dist/_chunks/{booking-DqXsd1Mv.js.map → booking-DK_BPHnQ.js.map} +1 -1
  13. package/dist/_chunks/calculator-dialog-B74fqpFZ.js +40 -0
  14. package/dist/_chunks/calculator-dialog-B74fqpFZ.js.map +1 -0
  15. package/dist/_chunks/{chat-message-D53_fH2w.js → chat-message-ASgGtj-L.js} +30 -39
  16. package/dist/_chunks/chat-message-ASgGtj-L.js.map +1 -0
  17. package/dist/_chunks/{contact-profile-card-BA6fgS45.js → contact-profile-card-DHyuAPXM.js} +14 -13
  18. package/dist/_chunks/{contact-profile-card-BA6fgS45.js.map → contact-profile-card-DHyuAPXM.js.map} +1 -1
  19. package/dist/_chunks/cycle-calculator-B5Uj9QeT.js +185 -0
  20. package/dist/_chunks/cycle-calculator-B5Uj9QeT.js.map +1 -0
  21. package/dist/_chunks/{date-picker-CXFpu-qY.js → date-picker-CvQfs6Xh.js} +2 -2
  22. package/dist/_chunks/{date-picker-CXFpu-qY.js.map → date-picker-CvQfs6Xh.js.map} +1 -1
  23. package/dist/_chunks/{date-range-picker-I-q5rifj.js → date-range-picker-U9fn1g9d.js} +3 -3
  24. package/dist/_chunks/{date-range-picker-I-q5rifj.js.map → date-range-picker-U9fn1g9d.js.map} +1 -1
  25. package/dist/_chunks/{date-time-picker-CqpGPlcH.js → date-time-picker-Cva0ZCWw.js} +2 -2
  26. package/dist/_chunks/{date-time-picker-CqpGPlcH.js.map → date-time-picker-Cva0ZCWw.js.map} +1 -1
  27. package/dist/_chunks/{de-HTQ4b4-J.js → de-BMM2H7Bs.js} +2 -2
  28. package/dist/_chunks/{de-HTQ4b4-J.js.map → de-BMM2H7Bs.js.map} +1 -1
  29. package/dist/_chunks/dependent-selector-CRWgieHm.js +324 -0
  30. package/dist/_chunks/dependent-selector-CRWgieHm.js.map +1 -0
  31. package/dist/_chunks/document-scanner-CdHQ6lTN.js +702 -0
  32. package/dist/_chunks/document-scanner-CdHQ6lTN.js.map +1 -0
  33. package/dist/_chunks/due-date-calculator-CUspKSTw.js +171 -0
  34. package/dist/_chunks/due-date-calculator-CUspKSTw.js.map +1 -0
  35. package/dist/_chunks/{editable-currency-cell-renderer-DnjwZNZP.js → editable-currency-cell-renderer-DGKuRNVG.js} +2 -2
  36. package/dist/_chunks/{editable-currency-cell-renderer-DnjwZNZP.js.map → editable-currency-cell-renderer-DGKuRNVG.js.map} +1 -1
  37. package/dist/_chunks/{el-Dr1pjuDq.js → el-BYPonAaK.js} +2 -2
  38. package/dist/_chunks/{el-Dr1pjuDq.js.map → el-BYPonAaK.js.map} +1 -1
  39. package/dist/_chunks/{es-CvyTjLS0.js → es-CMkVCQ4F.js} +2 -2
  40. package/dist/_chunks/{es-CvyTjLS0.js.map → es-CMkVCQ4F.js.map} +1 -1
  41. package/dist/_chunks/{file-upload-CdozCPct.js → file-upload-CnzRcErt.js} +2 -1
  42. package/dist/_chunks/{file-upload-CdozCPct.js.map → file-upload-CnzRcErt.js.map} +1 -1
  43. package/dist/_chunks/fiscal-code-input-BZ0FxwUl.js +540 -0
  44. package/dist/_chunks/fiscal-code-input-BZ0FxwUl.js.map +1 -0
  45. package/dist/_chunks/{fr-CS7aqaFR.js → fr-BcuWxqft.js} +2 -2
  46. package/dist/_chunks/{fr-CS7aqaFR.js.map → fr-BcuWxqft.js.map} +1 -1
  47. package/dist/_chunks/gestation-BXEgDGmP.js +50 -0
  48. package/dist/_chunks/gestation-BXEgDGmP.js.map +1 -0
  49. package/dist/_chunks/gestational-age-calculator-CsQ05qDy.js +165 -0
  50. package/dist/_chunks/gestational-age-calculator-CsQ05qDy.js.map +1 -0
  51. package/dist/_chunks/heart-C0faivFf.js +20 -0
  52. package/dist/_chunks/heart-C0faivFf.js.map +1 -0
  53. package/dist/_chunks/{hi-3uy8KpsH.js → hi-wkq_rQAh.js} +2 -2
  54. package/dist/_chunks/{hi-3uy8KpsH.js.map → hi-wkq_rQAh.js.map} +1 -1
  55. package/dist/_chunks/image-C6RM5hfF.js +16 -0
  56. package/dist/_chunks/image-C6RM5hfF.js.map +1 -0
  57. package/dist/_chunks/insert-result-yJ0QavoN.js +133 -0
  58. package/dist/_chunks/insert-result-yJ0QavoN.js.map +1 -0
  59. package/dist/_chunks/{isSameWeek-DRpMibi9.js → isSameWeek-Bim5ftRd.js} +2 -2
  60. package/dist/_chunks/{isSameWeek-DRpMibi9.js.map → isSameWeek-Bim5ftRd.js.map} +1 -1
  61. package/dist/_chunks/{it-B_RF5VSw.js → it-GiQrQ9p4.js} +3 -3
  62. package/dist/_chunks/{it-B_RF5VSw.js.map → it-GiQrQ9p4.js.map} +1 -1
  63. package/dist/_chunks/{ja-C1mEYy35.js → ja-qfYg3Rua.js} +2 -2
  64. package/dist/_chunks/{ja-C1mEYy35.js.map → ja-qfYg3Rua.js.map} +1 -1
  65. package/dist/_chunks/{logo-_Z-jLq80.js → logo-yituK7sE.js} +42 -91
  66. package/dist/_chunks/logo-yituK7sE.js.map +1 -0
  67. package/dist/_chunks/{marketplace-app-shell-DXHxy9dj.js → marketplace-app-shell-BnClrL2B.js} +2 -2
  68. package/dist/_chunks/{marketplace-app-shell-DXHxy9dj.js.map → marketplace-app-shell-BnClrL2B.js.map} +1 -1
  69. package/dist/_chunks/{nl-Dl7lO2t3.js → nl-xOogO4sZ.js} +2 -2
  70. package/dist/_chunks/{nl-Dl7lO2t3.js.map → nl-xOogO4sZ.js.map} +1 -1
  71. package/dist/_chunks/{patient-shell-CDvMw_Nk.js → patient-shell-Bz3CdO84.js} +2 -2
  72. package/dist/_chunks/{patient-shell-CDvMw_Nk.js.map → patient-shell-Bz3CdO84.js.map} +1 -1
  73. package/dist/_chunks/{pl-Dgsogljx.js → pl-GnOW6eGK.js} +3 -3
  74. package/dist/_chunks/{pl-Dgsogljx.js.map → pl-GnOW6eGK.js.map} +1 -1
  75. package/dist/_chunks/{practice-results-BFM_lyUs.js → practice-results-C8ciLQap.js} +3 -2
  76. package/dist/_chunks/{practice-results-BFM_lyUs.js.map → practice-results-C8ciLQap.js.map} +1 -1
  77. package/dist/_chunks/pregnancy-weight-gain-BCdi-JSv.js +209 -0
  78. package/dist/_chunks/pregnancy-weight-gain-BCdi-JSv.js.map +1 -0
  79. package/dist/_chunks/{privacy-lock-DD-wHxBg.js → privacy-lock-BmX_gkvt.js} +2 -2
  80. package/dist/_chunks/{privacy-lock-DD-wHxBg.js.map → privacy-lock-BmX_gkvt.js.map} +1 -1
  81. package/dist/_chunks/{pt-Dm2JF4bc.js → pt-_bV5b5RW.js} +2 -2
  82. package/dist/_chunks/{pt-Dm2JF4bc.js.map → pt-_bV5b5RW.js.map} +1 -1
  83. package/dist/_chunks/{public-footer.agent-Cjfe5jus.js → public-footer.agent-zw1vFin_.js} +2 -2
  84. package/dist/_chunks/{public-footer.agent-Cjfe5jus.js.map → public-footer.agent-zw1vFin_.js.map} +1 -1
  85. package/dist/_chunks/qr-code-DNXhi6se.js +568 -0
  86. package/dist/_chunks/qr-code-DNXhi6se.js.map +1 -0
  87. package/dist/_chunks/{react-day-picker-DYDdR8Vv.js → react-day-picker-CdtIiKjx.js} +24 -24
  88. package/dist/_chunks/{react-day-picker-DYDdR8Vv.js.map → react-day-picker-CdtIiKjx.js.map} +1 -1
  89. package/dist/_chunks/{rich-text-editor-CHmr9Bz8.js → rich-text-editor-DLbg2852.js} +114 -124
  90. package/dist/_chunks/rich-text-editor-DLbg2852.js.map +1 -0
  91. package/dist/_chunks/{ro-BXFZ_xIX.js → ro-BEcyh5Nj.js} +2 -2
  92. package/dist/_chunks/{ro-BXFZ_xIX.js.map → ro-BEcyh5Nj.js.map} +1 -1
  93. package/dist/_chunks/rotate-ccw-BWANpitO.js +15 -0
  94. package/dist/_chunks/rotate-ccw-BWANpitO.js.map +1 -0
  95. package/dist/_chunks/{ru-BPQkNRRV.js → ru-Bi86hqMf.js} +3 -3
  96. package/dist/_chunks/{ru-BPQkNRRV.js.map → ru-Bi86hqMf.js.map} +1 -1
  97. package/dist/_chunks/session-countdown-LPnhTHjn.js +214 -0
  98. package/dist/_chunks/session-countdown-LPnhTHjn.js.map +1 -0
  99. package/dist/_chunks/{shield-check-BhHyReu8.js → shield-check-C73ma9Cs.js} +8 -24
  100. package/dist/_chunks/shield-check-C73ma9Cs.js.map +1 -0
  101. package/dist/_chunks/{sign-in-with-alfadocs-button-BI0fVonM.js → sign-in-with-alfadocs-button-DeHBFRNS.js} +2 -2
  102. package/dist/_chunks/{sign-in-with-alfadocs-button-BI0fVonM.js.map → sign-in-with-alfadocs-button-DeHBFRNS.js.map} +1 -1
  103. package/dist/_chunks/social-sign-in-button-X54ySJr1.js +243 -0
  104. package/dist/_chunks/social-sign-in-button-X54ySJr1.js.map +1 -0
  105. package/dist/_chunks/{sq-ChTlGFcJ.js → sq-BujHSAWu.js} +2 -2
  106. package/dist/_chunks/{sq-ChTlGFcJ.js.map → sq-BujHSAWu.js.map} +1 -1
  107. package/dist/_chunks/subDays-_T9YeKPX.js +8 -0
  108. package/dist/_chunks/{subDays-D-WYRpdW.js.map → subDays-_T9YeKPX.js.map} +1 -1
  109. package/dist/_chunks/{sv-Do_gs6ir.js → sv-C8AeDrTA.js} +2 -2
  110. package/dist/_chunks/{sv-Do_gs6ir.js.map → sv-C8AeDrTA.js.map} +1 -1
  111. package/dist/_chunks/{tr-da_UnkYH.js → tr-CMSs_Vgf.js} +2 -2
  112. package/dist/_chunks/{tr-da_UnkYH.js.map → tr-CMSs_Vgf.js.map} +1 -1
  113. package/dist/_chunks/unit-converter-EUwO6QYq.js +168 -0
  114. package/dist/_chunks/unit-converter-EUwO6QYq.js.map +1 -0
  115. package/dist/_chunks/wallet-pay-button-DK4ESYge.js +250 -0
  116. package/dist/_chunks/wallet-pay-button-DK4ESYge.js.map +1 -0
  117. package/dist/_chunks/{zh-CN-C9qi5oak.js → zh-CN-eXB-PFu4.js} +3 -3
  118. package/dist/_chunks/{zh-CN-C9qi5oak.js.map → zh-CN-eXB-PFu4.js.map} +1 -1
  119. package/dist/agent-catalog.json +203 -1
  120. package/dist/brand/provider-marks/apple-pay.d.ts +12 -0
  121. package/dist/brand/provider-marks/apple-pay.d.ts.map +1 -0
  122. package/dist/brand/provider-marks/apple.d.ts +12 -0
  123. package/dist/brand/provider-marks/apple.d.ts.map +1 -0
  124. package/dist/brand/provider-marks/google-pay.d.ts +12 -0
  125. package/dist/brand/provider-marks/google-pay.d.ts.map +1 -0
  126. package/dist/brand/provider-marks/google.d.ts +13 -0
  127. package/dist/brand/provider-marks/google.d.ts.map +1 -0
  128. package/dist/components/_shared/insert-result.d.ts +47 -0
  129. package/dist/components/_shared/insert-result.d.ts.map +1 -0
  130. package/dist/components/bmi-calculator/bmi-calculator.d.ts +3 -0
  131. package/dist/components/bmi-calculator/bmi-calculator.d.ts.map +1 -1
  132. package/dist/components/bmi-calculator/index.js +6 -5
  133. package/dist/components/bmi-calculator/index.js.map +1 -1
  134. package/dist/components/booking/index.js +1 -1
  135. package/dist/components/calculator-dialog/calculator-dialog.d.ts +26 -0
  136. package/dist/components/calculator-dialog/calculator-dialog.d.ts.map +1 -0
  137. package/dist/components/calculator-dialog/index.d.ts +3 -0
  138. package/dist/components/calculator-dialog/index.d.ts.map +1 -0
  139. package/dist/components/calculator-dialog/index.js +5 -0
  140. package/dist/components/calculator-dialog/index.js.map +1 -0
  141. package/dist/components/chat-message/index.js +1 -1
  142. package/dist/components/contact-profile-card/index.js +1 -1
  143. package/dist/components/cycle-calculator/cycle-calculator.d.ts +21 -0
  144. package/dist/components/cycle-calculator/cycle-calculator.d.ts.map +1 -0
  145. package/dist/components/cycle-calculator/cycle.d.ts +37 -0
  146. package/dist/components/cycle-calculator/cycle.d.ts.map +1 -0
  147. package/dist/components/cycle-calculator/index.d.ts +4 -0
  148. package/dist/components/cycle-calculator/index.d.ts.map +1 -0
  149. package/dist/components/cycle-calculator/index.js +7 -0
  150. package/dist/components/cycle-calculator/index.js.map +1 -0
  151. package/dist/components/data-table/index.js +1 -1
  152. package/dist/components/date-picker/index.js +1 -1
  153. package/dist/components/date-range-picker/index.js +1 -1
  154. package/dist/components/date-time-picker/index.js +1 -1
  155. package/dist/components/dependent-selector/dependent-selector.agent.d.ts +4 -0
  156. package/dist/components/dependent-selector/dependent-selector.agent.d.ts.map +1 -0
  157. package/dist/components/dependent-selector/dependent-selector.d.ts +72 -0
  158. package/dist/components/dependent-selector/dependent-selector.d.ts.map +1 -0
  159. package/dist/components/dependent-selector/index.d.ts +4 -0
  160. package/dist/components/dependent-selector/index.d.ts.map +1 -0
  161. package/dist/components/dependent-selector/index.js +6 -0
  162. package/dist/components/dependent-selector/index.js.map +1 -0
  163. package/dist/components/document-scanner/document-scanner.agent.d.ts +4 -0
  164. package/dist/components/document-scanner/document-scanner.agent.d.ts.map +1 -0
  165. package/dist/components/document-scanner/document-scanner.d.ts +93 -0
  166. package/dist/components/document-scanner/document-scanner.d.ts.map +1 -0
  167. package/dist/components/document-scanner/index.d.ts +4 -0
  168. package/dist/components/document-scanner/index.d.ts.map +1 -0
  169. package/dist/components/document-scanner/index.js +6 -0
  170. package/dist/components/document-scanner/index.js.map +1 -0
  171. package/dist/components/due-date-calculator/due-date-calculator.d.ts +3 -0
  172. package/dist/components/due-date-calculator/due-date-calculator.d.ts.map +1 -1
  173. package/dist/components/due-date-calculator/gestation.d.ts +16 -0
  174. package/dist/components/due-date-calculator/gestation.d.ts.map +1 -1
  175. package/dist/components/due-date-calculator/index.d.ts +1 -1
  176. package/dist/components/due-date-calculator/index.d.ts.map +1 -1
  177. package/dist/components/due-date-calculator/index.js +10 -7
  178. package/dist/components/due-date-calculator/index.js.map +1 -1
  179. package/dist/components/file-upload/index.js +1 -1
  180. package/dist/components/fiscal-code-input/calculate-codice-fiscale.d.ts +24 -0
  181. package/dist/components/fiscal-code-input/calculate-codice-fiscale.d.ts.map +1 -0
  182. package/dist/components/fiscal-code-input/fiscal-code-input.agent.d.ts +4 -0
  183. package/dist/components/fiscal-code-input/fiscal-code-input.agent.d.ts.map +1 -0
  184. package/dist/components/fiscal-code-input/fiscal-code-input.d.ts +61 -0
  185. package/dist/components/fiscal-code-input/fiscal-code-input.d.ts.map +1 -0
  186. package/dist/components/fiscal-code-input/index.d.ts +6 -0
  187. package/dist/components/fiscal-code-input/index.d.ts.map +1 -0
  188. package/dist/components/fiscal-code-input/index.js +11 -0
  189. package/dist/components/fiscal-code-input/index.js.map +1 -0
  190. package/dist/components/fiscal-code-input/is-valid-codice-fiscale.d.ts +21 -0
  191. package/dist/components/fiscal-code-input/is-valid-codice-fiscale.d.ts.map +1 -0
  192. package/dist/components/gestational-age-calculator/gestational-age-calculator.d.ts +27 -0
  193. package/dist/components/gestational-age-calculator/gestational-age-calculator.d.ts.map +1 -0
  194. package/dist/components/gestational-age-calculator/index.d.ts +3 -0
  195. package/dist/components/gestational-age-calculator/index.d.ts.map +1 -0
  196. package/dist/components/gestational-age-calculator/index.js +5 -0
  197. package/dist/components/gestational-age-calculator/index.js.map +1 -0
  198. package/dist/components/index.d.ts +13 -0
  199. package/dist/components/index.d.ts.map +1 -1
  200. package/dist/components/logo/index.js +1 -1
  201. package/dist/components/practice-results/index.js +1 -1
  202. package/dist/components/pregnancy-weight-gain/index.d.ts +4 -0
  203. package/dist/components/pregnancy-weight-gain/index.d.ts.map +1 -0
  204. package/dist/components/pregnancy-weight-gain/index.js +9 -0
  205. package/dist/components/pregnancy-weight-gain/index.js.map +1 -0
  206. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.d.ts +19 -0
  207. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.d.ts.map +1 -0
  208. package/dist/components/pregnancy-weight-gain/weight-gain.d.ts +41 -0
  209. package/dist/components/pregnancy-weight-gain/weight-gain.d.ts.map +1 -0
  210. package/dist/components/privacy-lock/index.js +1 -1
  211. package/dist/components/public-footer/index.js +1 -1
  212. package/dist/components/qr-code/index.d.ts +5 -0
  213. package/dist/components/qr-code/index.d.ts.map +1 -0
  214. package/dist/components/qr-code/index.js +8 -0
  215. package/dist/components/qr-code/index.js.map +1 -0
  216. package/dist/components/qr-code/qr-code.agent.d.ts +3 -0
  217. package/dist/components/qr-code/qr-code.agent.d.ts.map +1 -0
  218. package/dist/components/qr-code/qr-code.d.ts +59 -0
  219. package/dist/components/qr-code/qr-code.d.ts.map +1 -0
  220. package/dist/components/qr-code/qr-encode.d.ts +46 -0
  221. package/dist/components/qr-code/qr-encode.d.ts.map +1 -0
  222. package/dist/components/rich-text-editor/index.js +1 -1
  223. package/dist/components/session-countdown/index.d.ts +4 -0
  224. package/dist/components/session-countdown/index.d.ts.map +1 -0
  225. package/dist/components/session-countdown/index.js +6 -0
  226. package/dist/components/session-countdown/index.js.map +1 -0
  227. package/dist/components/session-countdown/session-countdown.agent.d.ts +3 -0
  228. package/dist/components/session-countdown/session-countdown.agent.d.ts.map +1 -0
  229. package/dist/components/session-countdown/session-countdown.d.ts +38 -0
  230. package/dist/components/session-countdown/session-countdown.d.ts.map +1 -0
  231. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  232. package/dist/components/social-sign-in-button/index.d.ts +3 -0
  233. package/dist/components/social-sign-in-button/index.d.ts.map +1 -0
  234. package/dist/components/social-sign-in-button/index.js +5 -0
  235. package/dist/components/social-sign-in-button/index.js.map +1 -0
  236. package/dist/components/social-sign-in-button/social-sign-in-button.d.ts +56 -0
  237. package/dist/components/social-sign-in-button/social-sign-in-button.d.ts.map +1 -0
  238. package/dist/components/unit-converter/index.d.ts +4 -0
  239. package/dist/components/unit-converter/index.d.ts.map +1 -0
  240. package/dist/components/unit-converter/index.js +9 -0
  241. package/dist/components/unit-converter/index.js.map +1 -0
  242. package/dist/components/unit-converter/unit-converter.d.ts +21 -0
  243. package/dist/components/unit-converter/unit-converter.d.ts.map +1 -0
  244. package/dist/components/unit-converter/units.d.ts +18 -0
  245. package/dist/components/unit-converter/units.d.ts.map +1 -0
  246. package/dist/components/wallet-pay-button/index.d.ts +3 -0
  247. package/dist/components/wallet-pay-button/index.d.ts.map +1 -0
  248. package/dist/components/wallet-pay-button/index.js +5 -0
  249. package/dist/components/wallet-pay-button/index.js.map +1 -0
  250. package/dist/components/wallet-pay-button/wallet-pay-button.d.ts +63 -0
  251. package/dist/components/wallet-pay-button/wallet-pay-button.d.ts.map +1 -0
  252. package/dist/i18n/locales/ar.d.ts +252 -0
  253. package/dist/i18n/locales/ar.d.ts.map +1 -1
  254. package/dist/i18n/locales/ar.js +249 -0
  255. package/dist/i18n/locales/ar.js.map +1 -1
  256. package/dist/i18n/locales/de.d.ts +252 -0
  257. package/dist/i18n/locales/de.d.ts.map +1 -1
  258. package/dist/i18n/locales/de.js +249 -0
  259. package/dist/i18n/locales/de.js.map +1 -1
  260. package/dist/i18n/locales/el.d.ts +252 -0
  261. package/dist/i18n/locales/el.d.ts.map +1 -1
  262. package/dist/i18n/locales/el.js +249 -0
  263. package/dist/i18n/locales/el.js.map +1 -1
  264. package/dist/i18n/locales/en.d.ts +252 -0
  265. package/dist/i18n/locales/en.d.ts.map +1 -1
  266. package/dist/i18n/locales/en.js +252 -0
  267. package/dist/i18n/locales/en.js.map +1 -1
  268. package/dist/i18n/locales/es.d.ts +252 -0
  269. package/dist/i18n/locales/es.d.ts.map +1 -1
  270. package/dist/i18n/locales/es.js +249 -0
  271. package/dist/i18n/locales/es.js.map +1 -1
  272. package/dist/i18n/locales/fr.d.ts +252 -0
  273. package/dist/i18n/locales/fr.d.ts.map +1 -1
  274. package/dist/i18n/locales/fr.js +249 -0
  275. package/dist/i18n/locales/fr.js.map +1 -1
  276. package/dist/i18n/locales/hi.d.ts +252 -0
  277. package/dist/i18n/locales/hi.d.ts.map +1 -1
  278. package/dist/i18n/locales/hi.js +249 -0
  279. package/dist/i18n/locales/hi.js.map +1 -1
  280. package/dist/i18n/locales/it.d.ts +252 -0
  281. package/dist/i18n/locales/it.d.ts.map +1 -1
  282. package/dist/i18n/locales/it.js +249 -0
  283. package/dist/i18n/locales/it.js.map +1 -1
  284. package/dist/i18n/locales/ja.d.ts +252 -0
  285. package/dist/i18n/locales/ja.d.ts.map +1 -1
  286. package/dist/i18n/locales/ja.js +245 -0
  287. package/dist/i18n/locales/ja.js.map +1 -1
  288. package/dist/i18n/locales/nl.d.ts +252 -0
  289. package/dist/i18n/locales/nl.d.ts.map +1 -1
  290. package/dist/i18n/locales/nl.js +249 -0
  291. package/dist/i18n/locales/nl.js.map +1 -1
  292. package/dist/i18n/locales/pl.d.ts +252 -0
  293. package/dist/i18n/locales/pl.d.ts.map +1 -1
  294. package/dist/i18n/locales/pl.js +249 -0
  295. package/dist/i18n/locales/pl.js.map +1 -1
  296. package/dist/i18n/locales/pt.d.ts +252 -0
  297. package/dist/i18n/locales/pt.d.ts.map +1 -1
  298. package/dist/i18n/locales/pt.js +252 -0
  299. package/dist/i18n/locales/pt.js.map +1 -1
  300. package/dist/i18n/locales/ro.d.ts +252 -0
  301. package/dist/i18n/locales/ro.d.ts.map +1 -1
  302. package/dist/i18n/locales/ro.js +249 -0
  303. package/dist/i18n/locales/ro.js.map +1 -1
  304. package/dist/i18n/locales/ru.d.ts +252 -0
  305. package/dist/i18n/locales/ru.d.ts.map +1 -1
  306. package/dist/i18n/locales/ru.js +249 -0
  307. package/dist/i18n/locales/ru.js.map +1 -1
  308. package/dist/i18n/locales/sq.d.ts +252 -0
  309. package/dist/i18n/locales/sq.d.ts.map +1 -1
  310. package/dist/i18n/locales/sq.js +249 -0
  311. package/dist/i18n/locales/sq.js.map +1 -1
  312. package/dist/i18n/locales/sv.d.ts +252 -0
  313. package/dist/i18n/locales/sv.d.ts.map +1 -1
  314. package/dist/i18n/locales/sv.js +249 -0
  315. package/dist/i18n/locales/sv.js.map +1 -1
  316. package/dist/i18n/locales/tr.d.ts +252 -0
  317. package/dist/i18n/locales/tr.d.ts.map +1 -1
  318. package/dist/i18n/locales/tr.js +249 -0
  319. package/dist/i18n/locales/tr.js.map +1 -1
  320. package/dist/i18n/locales/zh.d.ts +252 -0
  321. package/dist/i18n/locales/zh.d.ts.map +1 -1
  322. package/dist/i18n/locales/zh.js +245 -0
  323. package/dist/i18n/locales/zh.js.map +1 -1
  324. package/dist/index.js +587 -535
  325. package/dist/index.js.map +1 -1
  326. package/dist/locales/ar.json +252 -0
  327. package/dist/locales/de.json +252 -0
  328. package/dist/locales/el.json +252 -0
  329. package/dist/locales/en.json +252 -0
  330. package/dist/locales/es.json +252 -0
  331. package/dist/locales/fr.json +252 -0
  332. package/dist/locales/hi.json +252 -0
  333. package/dist/locales/it.json +252 -0
  334. package/dist/locales/ja.json +252 -0
  335. package/dist/locales/nl.json +252 -0
  336. package/dist/locales/pl.json +252 -0
  337. package/dist/locales/pt.json +252 -0
  338. package/dist/locales/ro.json +252 -0
  339. package/dist/locales/ru.json +252 -0
  340. package/dist/locales/sq.json +252 -0
  341. package/dist/locales/sv.json +252 -0
  342. package/dist/locales/tr.json +252 -0
  343. package/dist/locales/zh.json +252 -0
  344. package/dist/patterns/alia-assistant/index.js +1 -1
  345. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  346. package/dist/patterns/patient-shell/index.js +1 -1
  347. package/dist/tokens.css +1 -1
  348. package/package.json +49 -1
  349. package/dist/_chunks/bmi-calculator-DQD5_nE-.js +0 -214
  350. package/dist/_chunks/bmi-calculator-DQD5_nE-.js.map +0 -1
  351. package/dist/_chunks/chat-message-D53_fH2w.js.map +0 -1
  352. package/dist/_chunks/due-date-calculator-kf9U_g7O.js +0 -173
  353. package/dist/_chunks/due-date-calculator-kf9U_g7O.js.map +0 -1
  354. package/dist/_chunks/logo-_Z-jLq80.js.map +0 -1
  355. package/dist/_chunks/rich-text-editor-CHmr9Bz8.js.map +0 -1
  356. package/dist/_chunks/shield-check-BhHyReu8.js.map +0 -1
  357. package/dist/_chunks/subDays-D-WYRpdW.js +0 -8
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfadocs/ui-kit-debug",
3
- "version": "0.37.0",
3
+ "version": "0.38.0",
4
4
  "type": "module",
5
5
  "description": "AlfaDocs shared design system — tokens, components, patterns, and translations for platform, booking, and alfascribe. (debug build — identical runtime to @alfadocs/ui-kit, ships source maps for symbolication).",
6
6
  "license": "BUSL-1.1",
@@ -95,6 +95,26 @@
95
95
  "types": "./dist/components/bmi-calculator/index.d.ts",
96
96
  "import": "./dist/components/bmi-calculator/index.js"
97
97
  },
98
+ "./calculator-dialog": {
99
+ "types": "./dist/components/calculator-dialog/index.d.ts",
100
+ "import": "./dist/components/calculator-dialog/index.js"
101
+ },
102
+ "./cycle-calculator": {
103
+ "types": "./dist/components/cycle-calculator/index.d.ts",
104
+ "import": "./dist/components/cycle-calculator/index.js"
105
+ },
106
+ "./gestational-age-calculator": {
107
+ "types": "./dist/components/gestational-age-calculator/index.d.ts",
108
+ "import": "./dist/components/gestational-age-calculator/index.js"
109
+ },
110
+ "./pregnancy-weight-gain": {
111
+ "types": "./dist/components/pregnancy-weight-gain/index.d.ts",
112
+ "import": "./dist/components/pregnancy-weight-gain/index.js"
113
+ },
114
+ "./unit-converter": {
115
+ "types": "./dist/components/unit-converter/index.d.ts",
116
+ "import": "./dist/components/unit-converter/index.js"
117
+ },
98
118
  "./booking": {
99
119
  "types": "./dist/components/booking/index.d.ts",
100
120
  "import": "./dist/components/booking/index.js"
@@ -187,6 +207,10 @@
187
207
  "types": "./dist/components/date-time-picker/index.d.ts",
188
208
  "import": "./dist/components/date-time-picker/index.js"
189
209
  },
210
+ "./dependent-selector": {
211
+ "types": "./dist/components/dependent-selector/index.d.ts",
212
+ "import": "./dist/components/dependent-selector/index.js"
213
+ },
190
214
  "./description-list": {
191
215
  "types": "./dist/components/description-list/index.d.ts",
192
216
  "import": "./dist/components/description-list/index.js"
@@ -195,6 +219,10 @@
195
219
  "types": "./dist/components/dialog/index.d.ts",
196
220
  "import": "./dist/components/dialog/index.js"
197
221
  },
222
+ "./document-scanner": {
223
+ "types": "./dist/components/document-scanner/index.d.ts",
224
+ "import": "./dist/components/document-scanner/index.js"
225
+ },
198
226
  "./dropdown-menu": {
199
227
  "types": "./dist/components/dropdown-menu/index.d.ts",
200
228
  "import": "./dist/components/dropdown-menu/index.js"
@@ -215,6 +243,10 @@
215
243
  "types": "./dist/components/file-upload/index.d.ts",
216
244
  "import": "./dist/components/file-upload/index.js"
217
245
  },
246
+ "./fiscal-code-input": {
247
+ "types": "./dist/components/fiscal-code-input/index.d.ts",
248
+ "import": "./dist/components/fiscal-code-input/index.js"
249
+ },
218
250
  "./flag": {
219
251
  "types": "./dist/components/flag/index.d.ts",
220
252
  "import": "./dist/components/flag/index.js"
@@ -363,6 +395,10 @@
363
395
  "types": "./dist/components/public-header/index.d.ts",
364
396
  "import": "./dist/components/public-header/index.js"
365
397
  },
398
+ "./qr-code": {
399
+ "types": "./dist/components/qr-code/index.d.ts",
400
+ "import": "./dist/components/qr-code/index.js"
401
+ },
366
402
  "./radio-group": {
367
403
  "types": "./dist/components/radio-group/index.d.ts",
368
404
  "import": "./dist/components/radio-group/index.js"
@@ -407,6 +443,10 @@
407
443
  "types": "./dist/components/separator/index.d.ts",
408
444
  "import": "./dist/components/separator/index.js"
409
445
  },
446
+ "./session-countdown": {
447
+ "types": "./dist/components/session-countdown/index.d.ts",
448
+ "import": "./dist/components/session-countdown/index.js"
449
+ },
410
450
  "./sheet": {
411
451
  "types": "./dist/components/sheet/index.d.ts",
412
452
  "import": "./dist/components/sheet/index.js"
@@ -435,6 +475,10 @@
435
475
  "types": "./dist/components/slot-grid/index.d.ts",
436
476
  "import": "./dist/components/slot-grid/index.js"
437
477
  },
478
+ "./social-sign-in-button": {
479
+ "types": "./dist/components/social-sign-in-button/index.d.ts",
480
+ "import": "./dist/components/social-sign-in-button/index.js"
481
+ },
438
482
  "./sparkline": {
439
483
  "types": "./dist/components/sparkline/index.d.ts",
440
484
  "import": "./dist/components/sparkline/index.js"
@@ -519,6 +563,10 @@
519
563
  "types": "./dist/components/typing-indicator/index.d.ts",
520
564
  "import": "./dist/components/typing-indicator/index.js"
521
565
  },
566
+ "./wallet-pay-button": {
567
+ "types": "./dist/components/wallet-pay-button/index.d.ts",
568
+ "import": "./dist/components/wallet-pay-button/index.js"
569
+ },
522
570
  "./warning-stack": {
523
571
  "types": "./dist/components/warning-stack/index.d.ts",
524
572
  "import": "./dist/components/warning-stack/index.js"
@@ -1,214 +0,0 @@
1
- import { jsxs as s, jsx as l } from "react/jsx-runtime";
2
- import { forwardRef as z, useId as K, useState as o, useMemo as O, useEffect as X } from "react";
3
- import { c as Y } from "./index-D2ZczOXr.js";
4
- import { useTranslation as q } from "react-i18next";
5
- import { R as _ } from "./radio-TWf9Q-mp.js";
6
- import { R as J } from "./radio-group-BcF92GEF.js";
7
- import { F as G } from "./form-field-BOm9hK35.js";
8
- import { N as p } from "./number-input-Dj5L3pXK.js";
9
- import { C as Q } from "./chart-DnHvmiDX.js";
10
- import { B as Z } from "./badge-zsf5i5bH.js";
11
- const A = 0.45359237, S = 2.54, y = 12, T = (a) => a * A, aa = (a) => a / A, ta = (a) => a * S, la = (a) => a / S;
12
- function ea(a) {
13
- const e = la(a), r = Math.floor(e / y);
14
- return { ft: r, in: e - r * y };
15
- }
16
- const $ = (a, e) => ta(a * y + e);
17
- function ia(a, e) {
18
- if (a === null || e === null || !Number.isFinite(a) || !Number.isFinite(e) || a <= 0 || e <= 0)
19
- return null;
20
- const r = e / 100;
21
- return a / (r * r);
22
- }
23
- function na(a) {
24
- return a < 18.5 ? "underweight" : a < 25 ? "normal" : a < 30 ? "overweight" : "obese";
25
- }
26
- const E = 12, ra = 40;
27
- function sa(a) {
28
- const e = (a - E) / (ra - E) * 100;
29
- return Math.min(100, Math.max(0, e));
30
- }
31
- const oa = Y("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
32
- variants: {
33
- width: {
34
- full: "ds:w-full",
35
- auto: "ds:inline-flex"
36
- }
37
- },
38
- defaultVariants: { width: "full" }
39
- }), ca = {
40
- underweight: "info",
41
- normal: "success",
42
- overweight: "warning",
43
- obese: "error"
44
- }, h = (a) => Math.round(a * 10) / 10, ma = z(
45
- ({ defaultUnitSystem: a = "metric", onResultChange: e, id: r, width: k, className: H }, L) => {
46
- const { t, i18n: x } = q(), N = K(), [c, P] = o(a), [b, I] = o(null), [f, F] = o(null), [m, w] = o(null), [u, M] = o(null), [d, B] = o(null), R = (D) => {
47
- const v = D;
48
- if (v !== c) {
49
- if (v === "imperial") {
50
- if (b !== null) {
51
- const { ft: W, in: j } = ea(b);
52
- w(W), M(h(j));
53
- }
54
- f !== null && B(h(aa(f)));
55
- } else
56
- (m !== null || u !== null) && I(h($(m ?? 0, u ?? 0))), d !== null && F(h(T(d)));
57
- P(v);
58
- }
59
- }, U = c === "metric" ? b : m !== null || u !== null ? $(m ?? 0, u ?? 0) : null, V = c === "metric" ? f : d !== null ? T(d) : null, i = ia(V, U), n = i !== null ? na(i) : null, C = O(
60
- () => new Intl.NumberFormat(x.language, {
61
- minimumFractionDigits: 1,
62
- maximumFractionDigits: 1
63
- }),
64
- [x.language]
65
- );
66
- X(() => {
67
- e == null || e(
68
- i !== null && n !== null ? { bmi: i, category: n } : null
69
- );
70
- }, [i, n, e]);
71
- const g = c === "metric";
72
- return /* @__PURE__ */ s(
73
- "div",
74
- {
75
- ref: L,
76
- "data-component": "bmi-calculator",
77
- "data-component-id": r,
78
- className: oa({ width: k, className: H }),
79
- children: [
80
- /* @__PURE__ */ s(
81
- J,
82
- {
83
- label: t("bmiCalculator.unitSystem.label"),
84
- variant: "horizontal",
85
- value: c,
86
- onValueChange: R,
87
- children: [
88
- /* @__PURE__ */ l(_, { label: t("bmiCalculator.unitSystem.metric"), value: "metric" }),
89
- /* @__PURE__ */ l(
90
- _,
91
- {
92
- label: t("bmiCalculator.unitSystem.imperial"),
93
- value: "imperial"
94
- }
95
- )
96
- ]
97
- }
98
- ),
99
- /* @__PURE__ */ s("div", { className: "ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2", children: [
100
- g ? /* @__PURE__ */ l(
101
- G,
102
- {
103
- label: `${t("bmiCalculator.height")} (${t("bmiCalculator.units.cm")})`,
104
- children: /* @__PURE__ */ l(
105
- p,
106
- {
107
- mode: "decimal",
108
- min: 0,
109
- step: 0.5,
110
- value: b,
111
- onChange: I
112
- }
113
- )
114
- }
115
- ) : /* @__PURE__ */ s("div", { role: "group", "aria-labelledby": N, children: [
116
- /* @__PURE__ */ l(
117
- "span",
118
- {
119
- id: N,
120
- className: "type-label ds:mb-[var(--spacing-xs)] ds:block ds:text-foreground",
121
- children: t("bmiCalculator.height")
122
- }
123
- ),
124
- /* @__PURE__ */ s("div", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-sm)]", children: [
125
- /* @__PURE__ */ l(
126
- p,
127
- {
128
- mode: "integer",
129
- min: 0,
130
- value: m,
131
- onChange: w,
132
- "aria-label": t("bmiCalculator.feet")
133
- }
134
- ),
135
- /* @__PURE__ */ l("span", { className: "type-label ds:text-muted-foreground", children: t("bmiCalculator.units.ft") }),
136
- /* @__PURE__ */ l(
137
- p,
138
- {
139
- mode: "decimal",
140
- min: 0,
141
- max: 11.9,
142
- step: 0.5,
143
- value: u,
144
- onChange: M,
145
- "aria-label": t("bmiCalculator.inches")
146
- }
147
- ),
148
- /* @__PURE__ */ l("span", { className: "type-label ds:text-muted-foreground", children: t("bmiCalculator.units.in") })
149
- ] })
150
- ] }),
151
- /* @__PURE__ */ l(
152
- G,
153
- {
154
- label: `${t("bmiCalculator.weight")} (${t(
155
- g ? "bmiCalculator.units.kg" : "bmiCalculator.units.lb"
156
- )})`,
157
- children: /* @__PURE__ */ l(
158
- p,
159
- {
160
- mode: "decimal",
161
- min: 0,
162
- step: g ? 0.1 : 0.5,
163
- value: g ? f : d,
164
- onChange: g ? F : B
165
- }
166
- )
167
- }
168
- )
169
- ] }),
170
- /* @__PURE__ */ l("p", { className: "ds:sr-only", role: "status", "aria-live": "polite", children: i !== null && n !== null ? t("bmiCalculator.gaugeAria", {
171
- bmi: C.format(i),
172
- category: t(`bmiCalculator.category.${n}`)
173
- }) : "" }),
174
- i !== null && n !== null ? /* @__PURE__ */ s("div", { className: "ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-md)] ds:sm:flex-row ds:sm:items-center ds:sm:gap-[var(--spacing-lg)]", children: [
175
- /* @__PURE__ */ l(
176
- Q,
177
- {
178
- type: "radialBar",
179
- title: t("bmiCalculator.gaugeAria", {
180
- bmi: C.format(i),
181
- category: t(`bmiCalculator.category.${n}`)
182
- }),
183
- series: [sa(i)],
184
- labels: [t(`bmiCalculator.category.${n}`)],
185
- radialValueFormatter: () => C.format(i),
186
- height: 240,
187
- width: 240
188
- }
189
- ),
190
- /* @__PURE__ */ s("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
191
- /* @__PURE__ */ l("span", { className: "type-label ds:text-muted-foreground", children: t("bmiCalculator.category.label") }),
192
- /* @__PURE__ */ l(Z, { variant: ca[n], size: "lg", children: t(`bmiCalculator.category.${n}`) }),
193
- /* @__PURE__ */ l("p", { className: "type-body ds:text-muted-foreground", children: t(`bmiCalculator.range.${n}`) })
194
- ] })
195
- ] }) : /* @__PURE__ */ l("p", { className: "type-body ds:text-muted-foreground", children: t("bmiCalculator.empty") })
196
- ]
197
- }
198
- );
199
- }
200
- );
201
- ma.displayName = "BmiCalculator";
202
- export {
203
- ma as B,
204
- sa as a,
205
- na as b,
206
- ea as c,
207
- la as d,
208
- ia as e,
209
- $ as f,
210
- ta as i,
211
- aa as k,
212
- T as l
213
- };
214
- //# sourceMappingURL=bmi-calculator-DQD5_nE-.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bmi-calculator-DQD5_nE-.js","sources":["../../src/components/bmi-calculator/bmi.ts","../../src/components/bmi-calculator/bmi-calculator.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* BMI maths + unit conversion — pure, framework-free, unit-testable. */\n/* */\n/* Kept separate from the component so the clinical formulae can be */\n/* tested in isolation and reused by consumers without pulling React. */\n/* ------------------------------------------------------------------ */\n\nexport type UnitSystem = 'metric' | 'imperial';\n\n/** WHO adult BMI categories (kg/m²). Order = ascending BMI. */\nexport type BmiCategory = 'underweight' | 'normal' | 'overweight' | 'obese';\n\n/* ---- exact conversion constants -------------------------------------- */\n/** 1 lb = 0.45359237 kg (international avoirdupois pound, exact). */\nexport const KG_PER_LB = 0.45359237;\n/** 1 inch = 2.54 cm (exact). */\nexport const CM_PER_IN = 2.54;\n/** Inches per foot. */\nexport const IN_PER_FT = 12;\n\nexport const lbToKg = (lb: number): number => lb * KG_PER_LB;\nexport const kgToLb = (kg: number): number => kg / KG_PER_LB;\nexport const inToCm = (inches: number): number => inches * CM_PER_IN;\nexport const cmToIn = (cm: number): number => cm / CM_PER_IN;\n\n/** Split a height in centimetres into whole feet + remaining inches. */\nexport function cmToFtIn(cm: number): { ft: number; in: number } {\n const totalInches = cmToIn(cm);\n const ft = Math.floor(totalInches / IN_PER_FT);\n return { ft, in: totalInches - ft * IN_PER_FT };\n}\n\n/** Combine feet + inches into centimetres. */\nexport const ftInToCm = (ft: number, inches: number): number =>\n inToCm(ft * IN_PER_FT + inches);\n\n/* ---- BMI ------------------------------------------------------------- */\n\n/**\n * Body mass index in kg/m². Returns `null` when either input is missing or\n * non-positive (height of 0 would divide by zero).\n */\nexport function computeBmi(\n weightKg: number | null,\n heightCm: number | null,\n): number | null {\n if (\n weightKg === null ||\n heightCm === null ||\n !Number.isFinite(weightKg) ||\n !Number.isFinite(heightCm) ||\n weightKg <= 0 ||\n heightCm <= 0\n ) {\n return null;\n }\n const heightM = heightCm / 100;\n return weightKg / (heightM * heightM);\n}\n\n/** WHO adult cut-offs. Boundaries follow WHO: <18.5, <25, <30, ≥30. */\nexport function bmiCategory(bmi: number): BmiCategory {\n if (bmi < 18.5) return 'underweight';\n if (bmi < 25) return 'normal';\n if (bmi < 30) return 'overweight';\n return 'obese';\n}\n\n/**\n * Clinically meaningful display range for the gauge arc. Values below/above\n * are clamped so the ring still reads. 12–40 spans severe-thinness through\n * obesity without wasting the dial on impossible extremes.\n */\nexport const BMI_GAUGE_MIN = 12;\nexport const BMI_GAUGE_MAX = 40;\n\n/** Map a BMI onto a 0–100 arc-fill percent for the radialBar gauge. */\nexport function bmiToGaugePercent(bmi: number): number {\n const pct = ((bmi - BMI_GAUGE_MIN) / (BMI_GAUGE_MAX - BMI_GAUGE_MIN)) * 100;\n return Math.min(100, Math.max(0, pct));\n}\n","/* ------------------------------------------------------------------ */\n/* BmiCalculator — height + weight → WHO body-mass-index, shown on a */\n/* radialBar gauge. */\n/* */\n/* - Maths + unit conversion live in `./bmi` (pure, separately tested). */\n/* - Metric ⇄ imperial toggle persists the entered figures across the */\n/* switch by converting them (a patient measured in lb/ft doesn't */\n/* lose their numbers when a clinician flips to kg/cm). */\n/* - The gauge reuses the kit `Chart` (radialBar). Because ApexCharts */\n/* reads a radialBar series value as a 0–100 percent, the arc is fed */\n/* the BMI mapped onto the clinical 12–40 span and the true BMI is */\n/* printed in the centre via `radialValueFormatter`. */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useId, useMemo, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { NumberInput } from '../number-input';\nimport { Chart } from '../chart';\nimport { Badge } from '../badge';\nimport {\n type UnitSystem,\n type BmiCategory,\n computeBmi,\n bmiCategory,\n bmiToGaugePercent,\n cmToFtIn,\n ftInToCm,\n kgToLb,\n lbToKg,\n} from './bmi';\n\n/* ------------------------------------------------------------------ */\n/* Result payload emitted to consumers */\n/* ------------------------------------------------------------------ */\n\nexport interface BmiResult {\n /** BMI in kg/m². */\n bmi: number;\n /** WHO category the BMI falls into. */\n category: BmiCategory;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]', {\n variants: {\n width: {\n full: 'ds:w-full',\n auto: 'ds:inline-flex',\n },\n },\n defaultVariants: { width: 'full' },\n});\n\n/* ------------------------------------------------------------------ */\n/* Category → semantic intent for the Stat headline */\n/* ------------------------------------------------------------------ */\n\nconst CATEGORY_BADGE: Record<\n BmiCategory,\n 'info' | 'success' | 'warning' | 'error'\n> = {\n underweight: 'info',\n normal: 'success',\n overweight: 'warning',\n obese: 'error',\n};\n\nexport interface BmiCalculatorProps extends VariantProps<typeof rootVariants> {\n /** Initial unit system. Defaults to `'metric'`. */\n defaultUnitSystem?: UnitSystem;\n /** Fires whenever a valid BMI can be computed (and with `null` when it can't). */\n onResultChange?: (result: BmiResult | null) => void;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\n/** Round to one decimal place — used when seeding a unit-switch. */\nconst round1 = (n: number): number => Math.round(n * 10) / 10;\n\nexport const BmiCalculator = forwardRef<HTMLDivElement, BmiCalculatorProps>(\n (\n { defaultUnitSystem = 'metric', onResultChange, id, width, className },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n const heightGroupId = useId();\n\n const [unitSystem, setUnitSystem] = useState<UnitSystem>(defaultUnitSystem);\n\n // Raw per-system inputs. Metric is canonical for cm/kg; imperial keeps\n // ft + in + lb so typing isn't fought by rounding round-trips.\n const [heightCm, setHeightCm] = useState<number | null>(null);\n const [weightKg, setWeightKg] = useState<number | null>(null);\n const [heightFt, setHeightFt] = useState<number | null>(null);\n const [heightIn, setHeightIn] = useState<number | null>(null);\n const [weightLb, setWeightLb] = useState<number | null>(null);\n\n const handleUnitChange = (next: string): void => {\n const target = next as UnitSystem;\n if (target === unitSystem) return;\n if (target === 'imperial') {\n if (heightCm !== null) {\n const { ft, in: inches } = cmToFtIn(heightCm);\n setHeightFt(ft);\n setHeightIn(round1(inches));\n }\n if (weightKg !== null) setWeightLb(round1(kgToLb(weightKg)));\n } else {\n if (heightFt !== null || heightIn !== null) {\n setHeightCm(round1(ftInToCm(heightFt ?? 0, heightIn ?? 0)));\n }\n if (weightLb !== null) setWeightKg(round1(lbToKg(weightLb)));\n }\n setUnitSystem(target);\n };\n\n /* Canonical metric figures for the active system. */\n const canonicalHeightCm =\n unitSystem === 'metric'\n ? heightCm\n : heightFt !== null || heightIn !== null\n ? ftInToCm(heightFt ?? 0, heightIn ?? 0)\n : null;\n const canonicalWeightKg =\n unitSystem === 'metric'\n ? weightKg\n : weightLb !== null\n ? lbToKg(weightLb)\n : null;\n\n const bmi = computeBmi(canonicalWeightKg, canonicalHeightCm);\n const category = bmi !== null ? bmiCategory(bmi) : null;\n\n const bmiFormatter = useMemo(\n () =>\n new Intl.NumberFormat(i18n.language, {\n minimumFractionDigits: 1,\n maximumFractionDigits: 1,\n }),\n [i18n.language],\n );\n\n // Notify consumers without re-firing on unrelated re-renders.\n useEffect(() => {\n onResultChange?.(\n bmi !== null && category !== null ? { bmi, category } : null,\n );\n }, [bmi, category, onResultChange]);\n\n const isMetric = unitSystem === 'metric';\n\n return (\n <div\n ref={ref}\n data-component=\"bmi-calculator\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <RadioGroup\n label={t('bmiCalculator.unitSystem.label')}\n variant=\"horizontal\"\n value={unitSystem}\n onValueChange={handleUnitChange}\n >\n <Radio label={t('bmiCalculator.unitSystem.metric')} value=\"metric\" />\n <Radio\n label={t('bmiCalculator.unitSystem.imperial')}\n value=\"imperial\"\n />\n </RadioGroup>\n\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n {isMetric ? (\n <FormField\n label={`${t('bmiCalculator.height')} (${t('bmiCalculator.units.cm')})`}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.5}\n value={heightCm}\n onChange={setHeightCm}\n />\n </FormField>\n ) : (\n <div role=\"group\" aria-labelledby={heightGroupId}>\n <span\n id={heightGroupId}\n className=\"type-label ds:mb-[var(--spacing-xs)] ds:block ds:text-foreground\"\n >\n {t('bmiCalculator.height')}\n </span>\n <div className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <NumberInput\n mode=\"integer\"\n min={0}\n value={heightFt}\n onChange={setHeightFt}\n aria-label={t('bmiCalculator.feet')}\n />\n <span className=\"type-label ds:text-muted-foreground\">\n {t('bmiCalculator.units.ft')}\n </span>\n <NumberInput\n mode=\"decimal\"\n min={0}\n max={11.9}\n step={0.5}\n value={heightIn}\n onChange={setHeightIn}\n aria-label={t('bmiCalculator.inches')}\n />\n <span className=\"type-label ds:text-muted-foreground\">\n {t('bmiCalculator.units.in')}\n </span>\n </div>\n </div>\n )}\n\n <FormField\n label={`${t('bmiCalculator.weight')} (${t(\n isMetric ? 'bmiCalculator.units.kg' : 'bmiCalculator.units.lb',\n )})`}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={isMetric ? 0.1 : 0.5}\n value={isMetric ? weightKg : weightLb}\n onChange={isMetric ? setWeightKg : setWeightLb}\n />\n </FormField>\n </div>\n\n {/* Concise polite announcement when the result resolves — the gauge\n itself stays out of the live region to avoid re-reading on every\n keystroke. */}\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {bmi !== null && category !== null\n ? t('bmiCalculator.gaugeAria', {\n bmi: bmiFormatter.format(bmi),\n category: t(`bmiCalculator.category.${category}`),\n })\n : ''}\n </p>\n\n {bmi !== null && category !== null ? (\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-md)] ds:sm:flex-row ds:sm:items-center ds:sm:gap-[var(--spacing-lg)]\">\n <Chart\n type=\"radialBar\"\n title={t('bmiCalculator.gaugeAria', {\n bmi: bmiFormatter.format(bmi),\n category: t(`bmiCalculator.category.${category}`),\n })}\n series={[bmiToGaugePercent(bmi)]}\n labels={[t(`bmiCalculator.category.${category}`)]}\n radialValueFormatter={() => bmiFormatter.format(bmi)}\n height={240}\n width={240}\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('bmiCalculator.category.label')}\n </span>\n <Badge variant={CATEGORY_BADGE[category]} size=\"lg\">\n {t(`bmiCalculator.category.${category}`)}\n </Badge>\n <p className=\"type-body ds:text-muted-foreground\">\n {t(`bmiCalculator.range.${category}`)}\n </p>\n </div>\n </div>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('bmiCalculator.empty')}\n </p>\n )}\n </div>\n );\n },\n);\n\nBmiCalculator.displayName = 'BmiCalculator';\n"],"names":["KG_PER_LB","CM_PER_IN","IN_PER_FT","lbToKg","lb","kgToLb","kg","inToCm","inches","cmToIn","cm","cmToFtIn","totalInches","ft","ftInToCm","computeBmi","weightKg","heightCm","heightM","bmiCategory","bmi","BMI_GAUGE_MIN","BMI_GAUGE_MAX","bmiToGaugePercent","pct","rootVariants","cva","CATEGORY_BADGE","round1","n","BmiCalculator","forwardRef","defaultUnitSystem","onResultChange","id","width","className","ref","i18n","useTranslation","heightGroupId","useId","unitSystem","setUnitSystem","useState","setHeightCm","setWeightKg","heightFt","setHeightFt","heightIn","setHeightIn","weightLb","setWeightLb","handleUnitChange","next","target","canonicalHeightCm","canonicalWeightKg","category","bmiFormatter","useMemo","useEffect","isMetric","jsxs","RadioGroup","jsx","Radio","FormField","NumberInput","Chart","Badge"],"mappings":";;;;;;;;;;AAcO,MAAMA,IAAY,YAEZC,IAAY,MAEZC,IAAY,IAEZC,IAAS,CAACC,MAAuBA,IAAKJ,GACtCK,KAAS,CAACC,MAAuBA,IAAKN,GACtCO,KAAS,CAACC,MAA2BA,IAASP,GAC9CQ,KAAS,CAACC,MAAuBA,IAAKT;AAG5C,SAASU,GAASD,GAAwC;AAC/D,QAAME,IAAcH,GAAOC,CAAE,GACvBG,IAAK,KAAK,MAAMD,IAAcV,CAAS;AAC7C,SAAO,EAAE,IAAAW,GAAI,IAAID,IAAcC,IAAKX,EAAA;AACtC;AAGO,MAAMY,IAAW,CAACD,GAAYL,MACnCD,GAAOM,IAAKX,IAAYM,CAAM;AAQzB,SAASO,GACdC,GACAC,GACe;AACf,MACED,MAAa,QACbC,MAAa,QACb,CAAC,OAAO,SAASD,CAAQ,KACzB,CAAC,OAAO,SAASC,CAAQ,KACzBD,KAAY,KACZC,KAAY;AAEZ,WAAO;AAET,QAAMC,IAAUD,IAAW;AAC3B,SAAOD,KAAYE,IAAUA;AAC/B;AAGO,SAASC,GAAYC,GAA0B;AACpD,SAAIA,IAAM,OAAa,gBACnBA,IAAM,KAAW,WACjBA,IAAM,KAAW,eACd;AACT;AAOO,MAAMC,IAAgB,IAChBC,KAAgB;AAGtB,SAASC,GAAkBH,GAAqB;AACrD,QAAMI,KAAQJ,IAAMC,MAAkBC,KAAgBD,KAAkB;AACxE,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGG,CAAG,CAAC;AACvC;AC/BA,MAAMC,KAAeC,EAAI,kDAAkD;AAAA,EACzE,UAAU;AAAA,IACR,OAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,IAAA;AAAA,EACR;AAAA,EAEF,iBAAiB,EAAE,OAAO,OAAA;AAC5B,CAAC,GAMKC,KAGF;AAAA,EACF,aAAa;AAAA,EACb,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,OAAO;AACT,GAcMC,IAAS,CAACC,MAAsB,KAAK,MAAMA,IAAI,EAAE,IAAI,IAE9CC,KAAgBC;AAAA,EAC3B,CACE,EAAE,mBAAAC,IAAoB,UAAU,gBAAAC,GAAgB,IAAAC,GAAI,OAAAC,GAAO,WAAAC,EAAA,GAC3DC,MACG;AACH,UAAM,EAAE,GAAG,MAAAC,EAAA,IAASC,EAAA,GACdC,IAAgBC,EAAA,GAEhB,CAACC,GAAYC,CAAa,IAAIC,EAAqBZ,CAAiB,GAIpE,CAACf,GAAU4B,CAAW,IAAID,EAAwB,IAAI,GACtD,CAAC5B,GAAU8B,CAAW,IAAIF,EAAwB,IAAI,GACtD,CAACG,GAAUC,CAAW,IAAIJ,EAAwB,IAAI,GACtD,CAACK,GAAUC,CAAW,IAAIN,EAAwB,IAAI,GACtD,CAACO,GAAUC,CAAW,IAAIR,EAAwB,IAAI,GAEtDS,IAAmB,CAACC,MAAuB;AAC/C,YAAMC,IAASD;AACf,UAAIC,MAAWb,GACf;AAAA,YAAIa,MAAW,YAAY;AACzB,cAAItC,MAAa,MAAM;AACrB,kBAAM,EAAE,IAAAJ,GAAI,IAAIL,EAAA,IAAWG,GAASM,CAAQ;AAC5C,YAAA+B,EAAYnC,CAAE,GACdqC,EAAYtB,EAAOpB,CAAM,CAAC;AAAA,UAC5B;AACA,UAAIQ,MAAa,QAAMoC,EAAYxB,EAAOvB,GAAOW,CAAQ,CAAC,CAAC;AAAA,QAC7D;AACE,WAAI+B,MAAa,QAAQE,MAAa,SACpCJ,EAAYjB,EAAOd,EAASiC,KAAY,GAAGE,KAAY,CAAC,CAAC,CAAC,GAExDE,MAAa,QAAML,EAAYlB,EAAOzB,EAAOgD,CAAQ,CAAC,CAAC;AAE7D,QAAAR,EAAcY,CAAM;AAAA;AAAA,IACtB,GAGMC,IACJd,MAAe,WACXzB,IACA8B,MAAa,QAAQE,MAAa,OAChCnC,EAASiC,KAAY,GAAGE,KAAY,CAAC,IACrC,MACFQ,IACJf,MAAe,WACX1B,IACAmC,MAAa,OACXhD,EAAOgD,CAAQ,IACf,MAEF/B,IAAML,GAAW0C,GAAmBD,CAAiB,GACrDE,IAAWtC,MAAQ,OAAOD,GAAYC,CAAG,IAAI,MAE7CuC,IAAeC;AAAA,MACnB,MACE,IAAI,KAAK,aAAatB,EAAK,UAAU;AAAA,QACnC,uBAAuB;AAAA,QACvB,uBAAuB;AAAA,MAAA,CACxB;AAAA,MACH,CAACA,EAAK,QAAQ;AAAA,IAAA;AAIhB,IAAAuB,EAAU,MAAM;AACd,MAAA5B,KAAA,QAAAA;AAAA,QACEb,MAAQ,QAAQsC,MAAa,OAAO,EAAE,KAAAtC,GAAK,UAAAsC,MAAa;AAAA;AAAA,IAE5D,GAAG,CAACtC,GAAKsC,GAAUzB,CAAc,CAAC;AAElC,UAAM6B,IAAWpB,MAAe;AAEhC,WACE,gBAAAqB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAA1B;AAAA,QACA,kBAAe;AAAA,QACf,qBAAmBH;AAAA,QACnB,WAAWT,GAAa,EAAE,OAAAU,GAAO,WAAAC,GAAW;AAAA,QAE5C,UAAA;AAAA,UAAA,gBAAA2B;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,OAAO,EAAE,gCAAgC;AAAA,cACzC,SAAQ;AAAA,cACR,OAAOtB;AAAA,cACP,eAAeW;AAAA,cAEf,UAAA;AAAA,gBAAA,gBAAAY,EAACC,KAAM,OAAO,EAAE,iCAAiC,GAAG,OAAM,UAAS;AAAA,gBACnE,gBAAAD;AAAA,kBAACC;AAAA,kBAAA;AAAA,oBACC,OAAO,EAAE,mCAAmC;AAAA,oBAC5C,OAAM;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACR;AAAA,YAAA;AAAA,UAAA;AAAA,UAGF,gBAAAH,EAAC,OAAA,EAAI,WAAU,uEACZ,UAAA;AAAA,YAAAD,IACC,gBAAAG;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,GAAG,EAAE,sBAAsB,CAAC,KAAK,EAAE,wBAAwB,CAAC;AAAA,gBAEnE,UAAA,gBAAAF;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,OAAOnD;AAAA,oBACP,UAAU4B;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACZ;AAAA,YAAA,IAGF,gBAAAkB,EAAC,OAAA,EAAI,MAAK,SAAQ,mBAAiBvB,GACjC,UAAA;AAAA,cAAA,gBAAAyB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,IAAIzB;AAAA,kBACJ,WAAU;AAAA,kBAET,YAAE,sBAAsB;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE3B,gBAAAuB,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA;AAAA,gBAAA,gBAAAE;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAK;AAAA,oBACL,OAAOrB;AAAA,oBACP,UAAUC;AAAA,oBACV,cAAY,EAAE,oBAAoB;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEnC,QAAA,EAAK,WAAU,uCACb,UAAA,EAAE,wBAAwB,GAC7B;AAAA,gBACA,gBAAAiB;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAK;AAAA,oBACL,KAAK;AAAA,oBACL,MAAM;AAAA,oBACN,OAAOnB;AAAA,oBACP,UAAUC;AAAA,oBACV,cAAY,EAAE,sBAAsB;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAErC,QAAA,EAAK,WAAU,uCACb,UAAA,EAAE,wBAAwB,EAAA,CAC7B;AAAA,cAAA,EAAA,CACF;AAAA,YAAA,GACF;AAAA,YAGF,gBAAAe;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,OAAO,GAAG,EAAE,sBAAsB,CAAC,KAAK;AAAA,kBACtCL,IAAW,2BAA2B;AAAA,gBAAA,CACvC;AAAA,gBAED,UAAA,gBAAAG;AAAA,kBAACG;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,KAAK;AAAA,oBACL,MAAMN,IAAW,MAAM;AAAA,oBACvB,OAAOA,IAAW9C,IAAWmC;AAAA,oBAC7B,UAAUW,IAAWhB,IAAcM;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACrC;AAAA,YAAA;AAAA,UACF,GACF;AAAA,UAKA,gBAAAa,EAAC,KAAA,EAAE,WAAU,cAAa,MAAK,UAAS,aAAU,UAC/C,UAAA7C,MAAQ,QAAQsC,MAAa,OAC1B,EAAE,2BAA2B;AAAA,YAC3B,KAAKC,EAAa,OAAOvC,CAAG;AAAA,YAC5B,UAAU,EAAE,0BAA0BsC,CAAQ,EAAE;AAAA,UAAA,CACjD,IACD,GAAA,CACN;AAAA,UAECtC,MAAQ,QAAQsC,MAAa,OAC5B,gBAAAK,EAAC,OAAA,EAAI,WAAU,kIACb,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAACI;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,OAAO,EAAE,2BAA2B;AAAA,kBAClC,KAAKV,EAAa,OAAOvC,CAAG;AAAA,kBAC5B,UAAU,EAAE,0BAA0BsC,CAAQ,EAAE;AAAA,gBAAA,CACjD;AAAA,gBACD,QAAQ,CAACnC,GAAkBH,CAAG,CAAC;AAAA,gBAC/B,QAAQ,CAAC,EAAE,0BAA0BsC,CAAQ,EAAE,CAAC;AAAA,gBAChD,sBAAsB,MAAMC,EAAa,OAAOvC,CAAG;AAAA,gBACnD,QAAQ;AAAA,gBACR,OAAO;AAAA,cAAA;AAAA,YAAA;AAAA,YAET,gBAAA2C,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,cAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,uCACb,UAAA,EAAE,8BAA8B,GACnC;AAAA,cACA,gBAAAA,EAACK,GAAA,EAAM,SAAS3C,GAAe+B,CAAQ,GAAG,MAAK,MAC5C,UAAA,EAAE,0BAA0BA,CAAQ,EAAE,EAAA,CACzC;AAAA,cACA,gBAAAO,EAAC,OAAE,WAAU,sCACV,YAAE,uBAAuBP,CAAQ,EAAE,EAAA,CACtC;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,GACF,IAEA,gBAAAO,EAAC,KAAA,EAAE,WAAU,sCACV,UAAA,EAAE,qBAAqB,EAAA,CAC1B;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AACF;AAEAnC,GAAc,cAAc;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"chat-message-D53_fH2w.js","sources":["../../node_modules/lucide-react/dist/esm/icons/rotate-ccw.js","../../src/components/chat-message/chat-message.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.8.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"1357e3\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }]\n];\nconst RotateCcw = createLucideIcon(\"rotate-ccw\", __iconNode);\n\nexport { __iconNode, RotateCcw as default };\n//# sourceMappingURL=rotate-ccw.js.map\n","import {\n forwardRef,\n Fragment,\n useMemo,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { AlertCircle, Check, Clock, RotateCcw } from 'lucide-react';\nimport { Button } from '../button';\nimport { Avatar } from '../avatar';\nimport { Timestamp } from '../timestamp';\nimport { safeImageSrc } from '../_shared';\n\n/* ------------------------------------------------------------------ */\n/* Types */\n/* ------------------------------------------------------------------ */\n\nexport type ChatMessageRole = 'user' | 'assistant' | 'system';\nexport type ChatMessageStatus = 'sending' | 'sent' | 'error' | 'edited';\n\nexport interface ChatMessageAvatar {\n name?: string;\n src?: string;\n /**\n * Optional custom avatar node. When provided, it REPLACES the built-in\n * `<Avatar>` (initials / image) for this message. Used by the Alia\n * pattern to render a Sparkles identity tile instead of an avatar, and\n * by consumers that want to swap in a user-icon chip, brand glyph, etc.\n * The caller is responsible for accessible labelling on the custom node\n * — ChatMessage's own `aria-label` already announces the role/time, so\n * purely decorative nodes can be `aria-hidden`.\n */\n slot?: ReactNode;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst rowVariants = cva(\n 'ds:flex ds:w-full ds:items-start ds:gap-[var(--spacing-sm)]',\n {\n variants: {\n role: {\n user: 'ds:flex-row-reverse',\n assistant: 'ds:flex-row',\n system: 'ds:flex-col ds:items-center ds:text-center',\n },\n },\n defaultVariants: { role: 'assistant' },\n },\n);\n\nconst bubbleVariants = cva(\n [\n // Cap at 42rem on wide surfaces; on narrow docks (Alia sidebar ≈22rem)\n // leave room for the avatar column (size-8 = 32px = --spacing-xl) +\n // `gap-sm` (8px = --spacing-sm) so avatars don't clip off the inline\n // edge when the row is width-constrained.\n 'ds:relative ds:max-w-[min(42rem,calc(100%-var(--spacing-xl)-var(--spacing-sm)))]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)]',\n 'type-body',\n 'ds:break-words',\n ].join(' '),\n {\n variants: {\n role: {\n user: 'ds:bg-[color:var(--primary)] ds:text-[color:var(--primary-foreground)] ds:rounded-[var(--radius-md)] ds:rounded-ee-[var(--radius-sm)]',\n assistant:\n 'ds:bg-muted/40 ds:text-foreground ds:rounded-[var(--radius-md)] ds:rounded-es-[var(--radius-sm)]',\n system:\n 'ds:bg-transparent ds:text-[color:var(--muted-foreground)] type-body-sm ds:italic',\n },\n },\n defaultVariants: { role: 'assistant' },\n },\n);\n\n/* ------------------------------------------------------------------ */\n/* Safe markdown-ish (bold, inline code, line-breaks, links as text) */\n/* No dangerouslySetInnerHTML. */\n/* ------------------------------------------------------------------ */\n\ntype Token =\n | { type: 'text'; value: string }\n | { type: 'bold'; value: string }\n | { type: 'code'; value: string }\n | { type: 'br' }\n | { type: 'link'; label: string; href: string };\n\nconst SAFE_SCHEMES = /^(https?:|mailto:)/i;\n\nfunction tokenize(input: string): Token[] {\n const tokens: Token[] = [];\n let remaining = input;\n const pattern = /\\*\\*([^*]+)\\*\\*|`([^`]+)`|\\[([^\\]]+)\\]\\(([^)]+)\\)|\\n/;\n while (remaining.length > 0) {\n const match = pattern.exec(remaining);\n if (!match) {\n tokens.push({ type: 'text', value: remaining });\n break;\n }\n if (match.index > 0) {\n tokens.push({ type: 'text', value: remaining.slice(0, match.index) });\n }\n if (match[1] !== undefined) {\n tokens.push({ type: 'bold', value: match[1] });\n } else if (match[2] !== undefined) {\n tokens.push({ type: 'code', value: match[2] });\n } else if (match[3] !== undefined && match[4] !== undefined) {\n tokens.push({ type: 'link', label: match[3], href: match[4] });\n } else {\n tokens.push({ type: 'br' });\n }\n remaining = remaining.slice(match.index + match[0].length);\n }\n return tokens;\n}\n\nfunction renderBody(input: string): ReactNode {\n return tokenize(input).map((tok, i) => {\n if (tok.type === 'bold') return <strong key={i}>{tok.value}</strong>;\n if (tok.type === 'code') {\n return (\n <code\n key={i}\n dir=\"ltr\"\n className=\"ds:rounded-[var(--radius-sm)] ds:bg-muted/30 ds:ps-[var(--spacing-xs)] ds:pe-[var(--spacing-xs)] ds:font-[family-name:var(--font-mono)]\"\n >\n {tok.value}\n </code>\n );\n }\n if (tok.type === 'br') return <br key={i} />;\n if (tok.type === 'link') {\n if (!SAFE_SCHEMES.test(tok.href)) {\n // Unsafe scheme (javascript:, data:) — render as inert text.\n return <Fragment key={i}>{tok.label}</Fragment>;\n }\n return (\n <a\n key={i}\n href={tok.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"ds:underline ds:underline-offset-2 ds:hover:opacity-80\"\n >\n {tok.label}\n </a>\n );\n }\n return <Fragment key={i}>{tok.value}</Fragment>;\n });\n}\n\n/* ------------------------------------------------------------------ */\n/* ChatMessage */\n/* ------------------------------------------------------------------ */\n\ntype NativeProps = Omit<HTMLAttributes<HTMLElement>, 'content' | 'role'>;\n\nexport interface ChatMessageProps\n extends NativeProps, VariantProps<typeof bubbleVariants> {\n role: ChatMessageRole;\n content: string;\n avatar?: ChatMessageAvatar;\n timestamp?: Date | number | string;\n status?: ChatMessageStatus;\n /** Parse a small, safe subset of markdown. Never renders raw HTML. */\n renderMarkdown?: boolean;\n /** Invoked when the retry button is activated (error status only). */\n onRetry?: () => void;\n}\n\nexport const ChatMessage = forwardRef<HTMLElement, ChatMessageProps>(\n (\n {\n role,\n content,\n avatar,\n timestamp,\n status,\n renderMarkdown = false,\n onRetry,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n // Local format — used for the aria-label interpolation only. Visible\n // label is rendered by `<Timestamp>` below, which computes the same\n // locale-aware HH:MM internally.\n const formattedTime = useMemo(() => {\n if (!timestamp) return null;\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp);\n if (Number.isNaN(date.getTime())) return null;\n return new Intl.DateTimeFormat(i18n.language, {\n hour: '2-digit',\n minute: '2-digit',\n }).format(date);\n }, [timestamp, i18n.language]);\n\n const roleLabel = t(`chat.message.role.${role}`);\n const messageLabel = formattedTime\n ? t('chat.message.label', { role: roleLabel, time: formattedTime })\n : t('chat.message.labelNoTime', { role: roleLabel });\n\n const body = renderMarkdown ? renderBody(content) : content;\n\n const statusIcon = (() => {\n if (!status || status === 'edited') return null;\n if (status === 'sending')\n return <Clock aria-hidden=\"true\" className=\"ds:size-3.5\" />;\n if (status === 'sent')\n return <Check aria-hidden=\"true\" className=\"ds:size-3.5\" />;\n return (\n <AlertCircle\n aria-hidden=\"true\"\n className=\"ds:size-3.5 ds:text-[color:var(--destructive)]\"\n />\n );\n })();\n\n const statusText = status ? t(`chat.message.status.${status}`) : null;\n\n return (\n <article\n ref={ref}\n aria-label={messageLabel}\n data-component=\"chat-message\"\n className={[\n rowVariants({ role, className }),\n // Entrance: fade + slide up on mount. `--animation-duration` is 0ms\n // under `prefers-reduced-motion` and `.theme-accessible`, so both\n // collapse the animation to an instant state change automatically.\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0 ds:motion-safe:slide-in-from-bottom-2',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n {...rest}\n >\n {role !== 'system' && avatar ? (\n avatar.slot ? (\n // Consumer-supplied avatar node (e.g. Alia's Sparkles tile).\n avatar.slot\n ) : (\n // Allow-list the src: LLM-supplied values can carry\n // `javascript:` / `data:text/html` / `data:image/svg+xml` and so\n // are scrubbed here before reaching <Avatar>. Fallback to initials.\n <Avatar\n name={avatar.name}\n src={safeImageSrc(avatar.src)}\n size=\"sm\"\n />\n )\n ) : null}\n\n <div\n className={[\n // min-w-0 allows this flex item to shrink below its content's\n // natural width — without it, a single unbreakable token (URL,\n // CJK run, hash) can force the bubble wider than the parent\n // and spill outside narrow containers like the Alia sidebar.\n 'ds:flex ds:flex-col ds:min-w-0',\n role === 'user'\n ? 'ds:items-end'\n : role === 'assistant'\n ? 'ds:items-start'\n : 'ds:items-center',\n ].join(' ')}\n >\n <div\n dir=\"auto\"\n className={[\n bubbleVariants({ role }),\n // `break-words` (from bubbleVariants) handles soft hyphens;\n // `overflow-wrap: anywhere` is the last-resort break for\n // URLs, hashes, or CJK runs that would otherwise push the\n // bubble wider than its parent in narrow docks like Alia.\n 'ds:[overflow-wrap:anywhere]',\n ].join(' ')}\n >\n {body}\n </div>\n\n {(formattedTime || statusText) && role !== 'system' ? (\n <div\n className={[\n 'ds:mt-[var(--spacing-xs)] ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'type-meta ds:text-[color:var(--muted-foreground)]',\n ].join(' ')}\n >\n {timestamp ? (\n <Timestamp\n value={timestamp}\n format=\"absolute\"\n absoluteFormat={{ hour: '2-digit', minute: '2-digit' }}\n dir=\"ltr\"\n />\n ) : null}\n {statusIcon ? (\n // `key={status}` re-mounts the span on every status change so\n // `animate-in` re-runs — gives the sending → sent → error\n // swap a subtle cross-fade instead of an abrupt pop.\n <span\n key={status}\n className={[\n 'ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]',\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n >\n {statusIcon}\n <span className=\"ds:sr-only\">{statusText}</span>\n </span>\n ) : null}\n {status === 'error' && onRetry ? (\n <Button\n intent=\"ghost\"\n size=\"sm\"\n onClick={onRetry}\n startIcon={<RotateCcw />}\n >\n {t('chat.message.retry')}\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n </article>\n );\n },\n);\n\nChatMessage.displayName = 'ChatMessage';\n"],"names":["__iconNode","RotateCcw","createLucideIcon","rowVariants","cva","bubbleVariants","SAFE_SCHEMES","tokenize","input","tokens","remaining","pattern","match","renderBody","tok","i","jsx","Fragment","ChatMessage","forwardRef","role","content","avatar","timestamp","status","renderMarkdown","onRetry","className","rest","ref","t","i18n","useTranslation","formattedTime","useMemo","date","roleLabel","messageLabel","body","statusIcon","Clock","Check","AlertCircle","statusText","jsxs","Avatar","safeImageSrc","Timestamp","Button"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,173 +0,0 @@
1
- import { jsxs as o, jsx as t } from "react/jsx-runtime";
2
- import { forwardRef as I, useState as g, useMemo as C, useEffect as M } from "react";
3
- import { c as O } from "./index-D2ZczOXr.js";
4
- import { useTranslation as k } from "react-i18next";
5
- import { R as i } from "./radio-TWf9Q-mp.js";
6
- import { R as A } from "./radio-group-BcF92GEF.js";
7
- import { F as E } from "./form-field-BOm9hK35.js";
8
- import { D as $ } from "./date-picker-CXFpu-qY.js";
9
- import { N as G } from "./number-input-Dj5L3pXK.js";
10
- import { B as R } from "./badge-zsf5i5bH.js";
11
- import { a as b, d as Y } from "./react-day-picker-DYDdR8Vv.js";
12
- import { s as x } from "./subDays-D-WYRpdW.js";
13
- const B = 280, L = 14, T = 266, D = 28;
14
- function V(s) {
15
- if (s < 0) return "preconception";
16
- const l = Math.floor(s / 7);
17
- return l < 14 ? "first" : l < 28 ? "second" : l < 42 ? "third" : "postterm";
18
- }
19
- function z(s, l) {
20
- const { method: u, date: d } = s;
21
- let c, n;
22
- if (u === "lmp") {
23
- const r = s.cycleLength ?? D;
24
- c = d, n = b(d, B + (r - D));
25
- } else if (u === "conception")
26
- c = x(d, L), n = b(d, T);
27
- else {
28
- const r = s.embryoAge ?? 5, f = x(d, r);
29
- c = x(f, L), n = b(f, T);
30
- }
31
- const e = Y(l, c), m = e < 0 ? null : {
32
- weeks: Math.floor(e / 7),
33
- days: e % 7,
34
- totalDays: e
35
- };
36
- return {
37
- dueDate: n,
38
- gestationalStart: c,
39
- gestationalAge: m,
40
- trimester: V(e)
41
- };
42
- }
43
- const P = O("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
44
- variants: {
45
- width: { full: "ds:w-full", auto: "ds:inline-flex" }
46
- },
47
- defaultVariants: { width: "full" }
48
- }), j = {
49
- preconception: "neutral",
50
- first: "info",
51
- second: "success",
52
- third: "warning",
53
- postterm: "error"
54
- }, H = {
55
- lmp: "dueDateCalculator.lmpDate",
56
- conception: "dueDateCalculator.conceptionDate",
57
- ivf: "dueDateCalculator.transferDate"
58
- }, K = I(({ defaultMethod: s = "lmp", onResultChange: l, id: u, width: d, className: c }, n) => {
59
- const { t: e, i18n: m } = k(), [r, f] = g(s), [p, w] = g(void 0), [h, _] = g(
60
- D
61
- ), [y, F] = g(5), a = C(() => p ? z(
62
- {
63
- method: r,
64
- date: p,
65
- cycleLength: h ?? D,
66
- embryoAge: y
67
- },
68
- /* @__PURE__ */ new Date()
69
- ) : null, [r, p, h, y]), N = C(
70
- () => new Intl.DateTimeFormat(m.language, { dateStyle: "long" }),
71
- [m.language]
72
- );
73
- M(() => {
74
- l == null || l(a);
75
- }, [a, l]);
76
- const S = C(() => /* @__PURE__ */ new Date(), []);
77
- return /* @__PURE__ */ o(
78
- "div",
79
- {
80
- ref: n,
81
- "data-component": "due-date-calculator",
82
- "data-component-id": u,
83
- className: P({ width: d, className: c }),
84
- children: [
85
- /* @__PURE__ */ o(
86
- A,
87
- {
88
- label: e("dueDateCalculator.method.label"),
89
- variant: "horizontal",
90
- value: r,
91
- onValueChange: (v) => f(v),
92
- children: [
93
- /* @__PURE__ */ t(i, { label: e("dueDateCalculator.method.lmp"), value: "lmp" }),
94
- /* @__PURE__ */ t(
95
- i,
96
- {
97
- label: e("dueDateCalculator.method.conception"),
98
- value: "conception"
99
- }
100
- ),
101
- /* @__PURE__ */ t(i, { label: e("dueDateCalculator.method.ivf"), value: "ivf" })
102
- ]
103
- }
104
- ),
105
- /* @__PURE__ */ o("div", { className: "ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2", children: [
106
- /* @__PURE__ */ t(E, { label: e(H[r]), children: /* @__PURE__ */ t($, { value: p, onChange: w, maxDate: S }) }),
107
- r === "lmp" && /* @__PURE__ */ t(
108
- E,
109
- {
110
- label: e("dueDateCalculator.cycleLength"),
111
- description: e("dueDateCalculator.cycleLengthHint"),
112
- children: /* @__PURE__ */ t(
113
- G,
114
- {
115
- mode: "integer",
116
- min: 20,
117
- max: 45,
118
- value: h,
119
- onChange: _
120
- }
121
- )
122
- }
123
- ),
124
- r === "ivf" && /* @__PURE__ */ o(
125
- A,
126
- {
127
- label: e("dueDateCalculator.embryoAge"),
128
- variant: "horizontal",
129
- value: String(y),
130
- onValueChange: (v) => F(Number(v)),
131
- children: [
132
- /* @__PURE__ */ t(i, { label: e("dueDateCalculator.day3"), value: "3" }),
133
- /* @__PURE__ */ t(i, { label: e("dueDateCalculator.day5"), value: "5" })
134
- ]
135
- }
136
- )
137
- ] }),
138
- /* @__PURE__ */ t("p", { className: "ds:sr-only", role: "status", "aria-live": "polite", children: a ? `${e("dueDateCalculator.result.dueDateLabel")}: ${N.format(
139
- a.dueDate
140
- )}. ${e("dueDateCalculator.result.trimesterLabel")}: ${e(
141
- `dueDateCalculator.trimester.${a.trimester}`
142
- )}.` : "" }),
143
- a ? /* @__PURE__ */ o("dl", { className: "ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3", children: [
144
- /* @__PURE__ */ o("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
145
- /* @__PURE__ */ t("dt", { className: "type-label ds:text-muted-foreground", children: e("dueDateCalculator.result.dueDateLabel") }),
146
- /* @__PURE__ */ t("dd", { className: "type-metric ds:text-foreground", children: N.format(a.dueDate) })
147
- ] }),
148
- /* @__PURE__ */ o("div", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]", children: [
149
- /* @__PURE__ */ t("dt", { className: "type-label ds:text-muted-foreground", children: e("dueDateCalculator.result.gestationLabel") }),
150
- /* @__PURE__ */ t("dd", { className: "type-body ds:text-foreground", children: a.gestationalAge ? e("dueDateCalculator.result.gestation", {
151
- weeks: a.gestationalAge.weeks,
152
- days: a.gestationalAge.days
153
- }) : "—" })
154
- ] }),
155
- /* @__PURE__ */ o("div", { className: "ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]", children: [
156
- /* @__PURE__ */ t("dt", { className: "type-label ds:text-muted-foreground", children: e("dueDateCalculator.result.trimesterLabel") }),
157
- /* @__PURE__ */ t("dd", { children: /* @__PURE__ */ t(R, { variant: j[a.trimester], size: "lg", children: e(`dueDateCalculator.trimester.${a.trimester}`) }) })
158
- ] })
159
- ] }) : /* @__PURE__ */ t("p", { className: "type-body ds:text-muted-foreground", children: e("dueDateCalculator.empty") })
160
- ]
161
- }
162
- );
163
- });
164
- K.displayName = "DueDateCalculator";
165
- export {
166
- D,
167
- B as G,
168
- T,
169
- K as a,
170
- z as c,
171
- V as t
172
- };
173
- //# sourceMappingURL=due-date-calculator-kf9U_g7O.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"due-date-calculator-kf9U_g7O.js","sources":["../../src/components/due-date-calculator/gestation.ts","../../src/components/due-date-calculator/due-date-calculator.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* Estimated-due-date maths — pure, framework-free, unit-testable. */\n/* */\n/* All three methods are normalised onto a single \"gestational start\" */\n/* (the notional first day of the last menstrual period, GA day 0) so */\n/* gestational age and trimester are computed identically regardless */\n/* of how the pregnancy was dated. */\n/* ------------------------------------------------------------------ */\n\nimport { addDays, subDays, differenceInCalendarDays } from 'date-fns';\n\nexport type DueDateMethod = 'lmp' | 'conception' | 'ivf';\n\n/** Embryo age at transfer, in days (cleavage vs blastocyst). */\nexport type EmbryoAge = 3 | 5;\n\nexport type Trimester =\n | 'preconception'\n | 'first'\n | 'second'\n | 'third'\n | 'postterm';\n\n/** Naegele's rule: a term pregnancy is 280 days from the LMP. */\nexport const GESTATION_DAYS = 280;\n/** Ovulation/conception sits ~14 days after the LMP in a 28-day cycle. */\nexport const CONCEPTION_OFFSET_DAYS = 14;\n/** A term pregnancy is 266 days from conception. */\nexport const TERM_FROM_CONCEPTION_DAYS = 266;\n/** Standard menstrual-cycle length Naegele assumes. */\nexport const DEFAULT_CYCLE_LENGTH = 28;\n\nexport interface DueDateInput {\n method: DueDateMethod;\n /** The reference date for the chosen method (LMP / conception / transfer). */\n date: Date;\n /** LMP only — average cycle length in days. Defaults to 28. */\n cycleLength?: number;\n /** IVF only — embryo age at transfer in days. Defaults to 5 (blastocyst). */\n embryoAge?: EmbryoAge;\n}\n\nexport interface GestationalAge {\n weeks: number;\n days: number;\n totalDays: number;\n}\n\nexport interface DueDateResult {\n /** Estimated date of delivery. */\n dueDate: Date;\n /** GA day-0 anchor (notional LMP) the trimester maths counts from. */\n gestationalStart: Date;\n /** Gestational age as of `today`; `null` before conception. */\n gestationalAge: GestationalAge | null;\n trimester: Trimester;\n}\n\n/** Classify gestational age (in completed weeks) into a trimester. */\nexport function trimesterForWeeks(totalDays: number): Trimester {\n if (totalDays < 0) return 'preconception';\n const weeks = Math.floor(totalDays / 7);\n if (weeks < 14) return 'first';\n if (weeks < 28) return 'second';\n if (weeks < 42) return 'third';\n return 'postterm';\n}\n\n/**\n * Resolve the gestational start (notional LMP) and due date for a method.\n * `cycleLength` shifts a longer/shorter cycle's ovulation, moving the due\n * date while GA stays counted from the LMP — the standard convention.\n */\nexport function computeDueDate(\n input: DueDateInput,\n today: Date,\n): DueDateResult {\n const { method, date } = input;\n\n let gestationalStart: Date;\n let dueDate: Date;\n\n if (method === 'lmp') {\n const cycle = input.cycleLength ?? DEFAULT_CYCLE_LENGTH;\n gestationalStart = date;\n dueDate = addDays(date, GESTATION_DAYS + (cycle - DEFAULT_CYCLE_LENGTH));\n } else if (method === 'conception') {\n gestationalStart = subDays(date, CONCEPTION_OFFSET_DAYS);\n dueDate = addDays(date, TERM_FROM_CONCEPTION_DAYS);\n } else {\n // IVF: back out the conception (egg-retrieval) date from the transfer.\n const embryo = input.embryoAge ?? 5;\n const conceptionDate = subDays(date, embryo);\n gestationalStart = subDays(conceptionDate, CONCEPTION_OFFSET_DAYS);\n dueDate = addDays(conceptionDate, TERM_FROM_CONCEPTION_DAYS);\n }\n\n const totalDays = differenceInCalendarDays(today, gestationalStart);\n const gestationalAge: GestationalAge | null =\n totalDays < 0\n ? null\n : {\n weeks: Math.floor(totalDays / 7),\n days: totalDays % 7,\n totalDays,\n };\n\n return {\n dueDate,\n gestationalStart,\n gestationalAge,\n trimester: trimesterForWeeks(totalDays),\n };\n}\n","/* ------------------------------------------------------------------ */\n/* DueDateCalculator — estimate the date of delivery from one of three */\n/* dating methods, with current gestational age + trimester. */\n/* */\n/* - Maths lives in `./gestation` (pure, separately tested). */\n/* - Three methods: LMP (Naegele, cycle-length adjustable), conception, */\n/* and IVF transfer (Day-3 vs Day-5 embryo). */\n/* - The reference date can't be in the future, so the DatePicker caps */\n/* at today. */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Badge } from '../badge';\nimport {\n type DueDateMethod,\n type EmbryoAge,\n type Trimester,\n type DueDateResult,\n computeDueDate,\n DEFAULT_CYCLE_LENGTH,\n} from './gestation';\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\nconst TRIMESTER_BADGE: Record<\n Trimester,\n 'neutral' | 'info' | 'success' | 'warning' | 'error'\n> = {\n preconception: 'neutral',\n first: 'info',\n second: 'success',\n third: 'warning',\n postterm: 'error',\n};\n\n/** Reference-date i18n key per method. */\nconst DATE_LABEL_KEY: Record<DueDateMethod, string> = {\n lmp: 'dueDateCalculator.lmpDate',\n conception: 'dueDateCalculator.conceptionDate',\n ivf: 'dueDateCalculator.transferDate',\n};\n\nexport interface DueDateCalculatorProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial dating method. Defaults to `'lmp'`. */\n defaultMethod?: DueDateMethod;\n /** Fires whenever a due date can be computed (and with `null` when it can't). */\n onResultChange?: (result: DueDateResult | null) => void;\n /** 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 DueDateCalculator = forwardRef<\n HTMLDivElement,\n DueDateCalculatorProps\n>(({ defaultMethod = 'lmp', onResultChange, id, width, className }, ref) => {\n const { t, i18n } = useTranslation();\n\n const [method, setMethod] = useState<DueDateMethod>(defaultMethod);\n const [refDate, setRefDate] = useState<Date | undefined>(undefined);\n const [cycleLength, setCycleLength] = useState<number | null>(\n DEFAULT_CYCLE_LENGTH,\n );\n const [embryoAge, setEmbryoAge] = useState<EmbryoAge>(5);\n\n // `today` is captured once per render; the result re-derives from it.\n const result = useMemo<DueDateResult | null>(() => {\n if (!refDate) return null;\n return computeDueDate(\n {\n method,\n date: refDate,\n cycleLength: cycleLength ?? DEFAULT_CYCLE_LENGTH,\n embryoAge,\n },\n new Date(),\n );\n }, [method, refDate, cycleLength, embryoAge]);\n\n const dateFormatter = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'long' }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n const today = useMemo(() => new Date(), []);\n\n return (\n <div\n ref={ref}\n data-component=\"due-date-calculator\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <RadioGroup\n label={t('dueDateCalculator.method.label')}\n variant=\"horizontal\"\n value={method}\n onValueChange={(next) => setMethod(next as DueDateMethod)}\n >\n <Radio label={t('dueDateCalculator.method.lmp')} value=\"lmp\" />\n <Radio\n label={t('dueDateCalculator.method.conception')}\n value=\"conception\"\n />\n <Radio label={t('dueDateCalculator.method.ivf')} value=\"ivf\" />\n </RadioGroup>\n\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField label={t(DATE_LABEL_KEY[method])}>\n <DatePicker value={refDate} onChange={setRefDate} maxDate={today} />\n </FormField>\n\n {method === 'lmp' && (\n <FormField\n label={t('dueDateCalculator.cycleLength')}\n description={t('dueDateCalculator.cycleLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={20}\n max={45}\n value={cycleLength}\n onChange={setCycleLength}\n />\n </FormField>\n )}\n\n {method === 'ivf' && (\n <RadioGroup\n label={t('dueDateCalculator.embryoAge')}\n variant=\"horizontal\"\n value={String(embryoAge)}\n onValueChange={(next) => setEmbryoAge(Number(next) as EmbryoAge)}\n >\n <Radio label={t('dueDateCalculator.day3')} value=\"3\" />\n <Radio label={t('dueDateCalculator.day5')} value=\"5\" />\n </RadioGroup>\n )}\n </div>\n\n {/* Concise polite announcement when a due date resolves. */}\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('dueDateCalculator.result.dueDateLabel')}: ${dateFormatter.format(\n result.dueDate,\n )}. ${t('dueDateCalculator.result.trimesterLabel')}: ${t(\n `dueDateCalculator.trimester.${result.trimester}`,\n )}.`\n : ''}\n </p>\n\n {result ? (\n <dl className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3\">\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('dueDateCalculator.result.dueDateLabel')}\n </dt>\n <dd className=\"type-metric ds:text-foreground\">\n {dateFormatter.format(result.dueDate)}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('dueDateCalculator.result.gestationLabel')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {result.gestationalAge\n ? t('dueDateCalculator.result.gestation', {\n weeks: result.gestationalAge.weeks,\n days: result.gestationalAge.days,\n })\n : '—'}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('dueDateCalculator.result.trimesterLabel')}\n </dt>\n <dd>\n <Badge variant={TRIMESTER_BADGE[result.trimester]} size=\"lg\">\n {t(`dueDateCalculator.trimester.${result.trimester}`)}\n </Badge>\n </dd>\n </div>\n </dl>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('dueDateCalculator.empty')}\n </p>\n )}\n </div>\n );\n});\n\nDueDateCalculator.displayName = 'DueDateCalculator';\n"],"names":["GESTATION_DAYS","CONCEPTION_OFFSET_DAYS","TERM_FROM_CONCEPTION_DAYS","DEFAULT_CYCLE_LENGTH","trimesterForWeeks","totalDays","weeks","computeDueDate","input","today","method","date","gestationalStart","dueDate","cycle","addDays","subDays","embryo","conceptionDate","differenceInCalendarDays","gestationalAge","rootVariants","cva","TRIMESTER_BADGE","DATE_LABEL_KEY","DueDateCalculator","forwardRef","defaultMethod","onResultChange","id","width","className","ref","t","i18n","useTranslation","setMethod","useState","refDate","setRefDate","cycleLength","setCycleLength","embryoAge","setEmbryoAge","result","useMemo","dateFormatter","useEffect","jsxs","RadioGroup","next","jsx","Radio","FormField","DatePicker","NumberInput","Badge"],"mappings":"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"}