@alfadocs/ui-kit-debug 0.50.1 → 0.52.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 (248) hide show
  1. package/dist/_chunks/{agenda-card-BaSfVfrL.js → agenda-card-Bl-SBiCh.js} +55 -45
  2. package/dist/_chunks/agenda-card-Bl-SBiCh.js.map +1 -0
  3. package/dist/_chunks/agenda-tray-DA6qj8BL.js +203 -0
  4. package/dist/_chunks/agenda-tray-DA6qj8BL.js.map +1 -0
  5. package/dist/_chunks/{ai-consent-banner-F2md5JD3.js → ai-consent-banner-DBKV27je.js} +2 -2
  6. package/dist/_chunks/{ai-consent-banner-F2md5JD3.js.map → ai-consent-banner-DBKV27je.js.map} +1 -1
  7. package/dist/_chunks/ai-tools-rail-7tC3GT4h.js +340 -0
  8. package/dist/_chunks/ai-tools-rail-7tC3GT4h.js.map +1 -0
  9. package/dist/_chunks/{alert-CUTxnym2.js → alert-_mUKLmwA.js} +54 -44
  10. package/dist/_chunks/alert-_mUKLmwA.js.map +1 -0
  11. package/dist/_chunks/{audio-recorder-DVJXV7_k.js → audio-recorder-D6OVfNiZ.js} +2 -2
  12. package/dist/_chunks/{audio-recorder-DVJXV7_k.js.map → audio-recorder-D6OVfNiZ.js.map} +1 -1
  13. package/dist/_chunks/{booking-DljH0JkS.js → booking-BUV9fspj.js} +2 -2
  14. package/dist/_chunks/{booking-DljH0JkS.js.map → booking-BUV9fspj.js.map} +1 -1
  15. package/dist/_chunks/{document-scanner-Cxqvq7GR.js → document-scanner-biBS_f6c.js} +2 -2
  16. package/dist/_chunks/{document-scanner-Cxqvq7GR.js.map → document-scanner-biBS_f6c.js.map} +1 -1
  17. package/dist/_chunks/dropdown-menu-DwwPovMZ.js +354 -0
  18. package/dist/_chunks/dropdown-menu-DwwPovMZ.js.map +1 -0
  19. package/dist/_chunks/{editable-currency-cell-renderer-Bh48OHRv.js → editable-currency-cell-renderer-D5C5tCfu.js} +3 -3
  20. package/dist/_chunks/{editable-currency-cell-renderer-Bh48OHRv.js.map → editable-currency-cell-renderer-D5C5tCfu.js.map} +1 -1
  21. package/dist/_chunks/{freemium-paywall-BWaLWje-.js → freemium-paywall-gHGA44dW.js} +2 -2
  22. package/dist/_chunks/{freemium-paywall-BWaLWje-.js.map → freemium-paywall-gHGA44dW.js.map} +1 -1
  23. package/dist/_chunks/{header-settings-Bx0Biimh.js → header-settings-D5Z2B_Yz.js} +3 -3
  24. package/dist/_chunks/{header-settings-Bx0Biimh.js.map → header-settings-D5Z2B_Yz.js.map} +1 -1
  25. package/dist/_chunks/{logo-yituK7sE.js → logo-1FuSGx0n.js} +2 -1
  26. package/dist/_chunks/{logo-yituK7sE.js.map → logo-1FuSGx0n.js.map} +1 -1
  27. package/dist/_chunks/marketplace-app-shell-C4OYAC22.js +513 -0
  28. package/dist/_chunks/marketplace-app-shell-C4OYAC22.js.map +1 -0
  29. package/dist/_chunks/maximize-2-Cm9OUQ2m.js +17 -0
  30. package/dist/_chunks/maximize-2-Cm9OUQ2m.js.map +1 -0
  31. package/dist/_chunks/{patient-search-BJOmTmDA.js → patient-search-CArmRKeg.js} +3 -3
  32. package/dist/_chunks/{patient-search-BJOmTmDA.js.map → patient-search-CArmRKeg.js.map} +1 -1
  33. package/dist/_chunks/patient-shell-Coarf346.js +162 -0
  34. package/dist/_chunks/patient-shell-Coarf346.js.map +1 -0
  35. package/dist/_chunks/{payment-form-xmeCkxas.js → payment-form-DJ9vnzrT.js} +2 -2
  36. package/dist/_chunks/{payment-form-xmeCkxas.js.map → payment-form-DJ9vnzrT.js.map} +1 -1
  37. package/dist/_chunks/{pdf-viewer-q1D3Uion.js → pdf-viewer-4odMFuFW.js} +2 -2
  38. package/dist/_chunks/{pdf-viewer-q1D3Uion.js.map → pdf-viewer-4odMFuFW.js.map} +1 -1
  39. package/dist/_chunks/{practice-results-Cq1y8JFD.js → practice-results-CtfciF2v.js} +3 -3
  40. package/dist/_chunks/{practice-results-Cq1y8JFD.js.map → practice-results-CtfciF2v.js.map} +1 -1
  41. package/dist/_chunks/{pregnancy-dating-DT_244bG.js → pregnancy-dating-BA37LSkF.js} +15 -15
  42. package/dist/_chunks/{pregnancy-dating-DT_244bG.js.map → pregnancy-dating-BA37LSkF.js.map} +1 -1
  43. package/dist/_chunks/{privacy-lock-BmX_gkvt.js → privacy-lock-BN3L-alb.js} +2 -2
  44. package/dist/_chunks/{privacy-lock-BmX_gkvt.js.map → privacy-lock-BN3L-alb.js.map} +1 -1
  45. package/dist/_chunks/{public-footer.agent-okt8ZRc5.js → public-footer.agent-CfXuW1x6.js} +2 -2
  46. package/dist/_chunks/{public-footer.agent-okt8ZRc5.js.map → public-footer.agent-CfXuW1x6.js.map} +1 -1
  47. package/dist/_chunks/{recaptcha-widget-CFYyLSEX.js → recaptcha-widget-BCNHsgqt.js} +2 -2
  48. package/dist/_chunks/{recaptcha-widget-CFYyLSEX.js.map → recaptcha-widget-BCNHsgqt.js.map} +1 -1
  49. package/dist/_chunks/{sidebar-h78cTNLh.js → sidebar-DPEHzxLZ.js} +397 -346
  50. package/dist/_chunks/sidebar-DPEHzxLZ.js.map +1 -0
  51. package/dist/_chunks/{sign-document-CZkAf28g.js → sign-document-Bzld9jVM.js} +2 -2
  52. package/dist/_chunks/{sign-document-CZkAf28g.js.map → sign-document-Bzld9jVM.js.map} +1 -1
  53. package/dist/_chunks/{sign-in-with-alfadocs-button-CuYn_kKP.js → sign-in-with-alfadocs-button-BpAjVmsI.js} +2 -2
  54. package/dist/_chunks/{sign-in-with-alfadocs-button-CuYn_kKP.js.map → sign-in-with-alfadocs-button-BpAjVmsI.js.map} +1 -1
  55. package/dist/_chunks/{task-card-CPyQ5AXC.js → task-card-BwY9jaV1.js} +48 -42
  56. package/dist/_chunks/task-card-BwY9jaV1.js.map +1 -0
  57. package/dist/_chunks/task-tray-Cb_hK4yb.js +234 -0
  58. package/dist/_chunks/task-tray-Cb_hK4yb.js.map +1 -0
  59. package/dist/_chunks/{theme-toggle-ClATnY4Q.js → theme-toggle-DAW7uC0B.js} +3 -3
  60. package/dist/_chunks/{theme-toggle-ClATnY4Q.js.map → theme-toggle-DAW7uC0B.js.map} +1 -1
  61. package/dist/_chunks/use-edge-resize-ZnGG7gyO.js +139 -0
  62. package/dist/_chunks/use-edge-resize-ZnGG7gyO.js.map +1 -0
  63. package/dist/_chunks/use-theme-CAuo6EYT.js +159 -0
  64. package/dist/_chunks/use-theme-CAuo6EYT.js.map +1 -0
  65. package/dist/_chunks/{warning-stack-CXfoAT-_.js → warning-stack-Cv4fr5zo.js} +2 -2
  66. package/dist/_chunks/{warning-stack-CXfoAT-_.js.map → warning-stack-Cv4fr5zo.js.map} +1 -1
  67. package/dist/_chunks/{workflow-map-DzX_LI4y.js → workflow-map-BJDUNYlX.js} +3 -3
  68. package/dist/_chunks/{workflow-map-DzX_LI4y.js.map → workflow-map-BJDUNYlX.js.map} +1 -1
  69. package/dist/agent-catalog.json +1 -1
  70. package/dist/brand/product-lockup/product-lockup.d.ts +47 -12
  71. package/dist/brand/product-lockup/product-lockup.d.ts.map +1 -1
  72. package/dist/components/agenda-card/agenda-card.d.ts +19 -2
  73. package/dist/components/agenda-card/agenda-card.d.ts.map +1 -1
  74. package/dist/components/agenda-card/index.js +1 -1
  75. package/dist/components/agenda-tray/agenda-tray.d.ts +24 -1
  76. package/dist/components/agenda-tray/agenda-tray.d.ts.map +1 -1
  77. package/dist/components/agenda-tray/index.js +1 -1
  78. package/dist/components/ai-consent-banner/index.js +1 -1
  79. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +8 -0
  80. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts.map +1 -1
  81. package/dist/components/ai-tools-rail/index.js +1 -1
  82. package/dist/components/alert/index.js +1 -1
  83. package/dist/components/audio-recorder/index.js +1 -1
  84. package/dist/components/booking/index.js +1 -1
  85. package/dist/components/button-group/button-group.d.ts +1 -1
  86. package/dist/components/checkbox-group/checkbox-group.d.ts +1 -1
  87. package/dist/components/data-table/index.js +1 -1
  88. package/dist/components/document-scanner/index.js +1 -1
  89. package/dist/components/dropdown-menu/dropdown-menu.d.ts +2 -0
  90. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  91. package/dist/components/dropdown-menu/index.js +1 -1
  92. package/dist/components/form-field/form-field.d.ts +1 -1
  93. package/dist/components/freemium-paywall/index.js +1 -1
  94. package/dist/components/header-settings/index.js +1 -1
  95. package/dist/components/icon-button-group/icon-button-group.d.ts +15 -15
  96. package/dist/components/key-value-pair/key-value-pair.d.ts +1 -1
  97. package/dist/components/logo/index.js +1 -1
  98. package/dist/components/patient-search/index.js +1 -1
  99. package/dist/components/payment-form/index.js +1 -1
  100. package/dist/components/pdf-viewer/index.js +1 -1
  101. package/dist/components/practice-results/index.js +1 -1
  102. package/dist/components/pregnancy-dating/index.js +1 -1
  103. package/dist/components/pregnancy-dating/pregnancy-dating.d.ts.map +1 -1
  104. package/dist/components/privacy-lock/index.js +1 -1
  105. package/dist/components/public-footer/index.js +1 -1
  106. package/dist/components/radio-group/radio-group.d.ts +1 -1
  107. package/dist/components/recaptcha-widget/index.js +1 -1
  108. package/dist/components/separator/separator.d.ts +1 -1
  109. package/dist/components/sidebar/index.js +1 -1
  110. package/dist/components/sidebar/sidebar.d.ts +8 -0
  111. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  112. package/dist/components/sign-document/index.js +1 -1
  113. package/dist/components/sign-in-with-alfadocs-button/index.js +1 -1
  114. package/dist/components/tabs/tabs.d.ts +2 -2
  115. package/dist/components/task-card/index.js +1 -1
  116. package/dist/components/task-card/task-card.d.ts +15 -1
  117. package/dist/components/task-card/task-card.d.ts.map +1 -1
  118. package/dist/components/task-tray/index.js +1 -1
  119. package/dist/components/task-tray/task-tray.d.ts +24 -1
  120. package/dist/components/task-tray/task-tray.d.ts.map +1 -1
  121. package/dist/components/theme-toggle/index.js +1 -1
  122. package/dist/components/warning-stack/index.js +1 -1
  123. package/dist/components/workflow/index.js +1 -1
  124. package/dist/components/workflow/workflow-map.d.ts +1 -1
  125. package/dist/hooks/index.d.ts +1 -0
  126. package/dist/hooks/index.d.ts.map +1 -1
  127. package/dist/hooks/index.js +12 -10
  128. package/dist/hooks/index.js.map +1 -1
  129. package/dist/hooks/use-edge-resize.d.ts +78 -0
  130. package/dist/hooks/use-edge-resize.d.ts.map +1 -0
  131. package/dist/hooks/use-theme.d.ts.map +1 -1
  132. package/dist/i18n/locales/ar.d.ts +4 -0
  133. package/dist/i18n/locales/ar.d.ts.map +1 -1
  134. package/dist/i18n/locales/ar.js +7 -3
  135. package/dist/i18n/locales/ar.js.map +1 -1
  136. package/dist/i18n/locales/de.d.ts +4 -0
  137. package/dist/i18n/locales/de.d.ts.map +1 -1
  138. package/dist/i18n/locales/de.js +7 -3
  139. package/dist/i18n/locales/de.js.map +1 -1
  140. package/dist/i18n/locales/el.d.ts +4 -0
  141. package/dist/i18n/locales/el.d.ts.map +1 -1
  142. package/dist/i18n/locales/el.js +7 -3
  143. package/dist/i18n/locales/el.js.map +1 -1
  144. package/dist/i18n/locales/en.d.ts +4 -0
  145. package/dist/i18n/locales/en.d.ts.map +1 -1
  146. package/dist/i18n/locales/en.js +7 -3
  147. package/dist/i18n/locales/en.js.map +1 -1
  148. package/dist/i18n/locales/es.d.ts +4 -0
  149. package/dist/i18n/locales/es.d.ts.map +1 -1
  150. package/dist/i18n/locales/es.js +7 -3
  151. package/dist/i18n/locales/es.js.map +1 -1
  152. package/dist/i18n/locales/fr.d.ts +4 -0
  153. package/dist/i18n/locales/fr.d.ts.map +1 -1
  154. package/dist/i18n/locales/fr.js +7 -3
  155. package/dist/i18n/locales/fr.js.map +1 -1
  156. package/dist/i18n/locales/hi.d.ts +4 -0
  157. package/dist/i18n/locales/hi.d.ts.map +1 -1
  158. package/dist/i18n/locales/hi.js +7 -3
  159. package/dist/i18n/locales/hi.js.map +1 -1
  160. package/dist/i18n/locales/it.d.ts +4 -0
  161. package/dist/i18n/locales/it.d.ts.map +1 -1
  162. package/dist/i18n/locales/it.js +7 -3
  163. package/dist/i18n/locales/it.js.map +1 -1
  164. package/dist/i18n/locales/ja.d.ts +4 -0
  165. package/dist/i18n/locales/ja.d.ts.map +1 -1
  166. package/dist/i18n/locales/ja.js +7 -3
  167. package/dist/i18n/locales/ja.js.map +1 -1
  168. package/dist/i18n/locales/nl.d.ts +4 -0
  169. package/dist/i18n/locales/nl.d.ts.map +1 -1
  170. package/dist/i18n/locales/nl.js +7 -3
  171. package/dist/i18n/locales/nl.js.map +1 -1
  172. package/dist/i18n/locales/pl.d.ts +4 -0
  173. package/dist/i18n/locales/pl.d.ts.map +1 -1
  174. package/dist/i18n/locales/pl.js +7 -3
  175. package/dist/i18n/locales/pl.js.map +1 -1
  176. package/dist/i18n/locales/pt.d.ts +4 -0
  177. package/dist/i18n/locales/pt.d.ts.map +1 -1
  178. package/dist/i18n/locales/pt.js +7 -3
  179. package/dist/i18n/locales/pt.js.map +1 -1
  180. package/dist/i18n/locales/ro.d.ts +4 -0
  181. package/dist/i18n/locales/ro.d.ts.map +1 -1
  182. package/dist/i18n/locales/ro.js +7 -3
  183. package/dist/i18n/locales/ro.js.map +1 -1
  184. package/dist/i18n/locales/ru.d.ts +4 -0
  185. package/dist/i18n/locales/ru.d.ts.map +1 -1
  186. package/dist/i18n/locales/ru.js +7 -3
  187. package/dist/i18n/locales/ru.js.map +1 -1
  188. package/dist/i18n/locales/sq.d.ts +4 -0
  189. package/dist/i18n/locales/sq.d.ts.map +1 -1
  190. package/dist/i18n/locales/sq.js +7 -3
  191. package/dist/i18n/locales/sq.js.map +1 -1
  192. package/dist/i18n/locales/sv.d.ts +4 -0
  193. package/dist/i18n/locales/sv.d.ts.map +1 -1
  194. package/dist/i18n/locales/sv.js +7 -3
  195. package/dist/i18n/locales/sv.js.map +1 -1
  196. package/dist/i18n/locales/tr.d.ts +4 -0
  197. package/dist/i18n/locales/tr.d.ts.map +1 -1
  198. package/dist/i18n/locales/tr.js +7 -3
  199. package/dist/i18n/locales/tr.js.map +1 -1
  200. package/dist/i18n/locales/zh.d.ts +4 -0
  201. package/dist/i18n/locales/zh.d.ts.map +1 -1
  202. package/dist/i18n/locales/zh.js +7 -3
  203. package/dist/i18n/locales/zh.js.map +1 -1
  204. package/dist/index.js +31 -31
  205. package/dist/locales/ar.json +7 -3
  206. package/dist/locales/de.json +7 -3
  207. package/dist/locales/el.json +7 -3
  208. package/dist/locales/en.json +7 -3
  209. package/dist/locales/es.json +7 -3
  210. package/dist/locales/fr.json +7 -3
  211. package/dist/locales/hi.json +7 -3
  212. package/dist/locales/it.json +7 -3
  213. package/dist/locales/ja.json +7 -3
  214. package/dist/locales/nl.json +7 -3
  215. package/dist/locales/pl.json +7 -3
  216. package/dist/locales/pt.json +7 -3
  217. package/dist/locales/ro.json +7 -3
  218. package/dist/locales/ru.json +7 -3
  219. package/dist/locales/sq.json +7 -3
  220. package/dist/locales/sv.json +7 -3
  221. package/dist/locales/tr.json +7 -3
  222. package/dist/locales/zh.json +7 -3
  223. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  224. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts +8 -6
  225. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts.map +1 -1
  226. package/dist/patterns/patient-shell/index.js +1 -1
  227. package/dist/tokens.css +1 -1
  228. package/package.json +1 -1
  229. package/dist/_chunks/agenda-card-BaSfVfrL.js.map +0 -1
  230. package/dist/_chunks/agenda-tray-DQayYmQ0.js +0 -165
  231. package/dist/_chunks/agenda-tray-DQayYmQ0.js.map +0 -1
  232. package/dist/_chunks/ai-tools-rail-CYLWrRmm.js +0 -280
  233. package/dist/_chunks/ai-tools-rail-CYLWrRmm.js.map +0 -1
  234. package/dist/_chunks/alert-CUTxnym2.js.map +0 -1
  235. package/dist/_chunks/circle-arrow-up-CC_85SuH.js +0 -16
  236. package/dist/_chunks/circle-arrow-up-CC_85SuH.js.map +0 -1
  237. package/dist/_chunks/dropdown-menu-CUEXqKis.js +0 -299
  238. package/dist/_chunks/dropdown-menu-CUEXqKis.js.map +0 -1
  239. package/dist/_chunks/marketplace-app-shell-UKSLx9K_.js +0 -428
  240. package/dist/_chunks/marketplace-app-shell-UKSLx9K_.js.map +0 -1
  241. package/dist/_chunks/patient-shell-DUmhXnFq.js +0 -174
  242. package/dist/_chunks/patient-shell-DUmhXnFq.js.map +0 -1
  243. package/dist/_chunks/sidebar-h78cTNLh.js.map +0 -1
  244. package/dist/_chunks/task-card-CPyQ5AXC.js.map +0 -1
  245. package/dist/_chunks/task-tray-B8jFv5FV.js +0 -196
  246. package/dist/_chunks/task-tray-B8jFv5FV.js.map +0 -1
  247. package/dist/_chunks/use-theme-C2dHKUAN.js +0 -145
  248. package/dist/_chunks/use-theme-C2dHKUAN.js.map +0 -1
