@alfadocs/ui-kit-debug 0.50.1 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) 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/{marketplace-app-shell-UKSLx9K_.js → marketplace-app-shell-Dmo1S9av.js} +6 -6
  26. package/dist/_chunks/{marketplace-app-shell-UKSLx9K_.js.map → marketplace-app-shell-Dmo1S9av.js.map} +1 -1
  27. package/dist/_chunks/{patient-search-BJOmTmDA.js → patient-search-CArmRKeg.js} +3 -3
  28. package/dist/_chunks/{patient-search-BJOmTmDA.js.map → patient-search-CArmRKeg.js.map} +1 -1
  29. package/dist/_chunks/{patient-shell-DUmhXnFq.js → patient-shell-c2YixkQw.js} +4 -4
  30. package/dist/_chunks/{patient-shell-DUmhXnFq.js.map → patient-shell-c2YixkQw.js.map} +1 -1
  31. package/dist/_chunks/{payment-form-xmeCkxas.js → payment-form-DJ9vnzrT.js} +2 -2
  32. package/dist/_chunks/{payment-form-xmeCkxas.js.map → payment-form-DJ9vnzrT.js.map} +1 -1
  33. package/dist/_chunks/{pdf-viewer-q1D3Uion.js → pdf-viewer-4odMFuFW.js} +2 -2
  34. package/dist/_chunks/{pdf-viewer-q1D3Uion.js.map → pdf-viewer-4odMFuFW.js.map} +1 -1
  35. package/dist/_chunks/{practice-results-Cq1y8JFD.js → practice-results-CtfciF2v.js} +3 -3
  36. package/dist/_chunks/{practice-results-Cq1y8JFD.js.map → practice-results-CtfciF2v.js.map} +1 -1
  37. package/dist/_chunks/{pregnancy-dating-DT_244bG.js → pregnancy-dating-BA37LSkF.js} +15 -15
  38. package/dist/_chunks/{pregnancy-dating-DT_244bG.js.map → pregnancy-dating-BA37LSkF.js.map} +1 -1
  39. package/dist/_chunks/{recaptcha-widget-CFYyLSEX.js → recaptcha-widget-BCNHsgqt.js} +2 -2
  40. package/dist/_chunks/{recaptcha-widget-CFYyLSEX.js.map → recaptcha-widget-BCNHsgqt.js.map} +1 -1
  41. package/dist/_chunks/{sidebar-h78cTNLh.js → sidebar-DPEHzxLZ.js} +397 -346
  42. package/dist/_chunks/sidebar-DPEHzxLZ.js.map +1 -0
  43. package/dist/_chunks/{sign-document-CZkAf28g.js → sign-document-Bzld9jVM.js} +2 -2
  44. package/dist/_chunks/{sign-document-CZkAf28g.js.map → sign-document-Bzld9jVM.js.map} +1 -1
  45. package/dist/_chunks/{task-card-CPyQ5AXC.js → task-card-BwY9jaV1.js} +48 -42
  46. package/dist/_chunks/task-card-BwY9jaV1.js.map +1 -0
  47. package/dist/_chunks/task-tray-Cb_hK4yb.js +234 -0
  48. package/dist/_chunks/task-tray-Cb_hK4yb.js.map +1 -0
  49. package/dist/_chunks/{theme-toggle-ClATnY4Q.js → theme-toggle-DAW7uC0B.js} +3 -3
  50. package/dist/_chunks/{theme-toggle-ClATnY4Q.js.map → theme-toggle-DAW7uC0B.js.map} +1 -1
  51. package/dist/_chunks/use-edge-resize-ZnGG7gyO.js +139 -0
  52. package/dist/_chunks/use-edge-resize-ZnGG7gyO.js.map +1 -0
  53. package/dist/_chunks/use-theme-CAuo6EYT.js +159 -0
  54. package/dist/_chunks/use-theme-CAuo6EYT.js.map +1 -0
  55. package/dist/_chunks/{warning-stack-CXfoAT-_.js → warning-stack-Cv4fr5zo.js} +2 -2
  56. package/dist/_chunks/{warning-stack-CXfoAT-_.js.map → warning-stack-Cv4fr5zo.js.map} +1 -1
  57. package/dist/_chunks/{workflow-map-DzX_LI4y.js → workflow-map-BJDUNYlX.js} +3 -3
  58. package/dist/_chunks/{workflow-map-DzX_LI4y.js.map → workflow-map-BJDUNYlX.js.map} +1 -1
  59. package/dist/agent-catalog.json +1 -1
  60. package/dist/components/agenda-card/agenda-card.d.ts +19 -2
  61. package/dist/components/agenda-card/agenda-card.d.ts.map +1 -1
  62. package/dist/components/agenda-card/index.js +1 -1
  63. package/dist/components/agenda-tray/agenda-tray.d.ts +24 -1
  64. package/dist/components/agenda-tray/agenda-tray.d.ts.map +1 -1
  65. package/dist/components/agenda-tray/index.js +1 -1
  66. package/dist/components/ai-consent-banner/index.js +1 -1
  67. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts +8 -0
  68. package/dist/components/ai-tools-rail/ai-tools-rail.d.ts.map +1 -1
  69. package/dist/components/ai-tools-rail/index.js +1 -1
  70. package/dist/components/alert/index.js +1 -1
  71. package/dist/components/audio-recorder/index.js +1 -1
  72. package/dist/components/booking/index.js +1 -1
  73. package/dist/components/button-group/button-group.d.ts +1 -1
  74. package/dist/components/checkbox-group/checkbox-group.d.ts +1 -1
  75. package/dist/components/data-table/index.js +1 -1
  76. package/dist/components/document-scanner/index.js +1 -1
  77. package/dist/components/dropdown-menu/dropdown-menu.d.ts +2 -0
  78. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -1
  79. package/dist/components/dropdown-menu/index.js +1 -1
  80. package/dist/components/form-field/form-field.d.ts +1 -1
  81. package/dist/components/freemium-paywall/index.js +1 -1
  82. package/dist/components/header-settings/index.js +1 -1
  83. package/dist/components/icon-button-group/icon-button-group.d.ts +15 -15
  84. package/dist/components/key-value-pair/key-value-pair.d.ts +1 -1
  85. package/dist/components/patient-search/index.js +1 -1
  86. package/dist/components/payment-form/index.js +1 -1
  87. package/dist/components/pdf-viewer/index.js +1 -1
  88. package/dist/components/practice-results/index.js +1 -1
  89. package/dist/components/pregnancy-dating/index.js +1 -1
  90. package/dist/components/pregnancy-dating/pregnancy-dating.d.ts.map +1 -1
  91. package/dist/components/radio-group/radio-group.d.ts +1 -1
  92. package/dist/components/recaptcha-widget/index.js +1 -1
  93. package/dist/components/separator/separator.d.ts +1 -1
  94. package/dist/components/sidebar/index.js +1 -1
  95. package/dist/components/sidebar/sidebar.d.ts +8 -0
  96. package/dist/components/sidebar/sidebar.d.ts.map +1 -1
  97. package/dist/components/sign-document/index.js +1 -1
  98. package/dist/components/tabs/tabs.d.ts +2 -2
  99. package/dist/components/task-card/index.js +1 -1
  100. package/dist/components/task-card/task-card.d.ts +15 -1
  101. package/dist/components/task-card/task-card.d.ts.map +1 -1
  102. package/dist/components/task-tray/index.js +1 -1
  103. package/dist/components/task-tray/task-tray.d.ts +24 -1
  104. package/dist/components/task-tray/task-tray.d.ts.map +1 -1
  105. package/dist/components/theme-toggle/index.js +1 -1
  106. package/dist/components/warning-stack/index.js +1 -1
  107. package/dist/components/workflow/index.js +1 -1
  108. package/dist/components/workflow/workflow-map.d.ts +1 -1
  109. package/dist/hooks/index.d.ts +1 -0
  110. package/dist/hooks/index.d.ts.map +1 -1
  111. package/dist/hooks/index.js +12 -10
  112. package/dist/hooks/index.js.map +1 -1
  113. package/dist/hooks/use-edge-resize.d.ts +78 -0
  114. package/dist/hooks/use-edge-resize.d.ts.map +1 -0
  115. package/dist/hooks/use-theme.d.ts.map +1 -1
  116. package/dist/i18n/locales/ar.d.ts +4 -0
  117. package/dist/i18n/locales/ar.d.ts.map +1 -1
  118. package/dist/i18n/locales/ar.js +7 -3
  119. package/dist/i18n/locales/ar.js.map +1 -1
  120. package/dist/i18n/locales/de.d.ts +4 -0
  121. package/dist/i18n/locales/de.d.ts.map +1 -1
  122. package/dist/i18n/locales/de.js +7 -3
  123. package/dist/i18n/locales/de.js.map +1 -1
  124. package/dist/i18n/locales/el.d.ts +4 -0
  125. package/dist/i18n/locales/el.d.ts.map +1 -1
  126. package/dist/i18n/locales/el.js +7 -3
  127. package/dist/i18n/locales/el.js.map +1 -1
  128. package/dist/i18n/locales/en.d.ts +4 -0
  129. package/dist/i18n/locales/en.d.ts.map +1 -1
  130. package/dist/i18n/locales/en.js +7 -3
  131. package/dist/i18n/locales/en.js.map +1 -1
  132. package/dist/i18n/locales/es.d.ts +4 -0
  133. package/dist/i18n/locales/es.d.ts.map +1 -1
  134. package/dist/i18n/locales/es.js +7 -3
  135. package/dist/i18n/locales/es.js.map +1 -1
  136. package/dist/i18n/locales/fr.d.ts +4 -0
  137. package/dist/i18n/locales/fr.d.ts.map +1 -1
  138. package/dist/i18n/locales/fr.js +7 -3
  139. package/dist/i18n/locales/fr.js.map +1 -1
  140. package/dist/i18n/locales/hi.d.ts +4 -0
  141. package/dist/i18n/locales/hi.d.ts.map +1 -1
  142. package/dist/i18n/locales/hi.js +7 -3
  143. package/dist/i18n/locales/hi.js.map +1 -1
  144. package/dist/i18n/locales/it.d.ts +4 -0
  145. package/dist/i18n/locales/it.d.ts.map +1 -1
  146. package/dist/i18n/locales/it.js +7 -3
  147. package/dist/i18n/locales/it.js.map +1 -1
  148. package/dist/i18n/locales/ja.d.ts +4 -0
  149. package/dist/i18n/locales/ja.d.ts.map +1 -1
  150. package/dist/i18n/locales/ja.js +7 -3
  151. package/dist/i18n/locales/ja.js.map +1 -1
  152. package/dist/i18n/locales/nl.d.ts +4 -0
  153. package/dist/i18n/locales/nl.d.ts.map +1 -1
  154. package/dist/i18n/locales/nl.js +7 -3
  155. package/dist/i18n/locales/nl.js.map +1 -1
  156. package/dist/i18n/locales/pl.d.ts +4 -0
  157. package/dist/i18n/locales/pl.d.ts.map +1 -1
  158. package/dist/i18n/locales/pl.js +7 -3
  159. package/dist/i18n/locales/pl.js.map +1 -1
  160. package/dist/i18n/locales/pt.d.ts +4 -0
  161. package/dist/i18n/locales/pt.d.ts.map +1 -1
  162. package/dist/i18n/locales/pt.js +7 -3
  163. package/dist/i18n/locales/pt.js.map +1 -1
  164. package/dist/i18n/locales/ro.d.ts +4 -0
  165. package/dist/i18n/locales/ro.d.ts.map +1 -1
  166. package/dist/i18n/locales/ro.js +7 -3
  167. package/dist/i18n/locales/ro.js.map +1 -1
  168. package/dist/i18n/locales/ru.d.ts +4 -0
  169. package/dist/i18n/locales/ru.d.ts.map +1 -1
  170. package/dist/i18n/locales/ru.js +7 -3
  171. package/dist/i18n/locales/ru.js.map +1 -1
  172. package/dist/i18n/locales/sq.d.ts +4 -0
  173. package/dist/i18n/locales/sq.d.ts.map +1 -1
  174. package/dist/i18n/locales/sq.js +7 -3
  175. package/dist/i18n/locales/sq.js.map +1 -1
  176. package/dist/i18n/locales/sv.d.ts +4 -0
  177. package/dist/i18n/locales/sv.d.ts.map +1 -1
  178. package/dist/i18n/locales/sv.js +7 -3
  179. package/dist/i18n/locales/sv.js.map +1 -1
  180. package/dist/i18n/locales/tr.d.ts +4 -0
  181. package/dist/i18n/locales/tr.d.ts.map +1 -1
  182. package/dist/i18n/locales/tr.js +7 -3
  183. package/dist/i18n/locales/tr.js.map +1 -1
  184. package/dist/i18n/locales/zh.d.ts +4 -0
  185. package/dist/i18n/locales/zh.d.ts.map +1 -1
  186. package/dist/i18n/locales/zh.js +7 -3
  187. package/dist/i18n/locales/zh.js.map +1 -1
  188. package/dist/index.js +27 -27
  189. package/dist/locales/ar.json +7 -3
  190. package/dist/locales/de.json +7 -3
  191. package/dist/locales/el.json +7 -3
  192. package/dist/locales/en.json +7 -3
  193. package/dist/locales/es.json +7 -3
  194. package/dist/locales/fr.json +7 -3
  195. package/dist/locales/hi.json +7 -3
  196. package/dist/locales/it.json +7 -3
  197. package/dist/locales/ja.json +7 -3
  198. package/dist/locales/nl.json +7 -3
  199. package/dist/locales/pl.json +7 -3
  200. package/dist/locales/pt.json +7 -3
  201. package/dist/locales/ro.json +7 -3
  202. package/dist/locales/ru.json +7 -3
  203. package/dist/locales/sq.json +7 -3
  204. package/dist/locales/sv.json +7 -3
  205. package/dist/locales/tr.json +7 -3
  206. package/dist/locales/zh.json +7 -3
  207. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  208. package/dist/patterns/patient-shell/index.js +1 -1
  209. package/dist/tokens.css +1 -1
  210. package/package.json +1 -1
  211. package/dist/_chunks/agenda-card-BaSfVfrL.js.map +0 -1
  212. package/dist/_chunks/agenda-tray-DQayYmQ0.js +0 -165
  213. package/dist/_chunks/agenda-tray-DQayYmQ0.js.map +0 -1
  214. package/dist/_chunks/ai-tools-rail-CYLWrRmm.js +0 -280
  215. package/dist/_chunks/ai-tools-rail-CYLWrRmm.js.map +0 -1
  216. package/dist/_chunks/alert-CUTxnym2.js.map +0 -1
  217. package/dist/_chunks/circle-arrow-up-CC_85SuH.js +0 -16
  218. package/dist/_chunks/circle-arrow-up-CC_85SuH.js.map +0 -1
  219. package/dist/_chunks/dropdown-menu-CUEXqKis.js +0 -299
  220. package/dist/_chunks/dropdown-menu-CUEXqKis.js.map +0 -1
  221. package/dist/_chunks/sidebar-h78cTNLh.js.map +0 -1
  222. package/dist/_chunks/task-card-CPyQ5AXC.js.map +0 -1
  223. package/dist/_chunks/task-tray-B8jFv5FV.js +0 -196
  224. package/dist/_chunks/task-tray-B8jFv5FV.js.map +0 -1
  225. package/dist/_chunks/use-theme-C2dHKUAN.js +0 -145
  226. 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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"}
