@alfadocs/ui-kit-debug 1.3.13 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/dist/_chunks/agenda-card.agent-Cb5tuEh3.js +28 -0
  2. package/dist/_chunks/agenda-card.agent-Cb5tuEh3.js.map +1 -0
  3. package/dist/_chunks/{alia-sidebar-DzNz1gDf.js → alia-sidebar-DSBZMick.js} +3 -3
  4. package/dist/_chunks/{alia-sidebar-DzNz1gDf.js.map → alia-sidebar-DSBZMick.js.map} +1 -1
  5. package/dist/_chunks/{anamnesis-i18n-CfC0qYzy.js → anamnesis-i18n-BA631X4t.js} +2209 -2144
  6. package/dist/_chunks/anamnesis-i18n-BA631X4t.js.map +1 -0
  7. package/dist/_chunks/{antenatal-schedule-timeline-BMMpi2lb.js → antenatal-schedule-timeline-u8TsS2QJ.js} +27 -26
  8. package/dist/_chunks/{antenatal-schedule-timeline-BMMpi2lb.js.map → antenatal-schedule-timeline-u8TsS2QJ.js.map} +1 -1
  9. package/dist/_chunks/{appointment-timeline-B630OT_J.js → appointment-timeline-Bqf1sTU5.js} +2 -2
  10. package/dist/_chunks/{appointment-timeline-B630OT_J.js.map → appointment-timeline-Bqf1sTU5.js.map} +1 -1
  11. package/dist/_chunks/{ar-THMLfSoN.js → ar-BR1FGFP2.js} +14 -14
  12. package/dist/_chunks/{ar-THMLfSoN.js.map → ar-BR1FGFP2.js.map} +1 -1
  13. package/dist/_chunks/{bmi-calculator-CM0-G2mg.js → bmi-calculator-CpyY13MV.js} +2 -2
  14. package/dist/_chunks/{bmi-calculator-CM0-G2mg.js.map → bmi-calculator-CpyY13MV.js.map} +1 -1
  15. package/dist/_chunks/{booking-DjNbd7C1.js → booking-BjsA7j1-.js} +699 -688
  16. package/dist/_chunks/booking-BjsA7j1-.js.map +1 -0
  17. package/dist/_chunks/calculator-dialog-12d3Sxaz.js +48 -0
  18. package/dist/_chunks/{calculator-dialog-DuXMQSdm.js.map → calculator-dialog-12d3Sxaz.js.map} +1 -1
  19. package/dist/_chunks/{care-plan-card-1G_f4I5s.js → care-plan-card-BvQy366X.js} +3 -3
  20. package/dist/_chunks/{care-plan-card-1G_f4I5s.js.map → care-plan-card-BvQy366X.js.map} +1 -1
  21. package/dist/_chunks/{care-plan-entry-card-DmBsffHS.js → care-plan-entry-card-apk_5B3O.js} +2 -2
  22. package/dist/_chunks/{care-plan-entry-card-DmBsffHS.js.map → care-plan-entry-card-apk_5B3O.js.map} +1 -1
  23. package/dist/_chunks/{chat-container-HlFnoEIl.js → chat-container-CYYego1W.js} +105 -81
  24. package/dist/_chunks/chat-container-CYYego1W.js.map +1 -0
  25. package/dist/_chunks/cycle-calculator-B7fyH-h4.js +425 -0
  26. package/dist/_chunks/cycle-calculator-B7fyH-h4.js.map +1 -0
  27. package/dist/_chunks/{date-picker-ZHejTVAJ.js → date-picker-Bp64zk2p.js} +19 -19
  28. package/dist/_chunks/{date-picker-ZHejTVAJ.js.map → date-picker-Bp64zk2p.js.map} +1 -1
  29. package/dist/_chunks/date-picker-variants-pKAJfnWr.js +2089 -0
  30. package/dist/_chunks/date-picker-variants-pKAJfnWr.js.map +1 -0
  31. package/dist/_chunks/{date-range-picker-pEG3Ln3i.js → date-range-picker-CDrZ8Zh0.js} +27 -27
  32. package/dist/_chunks/{date-range-picker-pEG3Ln3i.js.map → date-range-picker-CDrZ8Zh0.js.map} +1 -1
  33. package/dist/_chunks/{date-time-picker-695QvBGj.js → date-time-picker-DafkGDGO.js} +10 -10
  34. package/dist/_chunks/{date-time-picker-695QvBGj.js.map → date-time-picker-DafkGDGO.js.map} +1 -1
  35. package/dist/_chunks/{de-DmZ-8rTN.js → de-3iM4rGqo.js} +7 -7
  36. package/dist/_chunks/{de-DmZ-8rTN.js.map → de-3iM4rGqo.js.map} +1 -1
  37. package/dist/_chunks/{document-preview-D3gg4MXB.js → document-preview-DOrsqiN1.js} +2 -2
  38. package/dist/_chunks/{document-preview-D3gg4MXB.js.map → document-preview-DOrsqiN1.js.map} +1 -1
  39. package/dist/_chunks/due-date-calculator-CnkbbAej.js +571 -0
  40. package/dist/_chunks/due-date-calculator-CnkbbAej.js.map +1 -0
  41. package/dist/_chunks/{editor-overlay-DE3esyio.js → editor-overlay-B1tr2i7B.js} +22 -21
  42. package/dist/_chunks/editor-overlay-B1tr2i7B.js.map +1 -0
  43. package/dist/_chunks/{el-Bela9mxs.js → el-C96rGJvU.js} +2 -2
  44. package/dist/_chunks/{el-Bela9mxs.js.map → el-C96rGJvU.js.map} +1 -1
  45. package/dist/_chunks/{es-BNncHKex.js → es-Cxiqjx8r.js} +12 -12
  46. package/dist/_chunks/{es-BNncHKex.js.map → es-Cxiqjx8r.js.map} +1 -1
  47. package/dist/_chunks/fetal-weight-avlj-l-S.js +223 -0
  48. package/dist/_chunks/fetal-weight-avlj-l-S.js.map +1 -0
  49. package/dist/_chunks/format-4HNwNGrN.js +1315 -0
  50. package/dist/_chunks/format-4HNwNGrN.js.map +1 -0
  51. package/dist/_chunks/{fr-CH8ADfhN.js → fr-Bhr6SYKj.js} +21 -21
  52. package/dist/_chunks/{fr-CH8ADfhN.js.map → fr-Bhr6SYKj.js.map} +1 -1
  53. package/dist/_chunks/{freemium-paywall-C_Ue6wxU.js → freemium-paywall-DRDdWuOg.js} +3 -3
  54. package/dist/_chunks/{freemium-paywall-C_Ue6wxU.js.map → freemium-paywall-DRDdWuOg.js.map} +1 -1
  55. package/dist/_chunks/gestational-age-calculator-BljY_DVJ.js +488 -0
  56. package/dist/_chunks/gestational-age-calculator-BljY_DVJ.js.map +1 -0
  57. package/dist/_chunks/hcg-doubling-Cv_vH61p.js +312 -0
  58. package/dist/_chunks/hcg-doubling-Cv_vH61p.js.map +1 -0
  59. package/dist/_chunks/header-settings-Cn5fPXCE.js +335 -0
  60. package/dist/_chunks/header-settings-Cn5fPXCE.js.map +1 -0
  61. package/dist/_chunks/{hi-Bppfxp8l.js → hi-BxXX26d_.js} +12 -12
  62. package/dist/_chunks/{hi-Bppfxp8l.js.map → hi-BxXX26d_.js.map} +1 -1
  63. package/dist/_chunks/isSameWeek-B73MagWB.js +13 -0
  64. package/dist/_chunks/{isSameWeek-CK4HS9lH.js.map → isSameWeek-B73MagWB.js.map} +1 -1
  65. package/dist/_chunks/{it-B4ySaRyK.js → it-Xmjomvyj.js} +24 -24
  66. package/dist/_chunks/{it-B4ySaRyK.js.map → it-Xmjomvyj.js.map} +1 -1
  67. package/dist/_chunks/{ja-CGF6Io9P.js → ja-mfZvt1ZV.js} +16 -16
  68. package/dist/_chunks/{ja-CGF6Io9P.js.map → ja-mfZvt1ZV.js.map} +1 -1
  69. package/dist/_chunks/{link-cell-renderer-C5XLwVXQ.js → link-cell-renderer-CJ_gk7gl.js} +3 -3
  70. package/dist/_chunks/{link-cell-renderer-C5XLwVXQ.js.map → link-cell-renderer-CJ_gk7gl.js.map} +1 -1
  71. package/dist/_chunks/{locale-picker-BfBUdT1m.js → locale-picker-D9Kv2zrK.js} +153 -132
  72. package/dist/_chunks/locale-picker-D9Kv2zrK.js.map +1 -0
  73. package/dist/_chunks/map-view-2yZCQW2l.js +445 -0
  74. package/dist/_chunks/map-view-2yZCQW2l.js.map +1 -0
  75. package/dist/_chunks/{marketplace-app-shell-DwcFMxzp.js → marketplace-app-shell-BLRvg-M0.js} +49 -40
  76. package/dist/_chunks/marketplace-app-shell-BLRvg-M0.js.map +1 -0
  77. package/dist/_chunks/{nl-DuShqwuV.js → nl-DDs-KEnD.js} +15 -15
  78. package/dist/_chunks/{nl-DuShqwuV.js.map → nl-DDs-KEnD.js.map} +1 -1
  79. package/dist/_chunks/{notes-panel-DPsgB4Mv.js → notes-panel-CiFN3sLW.js} +2 -2
  80. package/dist/_chunks/{notes-panel-DPsgB4Mv.js.map → notes-panel-CiFN3sLW.js.map} +1 -1
  81. package/dist/_chunks/{number-input-DrozbZAU.js → number-input-DOe5VYei.js} +64 -64
  82. package/dist/_chunks/number-input-DOe5VYei.js.map +1 -0
  83. package/dist/_chunks/{optical-prescription-BDHJr8Zz.js → optical-prescription-CRemE8fL.js} +2 -2
  84. package/dist/_chunks/{optical-prescription-BDHJr8Zz.js.map → optical-prescription-CRemE8fL.js.map} +1 -1
  85. package/dist/_chunks/{parse-DvA97ro9.js → parse-JqixfsU0.js} +43 -43
  86. package/dist/_chunks/{parse-DvA97ro9.js.map → parse-JqixfsU0.js.map} +1 -1
  87. package/dist/_chunks/parseISO-fOGpHKXm.js +120 -0
  88. package/dist/_chunks/parseISO-fOGpHKXm.js.map +1 -0
  89. package/dist/_chunks/{patient-details-DqjjwPmt.js → patient-details-CpunD0qx.js} +3 -3
  90. package/dist/_chunks/{patient-details-DqjjwPmt.js.map → patient-details-CpunD0qx.js.map} +1 -1
  91. package/dist/_chunks/{patient-table-BmIDrLIS.js → patient-table-2eWx-Rrk.js} +2 -2
  92. package/dist/_chunks/{patient-table-BmIDrLIS.js.map → patient-table-2eWx-Rrk.js.map} +1 -1
  93. package/dist/_chunks/{payment-form-h-BZ8onk.js → payment-form-Ds1I9KqB.js} +308 -231
  94. package/dist/_chunks/payment-form-Ds1I9KqB.js.map +1 -0
  95. package/dist/_chunks/{pdf-viewer-Ddx-T053.js → pdf-viewer-DUIsV9s5.js} +429 -369
  96. package/dist/_chunks/pdf-viewer-DUIsV9s5.js.map +1 -0
  97. package/dist/_chunks/{pl-CKQwX9Fk.js → pl-BYYMnEWP.js} +18 -18
  98. package/dist/_chunks/{pl-CKQwX9Fk.js.map → pl-BYYMnEWP.js.map} +1 -1
  99. package/dist/_chunks/{practice-results-B-HPc13W.js → practice-results-SjCniMd2.js} +2 -2
  100. package/dist/_chunks/{practice-results-B-HPc13W.js.map → practice-results-SjCniMd2.js.map} +1 -1
  101. package/dist/_chunks/pregnancy-dating-BmpHScZ0.js +770 -0
  102. package/dist/_chunks/pregnancy-dating-BmpHScZ0.js.map +1 -0
  103. package/dist/_chunks/pregnancy-weight-gain-B5KSJzdc.js +553 -0
  104. package/dist/_chunks/pregnancy-weight-gain-B5KSJzdc.js.map +1 -0
  105. package/dist/_chunks/progress-CK8otcQ-.js +343 -0
  106. package/dist/_chunks/progress-CK8otcQ-.js.map +1 -0
  107. package/dist/_chunks/{pt-_njpXyOZ.js → pt-BSPnVrQ7.js} +20 -20
  108. package/dist/_chunks/{pt-_njpXyOZ.js.map → pt-BSPnVrQ7.js.map} +1 -1
  109. package/dist/_chunks/{radiograph-panel.agent-BQZ64Riy.js → radiograph-panel.agent-CtFtNMzk.js} +3 -3
  110. package/dist/_chunks/{radiograph-panel.agent-BQZ64Riy.js.map → radiograph-panel.agent-CtFtNMzk.js.map} +1 -1
  111. package/dist/_chunks/{rich-text-editor-CfeXPPWs.js → rich-text-editor-BedTpWzL.js} +2 -2
  112. package/dist/_chunks/{rich-text-editor-CfeXPPWs.js.map → rich-text-editor-BedTpWzL.js.map} +1 -1
  113. package/dist/_chunks/{ro-3X6_4FcN.js → ro-BbiylGmG.js} +14 -14
  114. package/dist/_chunks/{ro-3X6_4FcN.js.map → ro-BbiylGmG.js.map} +1 -1
  115. package/dist/_chunks/{ru-bAcgmnS-.js → ru-BX_qsV67.js} +14 -14
  116. package/dist/_chunks/{ru-bAcgmnS-.js.map → ru-BX_qsV67.js.map} +1 -1
  117. package/dist/_chunks/{session-countdown-Bc70VXN1.js → session-countdown-BL-Psg8u.js} +2 -2
  118. package/dist/_chunks/{session-countdown-Bc70VXN1.js.map → session-countdown-BL-Psg8u.js.map} +1 -1
  119. package/dist/_chunks/{sign-document-CW_ByDUh.js → sign-document-jF4fZDJ5.js} +2 -2
  120. package/dist/_chunks/{sign-document-CW_ByDUh.js.map → sign-document-jF4fZDJ5.js.map} +1 -1
  121. package/dist/_chunks/slot-grid-DNiUcXy2.js +640 -0
  122. package/dist/_chunks/slot-grid-DNiUcXy2.js.map +1 -0
  123. package/dist/_chunks/{sparkline-BTY4B5tv.js → sparkline-BmGcEyZO.js} +209 -164
  124. package/dist/_chunks/sparkline-BmGcEyZO.js.map +1 -0
  125. package/dist/_chunks/{sq-jYFqr4Ga.js → sq-i9UOk4P7.js} +10 -10
  126. package/dist/_chunks/{sq-jYFqr4Ga.js.map → sq-i9UOk4P7.js.map} +1 -1
  127. package/dist/_chunks/subDays-CAUv47M1.js +8 -0
  128. package/dist/_chunks/{subDays-BcNi04uf.js.map → subDays-CAUv47M1.js.map} +1 -1
  129. package/dist/_chunks/{sv-BSGEJ-8B.js → sv-CpTdtmDQ.js} +8 -8
  130. package/dist/_chunks/{sv-BSGEJ-8B.js.map → sv-CpTdtmDQ.js.map} +1 -1
  131. package/dist/_chunks/{tab-bar-Axhk6xzx.js → tab-bar-BYESZINM.js} +83 -77
  132. package/dist/_chunks/tab-bar-BYESZINM.js.map +1 -0
  133. package/dist/_chunks/task-card.agent-CF2N_uu4.js +29 -0
  134. package/dist/_chunks/task-card.agent-CF2N_uu4.js.map +1 -0
  135. package/dist/_chunks/{tr-CTpgUtw6.js → tr-DXG2QN1K.js} +17 -17
  136. package/dist/_chunks/{tr-CTpgUtw6.js.map → tr-DXG2QN1K.js.map} +1 -1
  137. package/dist/_chunks/{unit-converter-COgkN7YP.js → unit-converter-CHPDuV7W.js} +2 -2
  138. package/dist/_chunks/{unit-converter-COgkN7YP.js.map → unit-converter-CHPDuV7W.js.map} +1 -1
  139. package/dist/_chunks/{warning-stack-BtjmJChC.js → warning-stack-B7t_8jRE.js} +42 -37
  140. package/dist/_chunks/{warning-stack-BtjmJChC.js.map → warning-stack-B7t_8jRE.js.map} +1 -1
  141. package/dist/_chunks/{zh-CN-BgM0Io2O.js → zh-CN-vPkPEK6H.js} +18 -18
  142. package/dist/_chunks/{zh-CN-BgM0Io2O.js.map → zh-CN-vPkPEK6H.js.map} +1 -1
  143. package/dist/agent-catalog.json +6426 -3382
  144. package/dist/agent-i18n/en.json +234 -15
  145. package/dist/components/agenda-card/agenda-card.agent.d.ts.map +1 -1
  146. package/dist/components/agenda-card/index.js +1 -1
  147. package/dist/components/appointment-timeline/index.js +1 -1
  148. package/dist/components/bmi-calculator/index.js +1 -1
  149. package/dist/components/booking/booking.d.ts.map +1 -1
  150. package/dist/components/booking/index.js +1 -1
  151. package/dist/components/calculator-dialog/calculator-dialog.d.ts.map +1 -1
  152. package/dist/components/calculator-dialog/index.js +1 -1
  153. package/dist/components/care-plan-card/index.js +1 -1
  154. package/dist/components/care-plan-entry-card/index.js +1 -1
  155. package/dist/components/chat-container/chat-container.agent.d.ts.map +1 -1
  156. package/dist/components/chat-container/chat-container.d.ts +14 -0
  157. package/dist/components/chat-container/chat-container.d.ts.map +1 -1
  158. package/dist/components/chat-container/index.js +1 -1
  159. package/dist/components/cycle-calculator/cycle-calculator.agent.d.ts +4 -0
  160. package/dist/components/cycle-calculator/cycle-calculator.agent.d.ts.map +1 -0
  161. package/dist/components/cycle-calculator/cycle-calculator.d.ts +42 -0
  162. package/dist/components/cycle-calculator/cycle-calculator.d.ts.map +1 -1
  163. package/dist/components/cycle-calculator/index.d.ts +1 -1
  164. package/dist/components/cycle-calculator/index.d.ts.map +1 -1
  165. package/dist/components/cycle-calculator/index.js +1 -1
  166. package/dist/components/data-table/index.js +1 -1
  167. package/dist/components/date-picker/index.js +1 -1
  168. package/dist/components/date-range-picker/index.js +1 -1
  169. package/dist/components/date-time-picker/index.js +1 -1
  170. package/dist/components/document-preview/index.js +1 -1
  171. package/dist/components/due-date-calculator/due-date-calculator.agent.d.ts +4 -0
  172. package/dist/components/due-date-calculator/due-date-calculator.agent.d.ts.map +1 -0
  173. package/dist/components/due-date-calculator/due-date-calculator.d.ts +61 -1
  174. package/dist/components/due-date-calculator/due-date-calculator.d.ts.map +1 -1
  175. package/dist/components/due-date-calculator/index.d.ts +1 -1
  176. package/dist/components/due-date-calculator/index.d.ts.map +1 -1
  177. package/dist/components/due-date-calculator/index.js +2 -2
  178. package/dist/components/editor-overlay/editor-overlay.d.ts +7 -1
  179. package/dist/components/editor-overlay/editor-overlay.d.ts.map +1 -1
  180. package/dist/components/editor-overlay/index.js +1 -1
  181. package/dist/components/fetal-weight/fetal-weight.agent.d.ts +4 -0
  182. package/dist/components/fetal-weight/fetal-weight.agent.d.ts.map +1 -0
  183. package/dist/components/fetal-weight/fetal-weight.d.ts +26 -0
  184. package/dist/components/fetal-weight/fetal-weight.d.ts.map +1 -1
  185. package/dist/components/fetal-weight/index.d.ts +1 -1
  186. package/dist/components/fetal-weight/index.d.ts.map +1 -1
  187. package/dist/components/fetal-weight/index.js +1 -1
  188. package/dist/components/freemium-paywall/index.js +1 -1
  189. package/dist/components/gestational-age-calculator/gestational-age-calculator.agent.d.ts +4 -0
  190. package/dist/components/gestational-age-calculator/gestational-age-calculator.agent.d.ts.map +1 -0
  191. package/dist/components/gestational-age-calculator/gestational-age-calculator.d.ts +44 -2
  192. package/dist/components/gestational-age-calculator/gestational-age-calculator.d.ts.map +1 -1
  193. package/dist/components/gestational-age-calculator/index.d.ts +1 -1
  194. package/dist/components/gestational-age-calculator/index.d.ts.map +1 -1
  195. package/dist/components/gestational-age-calculator/index.js +1 -1
  196. package/dist/components/hcg-doubling/hcg-doubling.agent.d.ts +4 -0
  197. package/dist/components/hcg-doubling/hcg-doubling.agent.d.ts.map +1 -0
  198. package/dist/components/hcg-doubling/hcg-doubling.d.ts +30 -0
  199. package/dist/components/hcg-doubling/hcg-doubling.d.ts.map +1 -1
  200. package/dist/components/hcg-doubling/index.d.ts +1 -1
  201. package/dist/components/hcg-doubling/index.d.ts.map +1 -1
  202. package/dist/components/hcg-doubling/index.js +1 -1
  203. package/dist/components/header-settings/header-settings.agent.d.ts.map +1 -1
  204. package/dist/components/header-settings/header-settings.d.ts +13 -1
  205. package/dist/components/header-settings/header-settings.d.ts.map +1 -1
  206. package/dist/components/header-settings/index.js +1 -1
  207. package/dist/components/locale-picker/index.js +1 -1
  208. package/dist/components/locale-picker/locale-picker.agent.d.ts.map +1 -1
  209. package/dist/components/locale-picker/locale-picker.d.ts +9 -0
  210. package/dist/components/locale-picker/locale-picker.d.ts.map +1 -1
  211. package/dist/components/map-view/index.js +1 -1
  212. package/dist/components/map-view/map-view.agent.d.ts.map +1 -1
  213. package/dist/components/map-view/map-view.d.ts +22 -0
  214. package/dist/components/map-view/map-view.d.ts.map +1 -1
  215. package/dist/components/notes-panel/index.js +1 -1
  216. package/dist/components/number-input/index.js +1 -1
  217. package/dist/components/number-input/number-input.d.ts +2 -1
  218. package/dist/components/number-input/number-input.d.ts.map +1 -1
  219. package/dist/components/optical-prescription/index.js +1 -1
  220. package/dist/components/patient-details/index.js +1 -1
  221. package/dist/components/patient-table/index.js +1 -1
  222. package/dist/components/payment-form/index.d.ts +1 -1
  223. package/dist/components/payment-form/index.d.ts.map +1 -1
  224. package/dist/components/payment-form/index.js +1 -1
  225. package/dist/components/payment-form/payment-form.agent.d.ts.map +1 -1
  226. package/dist/components/payment-form/payment-form.d.ts +32 -1
  227. package/dist/components/payment-form/payment-form.d.ts.map +1 -1
  228. package/dist/components/pdf-viewer/index.js +1 -1
  229. package/dist/components/pdf-viewer/pdf-viewer.agent.d.ts.map +1 -1
  230. package/dist/components/pdf-viewer/pdf-viewer.d.ts +13 -0
  231. package/dist/components/pdf-viewer/pdf-viewer.d.ts.map +1 -1
  232. package/dist/components/practice-results/index.js +1 -1
  233. package/dist/components/pregnancy-dating/index.d.ts +1 -1
  234. package/dist/components/pregnancy-dating/index.d.ts.map +1 -1
  235. package/dist/components/pregnancy-dating/index.js +1 -1
  236. package/dist/components/pregnancy-dating/pregnancy-dating.agent.d.ts +4 -0
  237. package/dist/components/pregnancy-dating/pregnancy-dating.agent.d.ts.map +1 -0
  238. package/dist/components/pregnancy-dating/pregnancy-dating.d.ts +65 -1
  239. package/dist/components/pregnancy-dating/pregnancy-dating.d.ts.map +1 -1
  240. package/dist/components/pregnancy-weight-gain/index.d.ts +2 -1
  241. package/dist/components/pregnancy-weight-gain/index.d.ts.map +1 -1
  242. package/dist/components/pregnancy-weight-gain/index.js +6 -5
  243. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.agent.d.ts +4 -0
  244. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.agent.d.ts.map +1 -0
  245. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.d.ts +35 -0
  246. package/dist/components/pregnancy-weight-gain/pregnancy-weight-gain.d.ts.map +1 -1
  247. package/dist/components/progress/index.js +1 -1
  248. package/dist/components/progress/progress.agent.d.ts.map +1 -1
  249. package/dist/components/progress/progress.d.ts +13 -0
  250. package/dist/components/progress/progress.d.ts.map +1 -1
  251. package/dist/components/radiograph-panel/index.js +1 -1
  252. package/dist/components/rich-text-editor/index.js +1 -1
  253. package/dist/components/session-countdown/index.js +1 -1
  254. package/dist/components/sign-document/index.js +1 -1
  255. package/dist/components/slot-grid/index.d.ts +2 -1
  256. package/dist/components/slot-grid/index.d.ts.map +1 -1
  257. package/dist/components/slot-grid/index.js +5 -4
  258. package/dist/components/slot-grid/slot-grid.agent.d.ts +4 -0
  259. package/dist/components/slot-grid/slot-grid.agent.d.ts.map +1 -0
  260. package/dist/components/slot-grid/slot-grid.d.ts +34 -0
  261. package/dist/components/slot-grid/slot-grid.d.ts.map +1 -1
  262. package/dist/components/sparkline/index.js +1 -1
  263. package/dist/components/sparkline/sparkline.agent.d.ts.map +1 -1
  264. package/dist/components/sparkline/sparkline.d.ts +10 -0
  265. package/dist/components/sparkline/sparkline.d.ts.map +1 -1
  266. package/dist/components/tab-bar/index.js +1 -1
  267. package/dist/components/tab-bar/tab-bar.d.ts +13 -0
  268. package/dist/components/tab-bar/tab-bar.d.ts.map +1 -1
  269. package/dist/components/task-card/index.js +1 -1
  270. package/dist/components/task-card/task-card.agent.d.ts.map +1 -1
  271. package/dist/components/unit-converter/index.js +1 -1
  272. package/dist/components/warning-stack/index.js +1 -1
  273. package/dist/components/warning-stack/warning-stack.d.ts.map +1 -1
  274. package/dist/index.js +630 -627
  275. package/dist/patterns/alia-assistant/index.js +1 -1
  276. package/dist/patterns/anamnesis/anamnesis-compare-panel.d.ts.map +1 -1
  277. package/dist/patterns/anamnesis/anamnesis-compile.d.ts.map +1 -1
  278. package/dist/patterns/anamnesis/anamnesis-derive.d.ts +27 -8
  279. package/dist/patterns/anamnesis/anamnesis-derive.d.ts.map +1 -1
  280. package/dist/patterns/anamnesis/anamnesis-evolution-grid.d.ts.map +1 -1
  281. package/dist/patterns/anamnesis/anamnesis-field.d.ts.map +1 -1
  282. package/dist/patterns/anamnesis/anamnesis-format.d.ts +11 -3
  283. package/dist/patterns/anamnesis/anamnesis-format.d.ts.map +1 -1
  284. package/dist/patterns/anamnesis/anamnesis-highlight.d.ts +6 -0
  285. package/dist/patterns/anamnesis/anamnesis-highlight.d.ts.map +1 -0
  286. package/dist/patterns/anamnesis/anamnesis-intake.d.ts.map +1 -1
  287. package/dist/patterns/anamnesis/anamnesis-matrix.d.ts.map +1 -1
  288. package/dist/patterns/anamnesis/anamnesis-questionnaire.d.ts +23 -9
  289. package/dist/patterns/anamnesis/anamnesis-questionnaire.d.ts.map +1 -1
  290. package/dist/patterns/anamnesis/anamnesis-readonly.d.ts.map +1 -1
  291. package/dist/patterns/anamnesis/anamnesis-target-strip.d.ts.map +1 -1
  292. package/dist/patterns/anamnesis/anamnesis-types.d.ts +7 -0
  293. package/dist/patterns/anamnesis/anamnesis-types.d.ts.map +1 -1
  294. package/dist/patterns/anamnesis/anamnesis-visit-note.d.ts.map +1 -1
  295. package/dist/patterns/anamnesis/anamnesis.d.ts +16 -7
  296. package/dist/patterns/anamnesis/anamnesis.d.ts.map +1 -1
  297. package/dist/patterns/anamnesis/index.d.ts +3 -2
  298. package/dist/patterns/anamnesis/index.d.ts.map +1 -1
  299. package/dist/patterns/anamnesis/index.js +7 -6
  300. package/dist/patterns/marketplace-app-shell/index.js +1 -1
  301. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts +6 -0
  302. package/dist/patterns/marketplace-app-shell/marketplace-app-shell.d.ts.map +1 -1
  303. package/dist/tokens.css +1 -1
  304. package/package.json +1 -1
  305. package/dist/_chunks/agenda-card.agent-mTCrkKSZ.js +0 -27
  306. package/dist/_chunks/agenda-card.agent-mTCrkKSZ.js.map +0 -1
  307. package/dist/_chunks/anamnesis-i18n-CfC0qYzy.js.map +0 -1
  308. package/dist/_chunks/booking-DjNbd7C1.js.map +0 -1
  309. package/dist/_chunks/calculator-dialog-DuXMQSdm.js +0 -40
  310. package/dist/_chunks/chat-container-HlFnoEIl.js.map +0 -1
  311. package/dist/_chunks/cycle-calculator-BwqYVPB4.js +0 -252
  312. package/dist/_chunks/cycle-calculator-BwqYVPB4.js.map +0 -1
  313. package/dist/_chunks/date-picker-variants-eL6HjWvw.js +0 -3363
  314. package/dist/_chunks/date-picker-variants-eL6HjWvw.js.map +0 -1
  315. package/dist/_chunks/due-date-calculator-CwfsFd3T.js +0 -256
  316. package/dist/_chunks/due-date-calculator-CwfsFd3T.js.map +0 -1
  317. package/dist/_chunks/editor-overlay-DE3esyio.js.map +0 -1
  318. package/dist/_chunks/fetal-weight-ePlLjJPc.js +0 -122
  319. package/dist/_chunks/fetal-weight-ePlLjJPc.js.map +0 -1
  320. package/dist/_chunks/gestational-age-calculator-DdgbH69Z.js +0 -311
  321. package/dist/_chunks/gestational-age-calculator-DdgbH69Z.js.map +0 -1
  322. package/dist/_chunks/hcg-doubling-BBqD2wI2.js +0 -170
  323. package/dist/_chunks/hcg-doubling-BBqD2wI2.js.map +0 -1
  324. package/dist/_chunks/header-settings--pjYOe6g.js +0 -284
  325. package/dist/_chunks/header-settings--pjYOe6g.js.map +0 -1
  326. package/dist/_chunks/isSameDay-DUEiAT0G.js +0 -39
  327. package/dist/_chunks/isSameDay-DUEiAT0G.js.map +0 -1
  328. package/dist/_chunks/isSameWeek-CK4HS9lH.js +0 -14
  329. package/dist/_chunks/locale-picker-BfBUdT1m.js.map +0 -1
  330. package/dist/_chunks/map-view-CsaHfoo6.js +0 -378
  331. package/dist/_chunks/map-view-CsaHfoo6.js.map +0 -1
  332. package/dist/_chunks/marketplace-app-shell-DwcFMxzp.js.map +0 -1
  333. package/dist/_chunks/number-input-DrozbZAU.js.map +0 -1
  334. package/dist/_chunks/payment-form-h-BZ8onk.js.map +0 -1
  335. package/dist/_chunks/pdf-viewer-Ddx-T053.js.map +0 -1
  336. package/dist/_chunks/pregnancy-dating-DzYTlBkT.js +0 -421
  337. package/dist/_chunks/pregnancy-dating-DzYTlBkT.js.map +0 -1
  338. package/dist/_chunks/pregnancy-weight-gain-O6J0sUIi.js +0 -322
  339. package/dist/_chunks/pregnancy-weight-gain-O6J0sUIi.js.map +0 -1
  340. package/dist/_chunks/progress-DA413-zn.js +0 -299
  341. package/dist/_chunks/progress-DA413-zn.js.map +0 -1
  342. package/dist/_chunks/slot-grid-CQSULZjd.js +0 -502
  343. package/dist/_chunks/slot-grid-CQSULZjd.js.map +0 -1
  344. package/dist/_chunks/sparkline-BTY4B5tv.js.map +0 -1
  345. package/dist/_chunks/subDays-BcNi04uf.js +0 -8
  346. package/dist/_chunks/tab-bar-Axhk6xzx.js.map +0 -1
  347. package/dist/_chunks/task-card.agent-Bt14CzUd.js +0 -25
  348. package/dist/_chunks/task-card.agent-Bt14CzUd.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-form-Ds1I9KqB.js","sources":["../../src/tokens/themes/bridges/stripe-appearance.ts","../../src/components/payment-form/payment-form.agent.ts","../../src/components/payment-form/payment-form.tsx"],"sourcesContent":["import type { Appearance } from '@stripe/stripe-js';\n\n/**\n * Reads the current design-system tokens from a theme-root element and maps\n * them to Stripe Elements' Appearance API. `root` defaults to\n * `document.documentElement` but consumers can pass a scoped theme wrapper\n * (e.g. a modal with its own `.theme-accessible` override) so that Stripe\n * iframes pick up the right token set.\n *\n * Tokens referenced: --primary, --background, --foreground, --muted,\n * --muted-foreground, --border, --destructive, --radius-md, --font-sans,\n * --font-size-base, --spacing-sm, --animation-duration, --focus-ring-width,\n * --ring.\n *\n * No hex / rgb / hsl literals — every value flows from the token layer.\n */\n\nfunction isBrowser(): boolean {\n return typeof document !== 'undefined' && typeof window !== 'undefined';\n}\n\nexport function getStripeAppearance(root?: HTMLElement): Appearance {\n if (!isBrowser()) {\n return { theme: 'stripe' };\n }\n\n const target = root ?? document.documentElement;\n const styles = getComputedStyle(target);\n const read = (token: string) => styles.getPropertyValue(token).trim();\n const isDark = target.classList.contains('theme-dark');\n\n return {\n theme: isDark ? 'night' : 'stripe',\n variables: {\n colorPrimary: read('--primary'),\n colorBackground: read('--background'),\n colorText: read('--foreground'),\n colorDanger: read('--destructive'),\n colorTextSecondary: read('--muted-foreground'),\n colorTextPlaceholder: read('--muted-foreground'),\n borderRadius: read('--radius-md'),\n fontFamily: read('--font-sans'),\n fontSizeBase: read('--font-size-base'),\n // Stripe multiplies spacingUnit throughout every Element; --spacing-sm\n // gives readable density. Keep this in sync with the JSDoc above.\n spacingUnit: read('--spacing-sm'),\n },\n rules: {\n '.Input': {\n backgroundColor: read('--background'),\n border: `1px solid ${read('--border')}`,\n color: read('--foreground'),\n padding: read('--spacing-sm'),\n transition: `border-color ${read('--animation-duration')} ease-out`,\n },\n '.Input:focus': {\n borderColor: read('--primary'),\n boxShadow: `0 0 0 ${read('--focus-ring-width')} ${read('--ring')}`,\n outline: 'none',\n },\n '.Input--invalid': {\n borderColor: read('--destructive'),\n color: read('--foreground'),\n },\n '.Label': {\n color: read('--foreground'),\n fontWeight: read('--font-weight-medium'),\n fontSize: read('--font-size-sm'),\n },\n '.Error': {\n color: read('--destructive'),\n fontSize: read('--font-size-sm'),\n },\n '.Tab': {\n border: `1px solid ${read('--border')}`,\n backgroundColor: read('--background'),\n color: read('--foreground'),\n },\n '.Tab--selected': {\n borderColor: read('--primary'),\n backgroundColor: read('--background'),\n color: read('--primary'),\n },\n // Accordion method rows (the `accordion` layout): keep Stripe's native\n // per-method card structure, restyled with our tokens — our border +\n // radius, our background, `--primary` on the selected row, no extra shadow.\n '.AccordionItem': {\n backgroundColor: read('--background'),\n border: `1px solid ${read('--border')}`,\n borderRadius: read('--radius-md'),\n boxShadow: 'none',\n },\n '.AccordionItem--selected': {\n borderColor: read('--primary'),\n backgroundColor: read('--background'),\n },\n // Stripe's in-method notice blocks (e.g. PayPal's \"you'll be redirected\")\n // otherwise render in their own bordered box — a card nested inside the\n // selected method card. Flatten to inline icon + text, no inner box.\n '.Block': {\n border: 'none',\n borderRadius: '0',\n boxShadow: 'none',\n backgroundColor: 'transparent',\n },\n },\n };\n}\n\n/**\n * Calls `onChange(getStripeAppearance(root))` whenever the theme root's\n * class list mutates (theme switch) or the user toggles\n * `prefers-color-scheme` / `prefers-reduced-motion`. Returns an\n * unsubscribe function.\n */\nexport function subscribeStripeAppearance(\n onChange: (next: Appearance) => void,\n root?: HTMLElement,\n): () => void {\n if (!isBrowser()) return () => undefined;\n\n const target = root ?? document.documentElement;\n const emit = () => onChange(getStripeAppearance(root));\n\n const observer = new MutationObserver(emit);\n observer.observe(target, {\n attributes: true,\n attributeFilter: ['class', 'dir', 'lang'],\n });\n\n const schemeMql = window.matchMedia('(prefers-color-scheme: dark)');\n const motionMql = window.matchMedia('(prefers-reduced-motion: reduce)');\n schemeMql.addEventListener('change', emit);\n motionMql.addEventListener('change', emit);\n\n return () => {\n observer.disconnect();\n schemeMql.removeEventListener('change', emit);\n motionMql.removeEventListener('change', emit);\n };\n}\n","import type { AgentAdapter } from '../../agent/types';\nimport type { PaymentFormHandle } from './payment-form';\n\nexport const paymentFormAgent: AgentAdapter<PaymentFormHandle> = {\n id: 'payment-form',\n capabilities: ['submit'],\n // The kit's only destructive + openWorld action that moves real money,\n // so it is also the one that most needs to be verifiable. `submit`\n // resolves once the charge attempt has settled; these four slots are\n // how an agent then tells success from decline from never-fired, and\n // how it recovers the receipt.\n //\n // A9: the PaymentIntent id and the i18n error KEY only. Never card\n // fields (they live in Stripe's cross-origin iframes and never reach\n // this origin), never the translated Stripe message, never\n // `clientSecret`.\n state: {\n status: {\n type: \"'idle' | 'processing' | 'succeeded' | 'failed'\",\n descriptionKey: 'ui.agent.paymentForm.state.status',\n description:\n 'Lifecycle of the current payment attempt. `succeeded` is only reached once Stripe confirmed the PaymentIntent; `failed` covers validation, decline and processor errors alike. Still `idle` after `submit` means the attempt never fired — Stripe had not mounted.',\n read: (handle) => handle.getStatus(),\n },\n complete: {\n type: 'boolean',\n descriptionKey: 'ui.agent.paymentForm.state.complete',\n description:\n 'True when Stripe reports the payment fields as complete. Read this before `submit` — outside preview mode the submit control is disabled while it is false, so the call will not be accepted.',\n read: (handle) => handle.isComplete(),\n },\n errorKey: {\n type: 'string | null',\n descriptionKey: 'ui.agent.paymentForm.state.errorKey',\n description:\n 'i18n key of the current error (e.g. `payment.error.cardDeclined`), or null. The key is the structural datum — the translated message is free text and is never exposed.',\n read: (handle) => handle.getErrorKey(),\n },\n paymentIntentId: {\n type: 'string | null',\n descriptionKey: 'ui.agent.paymentForm.state.paymentIntentId',\n description:\n 'Opaque Stripe PaymentIntent id once a charge succeeded, else null. The receipt — the attribution handle for the money that moved. Never the client secret.',\n read: (handle) => handle.getPaymentIntentId(),\n },\n },\n actions: {\n submit: {\n safety: 'destructive',\n // Charges an external payment processor — irreversible, hits a system\n // outside this UI.\n openWorld: true,\n returns: 'Promise<void>',\n errors: [\n 'Validation failed (incomplete or invalid card details) — `status` is \"failed\", `errorKey` names which.',\n 'Payment was declined by the processor — `status` is \"failed\", `errorKey` is `payment.error.cardDeclined`.',\n 'Network or processor error during the charge — `status` is \"failed\".',\n 'Stripe had not mounted, so nothing was attempted — `status` is still \"idle\".',\n ],\n descriptionKey: 'ui.agent.paymentForm.actions.submit',\n description:\n 'Submit the payment. Charges the configured payment method — irreversible. Resolves once the attempt has settled; the outcome is never in the resolved value, so read `status`, then `errorKey` on failure or `paymentIntentId` on success.',\n invoke: (handle) => handle.submit(),\n },\n reset: {\n safety: 'destructive',\n idempotent: true,\n descriptionKey: 'ui.agent.paymentForm.actions.reset',\n description:\n 'Reset the form to its initial state. Loses any in-progress input, and discards the previous attempt — `status` returns to \"idle\" and `errorKey` / `paymentIntentId` to null.',\n invoke: (handle) => {\n handle.reset();\n },\n },\n },\n domHooks: {\n root: { attr: 'data-component', value: 'payment-form' },\n instanceId: {\n attr: 'data-component-id',\n sourceProp: 'id',\n description: 'Sourced from the id prop.',\n },\n },\n};\n","/* ------------------------------------------------------------------ */\n/* PaymentForm — Stripe Elements wrapper (PCI DSS SAQ-A). */\n/* */\n/* - Library: `@stripe/react-stripe-js` + `@stripe/stripe-js` (see */\n/* `src/docs/08-third-party.mdx §Payments`). Card number, expiry, */\n/* CVC, and postal code all live inside Stripe-hosted iframes on */\n/* `js.stripe.com` — raw PAN never touches our origin, keeping us */\n/* inside PCI DSS SAQ-A scope. */\n/* */\n/* - Theming: the `stripe-appearance` bridge snapshots our tokens into */\n/* Stripe's Appearance API (`variables`, `rules`). A */\n/* `MutationObserver` on `<html class>` re-runs the snapshot when */\n/* the user flips theme so the embedded iframes repaint. */\n/* */\n/* - Security invariants enforced in this file: */\n/* 1. No `<input type=\"tel\" name=\"card\">` anywhere. */\n/* 2. Error strings are sanitised via `stripCardLikeDigits` before */\n/* forwarding to `onError` (replaces any `\\b\\d{4,}\\b` with */\n/* `****`). */\n/* 3. Element change events are never logged; any dev-only logging */\n/* is gated behind `import.meta.env.DEV` — never runs in prod. */\n/* */\n/* TODO: */\n/* - Stripe's `direction: 'rtl'` is not part of the current */\n/* `Appearance` TypeScript type; we rely on CSS mirroring of our */\n/* chrome via logical properties and let Stripe lay out the iframe */\n/* ltr for now. Revisit when @stripe/stripe-js publishes the type. */\n/* - No `<CardNumberElement>` / split-fields story — `PaymentElement` */\n/* handles tabs + card-only modes via its own `layout` option. */\n/* ------------------------------------------------------------------ */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n type FormEvent,\n type ReactElement,\n} from 'react';\nimport { cva } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Spinner } from '../spinner';\nimport { Alert } from '../alert';\nimport {\n loadStripe,\n type Stripe,\n type Appearance,\n type StripeElementLocale,\n type StripeElementsOptions,\n} from '@stripe/stripe-js';\nimport {\n Elements,\n PaymentElement,\n AddressElement,\n useElements,\n useStripe,\n} from '@stripe/react-stripe-js';\n\nimport {\n getStripeAppearance,\n subscribeStripeAppearance,\n} from '../../tokens/themes/bridges/stripe-appearance';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { paymentFormAgent } from './payment-form.agent';\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport type PaymentCurrency = string; // ISO-4217\n\nexport interface PaymentFormProps {\n /** Opaque instance id — emitted as `data-component-id` for the agent registry. */\n id?: string;\n /**\n * Client secret from your server, created via the PaymentIntents API.\n *\n * Omit to use **deferred-intent mode** — the Payment Element renders from\n * just the publishable key (no `clientSecret`, no backend round-trip up\n * front). In deferred mode supply `onCreatePaymentIntent` to actually\n * confirm: your server mints + returns the client secret at submit time.\n */\n clientSecret?: string;\n /**\n * Deferred-intent setup: `'payment'` collects a charge, `'setup'` saves a\n * method for later. Ignored when `clientSecret` is supplied (the secret's\n * own intent type wins). Defaults to `'payment'`.\n */\n mode?: 'payment' | 'setup';\n /**\n * Deferred-confirm callback. Called at submit time (after client-side\n * field validation succeeds) so your server can mint a PaymentIntent and\n * return its `client_secret`. The returned secret is used ONLY to confirm\n * and is never logged or sent to any third-party origin. When omitted in\n * deferred mode the form runs in PREVIEW: fields render + validate, but no\n * charge is attempted.\n */\n onCreatePaymentIntent?: () => Promise<string>;\n /** Stripe publishable key (`pk_test_…` / `pk_live_…`). */\n publishableKey: string;\n /** ISO-4217 currency code (e.g. 'EUR', 'USD', 'JPY'). */\n currency: PaymentCurrency;\n /** Amount in the currency's smallest unit (cents for EUR/USD, yen for JPY). */\n amount: number;\n /** Called with the PaymentIntent id on successful confirmation. */\n onSuccess?: (paymentIntentId: string) => void;\n /** Called with a sanitised error (no PAN digits, no Stripe English strings). */\n onError?: (error: { code: string; translatedMessage: string }) => void;\n /** Show the billing-address collector below the payment fields. */\n billingAddress?: boolean;\n /** Locale override — defaults to the active i18next locale. */\n locale?: string;\n /** Accessible label for the form. */\n ariaLabel?: string;\n /** URL Stripe redirects to when a payment method requires it. */\n returnUrl?: string;\n /** Pre-injected Stripe instance — used by tests + stories to bypass the network. */\n stripePromise?: Promise<Stripe | null> | null;\n /**\n * Payment Element layout. `tabs` (default) renders methods as a tile row —\n * best in wide containers. `accordion` stacks them as full-width rows — use\n * it in narrow columns (< ~400px) where Stripe's tab row clips a partial tile.\n */\n layout?: 'tabs' | 'accordion';\n className?: string;\n}\n\n/**\n * Lifecycle of one payment attempt, as the agent surface reports it.\n * `succeeded` is only reached once Stripe has confirmed the\n * PaymentIntent; `failed` covers validation, decline, and processor /\n * network errors alike (read `getErrorKey()` for which).\n */\nexport type PaymentFormStatus = 'idle' | 'processing' | 'succeeded' | 'failed';\n\nexport interface PaymentFormHandle {\n /**\n * Programmatically submit the form (same flow as the Pay button).\n * Resolves only once the charge attempt has settled — read\n * `getStatus()` / `getErrorKey()` afterwards for the outcome.\n */\n submit: () => Promise<void>;\n /** Reset the form to its initial state. */\n reset: () => void;\n /* ---- read-back ------------------------------------------------- */\n /** Lifecycle of the current attempt. */\n getStatus: () => PaymentFormStatus;\n /**\n * True when Stripe reports the payment fields as complete. `submit`\n * is refused (the button is disabled) while this is false outside\n * preview mode.\n */\n isComplete: () => boolean;\n /**\n * i18n KEY of the current error (e.g. `payment.error.cardDeclined`),\n * or null. The translated message is deliberately not exposed — the\n * key is the structural datum, the message is free text.\n */\n getErrorKey: () => string | null;\n /**\n * Opaque Stripe PaymentIntent id once a charge succeeded, else null.\n * The receipt handle — the same id handed to `onSuccess`. Never the\n * client secret.\n */\n getPaymentIntentId: () => string | null;\n}\n\n/**\n * The read-back channel from the inner form (inside Stripe's\n * `<Elements>` provider) out to the wrapper that owns the agent handle.\n * The existing CustomEvent bridge is one-way (outer → inner), and the\n * outer cannot read through the provider, so the inner writes its\n * settled state into this ref during render and registers its submit\n * function so the wrapper's `submit()` can actually await the charge.\n */\ninterface PaymentFormAgentBridge {\n status: PaymentFormStatus;\n complete: boolean;\n errorKey: string | null;\n paymentIntentId: string | null;\n /** Set by the inner form; absent until Stripe's provider has mounted. */\n submit?: () => Promise<void>;\n}\n\n/* ------------------------------------------------------------------ */\n/* Currency helpers */\n/* ------------------------------------------------------------------ */\n\n/**\n * Currencies that Stripe bills in their base unit (no decimals). Source:\n * https://stripe.com/docs/currencies#zero-decimal — list pinned per\n * 08-third-party.mdx.\n */\nconst ZERO_DECIMAL_CURRENCIES = new Set<string>([\n 'BIF',\n 'CLP',\n 'DJF',\n 'GNF',\n 'IDR',\n 'JPY',\n 'KMF',\n 'KRW',\n 'MGA',\n 'PYG',\n 'RWF',\n 'UGX',\n 'VND',\n 'VUV',\n 'XAF',\n 'XOF',\n 'XPF',\n]);\n\nexport function formatPaymentAmount(\n amount: number,\n currency: string,\n locale: string,\n): string {\n const iso = currency.toUpperCase();\n const major = ZERO_DECIMAL_CURRENCIES.has(iso) ? amount : amount / 100;\n try {\n return new Intl.NumberFormat(locale, {\n style: 'currency',\n currency: iso,\n }).format(major);\n } catch {\n // Invalid locale/currency pair — fall back to a safe format so we\n // never leak raw amount integers into the UI.\n return new Intl.NumberFormat('en', {\n style: 'currency',\n currency: iso,\n }).format(major);\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Return URL validation */\n/* ------------------------------------------------------------------ */\n\n/**\n * Resolve `returnUrl` against the current origin. Accepts:\n * - absolute URLs on the same origin as `window.location`\n * - relative paths (resolved against the current origin)\n * Rejects (returns `null`):\n * - cross-origin URLs — would leak `payment_intent_client_secret`\n * - `javascript:` / `data:` / `file:` / `blob:` schemes\n * - SSR contexts (no `window`) — the submit path requires a browser\n * anyway, so rejecting here is the safer default.\n * See security-hardening.mdx.\n */\nexport function validateReturnUrl(\n returnUrl: string | undefined,\n): string | null {\n if (returnUrl === undefined) return null;\n const raw = returnUrl.trim();\n if (raw === '') return null;\n if (typeof window === 'undefined') return null;\n try {\n const resolved = new URL(raw, window.location.href);\n const allowedSchemes = new Set(['http:', 'https:']);\n if (!allowedSchemes.has(resolved.protocol)) return null;\n if (resolved.origin !== window.location.origin) return null;\n return resolved.toString();\n } catch {\n return null;\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* Error sanitisation */\n/* ------------------------------------------------------------------ */\n\n/**\n * Replace any run of 4+ consecutive digits with `****`. Called before any\n * error text leaves the wrapper. Defensive: even though Stripe's error\n * strings don't normally contain PANs, a future SDK change could, and we\n * want a hard guarantee that `console` / analytics / Sentry breadcrumbs\n * stay clear of anything that looks like card data.\n */\nexport function stripCardLikeDigits(message: string): string {\n if (!message) return message;\n // Deliberately no word boundaries: a PAN run embedded between word\n // characters (e.g. \"CARD4242424242424242DECLINED\") must still be masked.\n return message.replace(/\\d{4,}/g, '****');\n}\n\n/**\n * Map a Stripe error code (e.g. `card_declined`, `incorrect_number`) to a\n * translation key under `payment.error.*`. Unknown codes fall through to\n * `payment.error.generic`.\n */\nexport function stripeErrorCodeToI18nKey(code: string | undefined): string {\n switch (code) {\n case 'incorrect_number':\n case 'invalid_number':\n return 'payment.error.cardNumber';\n case 'invalid_expiry_month':\n case 'invalid_expiry_year':\n case 'expired_card':\n return 'payment.error.expiry';\n case 'invalid_cvc':\n case 'incorrect_cvc':\n return 'payment.error.cvc';\n case 'incorrect_zip':\n case 'invalid_zip':\n return 'payment.error.postalCode';\n case 'card_declined':\n case 'do_not_honor':\n case 'generic_decline':\n return 'payment.error.declined';\n case 'network_error':\n case 'api_connection_error':\n return 'payment.error.network';\n default:\n return 'payment.error.generic';\n }\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst formVariants = cva(\n [\n 'ds:payment-form-alfadocs ds:flex ds:flex-col',\n 'ds:gap-[var(--spacing-md)]',\n // Transparent, padding-less container — the consuming surface (a Card, the\n // check-in step, a checkout column) owns the card chrome + padding, so the\n // Stripe method boxes never read as cards nested inside another card.\n 'ds:text-[var(--foreground)]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n ].join(' '),\n);\n\nconst fieldLabelVariants = cva(\n ['ds:flex ds:flex-col ds:gap-[var(--spacing-xs)]'].join(' '),\n);\n\nconst labelTextVariants = cva(\n ['type-label', 'ds:text-[var(--foreground)]'].join(' '),\n);\n\nconst amountSummaryVariants = cva(\n [\n 'ds:flex ds:items-baseline ds:justify-between',\n 'ds:gap-[var(--spacing-sm)]',\n 'ds:ps-[var(--spacing-sm)] ds:pe-[var(--spacing-sm)]',\n 'ds:pt-[var(--spacing-xs)] ds:pb-[var(--spacing-xs)]',\n 'ds:bg-[var(--muted)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:text-[var(--foreground)]',\n ].join(' '),\n);\n\nconst submitButtonVariants = cva(\n [\n 'ds:inline-flex ds:items-center ds:justify-center ds:gap-[var(--spacing-xs)]',\n 'ds:[min-block-size:var(--min-target-size)]',\n 'ds:[min-inline-size:var(--min-target-size)]',\n 'ds:ps-[var(--spacing-md)] ds:pe-[var(--spacing-md)]',\n 'ds:rounded-[var(--radius-sm)]',\n 'ds:bg-[var(--primary)] ds:text-[var(--primary-foreground)]',\n 'ds:text-[length:var(--font-size-base)] ds:font-medium',\n 'ds:transition-colors ds:duration-[var(--animation-duration)] ds:motion-reduce:transition-none',\n 'ds:hover:bg-[var(--primary-hover)]',\n 'ds:focus-visible:outline-[length:var(--focus-ring-width)]',\n 'ds:focus-visible:outline-solid',\n 'ds:focus-visible:outline-[var(--ring)]',\n 'ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)]',\n 'ds:forced-colors:focus-visible:outline-[CanvasText]',\n 'ds:aria-disabled:opacity-[var(--opacity-50)] ds:aria-disabled:cursor-not-allowed',\n 'ds:aria-busy:cursor-wait',\n ].join(' '),\n);\n\n/* ------------------------------------------------------------------ */\n/* Inner form — lives inside the <Elements> provider */\n/* ------------------------------------------------------------------ */\n\ninterface InnerPaymentFormProps {\n amount: number;\n currency: string;\n locale: string;\n billingAddress: boolean;\n returnUrl: string | undefined;\n /** Present in immediate mode; `undefined` in deferred mode. */\n clientSecret: string | undefined;\n /** Deferred-confirm callback; `undefined` → preview (validate-only). */\n onCreatePaymentIntent: PaymentFormProps['onCreatePaymentIntent'];\n onSuccess: PaymentFormProps['onSuccess'];\n onError: PaymentFormProps['onError'];\n layout: NonNullable<PaymentFormProps['layout']>;\n /** Return channel to the wrapper's agent handle. */\n agentBridge: { current: PaymentFormAgentBridge };\n}\n\nfunction InnerPaymentForm(props: InnerPaymentFormProps): ReactElement {\n const {\n amount,\n currency,\n locale,\n billingAddress,\n returnUrl,\n clientSecret,\n onCreatePaymentIntent,\n onSuccess,\n onError,\n layout,\n agentBridge,\n } = props;\n\n const { t } = useTranslation();\n const stripe = useStripe();\n const elements = useElements();\n\n const rawId = useId();\n const idSafe = useMemo(\n () => `pay-${rawId.replace(/[^a-zA-Z0-9-_]/g, '')}`,\n [rawId],\n );\n const paymentFieldId = `${idSafe}-payment`;\n const addressFieldId = `${idSafe}-address`;\n const errorId = `${idSafe}-error`;\n\n const [processing, setProcessing] = useState(false);\n const [elementComplete, setElementComplete] = useState(false);\n const [errorKey, setErrorKey] = useState<string | null>(null);\n const [errorMessage, setErrorMessage] = useState<string>('');\n\n /* ---- agent read-back channel ---------------------------------- */\n // Written SYNCHRONOUSLY at every transition, never mirrored during\n // render: `submit()` resolves the moment the charge settles, which is\n // before React has re-rendered, so a render-time mirror would still\n // report `processing` to the caller that just awaited it. `status` and\n // `paymentIntentId` live only here — nothing renders them.\n const setAgentStatus = useCallback(\n (next: PaymentFormStatus) => {\n agentBridge.current.status = next;\n },\n [agentBridge],\n );\n const applyErrorKey = useCallback(\n (key: string | null) => {\n agentBridge.current.errorKey = key;\n setErrorKey(key);\n },\n [agentBridge],\n );\n const applyComplete = useCallback(\n (complete: boolean) => {\n agentBridge.current.complete = complete;\n setElementComplete(complete);\n },\n [agentBridge],\n );\n\n const onSuccessRef = useRef(onSuccess);\n const onErrorRef = useRef(onError);\n useEffect(() => {\n onSuccessRef.current = onSuccess;\n onErrorRef.current = onError;\n }, [onSuccess, onError]);\n\n const handleSubmit = useCallback(\n async (event?: FormEvent<HTMLFormElement>): Promise<void> => {\n if (event) event.preventDefault();\n if (!stripe || !elements) return;\n if (processing) return;\n\n setProcessing(true);\n setAgentStatus('processing');\n // A new attempt supersedes the previous receipt.\n agentBridge.current.paymentIntentId = null;\n applyErrorKey(null);\n setErrorMessage('');\n\n // The single sanitise → map → setError → onError pipeline. Every error\n // surfaced by either path (immediate or deferred) flows through here so\n // raw Stripe English / PAN-like digit runs can never reach the UI or\n // `onError`. `rawMessage` is sanitised; the i18n key is mapped from\n // the Stripe error code.\n const reportError = (\n code: string,\n rawMessage: string | undefined,\n ): void => {\n const key = stripeErrorCodeToI18nKey(code);\n // CRITICAL: sanitise before storing OR forwarding.\n const safe = stripCardLikeDigits(rawMessage ?? '');\n applyErrorKey(key);\n setErrorMessage(t(key));\n setAgentStatus('failed');\n onErrorRef.current?.({\n code,\n translatedMessage: safe || t(key),\n });\n };\n\n // Validate returnUrl at the boundary so even a careless consumer\n // cannot leak payment_intent_client_secret to a third-party origin.\n const safeReturnUrl = validateReturnUrl(returnUrl);\n if (returnUrl !== undefined && safeReturnUrl === null) {\n applyErrorKey('payment.error.invalidReturnUrl');\n setErrorMessage(t('payment.error.invalidReturnUrl'));\n setAgentStatus('failed');\n onErrorRef.current?.({\n code: 'invalid_return_url',\n translatedMessage: t('payment.error.invalidReturnUrl'),\n });\n setProcessing(false);\n return;\n }\n\n const confirmParams = safeReturnUrl ? { return_url: safeReturnUrl } : {};\n\n try {\n if (clientSecret !== undefined) {\n // ----- Immediate mode: the consumer already minted the secret. ---\n const result = await stripe.confirmPayment({\n elements,\n confirmParams,\n redirect: 'if_required',\n });\n\n if (result.error) {\n reportError(result.error.code ?? 'generic', result.error.message);\n return;\n }\n\n // Success path — only the PaymentIntent id leaves the wrapper.\n if (result.paymentIntent) {\n agentBridge.current.paymentIntentId = result.paymentIntent.id;\n setAgentStatus('succeeded');\n onSuccessRef.current?.(result.paymentIntent.id);\n }\n return;\n }\n\n // ----- Deferred-intent mode: no secret up front. -----------------\n // Run client-side field validation first; on failure we run the\n // SAME sanitise/map/report pipeline and stop (no secret minted).\n const { error: submitError } = await elements.submit();\n if (submitError) {\n reportError(submitError.code ?? 'generic', submitError.message);\n return;\n }\n\n // No confirm callback → PREVIEW mode. The field validation above is\n // the end of the flow: no secret is minted, no charge is attempted,\n // and we surface no error — the fields simply validated.\n if (!onCreatePaymentIntent) {\n // Nothing was charged, so the attempt is not a success —\n // fall back to idle rather than leaving `status` on\n // `processing` forever.\n setAgentStatus('idle');\n return;\n }\n\n // Mint the secret on the consumer's server, then confirm with it.\n // The minted secret is used ONLY here and is never logged or sent to\n // a third-party origin.\n const mintedSecret = await onCreatePaymentIntent();\n const result = await stripe.confirmPayment({\n elements,\n clientSecret: mintedSecret,\n confirmParams,\n redirect: 'if_required',\n });\n\n if (result.error) {\n reportError(result.error.code ?? 'generic', result.error.message);\n return;\n }\n\n if (result.paymentIntent) {\n agentBridge.current.paymentIntentId = result.paymentIntent.id;\n setAgentStatus('succeeded');\n onSuccessRef.current?.(result.paymentIntent.id);\n }\n } catch (err: unknown) {\n const raw = err instanceof Error ? err.message : '';\n // Generic, sanitised — covers a thrown onCreatePaymentIntent and any\n // unexpected SDK rejection. Never surface the raw thrown text.\n reportError('unexpected', raw);\n } finally {\n setProcessing(false);\n // Safety net for any path that neither reported an error nor saw\n // a PaymentIntent (e.g. a confirm that handed off to a redirect):\n // leave `status` truthful rather than stuck on `processing`\n // forever. The functional form means a settled `succeeded` /\n // `failed` from this same attempt wins.\n if (agentBridge.current.status === 'processing') {\n setAgentStatus('idle');\n }\n }\n },\n [\n stripe,\n elements,\n processing,\n returnUrl,\n clientSecret,\n onCreatePaymentIntent,\n t,\n agentBridge,\n applyErrorKey,\n setAgentStatus,\n ],\n );\n\n // Imperative submit hook used by DOM-driving callers. Kept for the\n // documented `payment-form:submit` CustomEvent contract; the agent\n // handle uses the awaitable channel below instead.\n useEffect(() => {\n const host = document.getElementById(idSafe);\n if (!host) return;\n const submitter = () => {\n void handleSubmit();\n };\n host.addEventListener('payment-form:submit', submitter);\n return () => host.removeEventListener('payment-form:submit', submitter);\n }, [idSafe, handleSubmit]);\n\n // Register the awaitable submit with the wrapper's agent handle. Only\n // structural values ever cross this bridge: never card fields, never\n // the raw Stripe message, never the client secret.\n useEffect(() => {\n const bridge = agentBridge.current;\n bridge.submit = handleSubmit;\n return () => {\n if (bridge.submit === handleSubmit) bridge.submit = undefined;\n };\n }, [agentBridge, handleSubmit]);\n\n // Mount/unmount only (`agentBridge` is a stable ref object). Once the\n // inner form is gone there are no fields, so nothing is complete. The\n // status and receipt of the last attempt stay as they were.\n useEffect(() => {\n const bridge = agentBridge.current;\n return () => {\n bridge.complete = false;\n };\n }, [agentBridge]);\n\n // Preview mode = deferred (no clientSecret) with no confirm callback. There\n // no charge happens, so we keep the button enabled even before the fields\n // report complete: clicking it triggers `elements.submit()` validation,\n // which is the entire point of the preview.\n const isPreview = clientSecret === undefined && !onCreatePaymentIntent;\n const submitDisabled =\n !stripe || !elements || processing || (!isPreview && !elementComplete);\n\n return (\n <form\n id={idSafe}\n onSubmit={handleSubmit}\n // `reset()` on the handle (and any native reset) discards the\n // previous attempt: without this the error Alert and the agent's\n // `status` / `errorKey` slots would keep reporting a decline that\n // is no longer on screen. `elementComplete` is deliberately left\n // alone — Stripe owns those cross-origin fields and a native form\n // reset does not clear them.\n onReset={() => {\n applyErrorKey(null);\n setErrorMessage('');\n setAgentStatus('idle');\n agentBridge.current.paymentIntentId = null;\n }}\n aria-label={t('payment.ariaLabel')}\n aria-busy={processing || undefined}\n noValidate\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\">\n <div className={amountSummaryVariants()}>\n <span className={labelTextVariants()}>\n {t('payment.amountLabel')}\n </span>\n <span className=\"type-title-card\" data-testid=\"payment-amount\">\n {formatPaymentAmount(amount, currency, locale)}\n </span>\n </div>\n\n <label\n htmlFor={paymentFieldId}\n className={fieldLabelVariants()}\n data-testid=\"payment-field\"\n >\n <span className={labelTextVariants()}>\n {t('payment.fields.card')}\n </span>\n <PaymentElement\n id={paymentFieldId}\n options={{\n // `tabs` = method tiles (Card selected by default); `accordion`\n // = full-width stacked rows for narrow columns where the tab row\n // clips. Stripe owns overflow + tab alignment either way.\n layout:\n layout === 'accordion'\n ? { type: 'accordion', defaultCollapsed: true }\n : { type: 'tabs' },\n }}\n onChange={(ev) => {\n // NOTE: never log `ev` — change events may include hints\n // about field contents. Keep only the boolean completeness.\n applyComplete(ev.complete === true);\n if (ev.complete) {\n applyErrorKey(null);\n setErrorMessage('');\n // The declined attempt is over — the fields are valid\n // again, so the surface is back to idle. A succeeded\n // attempt stays succeeded.\n if (agentBridge.current.status === 'failed') {\n setAgentStatus('idle');\n }\n }\n }}\n />\n </label>\n\n {billingAddress ? (\n <label\n htmlFor={addressFieldId}\n className={fieldLabelVariants()}\n data-testid=\"payment-address\"\n >\n <span className={labelTextVariants()}>\n {t('payment.billingAddress')}\n </span>\n <AddressElement id={addressFieldId} options={{ mode: 'billing' }} />\n </label>\n ) : null}\n\n {errorKey ? (\n <Alert\n id={errorId}\n variant=\"error\"\n live=\"polite\"\n data-testid=\"payment-error\"\n >\n <Alert.Description>{errorMessage}</Alert.Description>\n </Alert>\n ) : null}\n\n <button\n type=\"submit\"\n aria-disabled={submitDisabled || undefined}\n aria-busy={processing || undefined}\n aria-describedby={errorKey ? errorId : undefined}\n className={submitButtonVariants()}\n data-testid=\"payment-submit\"\n >\n {processing ? (\n <>\n <Spinner\n variant=\"pulse\"\n size=\"sm\"\n label={t('payment.processing')}\n />\n <span>{t('payment.processing')}</span>\n </>\n ) : (\n <span>\n {t('payment.submit', {\n amount: formatPaymentAmount(amount, currency, locale),\n })}\n </span>\n )}\n </button>\n </div>\n </form>\n );\n}\n\n/* ------------------------------------------------------------------ */\n/* PaymentForm — outer wrapper */\n/* ------------------------------------------------------------------ */\n\n/**\n * Stripe ships a closed union of supported locales; anything outside it\n * must fall through to `'auto'` (Stripe picks the best match from the\n * browser). We also normalise the legacy `cn` code to `zh` per\n * `src/docs/06-i18n.mdx`.\n */\nconst STRIPE_LOCALES = new Set<StripeElementLocale>([\n 'auto',\n 'ar',\n 'bg',\n 'cs',\n 'da',\n 'de',\n 'el',\n 'en',\n 'en-AU',\n 'en-CA',\n 'en-NZ',\n 'en-GB',\n 'es',\n 'es-ES',\n 'es-419',\n 'et',\n 'fi',\n 'fil',\n 'fr',\n 'fr-CA',\n 'fr-FR',\n 'he',\n 'hu',\n 'hr',\n 'id',\n 'it',\n 'it-IT',\n 'ja',\n 'ko',\n 'lt',\n 'lv',\n 'ms',\n 'mt',\n 'nb',\n 'nl',\n 'no',\n 'pl',\n 'pt',\n 'pt-BR',\n 'ro',\n 'ru',\n 'sk',\n 'sl',\n 'sv',\n 'th',\n 'tr',\n 'vi',\n 'zh',\n 'zh-HK',\n 'zh-TW',\n]);\n\nfunction normaliseLocale(input: string): StripeElementLocale {\n if (!input) return 'auto';\n const candidate = input === 'cn' ? 'zh' : input;\n if ((STRIPE_LOCALES as Set<string>).has(candidate)) {\n return candidate as StripeElementLocale;\n }\n // Try stripping region (\"en-US\" → \"en\") before giving up.\n const base = candidate.split('-')[0];\n if ((STRIPE_LOCALES as Set<string>).has(base)) {\n return base as StripeElementLocale;\n }\n return 'auto';\n}\n\nexport const PaymentForm = forwardRef<HTMLDivElement, PaymentFormProps>(\n (\n {\n id,\n clientSecret,\n mode = 'payment',\n onCreatePaymentIntent,\n publishableKey,\n currency,\n amount,\n onSuccess,\n onError,\n billingAddress = false,\n locale,\n ariaLabel,\n returnUrl,\n stripePromise: injectedStripe,\n layout = 'tabs',\n className,\n },\n ref,\n ) => {\n const { i18n } = useTranslation();\n const activeLocale = normaliseLocale(locale ?? i18n.language ?? 'en');\n\n // Stripe instance — pre-injected (tests/stories) or lazily loaded.\n const [stripeInstance, setStripeInstance] =\n useState<Promise<Stripe | null> | null>(injectedStripe ?? null);\n\n useEffect(() => {\n if (injectedStripe !== undefined) {\n setStripeInstance(injectedStripe);\n return;\n }\n if (!publishableKey) {\n setStripeInstance(null);\n return;\n }\n // `loadStripe` is cached by the SDK — safe to call per mount.\n setStripeInstance(loadStripe(publishableKey));\n }, [injectedStripe, publishableKey]);\n\n // Appearance bridge — snapshot + subscribe.\n const [appearance, setAppearance] = useState<Appearance>(() =>\n getStripeAppearance(),\n );\n useEffect(() => {\n setAppearance(getStripeAppearance());\n const unsubscribe = subscribeStripeAppearance(setAppearance);\n return unsubscribe;\n }, []);\n\n // Imperative handle. The inner form lives inside Stripe's\n // `<Elements>` provider, which owns its own tree, so the two sides\n // talk through `agentBridge`: the inner writes its settled status /\n // completeness / error key / PaymentIntent id into it and registers\n // its submit function there. That registration is what lets\n // `submit()` AWAIT the charge — the older CustomEvent dispatch\n // resolved as soon as it fired the event, before the charge was even\n // attempted, so an agent could not tell success from decline.\n const hostRef = useRef<HTMLDivElement>(null);\n const agentBridge = useRef<PaymentFormAgentBridge>({\n status: 'idle',\n complete: false,\n errorKey: null,\n paymentIntentId: null,\n });\n\n const agentHandle = useMemo<PaymentFormHandle>(\n () => ({\n submit: async () => {\n const run = agentBridge.current.submit;\n if (!run) {\n // Stripe has not mounted (no publishable key, or still\n // loading) — there is nothing to charge. Left as `idle` so\n // the caller can tell \"never fired\" from \"declined\".\n return;\n }\n await run();\n },\n reset: () => {\n const form = hostRef.current?.querySelector('form');\n if (form instanceof HTMLFormElement) {\n form.reset();\n }\n },\n getStatus: () => agentBridge.current.status,\n isComplete: () => agentBridge.current.complete,\n getErrorKey: () => agentBridge.current.errorKey,\n getPaymentIntentId: () => agentBridge.current.paymentIntentId,\n }),\n [],\n );\n useImperativeHandle(ref, () => hostRef.current as HTMLDivElement, []);\n useAgentRegistration(paymentFormAgent, agentHandle, id);\n\n const elementsOptions = useMemo<StripeElementsOptions>(\n () =>\n clientSecret !== undefined\n ? // Immediate mode — the consumer already created the intent.\n { clientSecret, appearance, locale: activeLocale }\n : // Deferred-intent mode — no secret yet; Stripe needs the intent\n // shape (mode + amount + currency) to render the Payment Element.\n // Stripe expects a lowercase ISO-4217 currency here.\n {\n mode,\n amount,\n currency: currency.toLowerCase(),\n appearance,\n locale: activeLocale,\n },\n [clientSecret, mode, amount, currency, appearance, activeLocale],\n );\n\n return (\n <div\n ref={hostRef}\n aria-label={ariaLabel}\n className={[formVariants(), className].filter(Boolean).join(' ')}\n data-component=\"payment-form\"\n data-component-id={id}\n data-testid=\"payment-form-root\"\n >\n {stripeInstance ? (\n // Render the real Payment Element whenever a Stripe instance is\n // available — in immediate mode (clientSecret present) AND in\n // deferred mode (no secret). The skeleton is reserved for the\n // no-Stripe case (missing publishableKey / injected null).\n <Elements\n stripe={stripeInstance}\n options={elementsOptions}\n key={clientSecret ?? 'deferred'}\n >\n <InnerPaymentForm\n amount={amount}\n currency={currency}\n locale={activeLocale}\n billingAddress={billingAddress}\n returnUrl={returnUrl}\n clientSecret={clientSecret}\n onCreatePaymentIntent={onCreatePaymentIntent}\n onSuccess={onSuccess}\n onError={onError}\n layout={layout}\n agentBridge={agentBridge}\n />\n </Elements>\n ) : (\n <PaymentFormSkeleton\n amount={amount}\n currency={currency}\n locale={activeLocale}\n billingAddress={billingAddress}\n />\n )}\n </div>\n );\n },\n);\n\nPaymentForm.displayName = 'PaymentForm';\n\n/* ------------------------------------------------------------------ */\n/* Skeleton — visual chrome when Stripe hasn't loaded yet */\n/* ------------------------------------------------------------------ */\n\ninterface PaymentFormSkeletonProps {\n amount: number;\n currency: string;\n locale: string;\n billingAddress: boolean;\n}\n\nfunction PaymentFormSkeleton(props: PaymentFormSkeletonProps): ReactElement {\n const { amount, currency, locale, billingAddress } = props;\n const { t } = useTranslation();\n\n return (\n <div\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n data-testid=\"payment-skeleton\"\n aria-busy=\"true\"\n >\n <div className={amountSummaryVariants()}>\n <span className={labelTextVariants()}>{t('payment.amountLabel')}</span>\n <span className=\"type-title-card\">\n {formatPaymentAmount(amount, currency, locale)}\n </span>\n </div>\n <div className={fieldLabelVariants()}>\n <span className={labelTextVariants()}>{t('payment.fields.card')}</span>\n <div\n className=\"ds:[min-block-size:var(--min-target-size)] ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--border)] ds:bg-[var(--muted)]\"\n aria-hidden=\"true\"\n />\n </div>\n {billingAddress ? (\n <div className={fieldLabelVariants()} data-testid=\"payment-address\">\n <span className={labelTextVariants()}>\n {t('payment.billingAddress')}\n </span>\n <div\n className=\"ds:[min-block-size:calc(var(--min-target-size)*2)] ds:rounded-[var(--radius-sm)] ds:border ds:border-[color:var(--border)] ds:bg-[var(--muted)]\"\n aria-hidden=\"true\"\n />\n </div>\n ) : null}\n <button\n type=\"button\"\n aria-disabled=\"true\"\n className={submitButtonVariants()}\n disabled\n >\n <Spinner variant=\"pulse\" size=\"sm\" label={t('payment.processing')} />\n <span>{t('payment.processing')}</span>\n </button>\n </div>\n );\n}\n\nexport {\n formVariants as paymentFormVariants,\n submitButtonVariants as paymentSubmitButtonVariants,\n};\n"],"names":["isBrowser","getStripeAppearance","root","target","styles","read","token","subscribeStripeAppearance","onChange","emit","observer","schemeMql","motionMql","paymentFormAgent","handle","ZERO_DECIMAL_CURRENCIES","formatPaymentAmount","amount","currency","locale","iso","major","validateReturnUrl","returnUrl","raw","resolved","stripCardLikeDigits","message","stripeErrorCodeToI18nKey","code","formVariants","cva","fieldLabelVariants","labelTextVariants","amountSummaryVariants","submitButtonVariants","InnerPaymentForm","props","billingAddress","clientSecret","onCreatePaymentIntent","onSuccess","onError","layout","agentBridge","t","useTranslation","stripe","useStripe","elements","useElements","rawId","useId","idSafe","useMemo","paymentFieldId","addressFieldId","errorId","processing","setProcessing","useState","elementComplete","setElementComplete","errorKey","setErrorKey","errorMessage","setErrorMessage","setAgentStatus","useCallback","next","applyErrorKey","key","applyComplete","complete","onSuccessRef","useRef","onErrorRef","useEffect","handleSubmit","event","reportError","rawMessage","safe","_a","safeReturnUrl","confirmParams","result","_b","submitError","mintedSecret","_c","err","host","submitter","bridge","submitDisabled","jsx","jsxs","PaymentElement","ev","AddressElement","Alert","Fragment","Spinner","STRIPE_LOCALES","normaliseLocale","input","candidate","base","PaymentForm","forwardRef","id","mode","publishableKey","ariaLabel","injectedStripe","className","ref","i18n","activeLocale","stripeInstance","setStripeInstance","loadStripe","appearance","setAppearance","hostRef","agentHandle","run","form","useImperativeHandle","useAgentRegistration","elementsOptions","Elements","PaymentFormSkeleton"],"mappings":"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"}