@alfadocs/ui-kit-debug 1.3.13 → 1.4.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 (348) hide show
  1. package/dist/_chunks/agenda-card.agent-Cb5tuEh3.js +28 -0
  2. package/dist/_chunks/agenda-card.agent-Cb5tuEh3.js.map +1 -0
  3. package/dist/_chunks/{alia-sidebar-DzNz1gDf.js → alia-sidebar-DSBZMick.js} +3 -3
  4. package/dist/_chunks/{alia-sidebar-DzNz1gDf.js.map → alia-sidebar-DSBZMick.js.map} +1 -1
  5. package/dist/_chunks/{anamnesis-i18n-CfC0qYzy.js → anamnesis-i18n-BA631X4t.js} +2209 -2144
  6. package/dist/_chunks/anamnesis-i18n-BA631X4t.js.map +1 -0
  7. package/dist/_chunks/{antenatal-schedule-timeline-BMMpi2lb.js → antenatal-schedule-timeline-u8TsS2QJ.js} +27 -26
  8. package/dist/_chunks/{antenatal-schedule-timeline-BMMpi2lb.js.map → antenatal-schedule-timeline-u8TsS2QJ.js.map} +1 -1
  9. package/dist/_chunks/{appointment-timeline-B630OT_J.js → appointment-timeline-Bqf1sTU5.js} +2 -2
  10. package/dist/_chunks/{appointment-timeline-B630OT_J.js.map → appointment-timeline-Bqf1sTU5.js.map} +1 -1
  11. package/dist/_chunks/{ar-THMLfSoN.js → ar-BR1FGFP2.js} +14 -14
  12. package/dist/_chunks/{ar-THMLfSoN.js.map → ar-BR1FGFP2.js.map} +1 -1
  13. package/dist/_chunks/{bmi-calculator-CM0-G2mg.js → bmi-calculator-CpyY13MV.js} +2 -2
  14. package/dist/_chunks/{bmi-calculator-CM0-G2mg.js.map → bmi-calculator-CpyY13MV.js.map} +1 -1
  15. package/dist/_chunks/{booking-DjNbd7C1.js → booking-BjsA7j1-.js} +699 -688
  16. package/dist/_chunks/booking-BjsA7j1-.js.map +1 -0
  17. package/dist/_chunks/calculator-dialog-12d3Sxaz.js +48 -0
  18. package/dist/_chunks/{calculator-dialog-DuXMQSdm.js.map → calculator-dialog-12d3Sxaz.js.map} +1 -1
  19. package/dist/_chunks/{care-plan-card-1G_f4I5s.js → care-plan-card-BvQy366X.js} +3 -3
  20. package/dist/_chunks/{care-plan-card-1G_f4I5s.js.map → care-plan-card-BvQy366X.js.map} +1 -1
  21. package/dist/_chunks/{care-plan-entry-card-DmBsffHS.js → care-plan-entry-card-apk_5B3O.js} +2 -2
  22. package/dist/_chunks/{care-plan-entry-card-DmBsffHS.js.map → care-plan-entry-card-apk_5B3O.js.map} +1 -1
  23. package/dist/_chunks/{chat-container-HlFnoEIl.js → chat-container-CYYego1W.js} +105 -81
  24. package/dist/_chunks/chat-container-CYYego1W.js.map +1 -0
  25. package/dist/_chunks/cycle-calculator-B7fyH-h4.js +425 -0
  26. package/dist/_chunks/cycle-calculator-B7fyH-h4.js.map +1 -0
  27. package/dist/_chunks/{date-picker-ZHejTVAJ.js → date-picker-Bp64zk2p.js} +19 -19
  28. package/dist/_chunks/{date-picker-ZHejTVAJ.js.map → date-picker-Bp64zk2p.js.map} +1 -1
  29. package/dist/_chunks/date-picker-variants-pKAJfnWr.js +2089 -0
  30. package/dist/_chunks/date-picker-variants-pKAJfnWr.js.map +1 -0
  31. package/dist/_chunks/{date-range-picker-pEG3Ln3i.js → date-range-picker-CDrZ8Zh0.js} +27 -27
  32. package/dist/_chunks/{date-range-picker-pEG3Ln3i.js.map → date-range-picker-CDrZ8Zh0.js.map} +1 -1
  33. package/dist/_chunks/{date-time-picker-695QvBGj.js → date-time-picker-DafkGDGO.js} +10 -10
  34. package/dist/_chunks/{date-time-picker-695QvBGj.js.map → date-time-picker-DafkGDGO.js.map} +1 -1
  35. package/dist/_chunks/{de-DmZ-8rTN.js → de-3iM4rGqo.js} +7 -7
  36. package/dist/_chunks/{de-DmZ-8rTN.js.map → de-3iM4rGqo.js.map} +1 -1
  37. package/dist/_chunks/{document-preview-D3gg4MXB.js → document-preview-DOrsqiN1.js} +2 -2
  38. package/dist/_chunks/{document-preview-D3gg4MXB.js.map → document-preview-DOrsqiN1.js.map} +1 -1
  39. package/dist/_chunks/due-date-calculator-CnkbbAej.js +571 -0
  40. package/dist/_chunks/due-date-calculator-CnkbbAej.js.map +1 -0
  41. package/dist/_chunks/{editor-overlay-DE3esyio.js → editor-overlay-B1tr2i7B.js} +22 -21
  42. package/dist/_chunks/editor-overlay-B1tr2i7B.js.map +1 -0
  43. package/dist/_chunks/{el-Bela9mxs.js → el-C96rGJvU.js} +2 -2
  44. package/dist/_chunks/{el-Bela9mxs.js.map → el-C96rGJvU.js.map} +1 -1
  45. package/dist/_chunks/{es-BNncHKex.js → es-Cxiqjx8r.js} +12 -12
  46. package/dist/_chunks/{es-BNncHKex.js.map → es-Cxiqjx8r.js.map} +1 -1
  47. package/dist/_chunks/fetal-weight-avlj-l-S.js +223 -0
  48. package/dist/_chunks/fetal-weight-avlj-l-S.js.map +1 -0
  49. package/dist/_chunks/format-4HNwNGrN.js +1315 -0
  50. package/dist/_chunks/format-4HNwNGrN.js.map +1 -0
  51. package/dist/_chunks/{fr-CH8ADfhN.js → fr-Bhr6SYKj.js} +21 -21
  52. package/dist/_chunks/{fr-CH8ADfhN.js.map → fr-Bhr6SYKj.js.map} +1 -1
  53. package/dist/_chunks/{freemium-paywall-C_Ue6wxU.js → freemium-paywall-DRDdWuOg.js} +3 -3
  54. package/dist/_chunks/{freemium-paywall-C_Ue6wxU.js.map → freemium-paywall-DRDdWuOg.js.map} +1 -1
  55. package/dist/_chunks/gestational-age-calculator-BljY_DVJ.js +488 -0
  56. package/dist/_chunks/gestational-age-calculator-BljY_DVJ.js.map +1 -0
  57. package/dist/_chunks/hcg-doubling-Cv_vH61p.js +312 -0
  58. package/dist/_chunks/hcg-doubling-Cv_vH61p.js.map +1 -0
  59. package/dist/_chunks/header-settings-Cn5fPXCE.js +335 -0
  60. package/dist/_chunks/header-settings-Cn5fPXCE.js.map +1 -0
  61. package/dist/_chunks/{hi-Bppfxp8l.js → hi-BxXX26d_.js} +12 -12
  62. package/dist/_chunks/{hi-Bppfxp8l.js.map → hi-BxXX26d_.js.map} +1 -1
  63. package/dist/_chunks/isSameWeek-B73MagWB.js +13 -0
  64. package/dist/_chunks/{isSameWeek-CK4HS9lH.js.map → isSameWeek-B73MagWB.js.map} +1 -1
  65. package/dist/_chunks/{it-B4ySaRyK.js → it-Xmjomvyj.js} +24 -24
  66. package/dist/_chunks/{it-B4ySaRyK.js.map → it-Xmjomvyj.js.map} +1 -1
  67. package/dist/_chunks/{ja-CGF6Io9P.js → ja-mfZvt1ZV.js} +16 -16
  68. package/dist/_chunks/{ja-CGF6Io9P.js.map → ja-mfZvt1ZV.js.map} +1 -1
  69. package/dist/_chunks/{link-cell-renderer-C5XLwVXQ.js → link-cell-renderer-CJ_gk7gl.js} +3 -3
  70. package/dist/_chunks/{link-cell-renderer-C5XLwVXQ.js.map → link-cell-renderer-CJ_gk7gl.js.map} +1 -1
  71. package/dist/_chunks/{locale-picker-BfBUdT1m.js → locale-picker-D9Kv2zrK.js} +153 -132
  72. package/dist/_chunks/locale-picker-D9Kv2zrK.js.map +1 -0
  73. package/dist/_chunks/map-view-2yZCQW2l.js +445 -0
  74. package/dist/_chunks/map-view-2yZCQW2l.js.map +1 -0
  75. package/dist/_chunks/{marketplace-app-shell-DwcFMxzp.js → marketplace-app-shell-BLRvg-M0.js} +49 -40
  76. package/dist/_chunks/marketplace-app-shell-BLRvg-M0.js.map +1 -0
  77. package/dist/_chunks/{nl-DuShqwuV.js → nl-DDs-KEnD.js} +15 -15
  78. package/dist/_chunks/{nl-DuShqwuV.js.map → nl-DDs-KEnD.js.map} +1 -1
  79. package/dist/_chunks/{notes-panel-DPsgB4Mv.js → notes-panel-CiFN3sLW.js} +2 -2
  80. package/dist/_chunks/{notes-panel-DPsgB4Mv.js.map → notes-panel-CiFN3sLW.js.map} +1 -1
  81. package/dist/_chunks/{number-input-DrozbZAU.js → number-input-DOe5VYei.js} +64 -64
  82. package/dist/_chunks/number-input-DOe5VYei.js.map +1 -0
  83. package/dist/_chunks/{optical-prescription-BDHJr8Zz.js → optical-prescription-CRemE8fL.js} +2 -2
  84. package/dist/_chunks/{optical-prescription-BDHJr8Zz.js.map → optical-prescription-CRemE8fL.js.map} +1 -1
  85. package/dist/_chunks/{parse-DvA97ro9.js → parse-JqixfsU0.js} +43 -43
  86. package/dist/_chunks/{parse-DvA97ro9.js.map → parse-JqixfsU0.js.map} +1 -1
  87. package/dist/_chunks/parseISO-fOGpHKXm.js +120 -0
  88. package/dist/_chunks/parseISO-fOGpHKXm.js.map +1 -0
  89. package/dist/_chunks/{patient-details-DqjjwPmt.js → patient-details-CpunD0qx.js} +3 -3
  90. package/dist/_chunks/{patient-details-DqjjwPmt.js.map → patient-details-CpunD0qx.js.map} +1 -1
  91. package/dist/_chunks/{patient-table-BmIDrLIS.js → patient-table-2eWx-Rrk.js} +2 -2
  92. package/dist/_chunks/{patient-table-BmIDrLIS.js.map → patient-table-2eWx-Rrk.js.map} +1 -1
  93. package/dist/_chunks/{payment-form-h-BZ8onk.js → payment-form-Ds1I9KqB.js} +308 -231
  94. package/dist/_chunks/payment-form-Ds1I9KqB.js.map +1 -0
  95. package/dist/_chunks/{pdf-viewer-Ddx-T053.js → pdf-viewer-DUIsV9s5.js} +429 -369
  96. package/dist/_chunks/pdf-viewer-DUIsV9s5.js.map +1 -0
  97. package/dist/_chunks/{pl-CKQwX9Fk.js → pl-BYYMnEWP.js} +18 -18
  98. package/dist/_chunks/{pl-CKQwX9Fk.js.map → pl-BYYMnEWP.js.map} +1 -1
  99. package/dist/_chunks/{practice-results-B-HPc13W.js → practice-results-SjCniMd2.js} +2 -2
  100. package/dist/_chunks/{practice-results-B-HPc13W.js.map → practice-results-SjCniMd2.js.map} +1 -1
  101. package/dist/_chunks/pregnancy-dating-BmpHScZ0.js +770 -0
  102. package/dist/_chunks/pregnancy-dating-BmpHScZ0.js.map +1 -0
  103. package/dist/_chunks/pregnancy-weight-gain-B5KSJzdc.js +553 -0
  104. package/dist/_chunks/pregnancy-weight-gain-B5KSJzdc.js.map +1 -0
  105. package/dist/_chunks/progress-CK8otcQ-.js +343 -0
  106. package/dist/_chunks/progress-CK8otcQ-.js.map +1 -0
  107. package/dist/_chunks/{pt-_njpXyOZ.js → pt-BSPnVrQ7.js} +20 -20
  108. package/dist/_chunks/{pt-_njpXyOZ.js.map → pt-BSPnVrQ7.js.map} +1 -1
  109. package/dist/_chunks/{radiograph-panel.agent-BQZ64Riy.js → radiograph-panel.agent-CtFtNMzk.js} +3 -3
  110. package/dist/_chunks/{radiograph-panel.agent-BQZ64Riy.js.map → radiograph-panel.agent-CtFtNMzk.js.map} +1 -1
  111. package/dist/_chunks/{rich-text-editor-CfeXPPWs.js → rich-text-editor-BedTpWzL.js} +2 -2
  112. package/dist/_chunks/{rich-text-editor-CfeXPPWs.js.map → rich-text-editor-BedTpWzL.js.map} +1 -1
  113. package/dist/_chunks/{ro-3X6_4FcN.js → ro-BbiylGmG.js} +14 -14
  114. package/dist/_chunks/{ro-3X6_4FcN.js.map → ro-BbiylGmG.js.map} +1 -1
  115. package/dist/_chunks/{ru-bAcgmnS-.js → ru-BX_qsV67.js} +14 -14
  116. package/dist/_chunks/{ru-bAcgmnS-.js.map → ru-BX_qsV67.js.map} +1 -1
  117. package/dist/_chunks/{session-countdown-Bc70VXN1.js → session-countdown-BL-Psg8u.js} +2 -2
  118. package/dist/_chunks/{session-countdown-Bc70VXN1.js.map → session-countdown-BL-Psg8u.js.map} +1 -1
  119. package/dist/_chunks/{sign-document-CW_ByDUh.js → sign-document-jF4fZDJ5.js} +2 -2
  120. package/dist/_chunks/{sign-document-CW_ByDUh.js.map → sign-document-jF4fZDJ5.js.map} +1 -1
  121. package/dist/_chunks/slot-grid-DNiUcXy2.js +640 -0
  122. package/dist/_chunks/slot-grid-DNiUcXy2.js.map +1 -0
  123. package/dist/_chunks/{sparkline-BTY4B5tv.js → sparkline-BmGcEyZO.js} +209 -164
  124. package/dist/_chunks/sparkline-BmGcEyZO.js.map +1 -0
  125. package/dist/_chunks/{sq-jYFqr4Ga.js → sq-i9UOk4P7.js} +10 -10
  126. package/dist/_chunks/{sq-jYFqr4Ga.js.map → sq-i9UOk4P7.js.map} +1 -1
  127. package/dist/_chunks/subDays-CAUv47M1.js +8 -0
  128. package/dist/_chunks/{subDays-BcNi04uf.js.map → subDays-CAUv47M1.js.map} +1 -1
  129. package/dist/_chunks/{sv-BSGEJ-8B.js → sv-CpTdtmDQ.js} +8 -8
  130. package/dist/_chunks/{sv-BSGEJ-8B.js.map → sv-CpTdtmDQ.js.map} +1 -1
  131. package/dist/_chunks/{tab-bar-Axhk6xzx.js → tab-bar-BYESZINM.js} +83 -77
  132. package/dist/_chunks/tab-bar-BYESZINM.js.map +1 -0
  133. package/dist/_chunks/task-card.agent-CF2N_uu4.js +29 -0
  134. package/dist/_chunks/task-card.agent-CF2N_uu4.js.map +1 -0
  135. package/dist/_chunks/{tr-CTpgUtw6.js → tr-DXG2QN1K.js} +17 -17
  136. package/dist/_chunks/{tr-CTpgUtw6.js.map → tr-DXG2QN1K.js.map} +1 -1
  137. package/dist/_chunks/{unit-converter-COgkN7YP.js → unit-converter-CHPDuV7W.js} +2 -2
  138. package/dist/_chunks/{unit-converter-COgkN7YP.js.map → unit-converter-CHPDuV7W.js.map} +1 -1
  139. package/dist/_chunks/{warning-stack-BtjmJChC.js → warning-stack-B7t_8jRE.js} +42 -37
  140. package/dist/_chunks/{warning-stack-BtjmJChC.js.map → warning-stack-B7t_8jRE.js.map} +1 -1
  141. package/dist/_chunks/{zh-CN-BgM0Io2O.js → zh-CN-vPkPEK6H.js} +18 -18
  142. package/dist/_chunks/{zh-CN-BgM0Io2O.js.map → zh-CN-vPkPEK6H.js.map} +1 -1
  143. package/dist/agent-catalog.json +6426 -3382
  144. package/dist/agent-i18n/en.json +234 -15
  145. package/dist/components/agenda-card/agenda-card.agent.d.ts.map +1 -1
  146. package/dist/components/agenda-card/index.js +1 -1
  147. package/dist/components/appointment-timeline/index.js +1 -1
  148. package/dist/components/bmi-calculator/index.js +1 -1
  149. package/dist/components/booking/booking.d.ts.map +1 -1
  150. package/dist/components/booking/index.js +1 -1
  151. package/dist/components/calculator-dialog/calculator-dialog.d.ts.map +1 -1
  152. package/dist/components/calculator-dialog/index.js +1 -1
  153. package/dist/components/care-plan-card/index.js +1 -1
  154. package/dist/components/care-plan-entry-card/index.js +1 -1
  155. package/dist/components/chat-container/chat-container.agent.d.ts.map +1 -1
  156. package/dist/components/chat-container/chat-container.d.ts +14 -0
  157. package/dist/components/chat-container/chat-container.d.ts.map +1 -1
  158. package/dist/components/chat-container/index.js +1 -1
  159. package/dist/components/cycle-calculator/cycle-calculator.agent.d.ts +4 -0
  160. package/dist/components/cycle-calculator/cycle-calculator.agent.d.ts.map +1 -0
  161. package/dist/components/cycle-calculator/cycle-calculator.d.ts +42 -0
  162. package/dist/components/cycle-calculator/cycle-calculator.d.ts.map +1 -1
  163. package/dist/components/cycle-calculator/index.d.ts +1 -1
  164. package/dist/components/cycle-calculator/index.d.ts.map +1 -1
  165. package/dist/components/cycle-calculator/index.js +1 -1
  166. package/dist/components/data-table/index.js +1 -1
  167. package/dist/components/date-picker/index.js +1 -1
  168. package/dist/components/date-range-picker/index.js +1 -1
  169. package/dist/components/date-time-picker/index.js +1 -1
  170. package/dist/components/document-preview/index.js +1 -1
  171. package/dist/components/due-date-calculator/due-date-calculator.agent.d.ts +4 -0
  172. package/dist/components/due-date-calculator/due-date-calculator.agent.d.ts.map +1 -0
  173. package/dist/components/due-date-calculator/due-date-calculator.d.ts +61 -1
  174. package/dist/components/due-date-calculator/due-date-calculator.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 +2 -2
  178. package/dist/components/editor-overlay/editor-overlay.d.ts +7 -1
  179. package/dist/components/editor-overlay/editor-overlay.d.ts.map +1 -1
  180. package/dist/components/editor-overlay/index.js +1 -1
  181. package/dist/components/fetal-weight/fetal-weight.agent.d.ts +4 -0
  182. package/dist/components/fetal-weight/fetal-weight.agent.d.ts.map +1 -0
  183. package/dist/components/fetal-weight/fetal-weight.d.ts +26 -0
  184. package/dist/components/fetal-weight/fetal-weight.d.ts.map +1 -1
  185. package/dist/components/fetal-weight/index.d.ts +1 -1
  186. package/dist/components/fetal-weight/index.d.ts.map +1 -1
  187. package/dist/components/fetal-weight/index.js +1 -1
  188. package/dist/components/freemium-paywall/index.js +1 -1
  189. package/dist/components/gestational-age-calculator/gestational-age-calculator.agent.d.ts +4 -0
  190. package/dist/components/gestational-age-calculator/gestational-age-calculator.agent.d.ts.map +1 -0
  191. package/dist/components/gestational-age-calculator/gestational-age-calculator.d.ts +44 -2
  192. package/dist/components/gestational-age-calculator/gestational-age-calculator.d.ts.map +1 -1
  193. package/dist/components/gestational-age-calculator/index.d.ts +1 -1
  194. package/dist/components/gestational-age-calculator/index.d.ts.map +1 -1
  195. package/dist/components/gestational-age-calculator/index.js +1 -1
  196. package/dist/components/hcg-doubling/hcg-doubling.agent.d.ts +4 -0
  197. package/dist/components/hcg-doubling/hcg-doubling.agent.d.ts.map +1 -0
  198. package/dist/components/hcg-doubling/hcg-doubling.d.ts +30 -0
  199. package/dist/components/hcg-doubling/hcg-doubling.d.ts.map +1 -1
  200. package/dist/components/hcg-doubling/index.d.ts +1 -1
  201. package/dist/components/hcg-doubling/index.d.ts.map +1 -1
  202. package/dist/components/hcg-doubling/index.js +1 -1
  203. package/dist/components/header-settings/header-settings.agent.d.ts.map +1 -1
  204. package/dist/components/header-settings/header-settings.d.ts +13 -1
  205. package/dist/components/header-settings/header-settings.d.ts.map +1 -1
  206. package/dist/components/header-settings/index.js +1 -1
  207. package/dist/components/locale-picker/index.js +1 -1
  208. package/dist/components/locale-picker/locale-picker.agent.d.ts.map +1 -1
  209. package/dist/components/locale-picker/locale-picker.d.ts +9 -0
  210. package/dist/components/locale-picker/locale-picker.d.ts.map +1 -1
  211. package/dist/components/map-view/index.js +1 -1
  212. package/dist/components/map-view/map-view.agent.d.ts.map +1 -1
  213. package/dist/components/map-view/map-view.d.ts +22 -0
  214. package/dist/components/map-view/map-view.d.ts.map +1 -1
  215. package/dist/components/notes-panel/index.js +1 -1
  216. package/dist/components/number-input/index.js +1 -1
  217. package/dist/components/number-input/number-input.d.ts +2 -1
  218. package/dist/components/number-input/number-input.d.ts.map +1 -1
  219. package/dist/components/optical-prescription/index.js +1 -1
  220. package/dist/components/patient-details/index.js +1 -1
  221. package/dist/components/patient-table/index.js +1 -1
  222. package/dist/components/payment-form/index.d.ts +1 -1
  223. package/dist/components/payment-form/index.d.ts.map +1 -1
  224. package/dist/components/payment-form/index.js +1 -1
  225. package/dist/components/payment-form/payment-form.agent.d.ts.map +1 -1
  226. package/dist/components/payment-form/payment-form.d.ts +32 -1
  227. package/dist/components/payment-form/payment-form.d.ts.map +1 -1
  228. package/dist/components/pdf-viewer/index.js +1 -1
  229. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
  230. package/dist/components/pdf-viewer/pdf-viewer.d.ts +13 -0
  231. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  232. package/dist/components/practice-results/index.js +1 -1
  233. package/dist/components/pregnancy-dating/index.d.ts +1 -1
  234. package/dist/components/pregnancy-dating/index.d.ts.map +1 -1
  235. package/dist/components/pregnancy-dating/index.js +1 -1
  236. package/dist/components/pregnancy-dating/pregnancy-dating.agent.d.ts +4 -0
  237. package/dist/components/pregnancy-dating/pregnancy-dating.agent.d.ts.map +1 -0
  238. package/dist/components/pregnancy-dating/pregnancy-dating.d.ts +65 -1
  239. package/dist/components/pregnancy-dating/pregnancy-dating.d.ts.map +1 -1
  240. package/dist/components/pregnancy-weight-gain/index.d.ts +2 -1
  241. package/dist/components/pregnancy-weight-gain/index.d.ts.map +1 -1
  242. package/dist/components/pregnancy-weight-gain/index.js +6 -5
  243. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.agent.d.ts +4 -0
  244. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.agent.d.ts.map +1 -0
  245. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.d.ts +35 -0
  246. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.d.ts.map +1 -1
  247. package/dist/components/progress/index.js +1 -1
  248. package/dist/components/progress/progress.agent.d.ts.map +1 -1
  249. package/dist/components/progress/progress.d.ts +13 -0
  250. package/dist/components/progress/progress.d.ts.map +1 -1
  251. package/dist/components/radiograph-panel/index.js +1 -1
  252. package/dist/components/rich-text-editor/index.js +1 -1
  253. package/dist/components/session-countdown/index.js +1 -1
  254. package/dist/components/sign-document/index.js +1 -1
  255. package/dist/components/slot-grid/index.d.ts +2 -1
  256. package/dist/components/slot-grid/index.d.ts.map +1 -1
  257. package/dist/components/slot-grid/index.js +5 -4
  258. package/dist/components/slot-grid/slot-grid.agent.d.ts +4 -0
  259. package/dist/components/slot-grid/slot-grid.agent.d.ts.map +1 -0
  260. package/dist/components/slot-grid/slot-grid.d.ts +34 -0
  261. package/dist/components/slot-grid/slot-grid.d.ts.map +1 -1
  262. package/dist/components/sparkline/index.js +1 -1
  263. package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -1
  264. package/dist/components/sparkline/sparkline.d.ts +10 -0
  265. package/dist/components/sparkline/sparkline.d.ts.map +1 -1
  266. package/dist/components/tab-bar/index.js +1 -1
  267. package/dist/components/tab-bar/tab-bar.d.ts +13 -0
  268. package/dist/components/tab-bar/tab-bar.d.ts.map +1 -1
  269. package/dist/components/task-card/index.js +1 -1
  270. package/dist/components/task-card/task-card.agent.d.ts.map +1 -1
  271. package/dist/components/unit-converter/index.js +1 -1
  272. package/dist/components/warning-stack/index.js +1 -1
  273. package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
  274. package/dist/index.js +630 -627
  275. package/dist/patterns/alia-assistant/index.js +1 -1
  276. package/dist/patterns/anamnesis/anamnesis-compare-panel.d.ts.map +1 -1
  277. package/dist/patterns/anamnesis/anamnesis-compile.d.ts.map +1 -1
  278. package/dist/patterns/anamnesis/anamnesis-derive.d.ts +27 -8
  279. package/dist/patterns/anamnesis/anamnesis-derive.d.ts.map +1 -1
  280. package/dist/patterns/anamnesis/anamnesis-evolution-grid.d.ts.map +1 -1
  281. package/dist/patterns/anamnesis/anamnesis-field.d.ts.map +1 -1
  282. package/dist/patterns/anamnesis/anamnesis-format.d.ts +11 -3
  283. package/dist/patterns/anamnesis/anamnesis-format.d.ts.map +1 -1
  284. package/dist/patterns/anamnesis/anamnesis-highlight.d.ts +6 -0
  285. package/dist/patterns/anamnesis/anamnesis-highlight.d.ts.map +1 -0
  286. package/dist/patterns/anamnesis/anamnesis-intake.d.ts.map +1 -1
  287. package/dist/patterns/anamnesis/anamnesis-matrix.d.ts.map +1 -1
  288. package/dist/patterns/anamnesis/anamnesis-questionnaire.d.ts +23 -9
  289. package/dist/patterns/anamnesis/anamnesis-questionnaire.d.ts.map +1 -1
  290. package/dist/patterns/anamnesis/anamnesis-readonly.d.ts.map +1 -1
  291. package/dist/patterns/anamnesis/anamnesis-target-strip.d.ts.map +1 -1
  292. package/dist/patterns/anamnesis/anamnesis-types.d.ts +7 -0
  293. package/dist/patterns/anamnesis/anamnesis-types.d.ts.map +1 -1
  294. package/dist/patterns/anamnesis/anamnesis-visit-note.d.ts.map +1 -1
  295. package/dist/patterns/anamnesis/anamnesis.d.ts +16 -7
  296. package/dist/patterns/anamnesis/anamnesis.d.ts.map +1 -1
  297. package/dist/patterns/anamnesis/index.d.ts +3 -2
  298. package/dist/patterns/anamnesis/index.d.ts.map +1 -1
  299. package/dist/patterns/anamnesis/index.js +7 -6
  300. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  301. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts +6 -0
  302. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts.map +1 -1
  303. package/dist/tokens.css +1 -1
  304. package/package.json +1 -1
  305. package/dist/_chunks/agenda-card.agent-mTCrkKSZ.js +0 -27
  306. package/dist/_chunks/agenda-card.agent-mTCrkKSZ.js.map +0 -1
  307. package/dist/_chunks/anamnesis-i18n-CfC0qYzy.js.map +0 -1
  308. package/dist/_chunks/booking-DjNbd7C1.js.map +0 -1
  309. package/dist/_chunks/calculator-dialog-DuXMQSdm.js +0 -40
  310. package/dist/_chunks/chat-container-HlFnoEIl.js.map +0 -1
  311. package/dist/_chunks/cycle-calculator-BwqYVPB4.js +0 -252
  312. package/dist/_chunks/cycle-calculator-BwqYVPB4.js.map +0 -1
  313. package/dist/_chunks/date-picker-variants-eL6HjWvw.js +0 -3363
  314. package/dist/_chunks/date-picker-variants-eL6HjWvw.js.map +0 -1
  315. package/dist/_chunks/due-date-calculator-CwfsFd3T.js +0 -256
  316. package/dist/_chunks/due-date-calculator-CwfsFd3T.js.map +0 -1
  317. package/dist/_chunks/editor-overlay-DE3esyio.js.map +0 -1
  318. package/dist/_chunks/fetal-weight-ePlLjJPc.js +0 -122
  319. package/dist/_chunks/fetal-weight-ePlLjJPc.js.map +0 -1
  320. package/dist/_chunks/gestational-age-calculator-DdgbH69Z.js +0 -311
  321. package/dist/_chunks/gestational-age-calculator-DdgbH69Z.js.map +0 -1
  322. package/dist/_chunks/hcg-doubling-BBqD2wI2.js +0 -170
  323. package/dist/_chunks/hcg-doubling-BBqD2wI2.js.map +0 -1
  324. package/dist/_chunks/header-settings--pjYOe6g.js +0 -284
  325. package/dist/_chunks/header-settings--pjYOe6g.js.map +0 -1
  326. package/dist/_chunks/isSameDay-DUEiAT0G.js +0 -39
  327. package/dist/_chunks/isSameDay-DUEiAT0G.js.map +0 -1
  328. package/dist/_chunks/isSameWeek-CK4HS9lH.js +0 -14
  329. package/dist/_chunks/locale-picker-BfBUdT1m.js.map +0 -1
  330. package/dist/_chunks/map-view-CsaHfoo6.js +0 -378
  331. package/dist/_chunks/map-view-CsaHfoo6.js.map +0 -1
  332. package/dist/_chunks/marketplace-app-shell-DwcFMxzp.js.map +0 -1
  333. package/dist/_chunks/number-input-DrozbZAU.js.map +0 -1
  334. package/dist/_chunks/payment-form-h-BZ8onk.js.map +0 -1
  335. package/dist/_chunks/pdf-viewer-Ddx-T053.js.map +0 -1
  336. package/dist/_chunks/pregnancy-dating-DzYTlBkT.js +0 -421
  337. package/dist/_chunks/pregnancy-dating-DzYTlBkT.js.map +0 -1
  338. package/dist/_chunks/pregnancy-weight-gain-O6J0sUIi.js +0 -322
  339. package/dist/_chunks/pregnancy-weight-gain-O6J0sUIi.js.map +0 -1
  340. package/dist/_chunks/progress-DA413-zn.js +0 -299
  341. package/dist/_chunks/progress-DA413-zn.js.map +0 -1
  342. package/dist/_chunks/slot-grid-CQSULZjd.js +0 -502
  343. package/dist/_chunks/slot-grid-CQSULZjd.js.map +0 -1
  344. package/dist/_chunks/sparkline-BTY4B5tv.js.map +0 -1
  345. package/dist/_chunks/subDays-BcNi04uf.js +0 -8
  346. package/dist/_chunks/tab-bar-Axhk6xzx.js.map +0 -1
  347. package/dist/_chunks/task-card.agent-Bt14CzUd.js +0 -25
  348. package/dist/_chunks/task-card.agent-Bt14CzUd.js.map +0 -1