@@ -12,7 +12,7 @@ import { S as Ne } from "./switch-BJ6HD3Mn.js";
12
12
  import { C as M } from "./card-DPmk26CL.js";
13
13
  import { B as j } from "./badge-zsf5i5bH.js";
14
14
  import { I as Se } from "./insert-result-njqBthzT.js";
15
- import { D as k, r as Ae, c as Le, g as ke, e as Ce, f as Te, A as we, h as Ee, i as Re, j as P, G as Fe } from "./antenatal-schedule-timeline-CdiqkF05.js";
15
+ import { D as k, r as Ae, c as Le, g as ke, e as Ce, f as we, A as Te, h as Ee, i as Re, j as P, G as Fe } from "./antenatal-schedule-timeline-CdiqkF05.js";
16
16
  import { s as C } from "./subDays-Bs00akhK.js";
17
17
  import { i as Ie } from "./date-picker-variants-CXEAx3O_.js";
18
18
  const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
@@ -35,7 +35,7 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
35
35
  onCopy: K,
36
36
  onError: U,
37
37
  insertBrand: q,
38
- showSchedule: T = !1,
38
+ showSchedule: w = !1,
39
39
  defaultPlurality: J = "singleton",
40
40
  defaultChorionicity: Q = "unknown",
41
41
  defaultRhNegative: W = !1,