@@ -2,7 +2,7 @@ import { jsxs as G, jsx as F } from "react/jsx-runtime";
2
2
  import { forwardRef as U, useRef as m, useState as q, useEffect as C, useMemo as J, useImperativeHandle as K } from "react";
3
3
  import { useTranslation as Q } from "react-i18next";
4
4
  import { u as X } from "./form-field-context-B3APVHKx.js";
5
- import { u as Y } from "./use-theme-C2dHKUAN.js";
5
+ import { u as Y } from "./use-theme-CAuo6EYT.js";
6
6
  import { u as Z } from "./registry-nPAVE19X.js";
7
7
  const z = {
8
8
  id: "recaptcha-widget",
@@ -218,4 +218,4 @@ export {
218
218
  ae as R,
219
219
  z as r
220
220
  };
221
- //# sourceMappingURL=recaptcha-widget-CFYyLSEX.js.map
221
+ //# sourceMappingURL=recaptcha-widget-BCNHsgqt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recaptcha-widget-CFYyLSEX.js","sources":["../../src/components/recaptcha-widget/recaptcha-widget.agent.ts","../../src/components/recaptcha-widget/recaptcha-widget.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — RecaptchaWidget. */\n/* */\n/* Recaptcha already exposes a curated `RecaptchaWidgetHandle` via */\n/* useImperativeHandle. The adapter wires `execute` (issue token, write) */\n/* and `reset` (clear token, destructive) into that existing handle. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { RecaptchaWidgetHandle } from './recaptcha-widget';\n\nexport const recaptchaWidgetAgent: AgentAdapter<RecaptchaWidgetHandle> = {\n id: 'recaptcha-widget',\n capabilities: ['submit'],\n state: {\n hasToken: {\n type: 'boolean',\n descriptionKey: 'ui.agent.recaptchaWidget.state.hasToken',\n description:\n 'True when the widget currently holds a valid verification token.',\n read: (handle) => handle.getResponse().length > 0,\n },\n },\n actions: {\n execute: {\n safety: 'write',\n descriptionKey: 'ui.agent.recaptchaWidget.actions.execute',\n description:\n 'Programmatically trigger the captcha challenge. Issues a token via the callback.',\n invoke: (handle) => {\n handle.execute();\n },\n },\n reset: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.recaptchaWidget.actions.reset',\n description:\n 'Clear the current token and re-roll the captcha. Irreversible.',\n invoke: (handle) => {\n handle.reset();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'recaptcha-widget',\n description: 'Marks the RecaptchaWidget wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop (or the surrounding FormField id).',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useTheme } from '../../hooks';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { recaptchaWidgetAgent } from './recaptcha-widget.agent';\n\n/* ------------------------------------------------------------------ */\n/* Loader — idempotent across instances */\n/* ------------------------------------------------------------------ */\n\n/**\n * Google reCAPTCHA v2 ships as a global `grecaptcha` object loaded from\n * `https://www.google.com/recaptcha/api.js`. We lazy-load the script\n * once per page using a shared promise so N widgets on the same form\n * (or N renders of a single widget) all wait on the same fetch.\n *\n * The `?render=explicit` query parameter is required so we control\n * when each widget mounts via `grecaptcha.render`, rather than letting\n * the global auto-bind to every `.g-recaptcha` div on the page.\n */\nconst SCRIPT_SRC = 'https://www.google.com/recaptcha/api.js';\nconst SCRIPT_ID = 'alfadocs-ui-recaptcha-loader';\nconst FOREIGN_LOADER_GRACE_MS = 10_000;\nconst POLL_INTERVAL_MS = 100;\n\ninterface RecaptchaApi {\n render: (\n container: HTMLElement,\n parameters: {\n sitekey: string;\n theme?: 'light' | 'dark';\n size?: 'normal' | 'compact' | 'invisible';\n hl?: string;\n callback?: (token: string) => void;\n 'expired-callback'?: () => void;\n 'error-callback'?: () => void;\n },\n ) => number;\n reset: (widgetId?: number) => void;\n getResponse: (widgetId?: number) => string;\n execute: (widgetId?: number) => void;\n}\n\ndeclare global {\n interface Window {\n grecaptcha?: RecaptchaApi;\n ___grecaptchaOnLoad___?: () => void;\n }\n}\n\nlet loaderPromise: Promise<RecaptchaApi> | null = null;\n\nfunction loadRecaptcha(hl: string | undefined): Promise<RecaptchaApi> {\n if (typeof window === 'undefined') {\n return Promise.reject(new Error('recaptcha: window is not available'));\n }\n if (window.grecaptcha && typeof window.grecaptcha.render === 'function') {\n return Promise.resolve(window.grecaptcha);\n }\n if (loaderPromise) {\n return loaderPromise;\n }\n\n loaderPromise = new Promise<RecaptchaApi>((resolve, reject) => {\n const existing = document.getElementById(\n SCRIPT_ID,\n ) as HTMLScriptElement | null;\n\n const onReady = () => {\n if (window.grecaptcha && typeof window.grecaptcha.render === 'function') {\n resolve(window.grecaptcha);\n } else {\n reject(new Error('recaptcha: grecaptcha global missing after load'));\n }\n };\n\n window.___grecaptchaOnLoad___ = onReady;\n\n if (existing) {\n // Foreign loader present (e.g. host page already injected\n // api.js without ?onload=). Poll for grecaptcha; if it never\n // arrives, inject our own redundant loader with a fresh onload.\n let pollHandle: ReturnType<typeof setInterval> | null = null;\n let timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n const clearTimers = () => {\n if (pollHandle !== null) clearInterval(pollHandle);\n if (timeoutHandle !== null) clearTimeout(timeoutHandle);\n pollHandle = null;\n timeoutHandle = null;\n };\n pollHandle = setInterval(() => {\n if (\n window.grecaptcha &&\n typeof window.grecaptcha.render === 'function'\n ) {\n clearTimers();\n resolve(window.grecaptcha);\n }\n }, POLL_INTERVAL_MS);\n timeoutHandle = setTimeout(() => {\n clearTimers();\n if (\n window.grecaptcha &&\n typeof window.grecaptcha.render === 'function'\n ) {\n resolve(window.grecaptcha);\n return;\n }\n // Foreign loader didn't deliver in time — inject our own.\n const fallbackCb = `___grecaptchaOnLoad___fallback_${Date.now()}___`;\n (window as unknown as Record<string, () => void>)[fallbackCb] = () => {\n delete (window as unknown as Record<string, () => void>)[fallbackCb];\n if (\n window.grecaptcha &&\n typeof window.grecaptcha.render === 'function'\n ) {\n resolve(window.grecaptcha);\n } else {\n reject(\n new Error('recaptcha: grecaptcha global missing after fallback'),\n );\n }\n };\n const fallbackParams = new URLSearchParams({\n onload: fallbackCb,\n render: 'explicit',\n });\n if (hl) fallbackParams.set('hl', hl);\n const fallbackScript = document.createElement('script');\n fallbackScript.src = `${SCRIPT_SRC}?${fallbackParams.toString()}`;\n fallbackScript.async = true;\n fallbackScript.defer = true;\n fallbackScript.onerror = () => {\n delete (window as unknown as Record<string, () => void>)[fallbackCb];\n loaderPromise = null;\n reject(new Error('recaptcha: fallback script failed to load'));\n };\n document.head.appendChild(fallbackScript);\n }, FOREIGN_LOADER_GRACE_MS);\n return;\n }\n\n const params = new URLSearchParams({\n onload: '___grecaptchaOnLoad___',\n render: 'explicit',\n });\n if (hl) params.set('hl', hl);\n\n const script = document.createElement('script');\n script.id = SCRIPT_ID;\n script.src = `${SCRIPT_SRC}?${params.toString()}`;\n script.async = true;\n script.defer = true;\n script.onerror = () => {\n loaderPromise = null;\n reject(new Error('recaptcha: script failed to load'));\n };\n document.head.appendChild(script);\n });\n\n return loaderPromise;\n}\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------ */\n\nexport interface RecaptchaWidgetHandle {\n /** Re-roll the captcha — clears the response token. */\n reset: () => void;\n /** Returns the current response token, or empty string when unsolved. */\n getResponse: () => string;\n /** Programmatically trigger an invisible captcha challenge. */\n execute: () => void;\n}\n\nexport interface RecaptchaWidgetProps {\n /** Google reCAPTCHA v2 site key. Required. */\n siteKey: string;\n /**\n * Visual theme. Defaults to the resolved DS theme (`useTheme`).\n * Pass `'light'` / `'dark'` to force.\n */\n theme?: 'light' | 'dark';\n /** Two-letter locale hint. Defaults to the current i18next language. */\n locale?: string;\n /** Widget size. */\n size?: 'normal' | 'compact' | 'invisible';\n /** Called with the verification token, or `null` when expired/reset. */\n onChange?: (token: string | null) => void;\n /** Called when the user solves but the token then times out. */\n onExpired?: () => void;\n /** Called when the script or challenge errors out. */\n onError?: () => void;\n /** Error message — wires aria-describedby + announces via the live region. */\n error?: string;\n /** Override the DOM id; defaults to the surrounding FormField id. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const RecaptchaWidget = forwardRef<\n RecaptchaWidgetHandle,\n RecaptchaWidgetProps\n>(function RecaptchaWidget(\n {\n siteKey,\n theme,\n locale,\n size = 'normal',\n onChange,\n onExpired,\n onError,\n error,\n id,\n className,\n },\n ref,\n) {\n const { t, i18n } = useTranslation();\n const formField = useFormField();\n const { resolvedTheme } = useTheme();\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const widgetIdRef = useRef<number | null>(null);\n const apiRef = useRef<RecaptchaApi | null>(null);\n const [statusMessage, setStatusMessage] = useState<string>('');\n\n const wrapperId = id ?? formField.id;\n const errorId = error ? `${wrapperId}-error` : undefined;\n const describedBy =\n [formField.describedBy, errorId].filter(Boolean).join(' ') || undefined;\n\n // Mirror the DS theme into reCAPTCHA's two-tone setting.\n const effectiveTheme: 'light' | 'dark' =\n theme ?? (resolvedTheme.startsWith('dark') ? 'dark' : 'light');\n const effectiveLocale = locale ?? i18n.language;\n\n // Stable callbacks via refs so we don't re-render the widget on\n // every parent state change.\n const onChangeRef = useRef(onChange);\n const onExpiredRef = useRef(onExpired);\n const onErrorRef = useRef(onError);\n onChangeRef.current = onChange;\n onExpiredRef.current = onExpired;\n onErrorRef.current = onError;\n\n const expiredLabel = t(\n 'inputs.recaptcha.expired',\n 'Verification expired — please retry.',\n );\n const errorLabel = t(\n 'inputs.recaptcha.error',\n 'Verification failed — please retry.',\n );\n\n useEffect(() => {\n if (!siteKey || !containerRef.current) return;\n let cancelled = false;\n\n loadRecaptcha(effectiveLocale)\n .then((api) => {\n if (cancelled || !containerRef.current) return;\n apiRef.current = api;\n widgetIdRef.current = api.render(containerRef.current, {\n sitekey: siteKey,\n theme: effectiveTheme,\n size,\n hl: effectiveLocale,\n callback: (token) => {\n setStatusMessage('');\n onChangeRef.current?.(token);\n },\n 'expired-callback': () => {\n setStatusMessage(expiredLabel);\n onChangeRef.current?.(null);\n onExpiredRef.current?.();\n },\n 'error-callback': () => {\n setStatusMessage(errorLabel);\n onChangeRef.current?.(null);\n onErrorRef.current?.();\n },\n });\n })\n .catch(() => {\n if (cancelled) return;\n setStatusMessage(errorLabel);\n onErrorRef.current?.();\n });\n\n return () => {\n cancelled = true;\n // grecaptcha has no public destroy. The shared script stays\n // loaded; we reset the widget so its iframe stops listening.\n if (apiRef.current && widgetIdRef.current !== null) {\n try {\n apiRef.current.reset(widgetIdRef.current);\n } catch {\n /* widget id may already be invalid — safe to ignore. */\n }\n }\n };\n // Re-render the widget when the underlying configuration changes.\n }, [\n siteKey,\n effectiveTheme,\n effectiveLocale,\n size,\n expiredLabel,\n errorLabel,\n ]);\n\n const agentHandle = useMemo<RecaptchaWidgetHandle>(\n () => ({\n reset: () => {\n if (apiRef.current && widgetIdRef.current !== null) {\n apiRef.current.reset(widgetIdRef.current);\n setStatusMessage('');\n onChangeRef.current?.(null);\n }\n },\n getResponse: () => {\n if (apiRef.current && widgetIdRef.current !== null) {\n return apiRef.current.getResponse(widgetIdRef.current);\n }\n return '';\n },\n execute: () => {\n if (apiRef.current && widgetIdRef.current !== null) {\n apiRef.current.execute(widgetIdRef.current);\n }\n },\n }),\n [],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(recaptchaWidgetAgent, agentHandle, wrapperId);\n\n const liveMessage = error || statusMessage;\n // For invisible widgets the iframe is offscreen, so we mark the\n // wrapper as a non-visual badge. Otherwise the wrapper just hosts\n // the rendered iframe and contributes no interactive role itself.\n const wrapperRole = size === 'invisible' ? 'presentation' : undefined;\n\n return (\n <div\n className={[\n 'ds:inline-block',\n // Keep the iframe inside the wrapper's stacking context so\n // popovers etc. above the form continue to overlay correctly.\n 'ds:relative ds:isolate',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n data-component=\"recaptcha-widget\"\n data-component-id={wrapperId}\n data-size={size}\n role={wrapperRole}\n >\n <div\n ref={containerRef}\n id={wrapperId}\n // The class name is the canonical hook Google's verifier\n // looks for when the page form is submitted server-side. Some\n // Symfony / Laravel validators short-circuit when this class\n // is missing, so we render it even though we're using\n // grecaptcha.render explicitly.\n className=\"g-recaptcha\"\n data-sitekey={siteKey}\n data-theme={effectiveTheme}\n data-size={size}\n aria-describedby={describedBy}\n aria-invalid={error || formField.invalid ? true : undefined}\n />\n {/* Live announcement for expired / error states. Empty when the\n widget is healthy so SR users aren't spammed. */}\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {liveMessage}\n </div>\n </div>\n );\n});\n\nRecaptchaWidget.displayName = 'RecaptchaWidget';\n"],"names":["recaptchaWidgetAgent","handle","SCRIPT_SRC","SCRIPT_ID","FOREIGN_LOADER_GRACE_MS","POLL_INTERVAL_MS","loaderPromise","loadRecaptcha","hl","resolve","reject","existing","onReady","pollHandle","timeoutHandle","clearTimers","fallbackCb","fallbackParams","fallbackScript","params","script","RecaptchaWidget","forwardRef","siteKey","theme","locale","size","onChange","onExpired","onError","error","id","className","ref","t","i18n","useTranslation","formField","useFormField","resolvedTheme","useTheme","containerRef","useRef","widgetIdRef","apiRef","statusMessage","setStatusMessage","useState","wrapperId","errorId","describedBy","effectiveTheme","effectiveLocale","onChangeRef","onExpiredRef","onErrorRef","expiredLabel","errorLabel","useEffect","cancelled","api","token","_a","_b","agentHandle","useMemo","useImperativeHandle","useAgentRegistration","liveMessage","wrapperRole","jsxs","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"recaptcha-widget-BCNHsgqt.js","sources":["../../src/components/recaptcha-widget/recaptcha-widget.agent.ts","../../src/components/recaptcha-widget/recaptcha-widget.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — RecaptchaWidget. */\n/* */\n/* Recaptcha already exposes a curated `RecaptchaWidgetHandle` via */\n/* useImperativeHandle. The adapter wires `execute` (issue token, write) */\n/* and `reset` (clear token, destructive) into that existing handle. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { RecaptchaWidgetHandle } from './recaptcha-widget';\n\nexport const recaptchaWidgetAgent: AgentAdapter<RecaptchaWidgetHandle> = {\n id: 'recaptcha-widget',\n capabilities: ['submit'],\n state: {\n hasToken: {\n type: 'boolean',\n descriptionKey: 'ui.agent.recaptchaWidget.state.hasToken',\n description:\n 'True when the widget currently holds a valid verification token.',\n read: (handle) => handle.getResponse().length > 0,\n },\n },\n actions: {\n execute: {\n safety: 'write',\n descriptionKey: 'ui.agent.recaptchaWidget.actions.execute',\n description:\n 'Programmatically trigger the captcha challenge. Issues a token via the callback.',\n invoke: (handle) => {\n handle.execute();\n },\n },\n reset: {\n safety: 'destructive',\n descriptionKey: 'ui.agent.recaptchaWidget.actions.reset',\n description:\n 'Clear the current token and re-roll the captcha. Irreversible.',\n invoke: (handle) => {\n handle.reset();\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'recaptcha-widget',\n description: 'Marks the RecaptchaWidget wrapper.',\n },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description:\n 'Sourced from the id prop (or the surrounding FormField id).',\n },\n },\n};\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useFormField } from '../form-field/form-field-context';\nimport { useTheme } from '../../hooks';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { recaptchaWidgetAgent } from './recaptcha-widget.agent';\n\n/* ------------------------------------------------------------------ */\n/* Loader — idempotent across instances */\n/* ------------------------------------------------------------------ */\n\n/**\n * Google reCAPTCHA v2 ships as a global `grecaptcha` object loaded from\n * `https://www.google.com/recaptcha/api.js`. We lazy-load the script\n * once per page using a shared promise so N widgets on the same form\n * (or N renders of a single widget) all wait on the same fetch.\n *\n * The `?render=explicit` query parameter is required so we control\n * when each widget mounts via `grecaptcha.render`, rather than letting\n * the global auto-bind to every `.g-recaptcha` div on the page.\n */\nconst SCRIPT_SRC = 'https://www.google.com/recaptcha/api.js';\nconst SCRIPT_ID = 'alfadocs-ui-recaptcha-loader';\nconst FOREIGN_LOADER_GRACE_MS = 10_000;\nconst POLL_INTERVAL_MS = 100;\n\ninterface RecaptchaApi {\n render: (\n container: HTMLElement,\n parameters: {\n sitekey: string;\n theme?: 'light' | 'dark';\n size?: 'normal' | 'compact' | 'invisible';\n hl?: string;\n callback?: (token: string) => void;\n 'expired-callback'?: () => void;\n 'error-callback'?: () => void;\n },\n ) => number;\n reset: (widgetId?: number) => void;\n getResponse: (widgetId?: number) => string;\n execute: (widgetId?: number) => void;\n}\n\ndeclare global {\n interface Window {\n grecaptcha?: RecaptchaApi;\n ___grecaptchaOnLoad___?: () => void;\n }\n}\n\nlet loaderPromise: Promise<RecaptchaApi> | null = null;\n\nfunction loadRecaptcha(hl: string | undefined): Promise<RecaptchaApi> {\n if (typeof window === 'undefined') {\n return Promise.reject(new Error('recaptcha: window is not available'));\n }\n if (window.grecaptcha && typeof window.grecaptcha.render === 'function') {\n return Promise.resolve(window.grecaptcha);\n }\n if (loaderPromise) {\n return loaderPromise;\n }\n\n loaderPromise = new Promise<RecaptchaApi>((resolve, reject) => {\n const existing = document.getElementById(\n SCRIPT_ID,\n ) as HTMLScriptElement | null;\n\n const onReady = () => {\n if (window.grecaptcha && typeof window.grecaptcha.render === 'function') {\n resolve(window.grecaptcha);\n } else {\n reject(new Error('recaptcha: grecaptcha global missing after load'));\n }\n };\n\n window.___grecaptchaOnLoad___ = onReady;\n\n if (existing) {\n // Foreign loader present (e.g. host page already injected\n // api.js without ?onload=). Poll for grecaptcha; if it never\n // arrives, inject our own redundant loader with a fresh onload.\n let pollHandle: ReturnType<typeof setInterval> | null = null;\n let timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n const clearTimers = () => {\n if (pollHandle !== null) clearInterval(pollHandle);\n if (timeoutHandle !== null) clearTimeout(timeoutHandle);\n pollHandle = null;\n timeoutHandle = null;\n };\n pollHandle = setInterval(() => {\n if (\n window.grecaptcha &&\n typeof window.grecaptcha.render === 'function'\n ) {\n clearTimers();\n resolve(window.grecaptcha);\n }\n }, POLL_INTERVAL_MS);\n timeoutHandle = setTimeout(() => {\n clearTimers();\n if (\n window.grecaptcha &&\n typeof window.grecaptcha.render === 'function'\n ) {\n resolve(window.grecaptcha);\n return;\n }\n // Foreign loader didn't deliver in time — inject our own.\n const fallbackCb = `___grecaptchaOnLoad___fallback_${Date.now()}___`;\n (window as unknown as Record<string, () => void>)[fallbackCb] = () => {\n delete (window as unknown as Record<string, () => void>)[fallbackCb];\n if (\n window.grecaptcha &&\n typeof window.grecaptcha.render === 'function'\n ) {\n resolve(window.grecaptcha);\n } else {\n reject(\n new Error('recaptcha: grecaptcha global missing after fallback'),\n );\n }\n };\n const fallbackParams = new URLSearchParams({\n onload: fallbackCb,\n render: 'explicit',\n });\n if (hl) fallbackParams.set('hl', hl);\n const fallbackScript = document.createElement('script');\n fallbackScript.src = `${SCRIPT_SRC}?${fallbackParams.toString()}`;\n fallbackScript.async = true;\n fallbackScript.defer = true;\n fallbackScript.onerror = () => {\n delete (window as unknown as Record<string, () => void>)[fallbackCb];\n loaderPromise = null;\n reject(new Error('recaptcha: fallback script failed to load'));\n };\n document.head.appendChild(fallbackScript);\n }, FOREIGN_LOADER_GRACE_MS);\n return;\n }\n\n const params = new URLSearchParams({\n onload: '___grecaptchaOnLoad___',\n render: 'explicit',\n });\n if (hl) params.set('hl', hl);\n\n const script = document.createElement('script');\n script.id = SCRIPT_ID;\n script.src = `${SCRIPT_SRC}?${params.toString()}`;\n script.async = true;\n script.defer = true;\n script.onerror = () => {\n loaderPromise = null;\n reject(new Error('recaptcha: script failed to load'));\n };\n document.head.appendChild(script);\n });\n\n return loaderPromise;\n}\n\n/* ------------------------------------------------------------------ */\n/* Public API */\n/* ------------------------------------------------------------------ */\n\nexport interface RecaptchaWidgetHandle {\n /** Re-roll the captcha — clears the response token. */\n reset: () => void;\n /** Returns the current response token, or empty string when unsolved. */\n getResponse: () => string;\n /** Programmatically trigger an invisible captcha challenge. */\n execute: () => void;\n}\n\nexport interface RecaptchaWidgetProps {\n /** Google reCAPTCHA v2 site key. Required. */\n siteKey: string;\n /**\n * Visual theme. Defaults to the resolved DS theme (`useTheme`).\n * Pass `'light'` / `'dark'` to force.\n */\n theme?: 'light' | 'dark';\n /** Two-letter locale hint. Defaults to the current i18next language. */\n locale?: string;\n /** Widget size. */\n size?: 'normal' | 'compact' | 'invisible';\n /** Called with the verification token, or `null` when expired/reset. */\n onChange?: (token: string | null) => void;\n /** Called when the user solves but the token then times out. */\n onExpired?: () => void;\n /** Called when the script or challenge errors out. */\n onError?: () => void;\n /** Error message — wires aria-describedby + announces via the live region. */\n error?: string;\n /** Override the DOM id; defaults to the surrounding FormField id. */\n id?: string;\n /** Extra class names on the wrapper. */\n className?: string;\n}\n\n/* ------------------------------------------------------------------ */\n/* Component */\n/* ------------------------------------------------------------------ */\n\nexport const RecaptchaWidget = forwardRef<\n RecaptchaWidgetHandle,\n RecaptchaWidgetProps\n>(function RecaptchaWidget(\n {\n siteKey,\n theme,\n locale,\n size = 'normal',\n onChange,\n onExpired,\n onError,\n error,\n id,\n className,\n },\n ref,\n) {\n const { t, i18n } = useTranslation();\n const formField = useFormField();\n const { resolvedTheme } = useTheme();\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const widgetIdRef = useRef<number | null>(null);\n const apiRef = useRef<RecaptchaApi | null>(null);\n const [statusMessage, setStatusMessage] = useState<string>('');\n\n const wrapperId = id ?? formField.id;\n const errorId = error ? `${wrapperId}-error` : undefined;\n const describedBy =\n [formField.describedBy, errorId].filter(Boolean).join(' ') || undefined;\n\n // Mirror the DS theme into reCAPTCHA's two-tone setting.\n const effectiveTheme: 'light' | 'dark' =\n theme ?? (resolvedTheme.startsWith('dark') ? 'dark' : 'light');\n const effectiveLocale = locale ?? i18n.language;\n\n // Stable callbacks via refs so we don't re-render the widget on\n // every parent state change.\n const onChangeRef = useRef(onChange);\n const onExpiredRef = useRef(onExpired);\n const onErrorRef = useRef(onError);\n onChangeRef.current = onChange;\n onExpiredRef.current = onExpired;\n onErrorRef.current = onError;\n\n const expiredLabel = t(\n 'inputs.recaptcha.expired',\n 'Verification expired — please retry.',\n );\n const errorLabel = t(\n 'inputs.recaptcha.error',\n 'Verification failed — please retry.',\n );\n\n useEffect(() => {\n if (!siteKey || !containerRef.current) return;\n let cancelled = false;\n\n loadRecaptcha(effectiveLocale)\n .then((api) => {\n if (cancelled || !containerRef.current) return;\n apiRef.current = api;\n widgetIdRef.current = api.render(containerRef.current, {\n sitekey: siteKey,\n theme: effectiveTheme,\n size,\n hl: effectiveLocale,\n callback: (token) => {\n setStatusMessage('');\n onChangeRef.current?.(token);\n },\n 'expired-callback': () => {\n setStatusMessage(expiredLabel);\n onChangeRef.current?.(null);\n onExpiredRef.current?.();\n },\n 'error-callback': () => {\n setStatusMessage(errorLabel);\n onChangeRef.current?.(null);\n onErrorRef.current?.();\n },\n });\n })\n .catch(() => {\n if (cancelled) return;\n setStatusMessage(errorLabel);\n onErrorRef.current?.();\n });\n\n return () => {\n cancelled = true;\n // grecaptcha has no public destroy. The shared script stays\n // loaded; we reset the widget so its iframe stops listening.\n if (apiRef.current && widgetIdRef.current !== null) {\n try {\n apiRef.current.reset(widgetIdRef.current);\n } catch {\n /* widget id may already be invalid — safe to ignore. */\n }\n }\n };\n // Re-render the widget when the underlying configuration changes.\n }, [\n siteKey,\n effectiveTheme,\n effectiveLocale,\n size,\n expiredLabel,\n errorLabel,\n ]);\n\n const agentHandle = useMemo<RecaptchaWidgetHandle>(\n () => ({\n reset: () => {\n if (apiRef.current && widgetIdRef.current !== null) {\n apiRef.current.reset(widgetIdRef.current);\n setStatusMessage('');\n onChangeRef.current?.(null);\n }\n },\n getResponse: () => {\n if (apiRef.current && widgetIdRef.current !== null) {\n return apiRef.current.getResponse(widgetIdRef.current);\n }\n return '';\n },\n execute: () => {\n if (apiRef.current && widgetIdRef.current !== null) {\n apiRef.current.execute(widgetIdRef.current);\n }\n },\n }),\n [],\n );\n useImperativeHandle(ref, () => agentHandle, [agentHandle]);\n useAgentRegistration(recaptchaWidgetAgent, agentHandle, wrapperId);\n\n const liveMessage = error || statusMessage;\n // For invisible widgets the iframe is offscreen, so we mark the\n // wrapper as a non-visual badge. Otherwise the wrapper just hosts\n // the rendered iframe and contributes no interactive role itself.\n const wrapperRole = size === 'invisible' ? 'presentation' : undefined;\n\n return (\n <div\n className={[\n 'ds:inline-block',\n // Keep the iframe inside the wrapper's stacking context so\n // popovers etc. above the form continue to overlay correctly.\n 'ds:relative ds:isolate',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n data-component=\"recaptcha-widget\"\n data-component-id={wrapperId}\n data-size={size}\n role={wrapperRole}\n >\n <div\n ref={containerRef}\n id={wrapperId}\n // The class name is the canonical hook Google's verifier\n // looks for when the page form is submitted server-side. Some\n // Symfony / Laravel validators short-circuit when this class\n // is missing, so we render it even though we're using\n // grecaptcha.render explicitly.\n className=\"g-recaptcha\"\n data-sitekey={siteKey}\n data-theme={effectiveTheme}\n data-size={size}\n aria-describedby={describedBy}\n aria-invalid={error || formField.invalid ? true : undefined}\n />\n {/* Live announcement for expired / error states. Empty when the\n widget is healthy so SR users aren't spammed. */}\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n className=\"ds:sr-only\"\n >\n {liveMessage}\n </div>\n </div>\n );\n});\n\nRecaptchaWidget.displayName = 'RecaptchaWidget';\n"],"names":["recaptchaWidgetAgent","handle","SCRIPT_SRC","SCRIPT_ID","FOREIGN_LOADER_GRACE_MS","POLL_INTERVAL_MS","loaderPromise","loadRecaptcha","hl","resolve","reject","existing","onReady","pollHandle","timeoutHandle","clearTimers","fallbackCb","fallbackParams","fallbackScript","params","script","RecaptchaWidget","forwardRef","siteKey","theme","locale","size","onChange","onExpired","onError","error","id","className","ref","t","i18n","useTranslation","formField","useFormField","resolvedTheme","useTheme","containerRef","useRef","widgetIdRef","apiRef","statusMessage","setStatusMessage","useState","wrapperId","errorId","describedBy","effectiveTheme","effectiveLocale","onChangeRef","onExpiredRef","onErrorRef","expiredLabel","errorLabel","useEffect","cancelled","api","token","_a","_b","agentHandle","useMemo","useImperativeHandle","useAgentRegistration","liveMessage","wrapperRole","jsxs","jsx"],"mappings":";;;;;;AAWO,MAAMA,IAA4D;AAAA,EACvE,IAAI;AAAA,EACJ,cAAc,CAAC,QAAQ;AAAA,EACvB,OAAO;AAAA,IACL,UAAU;AAAA,MACR,MAAM;AAAA,MACN,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,MAAM,CAACC,MAAWA,EAAO,YAAA,EAAc,SAAS;AAAA,IAAA;AAAA,EAClD;AAAA,EAEF,SAAS;AAAA,IACP,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,QAAA;AAAA,MACT;AAAA,IAAA;AAAA,IAEF,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,aACE;AAAA,MACF,QAAQ,CAACA,MAAW;AAClB,QAAAA,EAAO,MAAA;AAAA,MACT;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IAAA;AAAA,IAEf,YAAY;AAAA,MACV,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,aACE;AAAA,IAAA;AAAA,EACJ;AAEJ,GC5BMC,IAAa,2CACbC,IAAY,gCACZC,KAA0B,KAC1BC,KAAmB;AA2BzB,IAAIC,IAA8C;AAElD,SAASC,GAAcC,GAA+C;AACpE,SAAI,OAAO,SAAW,MACb,QAAQ,OAAO,IAAI,MAAM,oCAAoC,CAAC,IAEnE,OAAO,cAAc,OAAO,OAAO,WAAW,UAAW,aACpD,QAAQ,QAAQ,OAAO,UAAU,IAEtCF,MAIJA,IAAgB,IAAI,QAAsB,CAACG,GAASC,MAAW;AAC7D,UAAMC,IAAW,SAAS;AAAA,MACxBR;AAAA,IAAA,GAGIS,IAAU,MAAM;AACpB,MAAI,OAAO,cAAc,OAAO,OAAO,WAAW,UAAW,aAC3DH,EAAQ,OAAO,UAAU,IAEzBC,EAAO,IAAI,MAAM,iDAAiD,CAAC;AAAA,IAEvE;AAIA,QAFA,OAAO,yBAAyBE,GAE5BD,GAAU;AAIZ,UAAIE,IAAoD,MACpDC,IAAsD;AAC1D,YAAMC,IAAc,MAAM;AACxB,QAAIF,MAAe,QAAM,cAAcA,CAAU,GAC7CC,MAAkB,QAAM,aAAaA,CAAa,GACtDD,IAAa,MACbC,IAAgB;AAAA,MAClB;AACA,MAAAD,IAAa,YAAY,MAAM;AAC7B,QACE,OAAO,cACP,OAAO,OAAO,WAAW,UAAW,eAEpCE,EAAA,GACAN,EAAQ,OAAO,UAAU;AAAA,MAE7B,GAAGJ,EAAgB,GACnBS,IAAgB,WAAW,MAAM;AAE/B,YADAC,EAAA,GAEE,OAAO,cACP,OAAO,OAAO,WAAW,UAAW,YACpC;AACA,UAAAN,EAAQ,OAAO,UAAU;AACzB;AAAA,QACF;AAEA,cAAMO,IAAa,kCAAkC,KAAK,IAAA,CAAK;AAC9D,eAAiDA,CAAU,IAAI,MAAM;AACpE,iBAAQ,OAAiDA,CAAU,GAEjE,OAAO,cACP,OAAO,OAAO,WAAW,UAAW,aAEpCP,EAAQ,OAAO,UAAU,IAEzBC;AAAA,YACE,IAAI,MAAM,qDAAqD;AAAA,UAAA;AAAA,QAGrE;AACA,cAAMO,IAAiB,IAAI,gBAAgB;AAAA,UACzC,QAAQD;AAAA,UACR,QAAQ;AAAA,QAAA,CACT;AACD,QAAIR,KAAIS,EAAe,IAAI,MAAMT,CAAE;AACnC,cAAMU,IAAiB,SAAS,cAAc,QAAQ;AACtD,QAAAA,EAAe,MAAM,GAAGhB,CAAU,IAAIe,EAAe,UAAU,IAC/DC,EAAe,QAAQ,IACvBA,EAAe,QAAQ,IACvBA,EAAe,UAAU,MAAM;AAC7B,iBAAQ,OAAiDF,CAAU,GACnEV,IAAgB,MAChBI,EAAO,IAAI,MAAM,2CAA2C,CAAC;AAAA,QAC/D,GACA,SAAS,KAAK,YAAYQ,CAAc;AAAA,MAC1C,GAAGd,EAAuB;AAC1B;AAAA,IACF;AAEA,UAAMe,IAAS,IAAI,gBAAgB;AAAA,MACjC,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA,CACT;AACD,IAAIX,KAAIW,EAAO,IAAI,MAAMX,CAAE;AAE3B,UAAMY,IAAS,SAAS,cAAc,QAAQ;AAC9C,IAAAA,EAAO,KAAKjB,GACZiB,EAAO,MAAM,GAAGlB,CAAU,IAAIiB,EAAO,UAAU,IAC/CC,EAAO,QAAQ,IACfA,EAAO,QAAQ,IACfA,EAAO,UAAU,MAAM;AACrB,MAAAd,IAAgB,MAChBI,EAAO,IAAI,MAAM,kCAAkC,CAAC;AAAA,IACtD,GACA,SAAS,KAAK,YAAYU,CAAM;AAAA,EAClC,CAAC,GAEMd;AACT;AA6CO,MAAMe,KAAkBC,EAG7B,SACA;AAAA,EACE,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,OAAAC;AAAA,EACA,IAAAC;AAAA,EACA,WAAAC;AACF,GACAC,GACA;AACA,QAAM,EAAE,GAAAC,GAAG,MAAAC,EAAA,IAASC,EAAA,GACdC,IAAYC,EAAA,GACZ,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GAEpBC,IAAeC,EAA8B,IAAI,GACjDC,IAAcD,EAAsB,IAAI,GACxCE,IAASF,EAA4B,IAAI,GACzC,CAACG,GAAeC,CAAgB,IAAIC,EAAiB,EAAE,GAEvDC,IAAYjB,KAAMM,EAAU,IAC5BY,IAAUnB,IAAQ,GAAGkB,CAAS,WAAW,QACzCE,IACJ,CAACb,EAAU,aAAaY,CAAO,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK,QAG1DE,IACJ3B,MAAUe,EAAc,WAAW,MAAM,IAAI,SAAS,UAClDa,IAAkB3B,KAAUU,EAAK,UAIjCkB,IAAcX,EAAOf,CAAQ,GAC7B2B,IAAeZ,EAAOd,CAAS,GAC/B2B,IAAab,EAAOb,CAAO;AACjC,EAAAwB,EAAY,UAAU1B,GACtB2B,EAAa,UAAU1B,GACvB2B,EAAW,UAAU1B;AAErB,QAAM2B,IAAetB;AAAA,IACnB;AAAA,IACA;AAAA,EAAA,GAEIuB,IAAavB;AAAA,IACjB;AAAA,IACA;AAAA,EAAA;AAGF,EAAAwB,EAAU,MAAM;AACd,QAAI,CAACnC,KAAW,CAACkB,EAAa,QAAS;AACvC,QAAIkB,IAAY;AAEhB,WAAApD,GAAc6C,CAAe,EAC1B,KAAK,CAACQ,MAAQ;AACb,MAAID,KAAa,CAAClB,EAAa,YAC/BG,EAAO,UAAUgB,GACjBjB,EAAY,UAAUiB,EAAI,OAAOnB,EAAa,SAAS;AAAA,QACrD,SAASlB;AAAA,QACT,OAAO4B;AAAA,QACP,MAAAzB;AAAA,QACA,IAAI0B;AAAA,QACJ,UAAU,CAACS,MAAU;;AACnB,UAAAf,EAAiB,EAAE,IACnBgB,IAAAT,EAAY,YAAZ,QAAAS,EAAA,KAAAT,GAAsBQ;AAAA,QACxB;AAAA,QACA,oBAAoB,MAAM;;AACxB,UAAAf,EAAiBU,CAAY,IAC7BM,IAAAT,EAAY,YAAZ,QAAAS,EAAA,KAAAT,GAAsB,QACtBU,IAAAT,EAAa,YAAb,QAAAS,EAAA,KAAAT;AAAA,QACF;AAAA,QACA,kBAAkB,MAAM;;AACtB,UAAAR,EAAiBW,CAAU,IAC3BK,IAAAT,EAAY,YAAZ,QAAAS,EAAA,KAAAT,GAAsB,QACtBU,IAAAR,EAAW,YAAX,QAAAQ,EAAA,KAAAR;AAAA,QACF;AAAA,MAAA,CACD;AAAA,IACH,CAAC,EACA,MAAM,MAAM;;AACX,MAAII,MACJb,EAAiBW,CAAU,IAC3BK,IAAAP,EAAW,YAAX,QAAAO,EAAA,KAAAP;AAAA,IACF,CAAC,GAEI,MAAM;AAIX,UAHAI,IAAY,IAGRf,EAAO,WAAWD,EAAY,YAAY;AAC5C,YAAI;AACF,UAAAC,EAAO,QAAQ,MAAMD,EAAY,OAAO;AAAA,QAC1C,QAAQ;AAAA,QAER;AAAA,IAEJ;AAAA,EAEF,GAAG;AAAA,IACDpB;AAAA,IACA4B;AAAA,IACAC;AAAA,IACA1B;AAAA,IACA8B;AAAA,IACAC;AAAA,EAAA,CACD;AAED,QAAMO,IAAcC;AAAA,IAClB,OAAO;AAAA,MACL,OAAO,MAAM;;AACX,QAAIrB,EAAO,WAAWD,EAAY,YAAY,SAC5CC,EAAO,QAAQ,MAAMD,EAAY,OAAO,GACxCG,EAAiB,EAAE,IACnBgB,IAAAT,EAAY,YAAZ,QAAAS,EAAA,KAAAT,GAAsB;AAAA,MAE1B;AAAA,MACA,aAAa,MACPT,EAAO,WAAWD,EAAY,YAAY,OACrCC,EAAO,QAAQ,YAAYD,EAAY,OAAO,IAEhD;AAAA,MAET,SAAS,MAAM;AACb,QAAIC,EAAO,WAAWD,EAAY,YAAY,QAC5CC,EAAO,QAAQ,QAAQD,EAAY,OAAO;AAAA,MAE9C;AAAA,IAAA;AAAA,IAEF,CAAA;AAAA,EAAC;AAEH,EAAAuB,EAAoBjC,GAAK,MAAM+B,GAAa,CAACA,CAAW,CAAC,GACzDG,EAAqBnE,GAAsBgE,GAAahB,CAAS;AAEjE,QAAMoB,IAActC,KAASe,GAIvBwB,IAAc3C,MAAS,cAAc,iBAAiB;AAE5D,SACE,gBAAA4C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA;AAAA;AAAA,QAGA;AAAA,QACAtC;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MACX,kBAAe;AAAA,MACf,qBAAmBgB;AAAA,MACnB,aAAWtB;AAAA,MACX,MAAM2C;AAAA,MAEN,UAAA;AAAA,QAAA,gBAAAE;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK9B;AAAA,YACL,IAAIO;AAAA,YAMJ,WAAU;AAAA,YACV,gBAAczB;AAAA,YACd,cAAY4B;AAAA,YACZ,aAAWzB;AAAA,YACX,oBAAkBwB;AAAA,YAClB,gBAAcpB,KAASO,EAAU,UAAU,KAAO;AAAA,UAAA;AAAA,QAAA;AAAA,QAIpD,gBAAAkC;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,aAAU;AAAA,YACV,eAAY;AAAA,YACZ,WAAU;AAAA,YAET,UAAAH;AAAA,UAAA;AAAA,QAAA;AAAA,MACH;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;AAED/C,GAAgB,cAAc;"}