@@ -1,40 +0,0 @@
1
- import { jsxs as a, jsx as l } from "react/jsx-runtime";
2
- import { forwardRef as p } from "react";
3
- import { D as r } from "./dialog-UbKJCi1X.js";
4
- const u = p(
5
- ({
6
- trigger: i,
7
- title: e,
8
- description: o,
9
- children: t,
10
- size: n = "lg",
11
- open: c,
12
- defaultOpen: d,
13
- onOpenChange: m,
14
- id: s,
15
- className: g
16
- }, h) => /* @__PURE__ */ a(
17
- r,
18
- {
19
- open: c,
20
- defaultOpen: d,
21
- onOpenChange: m,
22
- id: s,
23
- children: [
24
- /* @__PURE__ */ l(r.Trigger, { asChild: !0, children: i }),
25
- /* @__PURE__ */ a(r.Content, { ref: h, size: n, children: [
26
- /* @__PURE__ */ a(r.Header, { children: [
27
- /* @__PURE__ */ l(r.Title, { children: e }),
28
- o ? /* @__PURE__ */ l(r.Description, { children: o }) : null
29
- ] }),
30
- /* @__PURE__ */ l("div", { "data-component": "calculator-dialog", className: g, children: t })
31
- ] })
32
- ]
33
- }
34
- )
35
- );
36
- u.displayName = "CalculatorDialog";
37
- export {
38
- u as C
39
- };
40
- //# sourceMappingURL=calculator-dialog-DuXMQSdm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chat-container-HlFnoEIl.js","sources":["../../src/components/chat-container/chat-container.agent.ts","../../src/components/chat-container/chat-container.tsx"],"sourcesContent":["import type { AgentAdapter } from '../../agent/types';\nimport type { ChatContainerHandle } from './chat-container';\n\nexport const chatContainerAgent: AgentAdapter<ChatContainerHandle> = {\n id: 'chat-container',\n // Scrolling the log viewport is pure ephemeral view state — `scroll`,\n // not `navigate` (nothing routes; the conversation stays in place).\n capabilities: ['scroll'],\n state: {},\n actions: {\n scroll_to_bottom: {\n safety: 'read',\n argsType: '{ smooth?: boolean }',\n argsSchema: {\n type: 'object',\n properties: {\n smooth: {\n type: 'boolean',\n description:\n 'Animate the scroll when true (default). Forced off under reduced motion.',\n },\n },\n },\n idempotent: true,\n descriptionKey: 'ui.agent.chatContainer.actions.scrollToBottom',\n description: 'Scroll the conversation viewport to the latest message.',\n invoke: (handle, args: { smooth?: boolean }) => {\n handle.scrollToBottom(args);\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'chat-container' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { chatContainerAgent } from './chat-container.agent';\nimport { ChevronDown } from 'lucide-react';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { FloatingActionButton } from '../floating-action-button/floating-action-button';\nimport {\n useIsomorphicLayoutEffect,\n usePrefersReducedMotion,\n} from '../../hooks';\n\nconst rootVariants = cva(\n 'ds:relative ds:flex ds:w-full ds:flex-col ds:overflow-hidden ds:bg-background',\n {\n variants: {\n density: {\n default: 'ds:gap-[var(--spacing-md)]',\n compact: 'ds:gap-[var(--spacing-sm)]',\n },\n },\n defaultVariants: { density: 'default' },\n },\n);\n\nconst scrollViewportVariants = cva(\n [\n 'ds:flex-1 ds:min-h-0 ds:overflow-y-auto ds:overflow-x-hidden',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:pt-[var(--spacing-md)] ds:pb-[var(--spacing-md)]',\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:scroll-smooth ds:motion-reduce:scroll-auto ds:[.theme-accessible_&]:scroll-auto',\n // Edge fade — content near the scroll boundaries fades into the\n // container surface instead of clipping abruptly against the header\n // or composer, so avatars / bubbles don't look \"cut in half\" as they\n // pass the viewport edge. Fade width matches the viewport padding so\n // a row can slide fully behind the mask before disappearing.\n // Disabled under HCM (mask strips content), reduced motion (less\n // decoration when motion is off), and the accessible theme.\n 'ds:[mask-image:linear-gradient(to_bottom,transparent_0,black_var(--spacing-md),black_calc(100%-var(--spacing-md)),transparent_100%)]',\n 'ds:motion-reduce:[mask-image:none]',\n 'ds:[.theme-accessible_&]:[mask-image:none]',\n 'ds:forced-colors:[mask-image:none]',\n ].join(' '),\n);\n\nconst VIRTUALIZATION_THRESHOLD = 100;\n/** Pixel slack against the bottom edge that still counts as \"at bottom\". */\nconst BOTTOM_SLACK_PX = 48;\n\nexport interface ChatContainerHandle {\n scrollToBottom: (opts?: { smooth?: boolean }) => void;\n getScrollViewport: () => HTMLDivElement | null;\n}\n\nexport interface ChatContainerProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'children' | 'id'>,\n VariantProps<typeof rootVariants> {\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n /** Array of messages to render. When the array exceeds 100 items the\n * list is virtualised via @tanstack/react-virtual. */\n messages: Array<{ id: string; node: ReactNode }>;\n /** Composer slot pinned to the block-end. */\n composer?: ReactNode;\n /** Fires when the user's auto-scroll preference flips. */\n onAutoScrollChange?: (isAtBottom: boolean) => void;\n /**\n * When true, renders a \"scroll to latest\" FloatingActionButton in the\n * bottom-end of the scroll column whenever the user has scrolled\n * away from the newest message. Defaults to `false` because the\n * affordance is only useful in long-form chat surfaces (fullscreen\n * assistants, dedicated messaging views); in compact docks — e.g. the\n * Alia side-panel — conversations rarely exceed one screen and the FAB\n * just adds visual noise. Turn on for fullscreen chat surfaces.\n */\n showScrollToLatest?: boolean;\n}\n\nexport const ChatContainer = forwardRef<HTMLDivElement, ChatContainerProps>(\n (\n {\n messages,\n composer,\n density = 'default',\n className,\n id,\n onAutoScrollChange,\n showScrollToLatest = false,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const sentinelRef = useRef<HTMLDivElement | null>(null);\n const [isAtBottom, setIsAtBottom] = useState(true);\n\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const scrollToBottom = useCallback(\n (opts?: { smooth?: boolean }) => {\n const el = viewportRef.current;\n if (!el) return;\n const smooth = (opts?.smooth ?? true) && !prefersReducedMotion;\n el.scrollTo({\n top: el.scrollHeight,\n behavior: smooth ? 'smooth' : 'auto',\n });\n },\n [prefersReducedMotion],\n );\n\n const rootRef = useRef<HTMLDivElement>(null);\n useImperativeHandle(ref, () => rootRef.current as HTMLDivElement, []);\n\n const agentHandle = useMemo<ChatContainerHandle>(\n () => ({\n scrollToBottom,\n getScrollViewport: () => viewportRef.current,\n }),\n [scrollToBottom],\n );\n useAgentRegistration(chatContainerAgent, agentHandle, id);\n\n /* ── Intersection observer: track \"at bottom\" via a sentinel ── */\n useEffect(() => {\n const root = viewportRef.current;\n const sentinel = sentinelRef.current;\n if (!root || !sentinel) return;\n const observer = new IntersectionObserver(\n (entries) => {\n const entry = entries[0];\n setIsAtBottom(entry.isIntersecting);\n onAutoScrollChange?.(entry.isIntersecting);\n },\n {\n root,\n // Fire when the sentinel is within BOTTOM_SLACK_PX of being visible.\n rootMargin: `0px 0px ${BOTTOM_SLACK_PX}px 0px`,\n threshold: 0,\n },\n );\n observer.observe(sentinel);\n return () => observer.disconnect();\n }, [onAutoScrollChange]);\n\n /* ── Auto-scroll on new messages when at bottom ── */\n const messagesLength = messages.length;\n useIsomorphicLayoutEffect(() => {\n // `smooth: false` — when we're already pinned to the bottom and a\n // new message appends, the user doesn't perceive any scroll motion\n // (the sentinel just slides a few px). But a smooth animation DOES\n // give the IntersectionObserver a window in which the sentinel is\n // temporarily outside the rootMargin zone — that's what causes the\n // scroll-to-latest FAB to flicker in and out on every new message.\n // Instant scroll settles in one frame; FAB state stays stable.\n // The user-initiated FAB click below still uses smooth because the\n // jump is large and the motion communicates the travel.\n if (isAtBottom) scrollToBottom({ smooth: false });\n // Intentionally watching only length — individual node updates (streaming)\n // are driven by their own scroll decisions.\n }, [messagesLength, isAtBottom, scrollToBottom]);\n\n const virtualized = messages.length > VIRTUALIZATION_THRESHOLD;\n\n const virtualizer = useVirtualizer({\n count: virtualized ? messages.length : 0,\n getScrollElement: () => viewportRef.current,\n estimateSize: () => 80,\n overscan: 6,\n getItemKey: (i) => messages[i]?.id ?? i,\n });\n\n return (\n <div\n ref={rootRef}\n className={rootVariants({ density, className })}\n data-component=\"chat-container\"\n data-component-id={id}\n {...rest}\n >\n {/* Scroll column wraps the viewport AND the FAB together so the\n FAB's absolute `bottom` is measured from the top of the\n composer (this wrapper's end edge), not from the root — which\n would drop the FAB inside the composer/suggestion-chip area. */}\n <div className=\"ds:relative ds:flex-1 ds:min-h-0 ds:flex ds:flex-col\">\n <div\n ref={viewportRef}\n role=\"log\"\n aria-live=\"polite\"\n aria-relevant=\"additions\"\n aria-label={t('chat.container')}\n // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex -- scrollable log region needs to be keyboard focusable for axe scrollable-region-focusable\n tabIndex={0}\n className={scrollViewportVariants()}\n >\n {virtualized ? (\n <ol\n className=\"ds:relative ds:list-none ds:ps-0 ds:m-0\"\n // eslint-disable-next-line react/forbid-dom-props -- virtualizer total size, runtime-computed\n style={{ blockSize: `${virtualizer.getTotalSize()}px` }}\n >\n {virtualizer.getVirtualItems().map((vi) => {\n const msg = messages[vi.index];\n if (!msg) return null;\n return (\n <li\n key={msg.id}\n data-index={vi.index}\n ref={virtualizer.measureElement}\n className=\"ds:absolute ds:start-0 ds:end-0 ds:top-0 ds:w-full\"\n // eslint-disable-next-line react/forbid-dom-props -- virtualizer translateY offset, runtime-computed\n style={{ transform: `translateY(${vi.start}px)` }}\n >\n <div className=\"ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]\">\n {msg.node}\n </div>\n </li>\n );\n })}\n </ol>\n ) : (\n <ol className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:list-none ds:ps-0 ds:m-0\">\n {messages.map((m) => (\n <li key={m.id}>{m.node}</li>\n ))}\n </ol>\n )}\n <div\n ref={sentinelRef}\n aria-hidden=\"true\"\n className=\"ds:h-1 ds:w-full\"\n />\n </div>\n\n {showScrollToLatest && !isAtBottom ? (\n <div\n className={[\n // `end-0` — the `inset-inline-end-0` spelling is not a\n // Tailwind utility and compiled to nothing.\n 'ds:pointer-events-none ds:absolute ds:end-0',\n // `bottom` is measured from the bottom of the scroll\n // column (i.e. the top edge of the composer slot). A\n // small spacing-md gap keeps the FAB clear of the\n // divider border above the composer.\n 'ds:bottom-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n // Enter animation — fade + scale in from 95%. The FAB only\n // unmounts when the user returns to bottom, so an exit\n // animation isn't justified (abrupt disappearance reads as\n // \"task complete\" when they've scrolled back).\n 'ds:motion-safe:animate-in ds:motion-safe:fade-in-0 ds:motion-safe:zoom-in-95',\n 'ds:duration-[var(--animation-duration)] ds:ease-[var(--ease-out)]',\n ].join(' ')}\n >\n <div className=\"ds:pointer-events-auto\">\n <FloatingActionButton\n icon={<ChevronDown />}\n aria-label={t('chat.scrollToLatest')}\n size=\"sm\"\n variant=\"secondary\"\n // `position=\"static\"` — the wrapper is already\n // absolutely-positioned. Without this, FAB's default\n // `bottom-end` variant applies `position: fixed` and\n // pins the button to the browser viewport corner,\n // escaping the container and appearing as an orphan\n // circle that stays put while the chat scrolls.\n position=\"static\"\n onClick={() => scrollToBottom({ smooth: true })}\n />\n </div>\n </div>\n ) : null}\n </div>\n\n {composer ? (\n <div className=\"ds:shrink-0 ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)] ds:pt-[var(--spacing-sm)] ds:pb-[var(--spacing-sm)] ds:bg-background\">\n {composer}\n </div>\n ) : null}\n </div>\n );\n },\n);\n\nChatContainer.displayName = 'ChatContainer';\n"],"names":["chatContainerAgent","handle","args","rootVariants","cva","scrollViewportVariants","VIRTUALIZATION_THRESHOLD","BOTTOM_SLACK_PX","ChatContainer","forwardRef","messages","composer","density","className","id","onAutoScrollChange","showScrollToLatest","rest","ref","t","useTranslation","viewportRef","useRef","sentinelRef","isAtBottom","setIsAtBottom","useState","prefersReducedMotion","usePrefersReducedMotion","scrollToBottom","useCallback","opts","el","smooth","rootRef","useImperativeHandle","agentHandle","useMemo","useAgentRegistration","useEffect","root","sentinel","observer","entries","entry","messagesLength","useIsomorphicLayoutEffect","virtualized","virtualizer","useVirtualizer","i","_a","jsxs","jsx","vi","msg","m","FloatingActionButton","ChevronDown"],"mappings":"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"}
@@ -1,252 +0,0 @@
1
- import { jsxs as r, jsx as e } from "react/jsx-runtime";
2
- import { forwardRef as A, useState as C, useMemo as N, useEffect as I } from "react";
3
- import { c as S } from "./index-D2ZczOXr.js";
4
- import { useTranslation as k } from "react-i18next";
5
- import { F as L } from "./form-field-M5UpX65Z.js";
6
- import { D as z } from "./date-picker-ZHejTVAJ.js";
7
- import { N as D } from "./number-input-DrozbZAU.js";
8
- import { C as E } from "./card-DPmk26CL.js";
9
- import { B as P } from "./badge-DCOqV9mI.js";
10
- import { I as B } from "./insert-result-D074GtHX.js";
11
- import { a as i } from "./date-picker-variants-eL6HjWvw.js";
12
- import { C as G } from "./check-DrFSN__t.js";
13
- import { H as R } from "./heart--qCA4ffe.js";
14
- import { c as Y } from "./createLucideIcon-DhHxpK9K.js";
15
- /**
16
- * @license lucide-react v1.22.0 - ISC
17
- *
18
- * This source code is licensed under the ISC license.
19
- * See the LICENSE file in the root directory of this source tree.
20
- */
21
- const j = [
22
- [
23
- "path",
24
- {
25
- d: "M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z",
26
- key: "c7niix"
27
- }
28
- ]
29
- ], M = Y("droplet", j), b = 28, U = 14, K = 1;
30
- function O(c, s = 3) {
31
- const o = c.cycleLength ?? b, { lastPeriodStart: d } = c, n = i(d, o - U), g = {
32
- start: i(n, -5),
33
- end: i(n, K)
34
- }, u = i(d, o), f = Array.from(
35
- { length: s },
36
- (w, y) => i(d, o * (y + 1))
37
- ), h = c.periodLength && c.periodLength > 0 ? {
38
- start: d,
39
- end: i(d, c.periodLength - 1)
40
- } : null;
41
- return { nextPeriod: u, ovulation: n, fertileWindow: g, upcomingPeriods: f, periodRange: h };
42
- }
43
- const V = S("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
- }), q = "--accent", J = A(
49
- ({
50
- defaultCycleLength: c = b,
51
- onResultChange: s,
52
- onInsert: o,
53
- insertVariant: d = "insert",
54
- onCopy: n,
55
- onError: g,
56
- insertBrand: u,
57
- id: f,
58
- width: h,
59
- className: w
60
- }, y) => {
61
- const { t, i18n: T } = k(), [m, _] = C(void 0), [x, H] = C(
62
- c
63
- ), [v, W] = C(null), a = N(() => m ? O({
64
- lastPeriodStart: m,
65
- cycleLength: x ?? b,
66
- periodLength: v ?? void 0
67
- }) : null, [m, x, v]), F = N(
68
- () => new Intl.DateTimeFormat(T.language, { dateStyle: "medium" }),
69
- [T.language]
70
- );
71
- I(() => {
72
- s == null || s(a);
73
- }, [a, s]);
74
- const $ = N(() => /* @__PURE__ */ new Date(), []), l = (p) => F.format(p);
75
- return /* @__PURE__ */ r(
76
- "div",
77
- {
78
- ref: y,
79
- "data-component": "cycle-calculator",
80
- "data-component-id": f,
81
- className: V({ width: h, className: w }),
82
- children: [
83
- /* @__PURE__ */ r("div", { className: "ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2", children: [
84
- /* @__PURE__ */ e(L, { label: t("cycleCalculator.lastPeriod"), children: /* @__PURE__ */ e(
85
- z,
86
- {
87
- value: m,
88
- onChange: _,
89
- maxDate: $
90
- }
91
- ) }),
92
- /* @__PURE__ */ e(
93
- L,
94
- {
95
- label: t("cycleCalculator.cycleLength"),
96
- description: t("cycleCalculator.cycleLengthHint"),
97
- children: /* @__PURE__ */ e(
98
- D,
99
- {
100
- mode: "integer",
101
- min: 20,
102
- max: 45,
103
- value: x,
104
- onChange: H
105
- }
106
- )
107
- }
108
- ),
109
- /* @__PURE__ */ e(
110
- L,
111
- {
112
- label: t("cycleCalculator.periodLength"),
113
- description: t("cycleCalculator.periodLengthHint"),
114
- children: /* @__PURE__ */ e(
115
- D,
116
- {
117
- mode: "integer",
118
- min: 1,
119
- max: 14,
120
- value: v,
121
- onChange: W
122
- }
123
- )
124
- }
125
- )
126
- ] }),
127
- /* @__PURE__ */ e("p", { className: "ds:sr-only", role: "status", "aria-live": "polite", children: a ? `${t("cycleCalculator.ovulation")}: ${l(a.ovulation)}. ${t(
128
- "cycleCalculator.nextPeriod"
129
- )}: ${l(a.nextPeriod)}.` : "" }),
130
- a ? /* @__PURE__ */ e(E, { variant: "elevated", children: /* @__PURE__ */ r(E.Body, { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: [
131
- /* @__PURE__ */ r("dl", { className: "ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3", children: [
132
- /* @__PURE__ */ r("div", { className: "ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center", children: [
133
- /* @__PURE__ */ e("dt", { className: "type-label ds:text-muted-foreground", children: t("cycleCalculator.ovulation") }),
134
- /* @__PURE__ */ e("dd", { children: /* @__PURE__ */ e(
135
- P,
136
- {
137
- variant: "success",
138
- size: "lg",
139
- leading: /* @__PURE__ */ e(G, { "aria-hidden": !0 }),
140
- children: l(a.ovulation)
141
- }
142
- ) })
143
- ] }),
144
- /* @__PURE__ */ r("div", { className: "ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center", children: [
145
- /* @__PURE__ */ e("dt", { className: "type-label ds:text-muted-foreground", children: t("cycleCalculator.fertileWindow") }),
146
- /* @__PURE__ */ e("dd", { children: /* @__PURE__ */ r(
147
- P,
148
- {
149
- variant: "accent",
150
- size: "lg",
151
- leading: /* @__PURE__ */ e(R, { "aria-hidden": !0 }),
152
- children: [
153
- l(a.fertileWindow.start),
154
- " –",
155
- " ",
156
- l(a.fertileWindow.end)
157
- ]
158
- }
159
- ) })
160
- ] }),
161
- /* @__PURE__ */ r("div", { className: "ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center", children: [
162
- /* @__PURE__ */ e("dt", { className: "type-label ds:text-muted-foreground", children: t("cycleCalculator.nextPeriod") }),
163
- /* @__PURE__ */ e("dd", { children: /* @__PURE__ */ e(
164
- P,
165
- {
166
- variant: "error",
167
- size: "lg",
168
- leading: /* @__PURE__ */ e(M, { "aria-hidden": !0 }),
169
- children: l(a.nextPeriod)
170
- }
171
- ) })
172
- ] })
173
- ] }),
174
- a.periodRange ? /* @__PURE__ */ r("div", { className: "ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-2xs)]", children: [
175
- /* @__PURE__ */ e("span", { className: "type-label ds:text-muted-foreground", children: t("cycleCalculator.periodRange") }),
176
- /* @__PURE__ */ r("span", { className: "type-body ds:text-foreground", children: [
177
- l(a.periodRange.start),
178
- " –",
179
- " ",
180
- l(a.periodRange.end)
181
- ] })
182
- ] }) : null,
183
- /* @__PURE__ */ r("div", { className: "ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-2xs)]", children: [
184
- /* @__PURE__ */ e("span", { className: "type-label ds:text-muted-foreground", children: t("cycleCalculator.upcomingPeriods") }),
185
- /* @__PURE__ */ e("ul", { className: "ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-2xs)]", children: a.upcomingPeriods.map((p) => /* @__PURE__ */ e(
186
- "li",
187
- {
188
- className: "type-body ds:text-foreground",
189
- children: l(p)
190
- },
191
- p.getTime()
192
- )) })
193
- ] }),
194
- d === "copy" || o ? /* @__PURE__ */ e(
195
- B,
196
- {
197
- onInsert: o,
198
- variant: d,
199
- onCopy: n,
200
- onError: g,
201
- card: {
202
- title: t("insert.title.cycle"),
203
- icon: "heart",
204
- highlight: `${l(a.fertileWindow.start)} – ${l(
205
- a.fertileWindow.end
206
- )}`,
207
- // Chip reuses the on-screen fertile-window badge's accent
208
- // token so the inserted PNG chip matches the screen.
209
- highlightToken: q,
210
- brand: u,
211
- fields: [
212
- {
213
- // Ovulation is a predicted date → calendar glyph (the
214
- // on-screen badge uses a Check tick, which ICON_GEOMETRY
215
- // does not carry, so the calendar reads the date meaning).
216
- icon: "calendar",
217
- label: t("cycleCalculator.ovulation"),
218
- value: l(a.ovulation)
219
- },
220
- {
221
- // Fertile window → heart glyph, matching the on-screen
222
- // fertile-window badge's Heart icon.
223
- icon: "heart",
224
- label: t("cycleCalculator.fertileWindow"),
225
- value: `${l(a.fertileWindow.start)} – ${l(
226
- a.fertileWindow.end
227
- )}`
228
- },
229
- {
230
- // Next period → droplets glyph, matching the on-screen
231
- // next-period badge's Droplet icon.
232
- icon: "droplets",
233
- label: t("cycleCalculator.nextPeriod"),
234
- value: l(a.nextPeriod)
235
- }
236
- ]
237
- }
238
- }
239
- ) : null
240
- ] }) }) : /* @__PURE__ */ e("p", { className: "type-body ds:text-muted-foreground", children: t("cycleCalculator.empty") })
241
- ]
242
- }
243
- );
244
- }
245
- );
246
- J.displayName = "CycleCalculator";
247
- export {
248
- J as C,
249
- U as L,
250
- O as p
251
- };
252
- //# sourceMappingURL=cycle-calculator-BwqYVPB4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cycle-calculator-BwqYVPB4.js","sources":["../../node_modules/lucide-react/dist/esm/icons/droplet.mjs","../../src/components/cycle-calculator/cycle.ts","../../src/components/cycle-calculator/cycle-calculator.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.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.mjs';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z\",\n key: \"c7niix\"\n }\n ]\n];\nconst Droplet = createLucideIcon(\"droplet\", __iconNode);\n\nexport { __iconNode, Droplet as default };\n//# sourceMappingURL=droplet.mjs.map\n","/* ------------------------------------------------------------------ */\n/* Menstrual-cycle prediction — pure, framework-free, unit-testable. */\n/* */\n/* Uses the standard fixed-luteal-phase model: ovulation falls ~14 days */\n/* before the next period, so on a cycle of length L ovulation is day */\n/* (L − 14). The fertile window spans the 5 days before ovulation */\n/* (sperm survival) through 1 day after (oocyte viability). */\n/* ------------------------------------------------------------------ */\n\nimport { addDays } from 'date-fns';\n\n/** Standard menstrual-cycle length. */\nexport const DEFAULT_CYCLE_LENGTH = 28;\n/** Luteal phase is biologically near-constant at ~14 days. */\nexport const LUTEAL_PHASE_DAYS = 14;\n/** Sperm survive up to ~5 days before ovulation. */\nexport const FERTILE_DAYS_BEFORE = 5;\n/** The oocyte is viable ~1 day after ovulation. */\nexport const FERTILE_DAYS_AFTER = 1;\n\nexport interface CycleInput {\n /** First day of the most recent period. */\n lastPeriodStart: Date;\n /** Average cycle length in days. Defaults to 28. */\n cycleLength?: number;\n /** Period (bleed) length in days. Optional — used for the period range. */\n periodLength?: number;\n}\n\nexport interface DateRange {\n start: Date;\n end: Date;\n}\n\nexport interface CyclePrediction {\n /** Start date of the next period. */\n nextPeriod: Date;\n /** Estimated ovulation date. */\n ovulation: Date;\n /** Fertile window (5 days before ovulation → 1 day after). */\n fertileWindow: DateRange;\n /** Start dates of the next few periods (length = `occurrences`). */\n upcomingPeriods: Date[];\n /**\n * The current period's bleed range (first day → last day), or `null` when no\n * `periodLength` was given.\n */\n periodRange: DateRange | null;\n}\n\n/**\n * Predict ovulation, the fertile window and upcoming periods from the last\n * period's start date. `occurrences` controls how many future periods to\n * list (default 3).\n */\nexport function predictCycle(\n input: CycleInput,\n occurrences = 3,\n): CyclePrediction {\n const cycle = input.cycleLength ?? DEFAULT_CYCLE_LENGTH;\n const { lastPeriodStart } = input;\n\n const ovulation = addDays(lastPeriodStart, cycle - LUTEAL_PHASE_DAYS);\n const fertileWindow: DateRange = {\n start: addDays(ovulation, -FERTILE_DAYS_BEFORE),\n end: addDays(ovulation, FERTILE_DAYS_AFTER),\n };\n const nextPeriod = addDays(lastPeriodStart, cycle);\n const upcomingPeriods = Array.from({ length: occurrences }, (_, i) =>\n addDays(lastPeriodStart, cycle * (i + 1)),\n );\n const periodRange: DateRange | null =\n input.periodLength && input.periodLength > 0\n ? {\n start: lastPeriodStart,\n end: addDays(lastPeriodStart, input.periodLength - 1),\n }\n : null;\n\n return { nextPeriod, ovulation, fertileWindow, upcomingPeriods, periodRange };\n}\n","/* ------------------------------------------------------------------ */\n/* CycleCalculator — predict ovulation, fertile window and upcoming */\n/* periods from the last period's start date. */\n/* */\n/* Maths lives in `./cycle` (pure, separately tested). */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Heart, Check, Droplet } from 'lucide-react';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Card } from '../card';\nimport { Badge } from '../badge';\nimport {\n InsertButton,\n type InsertPayload,\n type InsertVariant,\n type InsertMode,\n} from '../_shared/insert-result';\nimport {\n type CyclePrediction,\n predictCycle,\n DEFAULT_CYCLE_LENGTH,\n} from './cycle';\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/**\n * DS token NAME backing the result-card chip — the fertile window is the\n * headline fertility datum, shown on screen with the `accent` Badge variant\n * (which fills `--accent`). The card chip reuses that token so the inserted\n * PNG chip matches the on-screen fertile-window badge.\n */\nconst HIGHLIGHT_TOKEN = '--accent';\n\nexport interface CycleCalculatorProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial cycle length in days. Defaults to 28. */\n defaultCycleLength?: number;\n /** Fires whenever a prediction can be computed (and `null` when it can't). */\n onResultChange?: (result: CyclePrediction | null) => void;\n /** When provided, shows the result-action buttons that emit / copy the result. */\n onInsert?: (payload: InsertPayload) => void;\n /**\n * Which verb the result button performs. Defaults to `'insert'`.\n * Use `'copy'` in an app-shell surface (no editor to insert into) — the\n * button writes the result to the clipboard as a multi-format `ClipboardItem`.\n */\n insertVariant?: InsertVariant;\n /** `copy` variant only — fired after a successful clipboard write. */\n onCopy?: (mode: InsertMode) => void;\n /** `copy` variant only — fired if the clipboard write can't proceed. */\n onError?: (error: unknown) => void;\n /**\n * Brand wordmark printed in the inserted/copied result-card footer.\n * Omitted → no brand line (and no footer hairline); a string → that custom\n * brand; `false` → no brand line. Brand is opt-in.\n */\n insertBrand?: string | false;\n /** 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 CycleCalculator = forwardRef<HTMLDivElement, CycleCalculatorProps>(\n (\n {\n defaultCycleLength = DEFAULT_CYCLE_LENGTH,\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n const [lastPeriod, setLastPeriod] = useState<Date | undefined>(undefined);\n const [cycleLength, setCycleLength] = useState<number | null>(\n defaultCycleLength,\n );\n const [periodLength, setPeriodLength] = useState<number | null>(null);\n\n const result = useMemo<CyclePrediction | null>(() => {\n if (!lastPeriod) return null;\n return predictCycle({\n lastPeriodStart: lastPeriod,\n cycleLength: cycleLength ?? DEFAULT_CYCLE_LENGTH,\n periodLength: periodLength ?? undefined,\n });\n }, [lastPeriod, cycleLength, periodLength]);\n\n const dateFormatter = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n const today = useMemo(() => new Date(), []);\n\n const fmt = (d: Date): string => dateFormatter.format(d);\n\n return (\n <div\n ref={ref}\n data-component=\"cycle-calculator\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField label={t('cycleCalculator.lastPeriod')}>\n <DatePicker\n value={lastPeriod}\n onChange={setLastPeriod}\n maxDate={today}\n />\n </FormField>\n <FormField\n label={t('cycleCalculator.cycleLength')}\n description={t('cycleCalculator.cycleLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={20}\n max={45}\n value={cycleLength}\n onChange={setCycleLength}\n />\n </FormField>\n <FormField\n label={t('cycleCalculator.periodLength')}\n description={t('cycleCalculator.periodLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={1}\n max={14}\n value={periodLength}\n onChange={setPeriodLength}\n />\n </FormField>\n </div>\n\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('cycleCalculator.ovulation')}: ${fmt(result.ovulation)}. ${t(\n 'cycleCalculator.nextPeriod',\n )}: ${fmt(result.nextPeriod)}.`\n : ''}\n </p>\n\n {result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <dl className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3\">\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.ovulation')}\n </dt>\n <dd>\n <Badge\n variant=\"success\"\n size=\"lg\"\n leading={<Check aria-hidden />}\n >\n {fmt(result.ovulation)}\n </Badge>\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.fertileWindow')}\n </dt>\n <dd>\n <Badge\n variant=\"accent\"\n size=\"lg\"\n leading={<Heart aria-hidden />}\n >\n {fmt(result.fertileWindow.start)} –{' '}\n {fmt(result.fertileWindow.end)}\n </Badge>\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-xs)] ds:text-center\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.nextPeriod')}\n </dt>\n <dd>\n <Badge\n variant=\"error\"\n size=\"lg\"\n leading={<Droplet aria-hidden />}\n >\n {fmt(result.nextPeriod)}\n </Badge>\n </dd>\n </div>\n </dl>\n\n {result.periodRange ? (\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.periodRange')}\n </span>\n <span className=\"type-body ds:text-foreground\">\n {fmt(result.periodRange.start)} –{' '}\n {fmt(result.periodRange.end)}\n </span>\n </div>\n ) : null}\n\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('cycleCalculator.upcomingPeriods')}\n </span>\n <ul className=\"ds:flex ds:flex-wrap ds:gap-x-[var(--spacing-md)] ds:gap-y-[var(--spacing-2xs)]\">\n {result.upcomingPeriods.map((d) => (\n <li\n key={d.getTime()}\n className=\"type-body ds:text-foreground\"\n >\n {fmt(d)}\n </li>\n ))}\n </ul>\n </div>\n\n {insertVariant === 'copy' || onInsert ? (\n <InsertButton\n onInsert={onInsert}\n variant={insertVariant}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.cycle'),\n icon: 'heart',\n highlight: `${fmt(result.fertileWindow.start)} – ${fmt(\n result.fertileWindow.end,\n )}`,\n // Chip reuses the on-screen fertile-window badge's accent\n // token so the inserted PNG chip matches the screen.\n highlightToken: HIGHLIGHT_TOKEN,\n brand: insertBrand,\n fields: [\n {\n // Ovulation is a predicted date → calendar glyph (the\n // on-screen badge uses a Check tick, which ICON_GEOMETRY\n // does not carry, so the calendar reads the date meaning).\n icon: 'calendar',\n label: t('cycleCalculator.ovulation'),\n value: fmt(result.ovulation),\n },\n {\n // Fertile window → heart glyph, matching the on-screen\n // fertile-window badge's Heart icon.\n icon: 'heart',\n label: t('cycleCalculator.fertileWindow'),\n value: `${fmt(result.fertileWindow.start)} – ${fmt(\n result.fertileWindow.end,\n )}`,\n },\n {\n // Next period → droplets glyph, matching the on-screen\n // next-period badge's Droplet icon.\n icon: 'droplets',\n label: t('cycleCalculator.nextPeriod'),\n value: fmt(result.nextPeriod),\n },\n ],\n }}\n />\n ) : null}\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('cycleCalculator.empty')}\n </p>\n )}\n </div>\n );\n },\n);\n\nCycleCalculator.displayName = 'CycleCalculator';\n"],"names":["__iconNode","Droplet","createLucideIcon","DEFAULT_CYCLE_LENGTH","LUTEAL_PHASE_DAYS","FERTILE_DAYS_AFTER","predictCycle","input","occurrences","cycle","lastPeriodStart","ovulation","addDays","fertileWindow","nextPeriod","upcomingPeriods","_","i","periodRange","rootVariants","cva","HIGHLIGHT_TOKEN","CycleCalculator","forwardRef","defaultCycleLength","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","id","width","className","ref","i18n","useTranslation","lastPeriod","setLastPeriod","useState","cycleLength","setCycleLength","periodLength","setPeriodLength","result","useMemo","dateFormatter","useEffect","today","fmt","d","jsxs","jsx","FormField","DatePicker","NumberInput","Card","Badge","Check","Heart","InsertButton"],"mappings":"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","x_google_ignoreList":[0]}