@@ -47,7 +47,7 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
47
47
  }, te) => {
48
48
  const { t: e, i18n: f } = be(), [s, ne] = i(z), [d, le] = i(
49
49
  Y
50
- ), [w, se] = i(
50
+ ), [T, se] = i(
51
51
  k
52
52
  ), [E, ie] = i(5), [D, re] = i(null), [v, de] = i(void 0), [b, ce] = i(
53
53
  null
@@ -56,7 +56,7 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
56
56
  ), G = o(() => /* @__PURE__ */ new Date(), []), c = o(() => s !== "lmp" || !d || D === null || !v ? null : Ae({ lmp: d, scanDate: v, crlMm: D }), [s, d, D, v]), p = o(() => {
57
57
  if (!d) return null;
58
58
  let t, u = k;
59
- s === "lmp" ? (t = d, u = w ?? k) : s === "conception" ? t = C(d, P) : s === "ivf" ? t = C(d, E + P) : t = C(d, Fe), s === "lmp" && (c != null && c.redated) ? (t = c.gestationalStart, u = k) : b && (t = C(t, b));
59
+ s === "lmp" ? (t = d, u = T ?? k) : s === "conception" ? t = C(d, P) : s === "ivf" ? t = C(d, E + P) : t = C(d, Fe), s === "lmp" && (c != null && c.redated) ? (t = c.gestationalStart, u = k) : b && (t = C(t, b));
60
60
  const h = Le(
61
61
  { method: "lmp", date: t, cycleLength: u },
62
62
  m
@@ -73,12 +73,12 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
73
73
  }, [
74
74
  s,
75
75
  d,
76
- w,
76
+ T,
77
77
  E,
78
78
  c,
79
79
  b,
80
80
  m
81
- ]), n = (p == null ? void 0 : p.result) ?? null, S = o(() => !T || !n ? null : Ce(n.gestationalStart, {
81
+ ]), n = (p == null ? void 0 : p.result) ?? null, S = o(() => !w || !n ? null : Ce(n.gestationalStart, {
82
82
  ...V,
83
83
  today: m,
84
84
  plurality: x,
@@ -86,7 +86,7 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
86
86
  rhNegative: F,
87
87
  gdmRisk: N === "none" ? void 0 : N
88
88
  }), [
89
- T,
89
+ w,
90
90
  n,
91
91
  m,
92
92
  V,
@@ -168,7 +168,7 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
168
168
  mode: "integer",
169
169
  min: 20,
170
170
  max: 45,
171
- value: w,
171
+ value: T,
172
172
  onChange: se
173
173
  }
174
174
  )
@@ -252,7 +252,7 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
252
252
  c.crlInRange ? null : /* @__PURE__ */ a("span", { className: "type-meta ds:text-muted-foreground", children: e("pregnancyDating.crlOutOfRange") })
253
253
  ] }) : null
254
254
  ] }) : null,
255
- T ? /* @__PURE__ */ l(ye, { children: [
255
+ w ? /* @__PURE__ */ l(ye, { children: [
256
256
  /* @__PURE__ */ l(
257
257
  L,
258
258
  {
@@ -328,8 +328,8 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
328
328
  n.gestationalAge
329
329
  )}.` : "" }),
330
330
  p && n ? /* @__PURE__ */ a(M, { variant: "elevated", children: /* @__PURE__ */ l(M.Body, { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: [
331
- /* @__PURE__ */ l("dl", { className: "ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3", children: [
332
- /* @__PURE__ */ l("div", { className: "ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]", children: [
331
+ /* @__PURE__ */ l("dl", { className: "ds:flex ds:flex-wrap ds:items-start ds:gap-x-[var(--spacing-xl)] ds:gap-y-[var(--spacing-md)]", children: [
332
+ /* @__PURE__ */ l("div", { className: "ds:basis-full ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]", children: [
333
333
  /* @__PURE__ */ a("dt", { className: "type-label ds:text-muted-foreground", children: e("pregnancyDating.result.dueDateLabel") }),
334
334
  /* @__PURE__ */ a("dd", { className: "type-metric ds:text-foreground", children: A.format(n.dueDate) })
335
335
  ] }),
@@ -337,12 +337,12 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
337
337
  /* @__PURE__ */ a("dt", { className: "type-label ds:text-muted-foreground", children: e("pregnancyDating.result.gestationLabel") }),
338
338
  /* @__PURE__ */ a("dd", { className: "type-body ds:text-foreground", children: I(n.gestationalAge) })
339
339
  ] }),
340
- /* @__PURE__ */ l("div", { className: "ds:flex ds:flex-col ds:items-end ds:gap-[var(--spacing-xs)] ds:text-end", children: [
340
+ /* @__PURE__ */ l("div", { className: "ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]", children: [
341
341
  /* @__PURE__ */ a("dt", { className: "type-label ds:text-muted-foreground", children: e("pregnancyDating.result.trimesterLabel") }),
342
342
  /* @__PURE__ */ a("dd", { children: /* @__PURE__ */ a(
343
343
  j,
344
344
  {
345
- variant: Te[n.trimester],
345
+ variant: we[n.trimester],
346
346
  size: "lg",
347
347
  children: e(`pregnancyDating.trimester.${n.trimester}`)
348
348
  }
@@ -370,7 +370,7 @@ const Oe = ve("ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]", {
370
370
  }) })
371
371
  ] })
372
372
  ] }) }) : /* @__PURE__ */ a("p", { className: "type-body ds:text-muted-foreground", children: e("pregnancyDating.empty") }),
373
- S ? /* @__PURE__ */ a(we, { events: S }) : null,
373
+ S ? /* @__PURE__ */ a(Te, { events: S }) : null,
374
374
  n && (B === "copy" || $) ? /* @__PURE__ */ a(
375
375
  Se,
376
376
  {
@@ -418,4 +418,4 @@ je.displayName = "PregnancyDating";
418
418
  export {
419
419
  je as P
420
420
  };
421
- //# sourceMappingURL=pregnancy-dating-DT_244bG.js.map
421
+ //# sourceMappingURL=pregnancy-dating-BA37LSkF.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pregnancy-dating-DT_244bG.js","sources":["../../src/components/pregnancy-dating/pregnancy-dating.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* PregnancyDating — the unified obstetric dating widget. */\n/* */\n/* Supersedes DueDateCalculator + GestationalAgeCalculator: takes any */\n/* known anchor (LMP / conception / IVF transfer / known EDD) and shows */\n/* BOTH the estimated due date AND the current gestational age, */\n/* trimester and milestones. Two dating refinements: a precise CRL + */\n/* scan-date ACOG CO 700 re-dating (LMP), and a quick manual ±days */\n/* adjustment for an uncertain LMP/conception. `showSchedule` appends */\n/* the antenatal exam schedule with plurality / chorionicity / risk */\n/* inputs. All maths lives in `_shared/obstetrics` + `_shared/antenatal- */\n/* schedule` (pure, separately tested). */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { isAfter, subDays } from 'date-fns';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Select } from '../select';\nimport { Switch } from '../switch';\nimport { Card } from '../card';\nimport { Badge } from '../badge';\nimport {\n InsertButton,\n type InsertPayload,\n type InsertVariant,\n type InsertMode,\n} from '../_shared/insert-result';\nimport {\n type EmbryoAge,\n type GestationalAge,\n type DueDateResult,\n type Plurality,\n type Chorionicity,\n computeDueDate,\n redateByCrl,\n gestationalMilestones,\n GESTATION_DAYS,\n CONCEPTION_OFFSET_DAYS,\n DEFAULT_CYCLE_LENGTH,\n TRIMESTER_BADGE_VARIANT,\n trimesterHighlightToken,\n} from '../_shared/obstetrics';\nimport {\n computeAntenatalSchedule,\n type AntenatalScheduleOptions,\n type GdmRisk,\n} from '../_shared/antenatal-schedule';\nimport {\n AntenatalScheduleTimeline,\n buildScheduleInsertFields,\n} from '../_shared/antenatal-schedule-timeline';\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]', {\n variants: {\n width: { full: 'ds:w-full', auto: 'ds:inline-flex' },\n },\n defaultVariants: { width: 'full' },\n});\n\n/** Any known anchor the pregnancy can be dated from. */\nexport type DatingMethod = 'lmp' | 'conception' | 'ivf' | 'edd';\n\n/** i18n key for each method's reference-date field. */\nconst DATE_LABEL_KEY: Record<DatingMethod, string> = {\n lmp: 'pregnancyDating.lmpDate',\n conception: 'pregnancyDating.conceptionDate',\n ivf: 'pregnancyDating.transferDate',\n edd: 'pregnancyDating.eddDate',\n};\n\nexport interface PregnancyDatingResult {\n /** Estimated date of delivery. */\n dueDate: Date;\n /** GA day-0 anchor (effective LMP) after any re-dating / adjustment. */\n gestationalStart: Date;\n /** Gestational age as of the evaluation date; `null` before conception. */\n gestationalAge: GestationalAge | null;\n trimester: DueDateResult['trimester'];\n}\n\nexport interface PregnancyDatingProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial dating method. Defaults to `'lmp'`. */\n defaultMethod?: DatingMethod;\n /** Pre-fill the reference date (e.g. a known LMP from the patient record). */\n defaultReferenceDate?: Date;\n /** Fires whenever a result can be computed (and `null` when it can't). */\n onResultChange?: (result: PregnancyDatingResult | null) => void;\n /** When provided, shows the result-action buttons that emit / copy the result. */\n onInsert?: (payload: InsertPayload) => void;\n /** Which verb the result button performs. Defaults to `'insert'`. */\n insertVariant?: InsertVariant;\n /** `copy` variant only — fired after a successful clipboard write. */\n onCopy?: (mode: InsertMode) => void;\n /** `copy` variant only — fired if the clipboard write can't proceed. */\n onError?: (error: unknown) => void;\n /** Brand wordmark printed in the inserted/copied result-card footer. */\n insertBrand?: string | false;\n /** Append the antenatal exam schedule + reveal the plurality / risk inputs. */\n showSchedule?: boolean;\n /** `showSchedule` only — initial number of babies. Defaults to `'singleton'`. */\n defaultPlurality?: Plurality;\n /** `showSchedule` only — initial chorionicity for multiples. Defaults to `'unknown'`. */\n defaultChorionicity?: Chorionicity;\n /** `showSchedule` only — initial Rh-negative state (surfaces anti-D). */\n defaultRhNegative?: boolean;\n /** `showSchedule` only — initial gestational-diabetes risk tier (surfaces OGTT). */\n defaultGdmRisk?: GdmRisk;\n /**\n * Passthrough options for the appended schedule (national `schedule`,\n * `includeOnIndication`, `birthGuideline`). `today`, `plurality`,\n * `chorionicity`, `rhNegative` and `gdmRisk` come from the component's own\n * inputs. Ignored unless `showSchedule` is set.\n */\n scheduleOptions?: Omit<\n AntenatalScheduleOptions,\n 'today' | 'plurality' | 'chorionicity' | 'rhNegative' | 'gdmRisk'\n >;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport const PregnancyDating = forwardRef<HTMLDivElement, PregnancyDatingProps>(\n (\n {\n defaultMethod = 'lmp',\n defaultReferenceDate,\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n showSchedule = false,\n defaultPlurality = 'singleton',\n defaultChorionicity = 'unknown',\n defaultRhNegative = false,\n defaultGdmRisk,\n scheduleOptions,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n const [method, setMethod] = useState<DatingMethod>(defaultMethod);\n const [refDate, setRefDate] = useState<Date | undefined>(\n defaultReferenceDate,\n );\n const [cycleLength, setCycleLength] = useState<number | null>(\n DEFAULT_CYCLE_LENGTH,\n );\n const [embryoAge, setEmbryoAge] = useState<EmbryoAge>(5);\n // Precise re-dating (LMP method) and the quick ±days nudge.\n const [crlMm, setCrlMm] = useState<number | null>(null);\n const [scanDate, setScanDate] = useState<Date | undefined>(undefined);\n const [datingAdjustment, setDatingAdjustment] = useState<number | null>(\n null,\n );\n // Evaluation date (\"as of\") + multiple-pregnancy / risk inputs.\n const [asOfDate, setAsOfDate] = useState<Date>(() => new Date());\n const [plurality, setPlurality] = useState<Plurality>(defaultPlurality);\n const [chorionicity, setChorionicity] =\n useState<Chorionicity>(defaultChorionicity);\n const [rhNegative, setRhNegative] = useState<boolean>(defaultRhNegative);\n const [gdmRisk, setGdmRisk] = useState<GdmRisk | 'none'>(\n defaultGdmRisk ?? 'none',\n );\n\n // Real today caps the past-only date inputs (LMP, conception, transfer, scan).\n const today = useMemo(() => new Date(), []);\n\n // CRL re-dating (LMP method only) — the measurement-based path.\n const redating = useMemo(() => {\n if (method !== 'lmp' || !refDate || crlMm === null || !scanDate) {\n return null;\n }\n return redateByCrl({ lmp: refDate, scanDate, crlMm });\n }, [method, refDate, crlMm, scanDate]);\n\n const data = useMemo(() => {\n if (!refDate) return null;\n\n // Resolve the method's anchor to an effective LMP (GA day 0).\n let effectiveLmp: Date;\n let cycleForEdd = DEFAULT_CYCLE_LENGTH;\n if (method === 'lmp') {\n effectiveLmp = refDate;\n cycleForEdd = cycleLength ?? DEFAULT_CYCLE_LENGTH;\n } else if (method === 'conception') {\n effectiveLmp = subDays(refDate, CONCEPTION_OFFSET_DAYS);\n } else if (method === 'ivf') {\n effectiveLmp = subDays(refDate, embryoAge + CONCEPTION_OFFSET_DAYS);\n } else {\n effectiveLmp = subDays(refDate, GESTATION_DAYS);\n }\n\n // A confirmed CRL re-dating wins over everything (measurement-based); else\n // apply the quick ±days nudge (+ = pregnancy further along → earlier LMP).\n if (method === 'lmp' && redating?.redated) {\n effectiveLmp = redating.gestationalStart;\n cycleForEdd = DEFAULT_CYCLE_LENGTH;\n } else if (datingAdjustment) {\n effectiveLmp = subDays(effectiveLmp, datingAdjustment);\n }\n\n const r = computeDueDate(\n { method: 'lmp', date: effectiveLmp, cycleLength: cycleForEdd },\n asOfDate,\n );\n return {\n result: {\n dueDate: r.dueDate,\n gestationalStart: r.gestationalStart,\n gestationalAge: r.gestationalAge,\n trimester: r.trimester,\n } satisfies PregnancyDatingResult,\n milestones: gestationalMilestones(r.gestationalStart),\n };\n }, [\n method,\n refDate,\n cycleLength,\n embryoAge,\n redating,\n datingAdjustment,\n asOfDate,\n ]);\n\n const result = data?.result ?? null;\n\n const schedule = useMemo(() => {\n if (!showSchedule || !result) return null;\n return computeAntenatalSchedule(result.gestationalStart, {\n ...scheduleOptions,\n today: asOfDate,\n plurality,\n chorionicity,\n rhNegative,\n gdmRisk: gdmRisk === 'none' ? undefined : gdmRisk,\n });\n }, [\n showSchedule,\n result,\n asOfDate,\n scheduleOptions,\n plurality,\n chorionicity,\n rhNegative,\n gdmRisk,\n ]);\n\n const longDate = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'long' }),\n [i18n.language],\n );\n const medDate = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n const chorionicityOptions = useMemo(\n () =>\n (\n [\n 'unknown',\n 'dichorionic-diamniotic',\n 'monochorionic-diamniotic',\n 'monochorionic-monoamniotic',\n ] as const\n ).map((c) => ({\n value: c,\n label: t(`antenatalSchedule.chorionicity.${c}`),\n })),\n [t],\n );\n\n const gaText = (ga: GestationalAge | null): string =>\n ga\n ? t('pregnancyDating.result.gestation', {\n weeks: ga.weeks,\n days: ga.days,\n })\n : '—';\n\n return (\n <div\n ref={ref}\n data-component=\"pregnancy-dating\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <RadioGroup\n label={t('pregnancyDating.method.label')}\n variant=\"horizontal\"\n value={method}\n onValueChange={(next) => setMethod(next as DatingMethod)}\n >\n <Radio label={t('pregnancyDating.method.lmp')} value=\"lmp\" />\n <Radio\n label={t('pregnancyDating.method.conception')}\n value=\"conception\"\n />\n <Radio label={t('pregnancyDating.method.ivf')} value=\"ivf\" />\n <Radio label={t('pregnancyDating.method.edd')} value=\"edd\" />\n </RadioGroup>\n\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField label={t(DATE_LABEL_KEY[method])}>\n <DatePicker\n value={refDate}\n onChange={setRefDate}\n maxDate={method === 'edd' ? undefined : today}\n />\n </FormField>\n\n {method === 'lmp' && (\n <FormField\n label={t('pregnancyDating.cycleLength')}\n description={t('pregnancyDating.cycleLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={20}\n max={45}\n value={cycleLength}\n onChange={setCycleLength}\n />\n </FormField>\n )}\n\n {method === 'ivf' && (\n <RadioGroup\n label={t('pregnancyDating.embryoAge')}\n variant=\"horizontal\"\n value={String(embryoAge)}\n onValueChange={(next) => setEmbryoAge(Number(next) as EmbryoAge)}\n >\n <Radio label={t('pregnancyDating.day3')} value=\"3\" />\n <Radio label={t('pregnancyDating.day5')} value=\"5\" />\n </RadioGroup>\n )}\n\n <FormField\n label={t('pregnancyDating.datingAdjustment')}\n description={t('pregnancyDating.datingAdjustmentHint')}\n >\n <NumberInput\n mode=\"integer\"\n value={datingAdjustment}\n onChange={setDatingAdjustment}\n />\n </FormField>\n\n <FormField\n label={t('pregnancyDating.asOfDate')}\n description={t('pregnancyDating.asOfDateHint')}\n >\n <DatePicker\n value={asOfDate}\n onChange={(d) => d && setAsOfDate(d)}\n />\n </FormField>\n </div>\n\n {method === 'lmp' ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField\n label={t('pregnancyDating.crl')}\n description={t('pregnancyDating.crlHint')}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.1}\n value={crlMm}\n onChange={setCrlMm}\n />\n </FormField>\n <FormField label={t('pregnancyDating.scanDate')}>\n <DatePicker\n value={scanDate}\n onChange={setScanDate}\n maxDate={today}\n />\n </FormField>\n </div>\n {redating ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Badge variant={redating.redated ? 'warning' : 'success'}>\n {redating.redated\n ? t('pregnancyDating.redated', {\n days: redating.discrepancyDays,\n })\n : t('pregnancyDating.datesAgree')}\n </Badge>\n {!redating.crlInRange ? (\n <span className=\"type-meta ds:text-muted-foreground\">\n {t('pregnancyDating.crlOutOfRange')}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {showSchedule ? (\n <>\n <RadioGroup\n label={t('antenatalSchedule.plurality.label')}\n variant=\"horizontal\"\n value={plurality}\n onValueChange={(next) => setPlurality(next as Plurality)}\n >\n <Radio\n label={t('antenatalSchedule.plurality.singleton')}\n value=\"singleton\"\n />\n <Radio\n label={t('antenatalSchedule.plurality.twin')}\n value=\"twin\"\n />\n <Radio\n label={t('antenatalSchedule.plurality.triplet')}\n value=\"triplet\"\n />\n </RadioGroup>\n\n {plurality !== 'singleton' ? (\n <FormField label={t('antenatalSchedule.chorionicity.label')}>\n <Select\n options={chorionicityOptions}\n value={chorionicity}\n onValueChange={(next) =>\n setChorionicity(next as Chorionicity)\n }\n />\n </FormField>\n ) : null}\n\n <Switch\n label={t('antenatalSchedule.rhNegative')}\n checked={rhNegative}\n onCheckedChange={setRhNegative}\n />\n\n <RadioGroup\n label={t('antenatalSchedule.gdmRisk.label')}\n variant=\"horizontal\"\n value={gdmRisk}\n onValueChange={(next) => setGdmRisk(next as GdmRisk | 'none')}\n >\n <Radio label={t('antenatalSchedule.gdmRisk.none')} value=\"none\" />\n <Radio\n label={t('antenatalSchedule.gdmRisk.medium')}\n value=\"medium\"\n />\n <Radio label={t('antenatalSchedule.gdmRisk.high')} value=\"high\" />\n </RadioGroup>\n </>\n ) : null}\n\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('pregnancyDating.result.dueDateLabel')}: ${longDate.format(\n result.dueDate,\n )}. ${t('pregnancyDating.result.gestationLabel')}: ${gaText(\n result.gestationalAge,\n )}.`\n : ''}\n </p>\n\n {data && result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <dl className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-3\">\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.result.dueDateLabel')}\n </dt>\n <dd className=\"type-metric ds:text-foreground\">\n {longDate.format(result.dueDate)}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.result.gestationLabel')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {gaText(result.gestationalAge)}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-end ds:gap-[var(--spacing-xs)] ds:text-end\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.result.trimesterLabel')}\n </dt>\n <dd>\n <Badge\n variant={TRIMESTER_BADGE_VARIANT[result.trimester]}\n size=\"lg\"\n >\n {t(`pregnancyDating.trimester.${result.trimester}`)}\n </Badge>\n </dd>\n </div>\n </dl>\n\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.milestonesLabel')}\n </span>\n <ul className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n {data.milestones.map((m) => {\n const reached = isAfter(asOfDate, m.date);\n return (\n <li\n key={m.key}\n className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-md)]\"\n >\n <span className=\"type-body ds:text-foreground\">\n {t(`pregnancyDating.milestone.${m.key}`)}\n </span>\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span className=\"type-body ds:text-muted-foreground\">\n {medDate.format(m.date)}\n </span>\n {reached ? (\n <Badge variant=\"success\">\n {t('pregnancyDating.reached')}\n </Badge>\n ) : null}\n </span>\n </li>\n );\n })}\n </ul>\n </div>\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('pregnancyDating.empty')}\n </p>\n )}\n\n {schedule ? <AntenatalScheduleTimeline events={schedule} /> : null}\n\n {result && (insertVariant === 'copy' || onInsert) ? (\n <InsertButton\n onInsert={onInsert}\n variant={insertVariant}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.pregnancyDating'),\n icon: 'calendar-heart',\n highlight: longDate.format(result.dueDate),\n highlightToken: trimesterHighlightToken(result.trimester),\n brand: insertBrand,\n fields: [\n {\n icon: 'calendar',\n label: t('pregnancyDating.result.dueDateLabel'),\n value: longDate.format(result.dueDate),\n },\n {\n icon: 'clock',\n label: t('pregnancyDating.result.gestationLabel'),\n value: gaText(result.gestationalAge),\n },\n {\n icon: 'tag',\n label: t('pregnancyDating.result.trimesterLabel'),\n value: t(`pregnancyDating.trimester.${result.trimester}`),\n },\n ...(schedule\n ? buildScheduleInsertFields(schedule, t, (d) =>\n medDate.format(d),\n )\n : []),\n ],\n }}\n />\n ) : null}\n </div>\n );\n },\n);\n\nPregnancyDating.displayName = 'PregnancyDating';\n"],"names":["rootVariants","cva","DATE_LABEL_KEY","PregnancyDating","forwardRef","defaultMethod","defaultReferenceDate","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","showSchedule","defaultPlurality","defaultChorionicity","defaultRhNegative","defaultGdmRisk","scheduleOptions","id","width","className","ref","t","i18n","useTranslation","method","setMethod","useState","refDate","setRefDate","cycleLength","setCycleLength","DEFAULT_CYCLE_LENGTH","embryoAge","setEmbryoAge","crlMm","setCrlMm","scanDate","setScanDate","datingAdjustment","setDatingAdjustment","asOfDate","setAsOfDate","plurality","setPlurality","chorionicity","setChorionicity","rhNegative","setRhNegative","gdmRisk","setGdmRisk","today","useMemo","redating","redateByCrl","data","effectiveLmp","cycleForEdd","subDays","CONCEPTION_OFFSET_DAYS","GESTATION_DAYS","r","computeDueDate","gestationalMilestones","result","schedule","computeAntenatalSchedule","longDate","medDate","useEffect","chorionicityOptions","c","gaText","ga","jsxs","RadioGroup","next","jsx","Radio","FormField","DatePicker","NumberInput","d","Badge","Fragment","Select","Switch","Card","TRIMESTER_BADGE_VARIANT","m","reached","isAfter","AntenatalScheduleTimeline","InsertButton","trimesterHighlightToken","buildScheduleInsertFields"],"mappings":"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"}
1
+ {"version":3,"file":"pregnancy-dating-BA37LSkF.js","sources":["../../src/components/pregnancy-dating/pregnancy-dating.tsx"],"sourcesContent":["/* ------------------------------------------------------------------ */\n/* PregnancyDating — the unified obstetric dating widget. */\n/* */\n/* Supersedes DueDateCalculator + GestationalAgeCalculator: takes any */\n/* known anchor (LMP / conception / IVF transfer / known EDD) and shows */\n/* BOTH the estimated due date AND the current gestational age, */\n/* trimester and milestones. Two dating refinements: a precise CRL + */\n/* scan-date ACOG CO 700 re-dating (LMP), and a quick manual ±days */\n/* adjustment for an uncertain LMP/conception. `showSchedule` appends */\n/* the antenatal exam schedule with plurality / chorionicity / risk */\n/* inputs. All maths lives in `_shared/obstetrics` + `_shared/antenatal- */\n/* schedule` (pure, separately tested). */\n/* ------------------------------------------------------------------ */\n\nimport { forwardRef, useEffect, useMemo, useState } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { isAfter, subDays } from 'date-fns';\nimport { RadioGroup, Radio } from '../radio-group';\nimport { FormField } from '../form-field';\nimport { DatePicker } from '../date-picker';\nimport { NumberInput } from '../number-input';\nimport { Select } from '../select';\nimport { Switch } from '../switch';\nimport { Card } from '../card';\nimport { Badge } from '../badge';\nimport {\n InsertButton,\n type InsertPayload,\n type InsertVariant,\n type InsertMode,\n} from '../_shared/insert-result';\nimport {\n type EmbryoAge,\n type GestationalAge,\n type DueDateResult,\n type Plurality,\n type Chorionicity,\n computeDueDate,\n redateByCrl,\n gestationalMilestones,\n GESTATION_DAYS,\n CONCEPTION_OFFSET_DAYS,\n DEFAULT_CYCLE_LENGTH,\n TRIMESTER_BADGE_VARIANT,\n trimesterHighlightToken,\n} from '../_shared/obstetrics';\nimport {\n computeAntenatalSchedule,\n type AntenatalScheduleOptions,\n type GdmRisk,\n} from '../_shared/antenatal-schedule';\nimport {\n AntenatalScheduleTimeline,\n buildScheduleInsertFields,\n} from '../_shared/antenatal-schedule-timeline';\n\nconst rootVariants = cva('ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]', {\n variants: {\n width: { full: 'ds:w-full', auto: 'ds:inline-flex' },\n },\n defaultVariants: { width: 'full' },\n});\n\n/** Any known anchor the pregnancy can be dated from. */\nexport type DatingMethod = 'lmp' | 'conception' | 'ivf' | 'edd';\n\n/** i18n key for each method's reference-date field. */\nconst DATE_LABEL_KEY: Record<DatingMethod, string> = {\n lmp: 'pregnancyDating.lmpDate',\n conception: 'pregnancyDating.conceptionDate',\n ivf: 'pregnancyDating.transferDate',\n edd: 'pregnancyDating.eddDate',\n};\n\nexport interface PregnancyDatingResult {\n /** Estimated date of delivery. */\n dueDate: Date;\n /** GA day-0 anchor (effective LMP) after any re-dating / adjustment. */\n gestationalStart: Date;\n /** Gestational age as of the evaluation date; `null` before conception. */\n gestationalAge: GestationalAge | null;\n trimester: DueDateResult['trimester'];\n}\n\nexport interface PregnancyDatingProps extends VariantProps<\n typeof rootVariants\n> {\n /** Initial dating method. Defaults to `'lmp'`. */\n defaultMethod?: DatingMethod;\n /** Pre-fill the reference date (e.g. a known LMP from the patient record). */\n defaultReferenceDate?: Date;\n /** Fires whenever a result can be computed (and `null` when it can't). */\n onResultChange?: (result: PregnancyDatingResult | null) => void;\n /** When provided, shows the result-action buttons that emit / copy the result. */\n onInsert?: (payload: InsertPayload) => void;\n /** Which verb the result button performs. Defaults to `'insert'`. */\n insertVariant?: InsertVariant;\n /** `copy` variant only — fired after a successful clipboard write. */\n onCopy?: (mode: InsertMode) => void;\n /** `copy` variant only — fired if the clipboard write can't proceed. */\n onError?: (error: unknown) => void;\n /** Brand wordmark printed in the inserted/copied result-card footer. */\n insertBrand?: string | false;\n /** Append the antenatal exam schedule + reveal the plurality / risk inputs. */\n showSchedule?: boolean;\n /** `showSchedule` only — initial number of babies. Defaults to `'singleton'`. */\n defaultPlurality?: Plurality;\n /** `showSchedule` only — initial chorionicity for multiples. Defaults to `'unknown'`. */\n defaultChorionicity?: Chorionicity;\n /** `showSchedule` only — initial Rh-negative state (surfaces anti-D). */\n defaultRhNegative?: boolean;\n /** `showSchedule` only — initial gestational-diabetes risk tier (surfaces OGTT). */\n defaultGdmRisk?: GdmRisk;\n /**\n * Passthrough options for the appended schedule (national `schedule`,\n * `includeOnIndication`, `birthGuideline`). `today`, `plurality`,\n * `chorionicity`, `rhNegative` and `gdmRisk` come from the component's own\n * inputs. Ignored unless `showSchedule` is set.\n */\n scheduleOptions?: Omit<\n AntenatalScheduleOptions,\n 'today' | 'plurality' | 'chorionicity' | 'rhNegative' | 'gdmRisk'\n >;\n /** Opaque instance id, emitted as `data-component-id`. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\nexport const PregnancyDating = forwardRef<HTMLDivElement, PregnancyDatingProps>(\n (\n {\n defaultMethod = 'lmp',\n defaultReferenceDate,\n onResultChange,\n onInsert,\n insertVariant = 'insert',\n onCopy,\n onError,\n insertBrand,\n showSchedule = false,\n defaultPlurality = 'singleton',\n defaultChorionicity = 'unknown',\n defaultRhNegative = false,\n defaultGdmRisk,\n scheduleOptions,\n id,\n width,\n className,\n },\n ref,\n ) => {\n const { t, i18n } = useTranslation();\n\n const [method, setMethod] = useState<DatingMethod>(defaultMethod);\n const [refDate, setRefDate] = useState<Date | undefined>(\n defaultReferenceDate,\n );\n const [cycleLength, setCycleLength] = useState<number | null>(\n DEFAULT_CYCLE_LENGTH,\n );\n const [embryoAge, setEmbryoAge] = useState<EmbryoAge>(5);\n // Precise re-dating (LMP method) and the quick ±days nudge.\n const [crlMm, setCrlMm] = useState<number | null>(null);\n const [scanDate, setScanDate] = useState<Date | undefined>(undefined);\n const [datingAdjustment, setDatingAdjustment] = useState<number | null>(\n null,\n );\n // Evaluation date (\"as of\") + multiple-pregnancy / risk inputs.\n const [asOfDate, setAsOfDate] = useState<Date>(() => new Date());\n const [plurality, setPlurality] = useState<Plurality>(defaultPlurality);\n const [chorionicity, setChorionicity] =\n useState<Chorionicity>(defaultChorionicity);\n const [rhNegative, setRhNegative] = useState<boolean>(defaultRhNegative);\n const [gdmRisk, setGdmRisk] = useState<GdmRisk | 'none'>(\n defaultGdmRisk ?? 'none',\n );\n\n // Real today caps the past-only date inputs (LMP, conception, transfer, scan).\n const today = useMemo(() => new Date(), []);\n\n // CRL re-dating (LMP method only) — the measurement-based path.\n const redating = useMemo(() => {\n if (method !== 'lmp' || !refDate || crlMm === null || !scanDate) {\n return null;\n }\n return redateByCrl({ lmp: refDate, scanDate, crlMm });\n }, [method, refDate, crlMm, scanDate]);\n\n const data = useMemo(() => {\n if (!refDate) return null;\n\n // Resolve the method's anchor to an effective LMP (GA day 0).\n let effectiveLmp: Date;\n let cycleForEdd = DEFAULT_CYCLE_LENGTH;\n if (method === 'lmp') {\n effectiveLmp = refDate;\n cycleForEdd = cycleLength ?? DEFAULT_CYCLE_LENGTH;\n } else if (method === 'conception') {\n effectiveLmp = subDays(refDate, CONCEPTION_OFFSET_DAYS);\n } else if (method === 'ivf') {\n effectiveLmp = subDays(refDate, embryoAge + CONCEPTION_OFFSET_DAYS);\n } else {\n effectiveLmp = subDays(refDate, GESTATION_DAYS);\n }\n\n // A confirmed CRL re-dating wins over everything (measurement-based); else\n // apply the quick ±days nudge (+ = pregnancy further along → earlier LMP).\n if (method === 'lmp' && redating?.redated) {\n effectiveLmp = redating.gestationalStart;\n cycleForEdd = DEFAULT_CYCLE_LENGTH;\n } else if (datingAdjustment) {\n effectiveLmp = subDays(effectiveLmp, datingAdjustment);\n }\n\n const r = computeDueDate(\n { method: 'lmp', date: effectiveLmp, cycleLength: cycleForEdd },\n asOfDate,\n );\n return {\n result: {\n dueDate: r.dueDate,\n gestationalStart: r.gestationalStart,\n gestationalAge: r.gestationalAge,\n trimester: r.trimester,\n } satisfies PregnancyDatingResult,\n milestones: gestationalMilestones(r.gestationalStart),\n };\n }, [\n method,\n refDate,\n cycleLength,\n embryoAge,\n redating,\n datingAdjustment,\n asOfDate,\n ]);\n\n const result = data?.result ?? null;\n\n const schedule = useMemo(() => {\n if (!showSchedule || !result) return null;\n return computeAntenatalSchedule(result.gestationalStart, {\n ...scheduleOptions,\n today: asOfDate,\n plurality,\n chorionicity,\n rhNegative,\n gdmRisk: gdmRisk === 'none' ? undefined : gdmRisk,\n });\n }, [\n showSchedule,\n result,\n asOfDate,\n scheduleOptions,\n plurality,\n chorionicity,\n rhNegative,\n gdmRisk,\n ]);\n\n const longDate = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'long' }),\n [i18n.language],\n );\n const medDate = useMemo(\n () => new Intl.DateTimeFormat(i18n.language, { dateStyle: 'medium' }),\n [i18n.language],\n );\n\n useEffect(() => {\n onResultChange?.(result);\n }, [result, onResultChange]);\n\n const chorionicityOptions = useMemo(\n () =>\n (\n [\n 'unknown',\n 'dichorionic-diamniotic',\n 'monochorionic-diamniotic',\n 'monochorionic-monoamniotic',\n ] as const\n ).map((c) => ({\n value: c,\n label: t(`antenatalSchedule.chorionicity.${c}`),\n })),\n [t],\n );\n\n const gaText = (ga: GestationalAge | null): string =>\n ga\n ? t('pregnancyDating.result.gestation', {\n weeks: ga.weeks,\n days: ga.days,\n })\n : '—';\n\n return (\n <div\n ref={ref}\n data-component=\"pregnancy-dating\"\n data-component-id={id}\n className={rootVariants({ width, className })}\n >\n <RadioGroup\n label={t('pregnancyDating.method.label')}\n variant=\"horizontal\"\n value={method}\n onValueChange={(next) => setMethod(next as DatingMethod)}\n >\n <Radio label={t('pregnancyDating.method.lmp')} value=\"lmp\" />\n <Radio\n label={t('pregnancyDating.method.conception')}\n value=\"conception\"\n />\n <Radio label={t('pregnancyDating.method.ivf')} value=\"ivf\" />\n <Radio label={t('pregnancyDating.method.edd')} value=\"edd\" />\n </RadioGroup>\n\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField label={t(DATE_LABEL_KEY[method])}>\n <DatePicker\n value={refDate}\n onChange={setRefDate}\n maxDate={method === 'edd' ? undefined : today}\n />\n </FormField>\n\n {method === 'lmp' && (\n <FormField\n label={t('pregnancyDating.cycleLength')}\n description={t('pregnancyDating.cycleLengthHint')}\n >\n <NumberInput\n mode=\"integer\"\n min={20}\n max={45}\n value={cycleLength}\n onChange={setCycleLength}\n />\n </FormField>\n )}\n\n {method === 'ivf' && (\n <RadioGroup\n label={t('pregnancyDating.embryoAge')}\n variant=\"horizontal\"\n value={String(embryoAge)}\n onValueChange={(next) => setEmbryoAge(Number(next) as EmbryoAge)}\n >\n <Radio label={t('pregnancyDating.day3')} value=\"3\" />\n <Radio label={t('pregnancyDating.day5')} value=\"5\" />\n </RadioGroup>\n )}\n\n <FormField\n label={t('pregnancyDating.datingAdjustment')}\n description={t('pregnancyDating.datingAdjustmentHint')}\n >\n <NumberInput\n mode=\"integer\"\n value={datingAdjustment}\n onChange={setDatingAdjustment}\n />\n </FormField>\n\n <FormField\n label={t('pregnancyDating.asOfDate')}\n description={t('pregnancyDating.asOfDateHint')}\n >\n <DatePicker\n value={asOfDate}\n onChange={(d) => d && setAsOfDate(d)}\n />\n </FormField>\n </div>\n\n {method === 'lmp' ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n <div className=\"ds:grid ds:grid-cols-1 ds:gap-[var(--spacing-md)] ds:sm:grid-cols-2\">\n <FormField\n label={t('pregnancyDating.crl')}\n description={t('pregnancyDating.crlHint')}\n >\n <NumberInput\n mode=\"decimal\"\n min={0}\n step={0.1}\n value={crlMm}\n onChange={setCrlMm}\n />\n </FormField>\n <FormField label={t('pregnancyDating.scanDate')}>\n <DatePicker\n value={scanDate}\n onChange={setScanDate}\n maxDate={today}\n />\n </FormField>\n </div>\n {redating ? (\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n <Badge variant={redating.redated ? 'warning' : 'success'}>\n {redating.redated\n ? t('pregnancyDating.redated', {\n days: redating.discrepancyDays,\n })\n : t('pregnancyDating.datesAgree')}\n </Badge>\n {!redating.crlInRange ? (\n <span className=\"type-meta ds:text-muted-foreground\">\n {t('pregnancyDating.crlOutOfRange')}\n </span>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null}\n\n {showSchedule ? (\n <>\n <RadioGroup\n label={t('antenatalSchedule.plurality.label')}\n variant=\"horizontal\"\n value={plurality}\n onValueChange={(next) => setPlurality(next as Plurality)}\n >\n <Radio\n label={t('antenatalSchedule.plurality.singleton')}\n value=\"singleton\"\n />\n <Radio\n label={t('antenatalSchedule.plurality.twin')}\n value=\"twin\"\n />\n <Radio\n label={t('antenatalSchedule.plurality.triplet')}\n value=\"triplet\"\n />\n </RadioGroup>\n\n {plurality !== 'singleton' ? (\n <FormField label={t('antenatalSchedule.chorionicity.label')}>\n <Select\n options={chorionicityOptions}\n value={chorionicity}\n onValueChange={(next) =>\n setChorionicity(next as Chorionicity)\n }\n />\n </FormField>\n ) : null}\n\n <Switch\n label={t('antenatalSchedule.rhNegative')}\n checked={rhNegative}\n onCheckedChange={setRhNegative}\n />\n\n <RadioGroup\n label={t('antenatalSchedule.gdmRisk.label')}\n variant=\"horizontal\"\n value={gdmRisk}\n onValueChange={(next) => setGdmRisk(next as GdmRisk | 'none')}\n >\n <Radio label={t('antenatalSchedule.gdmRisk.none')} value=\"none\" />\n <Radio\n label={t('antenatalSchedule.gdmRisk.medium')}\n value=\"medium\"\n />\n <Radio label={t('antenatalSchedule.gdmRisk.high')} value=\"high\" />\n </RadioGroup>\n </>\n ) : null}\n\n <p className=\"ds:sr-only\" role=\"status\" aria-live=\"polite\">\n {result\n ? `${t('pregnancyDating.result.dueDateLabel')}: ${longDate.format(\n result.dueDate,\n )}. ${t('pregnancyDating.result.gestationLabel')}: ${gaText(\n result.gestationalAge,\n )}.`\n : ''}\n </p>\n\n {data && result ? (\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n {/* EDD is the headline — full width so a long localized date\n never wraps; gestational age + trimester flow beneath it,\n packed to the start so they don't strand a gap at narrow /\n modal widths. */}\n <dl className=\"ds:flex ds:flex-wrap ds:items-start ds:gap-x-[var(--spacing-xl)] ds:gap-y-[var(--spacing-md)]\">\n <div className=\"ds:basis-full ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.result.dueDateLabel')}\n </dt>\n <dd className=\"type-metric ds:text-foreground\">\n {longDate.format(result.dueDate)}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.result.gestationLabel')}\n </dt>\n <dd className=\"type-body ds:text-foreground\">\n {gaText(result.gestationalAge)}\n </dd>\n </div>\n <div className=\"ds:flex ds:flex-col ds:items-start ds:gap-[var(--spacing-xs)]\">\n <dt className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.result.trimesterLabel')}\n </dt>\n <dd>\n <Badge\n variant={TRIMESTER_BADGE_VARIANT[result.trimester]}\n size=\"lg\"\n >\n {t(`pregnancyDating.trimester.${result.trimester}`)}\n </Badge>\n </dd>\n </div>\n </dl>\n\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n <span className=\"type-label ds:text-muted-foreground\">\n {t('pregnancyDating.milestonesLabel')}\n </span>\n <ul className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]\">\n {data.milestones.map((m) => {\n const reached = isAfter(asOfDate, m.date);\n return (\n <li\n key={m.key}\n className=\"ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-md)]\"\n >\n <span className=\"type-body ds:text-foreground\">\n {t(`pregnancyDating.milestone.${m.key}`)}\n </span>\n <span className=\"ds:flex ds:items-center ds:gap-[var(--spacing-sm)]\">\n <span className=\"type-body ds:text-muted-foreground\">\n {medDate.format(m.date)}\n </span>\n {reached ? (\n <Badge variant=\"success\">\n {t('pregnancyDating.reached')}\n </Badge>\n ) : null}\n </span>\n </li>\n );\n })}\n </ul>\n </div>\n </Card.Body>\n </Card>\n ) : (\n <p className=\"type-body ds:text-muted-foreground\">\n {t('pregnancyDating.empty')}\n </p>\n )}\n\n {schedule ? <AntenatalScheduleTimeline events={schedule} /> : null}\n\n {result && (insertVariant === 'copy' || onInsert) ? (\n <InsertButton\n onInsert={onInsert}\n variant={insertVariant}\n onCopy={onCopy}\n onError={onError}\n card={{\n title: t('insert.title.pregnancyDating'),\n icon: 'calendar-heart',\n highlight: longDate.format(result.dueDate),\n highlightToken: trimesterHighlightToken(result.trimester),\n brand: insertBrand,\n fields: [\n {\n icon: 'calendar',\n label: t('pregnancyDating.result.dueDateLabel'),\n value: longDate.format(result.dueDate),\n },\n {\n icon: 'clock',\n label: t('pregnancyDating.result.gestationLabel'),\n value: gaText(result.gestationalAge),\n },\n {\n icon: 'tag',\n label: t('pregnancyDating.result.trimesterLabel'),\n value: t(`pregnancyDating.trimester.${result.trimester}`),\n },\n ...(schedule\n ? buildScheduleInsertFields(schedule, t, (d) =>\n medDate.format(d),\n )\n : []),\n ],\n }}\n />\n ) : null}\n </div>\n );\n },\n);\n\nPregnancyDating.displayName = 'PregnancyDating';\n"],"names":["rootVariants","cva","DATE_LABEL_KEY","PregnancyDating","forwardRef","defaultMethod","defaultReferenceDate","onResultChange","onInsert","insertVariant","onCopy","onError","insertBrand","showSchedule","defaultPlurality","defaultChorionicity","defaultRhNegative","defaultGdmRisk","scheduleOptions","id","width","className","ref","t","i18n","useTranslation","method","setMethod","useState","refDate","setRefDate","cycleLength","setCycleLength","DEFAULT_CYCLE_LENGTH","embryoAge","setEmbryoAge","crlMm","setCrlMm","scanDate","setScanDate","datingAdjustment","setDatingAdjustment","asOfDate","setAsOfDate","plurality","setPlurality","chorionicity","setChorionicity","rhNegative","setRhNegative","gdmRisk","setGdmRisk","today","useMemo","redating","redateByCrl","data","effectiveLmp","cycleForEdd","subDays","CONCEPTION_OFFSET_DAYS","GESTATION_DAYS","r","computeDueDate","gestationalMilestones","result","schedule","computeAntenatalSchedule","longDate","medDate","useEffect","chorionicityOptions","c","gaText","ga","jsxs","RadioGroup","next","jsx","Radio","FormField","DatePicker","NumberInput","d","Badge","Fragment","Select","Switch","Card","TRIMESTER_BADGE_VARIANT","m","reached","isAfter","AntenatalScheduleTimeline","InsertButton","trimesterHighlightToken","buildScheduleInsertFields"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { useTranslation as V } from "react-i18next";
4
4
  import * as i from "@radix-ui/react-dialog";
5
5
  import { B as u } from "./button-DD_0Xdmr.js";
6
6
  import { I as W } from "./icon-button-CKEOrN37.js";
7
- import { L as X } from "./logo-yituK7sE.js";
7
+ import { L as X } from "./logo-1FuSGx0n.js";
8
8
  import { u as Y } from "./registry-nPAVE19X.js";
9
9
  import { E as h } from "./eye-off-xEXDAh5z.js";
10
10
  import { U as Z } from "./user-CPxpqFjJ.js";
@@ -190,4 +190,4 @@ export {
190
190
  ee as P,
191
191
  $ as p
192
192
  };
193
- //# sourceMappingURL=privacy-lock-BmX_gkvt.js.map
193
+ //# sourceMappingURL=privacy-lock-BN3L-alb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"privacy-lock-BmX_gkvt.js","sources":["../../src/components/privacy-lock/privacy-lock.agent.ts","../../src/components/privacy-lock/privacy-lock.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — PrivacyLock. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { PrivacyLockHandle } from './privacy-lock';\n\nexport const privacyLockAgent: AgentAdapter<PrivacyLockHandle> = {\n id: 'privacy-lock',\n capabilities: ['submit', 'dismiss'],\n state: {\n isLocked: {\n type: 'boolean',\n descriptionKey: 'ui.agent.privacyLock.state.isLocked',\n description: 'True when the privacy overlay is open.',\n read: (handle) => handle.isLocked(),\n },\n },\n actions: {\n lock: {\n safety: 'write',\n descriptionKey: 'ui.agent.privacyLock.actions.lock',\n description: 'Open the privacy overlay.',\n invoke: (handle) => {\n handle.lock();\n },\n },\n unlock: {\n safety: 'write',\n descriptionKey: 'ui.agent.privacyLock.actions.unlock',\n description: 'Close the privacy overlay (consumer-confirmed action).',\n invoke: (handle) => {\n handle.unlock();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'privacy-lock',\n description: 'Marks the PrivacyLock trigger.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* -------------------------------------------------------------------- */\n/* PrivacyLock — a one-click \"lock my screen\" dialog for operator */\n/* workstations on shared clinic hardware. Clicking the trigger paints */\n/* a full-viewport privacy overlay (blurred backdrop + centred card); */\n/* the only ways out are the three action buttons the consumer wires. */\n/* */\n/* Composed of one `IconButton` trigger and a Radix Dialog overlay. The */\n/* dialog is intentionally *not* dismissible via Escape or outside-click */\n/* — the whole point is to make the screen unreadable until the user */\n/* takes an explicit action. */\n/* */\n/* See `src/components/privacy-lock/privacy-lock.mdx` for usage. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { EyeOff, LogOut, User } from 'lucide-react';\nimport { Button } from '../button';\nimport { IconButton } from '../button/icon-button';\nimport { Logo } from '../logo';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { privacyLockAgent } from './privacy-lock.agent';\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\n/** Curated imperative handle for agent / external automation. */\nexport interface PrivacyLockHandle {\n isLocked: () => boolean;\n lock: () => void;\n unlock: () => void;\n}\n\nexport interface PrivacyLockProps {\n /** Controlled open state. Pair with `onOpenChange`. */\n open?: boolean;\n /** Uncontrolled initial state. Ignored when `open` is provided. */\n defaultOpen?: boolean;\n /** Fires whenever the dialog opens or closes — trigger click, action button, etc. */\n onOpenChange?: (open: boolean) => void;\n\n /** Fires when the \"Unlock screen\" button is activated. Dialog closes automatically. */\n onUnlock?: () => void;\n /** Fires when \"Account page\" is activated. Button is omitted when undefined. Dialog closes automatically. */\n onAccountPage?: () => void;\n /** Fires when \"Log out\" is activated. Button is omitted when undefined. Dialog closes automatically. */\n onSignOut?: () => void;\n\n /** Override the trigger icon. Default: `lucide-react` `<EyeOff />`. */\n triggerIcon?: ReactNode;\n /** Accessible name for the trigger. Default: t('privacyLock.triggerAriaLabel'). */\n triggerAriaLabel?: string;\n /** Tooltip for the trigger. Default: t('privacyLock.triggerTooltip'). */\n triggerTooltip?: string;\n\n /** Accessible title of the dialog (visually hidden). Default: t('privacyLock.title'). */\n title?: string;\n /** Visible supporting text under the action buttons. Default: t('privacyLock.description'). */\n description?: string;\n /** Label for the \"Unlock screen\" button. Default: t('privacyLock.unlock'). */\n unlockLabel?: string;\n /** Label for the \"Account page\" button. Default: t('privacyLock.accountPage'). */\n accountPageLabel?: string;\n /** Label for the \"Log out\" button. Default: t('privacyLock.signOut'). */\n signOutLabel?: string;\n\n /** Extra classes on the trigger `IconButton`. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const PrivacyLock = forwardRef<HTMLButtonElement, PrivacyLockProps>(\n (\n {\n open,\n defaultOpen = false,\n onOpenChange,\n onUnlock,\n onAccountPage,\n onSignOut,\n triggerIcon,\n triggerAriaLabel,\n triggerTooltip,\n title,\n description,\n unlockLabel,\n accountPageLabel,\n signOutLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : uncontrolledOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const latestOpenRef = useRef(isOpen);\n latestOpenRef.current = isOpen;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n useImperativeHandle(ref, () => triggerRef.current as HTMLButtonElement, []);\n\n const agentHandle = useMemo<PrivacyLockHandle>(\n () => ({\n isLocked: () => latestOpenRef.current,\n lock: () => setOpen(true),\n unlock: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(\n privacyLockAgent,\n agentHandle,\n (rest as { id?: string }).id,\n );\n\n // Every action closes the dialog after firing the consumer's\n // callback. Consumers that need to keep the dialog open (e.g.\n // confirmation step) should control `open` themselves and skip the\n // close on the relevant callback.\n const handleAction = useCallback(\n (callback?: () => void) => (event: MouseEvent<HTMLButtonElement>) => {\n callback?.();\n // Only close if the consumer didn't preventDefault — lets a\n // controlled consumer stop the auto-close for guarded actions.\n if (!event.defaultPrevented) setOpen(false);\n },\n [setOpen],\n );\n\n const resolvedTriggerAriaLabel =\n triggerAriaLabel ??\n t('privacyLock.triggerAriaLabel', 'Lock screen for privacy');\n const resolvedTriggerTooltip =\n triggerTooltip ?? t('privacyLock.triggerTooltip', 'Lock screen');\n const resolvedTitle =\n title ?? t('privacyLock.title', 'Screen locked for privacy');\n const resolvedDescription =\n description ??\n t(\n 'privacyLock.description',\n 'Locking the screen helps protect the privacy of your data.',\n );\n const resolvedUnlockLabel =\n unlockLabel ?? t('privacyLock.unlock', 'Unlock screen');\n const resolvedAccountPageLabel =\n accountPageLabel ?? t('privacyLock.accountPage', 'Account page');\n const resolvedSignOutLabel =\n signOutLabel ?? t('privacyLock.signOut', 'Log out');\n\n return (\n <RadixDialog.Root open={isOpen} onOpenChange={setOpen}>\n <RadixDialog.Trigger asChild>\n <IconButton\n ref={triggerRef}\n icon={triggerIcon ?? <EyeOff aria-hidden />}\n aria-label={resolvedTriggerAriaLabel}\n tooltip={resolvedTriggerTooltip}\n className={className}\n data-component=\"privacy-lock\"\n data-component-id={(rest as { id?: string }).id}\n {...rest}\n />\n </RadixDialog.Trigger>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/40 ds:backdrop-blur-xl',\n // Fade-in / fade-out via Radix data-state. Gated on\n // motion-reduce per accessibility requirements.\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n ].join(' ')}\n />\n <RadixDialog.Content\n aria-label={resolvedTitle}\n // Make the overlay non-dismissible by ambient input. The only\n // way out is an explicit action button — preserving the\n // \"locked\" contract. Screen readers + assistive tech still\n // reach the buttons via Tab.\n onEscapeKeyDown={(event) => event.preventDefault()}\n onPointerDownOutside={(event) => event.preventDefault()}\n onInteractOutside={(event) => event.preventDefault()}\n // Radix's default closes the dialog and returns focus to the\n // trigger (per the WAI-ARIA Dialog pattern). Stacked with\n // Radix Tooltip — which opens on focus per the WAI-ARIA\n // Tooltip pattern — that produces a tooltip stuck on the\n // lock icon every time the user unlocks. PrivacyLock's UX\n // contract is \"unlock and get out of the user's way\" (cf.\n // macOS / Windows / 1Password unlock flows: focus returns to\n // the page, not the unlock control), so we opt out of\n // Radix's auto-focus return and let focus fall to the body.\n onCloseAutoFocus={(event) => event.preventDefault()}\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal)]',\n 'ds:flex ds:items-center ds:justify-center',\n 'ds:focus:outline-none',\n 'ds:text-[color:var(--foreground)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in',\n 'ds:motion-reduce:animate-none',\n ].join(' ')}\n >\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-lg)] ds:w-[min(22rem,calc(100vw-var(--spacing-xl)))] ds:text-center\">\n <Logo size=\"xl\" decorative />\n <RadixDialog.Title className=\"ds:sr-only\">\n {resolvedTitle}\n </RadixDialog.Title>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:w-full\">\n <Button\n intent=\"primary\"\n startIcon={<EyeOff aria-hidden />}\n onClick={handleAction(onUnlock)}\n >\n {resolvedUnlockLabel}\n </Button>\n {onAccountPage ? (\n <Button\n intent=\"secondary\"\n startIcon={<User aria-hidden />}\n onClick={handleAction(onAccountPage)}\n >\n {resolvedAccountPageLabel}\n </Button>\n ) : null}\n {onSignOut ? (\n <Button\n intent=\"secondary\"\n startIcon={<LogOut aria-hidden />}\n onClick={handleAction(onSignOut)}\n >\n {resolvedSignOutLabel}\n </Button>\n ) : null}\n </div>\n <RadixDialog.Description className=\"type-body-sm ds:opacity-90\">\n {resolvedDescription}\n </RadixDialog.Description>\n </div>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n },\n);\nPrivacyLock.displayName = 'PrivacyLock';\n"],"names":["privacyLockAgent","handle","PrivacyLock","forwardRef","open","defaultOpen","onOpenChange","onUnlock","onAccountPage","onSignOut","triggerIcon","triggerAriaLabel","triggerTooltip","title","description","unlockLabel","accountPageLabel","signOutLabel","className","rest","ref","t","useTranslation","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","isOpen","setOpen","useCallback","next","latestOpenRef","useRef","triggerRef","useImperativeHandle","agentHandle","useMemo","useAgentRegistration","handleAction","callback","event","resolvedTriggerAriaLabel","resolvedTriggerTooltip","resolvedTitle","resolvedDescription","resolvedUnlockLabel","resolvedAccountPageLabel","resolvedSignOutLabel","RadixDialog","jsx","IconButton","EyeOff","jsxs","Logo","Button","User","LogOut"],"mappings":"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"}
1
+ {"version":3,"file":"privacy-lock-BN3L-alb.js","sources":["../../src/components/privacy-lock/privacy-lock.agent.ts","../../src/components/privacy-lock/privacy-lock.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — PrivacyLock. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { PrivacyLockHandle } from './privacy-lock';\n\nexport const privacyLockAgent: AgentAdapter<PrivacyLockHandle> = {\n id: 'privacy-lock',\n capabilities: ['submit', 'dismiss'],\n state: {\n isLocked: {\n type: 'boolean',\n descriptionKey: 'ui.agent.privacyLock.state.isLocked',\n description: 'True when the privacy overlay is open.',\n read: (handle) => handle.isLocked(),\n },\n },\n actions: {\n lock: {\n safety: 'write',\n descriptionKey: 'ui.agent.privacyLock.actions.lock',\n description: 'Open the privacy overlay.',\n invoke: (handle) => {\n handle.lock();\n },\n },\n unlock: {\n safety: 'write',\n descriptionKey: 'ui.agent.privacyLock.actions.unlock',\n description: 'Close the privacy overlay (consumer-confirmed action).',\n invoke: (handle) => {\n handle.unlock();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'privacy-lock',\n description: 'Marks the PrivacyLock trigger.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* -------------------------------------------------------------------- */\n/* PrivacyLock — a one-click \"lock my screen\" dialog for operator */\n/* workstations on shared clinic hardware. Clicking the trigger paints */\n/* a full-viewport privacy overlay (blurred backdrop + centred card); */\n/* the only ways out are the three action buttons the consumer wires. */\n/* */\n/* Composed of one `IconButton` trigger and a Radix Dialog overlay. The */\n/* dialog is intentionally *not* dismissible via Escape or outside-click */\n/* — the whole point is to make the screen unreadable until the user */\n/* takes an explicit action. */\n/* */\n/* See `src/components/privacy-lock/privacy-lock.mdx` for usage. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type MouseEvent,\n type ReactNode,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport * as RadixDialog from '@radix-ui/react-dialog';\nimport { EyeOff, LogOut, User } from 'lucide-react';\nimport { Button } from '../button';\nimport { IconButton } from '../button/icon-button';\nimport { Logo } from '../logo';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { privacyLockAgent } from './privacy-lock.agent';\n\n/* ------------------------------------------------------------------ */\n/* Props */\n/* ------------------------------------------------------------------ */\n\n/** Curated imperative handle for agent / external automation. */\nexport interface PrivacyLockHandle {\n isLocked: () => boolean;\n lock: () => void;\n unlock: () => void;\n}\n\nexport interface PrivacyLockProps {\n /** Controlled open state. Pair with `onOpenChange`. */\n open?: boolean;\n /** Uncontrolled initial state. Ignored when `open` is provided. */\n defaultOpen?: boolean;\n /** Fires whenever the dialog opens or closes — trigger click, action button, etc. */\n onOpenChange?: (open: boolean) => void;\n\n /** Fires when the \"Unlock screen\" button is activated. Dialog closes automatically. */\n onUnlock?: () => void;\n /** Fires when \"Account page\" is activated. Button is omitted when undefined. Dialog closes automatically. */\n onAccountPage?: () => void;\n /** Fires when \"Log out\" is activated. Button is omitted when undefined. Dialog closes automatically. */\n onSignOut?: () => void;\n\n /** Override the trigger icon. Default: `lucide-react` `<EyeOff />`. */\n triggerIcon?: ReactNode;\n /** Accessible name for the trigger. Default: t('privacyLock.triggerAriaLabel'). */\n triggerAriaLabel?: string;\n /** Tooltip for the trigger. Default: t('privacyLock.triggerTooltip'). */\n triggerTooltip?: string;\n\n /** Accessible title of the dialog (visually hidden). Default: t('privacyLock.title'). */\n title?: string;\n /** Visible supporting text under the action buttons. Default: t('privacyLock.description'). */\n description?: string;\n /** Label for the \"Unlock screen\" button. Default: t('privacyLock.unlock'). */\n unlockLabel?: string;\n /** Label for the \"Account page\" button. Default: t('privacyLock.accountPage'). */\n accountPageLabel?: string;\n /** Label for the \"Log out\" button. Default: t('privacyLock.signOut'). */\n signOutLabel?: string;\n\n /** Extra classes on the trigger `IconButton`. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Root */\n/* ------------------------------------------------------------------ */\n\nexport const PrivacyLock = forwardRef<HTMLButtonElement, PrivacyLockProps>(\n (\n {\n open,\n defaultOpen = false,\n onOpenChange,\n onUnlock,\n onAccountPage,\n onSignOut,\n triggerIcon,\n triggerAriaLabel,\n triggerTooltip,\n title,\n description,\n unlockLabel,\n accountPageLabel,\n signOutLabel,\n className,\n ...rest\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const isControlled = open !== undefined;\n const isOpen = isControlled ? open : uncontrolledOpen;\n\n const setOpen = useCallback(\n (next: boolean) => {\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n },\n [isControlled, onOpenChange],\n );\n\n const latestOpenRef = useRef(isOpen);\n latestOpenRef.current = isOpen;\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n useImperativeHandle(ref, () => triggerRef.current as HTMLButtonElement, []);\n\n const agentHandle = useMemo<PrivacyLockHandle>(\n () => ({\n isLocked: () => latestOpenRef.current,\n lock: () => setOpen(true),\n unlock: () => setOpen(false),\n }),\n [setOpen],\n );\n useAgentRegistration(\n privacyLockAgent,\n agentHandle,\n (rest as { id?: string }).id,\n );\n\n // Every action closes the dialog after firing the consumer's\n // callback. Consumers that need to keep the dialog open (e.g.\n // confirmation step) should control `open` themselves and skip the\n // close on the relevant callback.\n const handleAction = useCallback(\n (callback?: () => void) => (event: MouseEvent<HTMLButtonElement>) => {\n callback?.();\n // Only close if the consumer didn't preventDefault — lets a\n // controlled consumer stop the auto-close for guarded actions.\n if (!event.defaultPrevented) setOpen(false);\n },\n [setOpen],\n );\n\n const resolvedTriggerAriaLabel =\n triggerAriaLabel ??\n t('privacyLock.triggerAriaLabel', 'Lock screen for privacy');\n const resolvedTriggerTooltip =\n triggerTooltip ?? t('privacyLock.triggerTooltip', 'Lock screen');\n const resolvedTitle =\n title ?? t('privacyLock.title', 'Screen locked for privacy');\n const resolvedDescription =\n description ??\n t(\n 'privacyLock.description',\n 'Locking the screen helps protect the privacy of your data.',\n );\n const resolvedUnlockLabel =\n unlockLabel ?? t('privacyLock.unlock', 'Unlock screen');\n const resolvedAccountPageLabel =\n accountPageLabel ?? t('privacyLock.accountPage', 'Account page');\n const resolvedSignOutLabel =\n signOutLabel ?? t('privacyLock.signOut', 'Log out');\n\n return (\n <RadixDialog.Root open={isOpen} onOpenChange={setOpen}>\n <RadixDialog.Trigger asChild>\n <IconButton\n ref={triggerRef}\n icon={triggerIcon ?? <EyeOff aria-hidden />}\n aria-label={resolvedTriggerAriaLabel}\n tooltip={resolvedTriggerTooltip}\n className={className}\n data-component=\"privacy-lock\"\n data-component-id={(rest as { id?: string }).id}\n {...rest}\n />\n </RadixDialog.Trigger>\n <RadixDialog.Portal>\n <RadixDialog.Overlay\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal-backdrop)]',\n 'ds:bg-[var(--background)]/40 ds:backdrop-blur-xl',\n // Fade-in / fade-out via Radix data-state. Gated on\n // motion-reduce per accessibility requirements.\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in',\n 'ds:data-[state=closed]:animate-out ds:data-[state=closed]:fade-out',\n 'ds:motion-reduce:animate-none',\n ].join(' ')}\n />\n <RadixDialog.Content\n aria-label={resolvedTitle}\n // Make the overlay non-dismissible by ambient input. The only\n // way out is an explicit action button — preserving the\n // \"locked\" contract. Screen readers + assistive tech still\n // reach the buttons via Tab.\n onEscapeKeyDown={(event) => event.preventDefault()}\n onPointerDownOutside={(event) => event.preventDefault()}\n onInteractOutside={(event) => event.preventDefault()}\n // Radix's default closes the dialog and returns focus to the\n // trigger (per the WAI-ARIA Dialog pattern). Stacked with\n // Radix Tooltip — which opens on focus per the WAI-ARIA\n // Tooltip pattern — that produces a tooltip stuck on the\n // lock icon every time the user unlocks. PrivacyLock's UX\n // contract is \"unlock and get out of the user's way\" (cf.\n // macOS / Windows / 1Password unlock flows: focus returns to\n // the page, not the unlock control), so we opt out of\n // Radix's auto-focus return and let focus fall to the body.\n onCloseAutoFocus={(event) => event.preventDefault()}\n className={[\n 'ds:fixed ds:inset-0 ds:z-[var(--z-modal)]',\n 'ds:flex ds:items-center ds:justify-center',\n 'ds:focus:outline-none',\n 'ds:text-[color:var(--foreground)]',\n 'ds:data-[state=open]:animate-in ds:data-[state=open]:fade-in',\n 'ds:motion-reduce:animate-none',\n ].join(' ')}\n >\n <div className=\"ds:flex ds:flex-col ds:items-center ds:gap-[var(--spacing-lg)] ds:w-[min(22rem,calc(100vw-var(--spacing-xl)))] ds:text-center\">\n <Logo size=\"xl\" decorative />\n <RadixDialog.Title className=\"ds:sr-only\">\n {resolvedTitle}\n </RadixDialog.Title>\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-xs)] ds:w-full\">\n <Button\n intent=\"primary\"\n startIcon={<EyeOff aria-hidden />}\n onClick={handleAction(onUnlock)}\n >\n {resolvedUnlockLabel}\n </Button>\n {onAccountPage ? (\n <Button\n intent=\"secondary\"\n startIcon={<User aria-hidden />}\n onClick={handleAction(onAccountPage)}\n >\n {resolvedAccountPageLabel}\n </Button>\n ) : null}\n {onSignOut ? (\n <Button\n intent=\"secondary\"\n startIcon={<LogOut aria-hidden />}\n onClick={handleAction(onSignOut)}\n >\n {resolvedSignOutLabel}\n </Button>\n ) : null}\n </div>\n <RadixDialog.Description className=\"type-body-sm ds:opacity-90\">\n {resolvedDescription}\n </RadixDialog.Description>\n </div>\n </RadixDialog.Content>\n </RadixDialog.Portal>\n </RadixDialog.Root>\n );\n },\n);\nPrivacyLock.displayName = 'PrivacyLock';\n"],"names":["privacyLockAgent","handle","PrivacyLock","forwardRef","open","defaultOpen","onOpenChange","onUnlock","onAccountPage","onSignOut","triggerIcon","triggerAriaLabel","triggerTooltip","title","description","unlockLabel","accountPageLabel","signOutLabel","className","rest","ref","t","useTranslation","uncontrolledOpen","setUncontrolledOpen","useState","isControlled","isOpen","setOpen","useCallback","next","latestOpenRef","useRef","triggerRef","useImperativeHandle","agentHandle","useMemo","useAgentRegistration","handleAction","callback","event","resolvedTriggerAriaLabel","resolvedTriggerTooltip","resolvedTitle","resolvedDescription","resolvedUnlockLabel","resolvedAccountPageLabel","resolvedSignOutLabel","RadixDialog","jsx","IconButton","EyeOff","jsxs","Logo","Button","User","LogOut"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { c as R } from "./index-D2ZczOXr.js";
4
4
  import { useTranslation as S } from "react-i18next";
5
5
  import { L as f } from "./link-DrD_cRUg.js";
6
6
  import { S as m } from "./separator-CYU_bGFn.js";
7
- import { L as T } from "./logo-yituK7sE.js";
7
+ import { L as T } from "./logo-1FuSGx0n.js";
8
8
  import { A as D, b as G, c as U, a as O } from "./accordion-9lJSMMsZ.js";
9
9
  const L = "https://www.alfadocs.com", F = {
10
10
  privacy: "/privacy-prenotazione-online",
@@ -588,4 +588,4 @@ export {
588
588
  W as c,
589
589
  ye as p
590
590
  };
591
- //# sourceMappingURL=public-footer.agent-okt8ZRc5.js.map
591
+ //# sourceMappingURL=public-footer.agent-CfXuW1x6.js.map