@incodetech/web 2.0.1 → 2.1.0-rc.1

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 (253) hide show
  1. package/dist/ae-signature/ae-signature.es.js +15 -13
  2. package/dist/ae-signature/styles.css +3 -17
  3. package/dist/ae-signature/styles2.css +15 -5
  4. package/dist/aligndevicelottie-DY_bX_p8.js +12769 -0
  5. package/dist/antifraud/antifraud.es.js +23 -16
  6. package/dist/authentication/authentication.es.js +42 -27
  7. package/dist/autoFocusTitle-BzkUiELM.js +29 -0
  8. package/dist/{back-horizontal-hint-B8Brxh3U.js → back-horizontal-hint-D_8LptLm.js} +26 -26
  9. package/dist/back-tutorial-vb1MxlrT.js +14597 -0
  10. package/dist/{back-vertical-hint-BBo36dxn.js → back-vertical-hint-C1evxxq2.js} +27 -27
  11. package/dist/backdevicelottie-HypPqBz7.js +16690 -0
  12. package/dist/base.css +1258 -104
  13. package/dist/blurdevicelottie-CBXtBFiJ.js +15951 -0
  14. package/dist/bottomSheet-F1GJfQx_.js +39 -0
  15. package/dist/browser-ponyfill-CLLvZCVg.js +441 -0
  16. package/dist/button-CM_hgyIP.js +35 -0
  17. package/dist/checkbox-BoeLHKgp.js +96 -0
  18. package/dist/consent/consent.es.js +89 -73
  19. package/dist/consent/styles.css +35 -22
  20. package/dist/countrySelector-mSWyHSy4.js +60 -0
  21. package/dist/cpf-ocr/cpf-ocr.es.js +2 -0
  22. package/dist/cpfOcr-MtpRztkG.js +92 -0
  23. package/dist/cpfOcr-jJkYCfsX.js +2 -0
  24. package/dist/cross-document-data-match/cross-document-data-match.es.js +20 -16
  25. package/dist/curp-validation/curp-validation.es.js +247 -203
  26. package/dist/customFields-DXXt9HGM.js +140 -0
  27. package/dist/customWatchlist-DsW04UF6.js +36 -0
  28. package/dist/dateInputComposed-C_mh4XBg.js +69 -0
  29. package/dist/dateInputComposed-Cy6a7ymh.js +1 -0
  30. package/dist/defineProperty-mefzVtTv.js +39 -0
  31. package/dist/document-capture/document-capture.es.js +2 -0
  32. package/dist/document-capture/styles.css +2 -5
  33. package/dist/documentCapture-8ypBJehw.js +2 -0
  34. package/dist/documentCapture-BDV_921m.js +880 -0
  35. package/dist/dropdownComposed-CEWBSdGl.js +1 -0
  36. package/dist/dropdownComposed-_fgAlo_C.js +380 -0
  37. package/dist/dynamic-forms/styles.css +25 -13
  38. package/dist/dynamicForms-DyfnsS7E.js +352 -0
  39. package/dist/ekyb/ekyb.es.js +2 -2
  40. package/dist/ekyb/styles.css +2 -0
  41. package/dist/ekybModule-CIPGmCvD.js +279 -0
  42. package/dist/ekybModule-DFoYpheB.js +2 -0
  43. package/dist/ekyc/ekyc.es.js +2 -2
  44. package/dist/ekyc/styles.css +9 -7
  45. package/dist/ekycModule-BGzwgjl1.js +2 -0
  46. package/dist/ekycModule-BuTaC5ct.js +257 -0
  47. package/dist/electronic-signature/electronic-signature.es.js +2 -2
  48. package/dist/electronic-signature-B-Q7M0wK.js +430 -0
  49. package/dist/email/email.es.js +199 -66
  50. package/dist/emailInput-KZmhjOdZ.js +39 -0
  51. package/dist/errorIcon-DJRZpd8j.js +26 -0
  52. package/dist/expiredId-Q1t6aVpk.js +85 -0
  53. package/dist/extensibility-Cs3KQQdC.js +3070 -0
  54. package/dist/extensibility.es.js +26 -25
  55. package/dist/face-match/face-match.es.js +2 -2
  56. package/dist/face-match/styles.css +0 -4
  57. package/dist/faceMatch--RDHJe4t.js +343 -0
  58. package/dist/faceMatch-yEKPYaym.js +2 -0
  59. package/dist/field-comparison/field-comparison.es.js +2 -0
  60. package/dist/field-comparison/styles.css +16 -0
  61. package/dist/fieldComparison-CAF86bTC.js +88 -0
  62. package/dist/fieldComparison-D0an7T_g.js +2 -0
  63. package/dist/fiscal-qr/fiscal-qr.es.js +224 -0
  64. package/dist/fiscal-qr/styles.css +71 -0
  65. package/dist/{flip-animation-CgwRsEmK.js → flip-animation-BGRvygw9.js} +4221 -4221
  66. package/dist/flow/flow.es.js +619 -484
  67. package/dist/flow/styles.css +378 -418
  68. package/dist/{front-horizontal-hint-DGGGi8e1.js → front-horizontal-hint-Uf5bHCsd.js} +70 -70
  69. package/dist/{front-vertical-hint-CNr5mE6Q.js → front-vertical-hint-DdWNA45v.js} +81 -81
  70. package/dist/frontdevicelottie-CLqitJhG.js +17314 -0
  71. package/dist/geolocation/geolocation.es.js +486 -395
  72. package/dist/glaredevicelottie-BS04U6Fc.js +14478 -0
  73. package/dist/governmentValidation/governmentValidation.es.js +166 -93
  74. package/dist/governmentValidation/styles.css +0 -17
  75. package/dist/homeScreen-BZnIEDrV.js +264 -0
  76. package/dist/hooks-Da_yP_Dr.js +149 -0
  77. package/dist/i18n-CoCO2ZuN.js +2971 -0
  78. package/dist/icons-Dbs9ZfYM.js +360 -0
  79. package/dist/id/id.es.js +583 -414
  80. package/dist/id/styles.css +59 -43
  81. package/dist/id-laser-h-DX8UbVNH.js +467 -0
  82. package/dist/id-laser-v-DhnHdjlB.js +490 -0
  83. package/dist/id-tutorial-lj4iKtYT.js +13165 -0
  84. package/dist/id-verification/id-verification.es.js +21 -17
  85. package/dist/idOcr-CjGbb4dB.js +123 -0
  86. package/dist/identity-reuse/identity-reuse.es.js +311 -182
  87. package/dist/identity-reuse/styles.css +134 -80
  88. package/dist/incode-logo-57XFniXU.js +4 -0
  89. package/dist/incodeComponent-wfnHlnXx.js +63 -0
  90. package/dist/incodeModule-BUDoTwT9.js +13 -0
  91. package/dist/index.es.js +17 -13
  92. package/dist/inputComposed-BEn7_nZd.js +1 -0
  93. package/dist/inputComposed-CQ4AsvZg.js +99 -0
  94. package/dist/loadingIcon-B0ysgiNq.js +148 -0
  95. package/dist/lottie_light-Dp9Bz3mf.js +9031 -0
  96. package/dist/mandatoryConsent-r0PQHmv-.js +107 -0
  97. package/dist/modal-nTSaG7nB.js +139 -0
  98. package/dist/modal.hooks-D2xhIuHA.js +195 -0
  99. package/dist/numberedStep-CEtwZqLp.js +13 -0
  100. package/dist/optionAccessibleLabel-CnA-mNAU.js +202 -0
  101. package/dist/otpInput-_JmtVwa0.js +195 -0
  102. package/dist/page-DxGQj7Gk.js +71 -0
  103. package/dist/{passport-horizontal-hint-Bgquwtac.js → passport-horizontal-hint-Bbm2mvSn.js} +55 -55
  104. package/dist/{passport-tutorial-DwRwtPVX.js → passport-tutorial-zT1ZoA-D.js} +7096 -7084
  105. package/dist/{passport-vertical-hint-BT1D5BrW.js → passport-vertical-hint-DJbCtBiM.js} +49 -49
  106. package/dist/pdf-BZA70WbM.js +22398 -0
  107. package/dist/pdfViewer-BK-yVIve.js +114 -0
  108. package/dist/phone/phone.es.js +214 -70
  109. package/dist/phoneInputComposed-DjNdsmPE.js +12142 -0
  110. package/dist/processing-BM-wT-1W.js +8 -0
  111. package/dist/qe-signature/qe-signature.es.js +15 -13
  112. package/dist/radioGroupComposed-BNuaopVr.js +215 -0
  113. package/dist/redirect-to-mobile/redirect-to-mobile.es.js +2774 -0
  114. package/dist/redirect-to-mobile/styles.css +19 -269
  115. package/dist/registerIncodeElement-77NGCDsy.js +11 -0
  116. package/dist/requiredLabelHint-DEadtiwx.js +17 -0
  117. package/dist/richText-Cf9aMOCk.js +3153 -0
  118. package/dist/rolldown-runtime--E5BIlTp.js +33 -0
  119. package/dist/selfie/selfie.es.js +54 -37
  120. package/dist/selfie/styles.css +0 -4
  121. package/dist/selfieTutorial-CtruLyO2.js +2689 -0
  122. package/dist/signature/signature.es.js +778 -405
  123. package/dist/snackbar-CxepGC3e.js +16 -0
  124. package/dist/spinner-B6RxGFrI.js +1 -0
  125. package/dist/spinner-D8a_2LvW.js +42 -0
  126. package/dist/statusPage-DMYPUwRZ.js +28 -0
  127. package/dist/successIcon-BAyDPT7I.js +30 -0
  128. package/dist/tabs-C8npVBbk.js +103 -0
  129. package/dist/themes/dark.css +5 -0
  130. package/dist/themes/light.css +4 -0
  131. package/dist/transitionSpinner-DRRz-NV8.js +26 -0
  132. package/dist/{tutorial-9vHAHvMK.js → tutorial-D1qaY2Tm.js} +1105 -856
  133. package/dist/types/ae-signature.d.ts +4 -1
  134. package/dist/types/antifraud.d.ts +9 -3
  135. package/dist/types/authentication.d.ts +4 -1
  136. package/dist/types/consent.d.ts +4 -1
  137. package/dist/types/cpf-ocr.d.ts +12 -0
  138. package/dist/types/cross-document-data-match.d.ts +4 -1
  139. package/dist/types/curp-validation.d.ts +9 -3
  140. package/dist/types/document-capture.d.ts +37 -0
  141. package/dist/types/ekyb.d.ts +4 -1
  142. package/dist/types/ekyc.d.ts +4 -1
  143. package/dist/types/electronic-signature.d.ts +4 -1
  144. package/dist/types/email.d.ts +4 -1
  145. package/dist/types/extensibility.d.ts +40 -15
  146. package/dist/types/face-match.d.ts +4 -1
  147. package/dist/types/field-comparison.d.ts +38 -0
  148. package/dist/types/fiscal-qr.d.ts +43 -0
  149. package/dist/types/flow.d.ts +5 -2
  150. package/dist/types/geolocation.d.ts +4 -1
  151. package/dist/types/governmentValidation.d.ts +4 -1
  152. package/dist/types/id-verification.d.ts +4 -1
  153. package/dist/types/id.d.ts +4 -1
  154. package/dist/types/identity-reuse.d.ts +4 -1
  155. package/dist/types/index.d.ts +26 -2
  156. package/dist/types/phone.d.ts +4 -1
  157. package/dist/types/qe-signature.d.ts +4 -1
  158. package/dist/types/redirect-to-mobile.d.ts +17 -0
  159. package/dist/types/selfie.d.ts +4 -1
  160. package/dist/types/signature.d.ts +4 -1
  161. package/dist/types/watchlist.d.ts +4 -1
  162. package/dist/types/workflow.d.ts +55 -11
  163. package/dist/typography-YLgHHuao.js +45 -0
  164. package/dist/uiConfig-D2_wawvr.js +25 -0
  165. package/dist/useModuleLoader-CeJ2jL25.js +672 -0
  166. package/dist/vendor-preact-DThS2ZQ_.js +955 -0
  167. package/dist/verificationResult-Do5SpZ6X.js +64 -0
  168. package/dist/verifiedByIncode-DjXOdCml.js +103 -0
  169. package/dist/watchlist/watchlist.es.js +31 -28
  170. package/dist/watchlistForBusiness-BFFXC9d-.js +80 -0
  171. package/dist/workflow/styles.css +449 -427
  172. package/dist/workflow/workflow.es.js +268 -182
  173. package/package.json +32 -10
  174. package/dist/aligndevicelottie-DoV8xKjh.js +0 -12757
  175. package/dist/autoFocusTitle-QexamZ4i.js +0 -16
  176. package/dist/back-tutorial-1NOQobGO.js +0 -14585
  177. package/dist/backdevicelottie-C_ceuqY7.js +0 -16678
  178. package/dist/blurdevicelottie-UO14Y0WC.js +0 -15939
  179. package/dist/bottomSheet-DE_8TFEC.js +0 -31
  180. package/dist/browser-ponyfill-jOkuz57z.js +0 -299
  181. package/dist/button-DcCUEn2n.js +0 -24
  182. package/dist/checkbox-Cl57ltq_.js +0 -85
  183. package/dist/countrySelector-CE-JgIsv.js +0 -58
  184. package/dist/cpfOcr-D_tbwbvh.js +0 -78
  185. package/dist/customFields-CW38fQUv.js +0 -127
  186. package/dist/customWatchlist-D9_yjEQd.js +0 -33
  187. package/dist/dateInputComposed-BpAGsjN6.js +0 -55
  188. package/dist/dateInputComposed-DU3o6PAV.js +0 -1
  189. package/dist/defineProperty-Dh8nSJpJ.js +0 -39
  190. package/dist/documentCapture-xX-JT7ZY.js +0 -763
  191. package/dist/dropdownComposed-DFRBG22E.js +0 -284
  192. package/dist/dropdownComposed-DwTzc2YU.js +0 -1
  193. package/dist/dynamicForms-CJP1Ia6Q.js +0 -262
  194. package/dist/ekybModule-BSs7mndb.js +0 -280
  195. package/dist/ekybModule-D9M3E2Gm.js +0 -2
  196. package/dist/ekycModule-CU9pt5YN.js +0 -246
  197. package/dist/ekycModule-CZw9cLno.js +0 -2
  198. package/dist/electronic-signature-COYXjGdd.js +0 -410
  199. package/dist/emailInput-DppGf9pv.js +0 -37
  200. package/dist/expiredId-BnmzE8T3.js +0 -70
  201. package/dist/extensibility-CzEJfRwo.js +0 -2586
  202. package/dist/faceMatch-B8j0g0Yo.js +0 -2
  203. package/dist/faceMatch-BV8UD7tj.js +0 -201
  204. package/dist/frontdevicelottie-Bu6f9fDE.js +0 -17302
  205. package/dist/glaredevicelottie-B10axYs_.js +0 -14466
  206. package/dist/homeScreen-DnP1jw9A.js +0 -227
  207. package/dist/hooks-BVnGysT7.js +0 -80
  208. package/dist/i18n-9s4OSqwi.js +0 -2010
  209. package/dist/icons-Cc7zwchP.js +0 -310
  210. package/dist/id-laser-h-mBAzHVOK.js +0 -467
  211. package/dist/id-laser-v-CrFg4bcJ.js +0 -483
  212. package/dist/id-tutorial-BCr42Pnn.js +0 -13153
  213. package/dist/idOcr-CCjfWQvH.js +0 -94
  214. package/dist/incode-logo-DX016usY.js +0 -4
  215. package/dist/incodeComponent-C1o4M0ZK.js +0 -50
  216. package/dist/incodeModule-BqCjVgEI.js +0 -18
  217. package/dist/inputComposed-APSw8C7o.js +0 -89
  218. package/dist/inputComposed-XYrarFxS.js +0 -1
  219. package/dist/loadingIcon-BN5YRQUb.js +0 -104
  220. package/dist/mandatoryConsent-DssKMC3v.js +0 -100
  221. package/dist/modal-NMxsQHAO.js +0 -135
  222. package/dist/modal.hooks-CAjcIFZK.js +0 -126
  223. package/dist/numberedStep-CT-alrK5.js +0 -11
  224. package/dist/optionAccessibleLabel-CzEeX3Q4.js +0 -140
  225. package/dist/otpInput-DqRA_egd.js +0 -145
  226. package/dist/page-C1yT4DLb.js +0 -69
  227. package/dist/pdf-BurGZ08w.js +0 -14967
  228. package/dist/pdfViewer-BGBNL1Ea.js +0 -63
  229. package/dist/phoneInputComposed-bvWhGLFZ.js +0 -11206
  230. package/dist/processing-G_y3o32b.js +0 -6
  231. package/dist/radioGroupComposed-BbmvxmD2.js +0 -177
  232. package/dist/redirectToMobile-C3k1gloW.js +0 -1514
  233. package/dist/requiredLabelHint-BLwgqozE.js +0 -13
  234. package/dist/richText-DbJ5sl2n.js +0 -1973
  235. package/dist/rolldown-runtime-CYMK-g2i.js +0 -20
  236. package/dist/selfieTutorial-BgrlUMXP.js +0 -2677
  237. package/dist/snackbar-BDp8x7Cv.js +0 -14
  238. package/dist/spinner-B4dcie2T.js +0 -1
  239. package/dist/spinner-CKnjVHxw.js +0 -39
  240. package/dist/statusPage-CUI7ApcU.js +0 -28
  241. package/dist/successIcon-DbILeIz_.js +0 -28
  242. package/dist/tabs-DaPyP71c.js +0 -78
  243. package/dist/transitionSpinner-PIEPU2Vx.js +0 -17
  244. package/dist/types/cpf-ocr/styles.d.ts +0 -1
  245. package/dist/types/document-capture/styles.d.ts +0 -1
  246. package/dist/types/redirect-to-mobile/styles.d.ts +0 -1
  247. package/dist/typography-CxjaknHN.js +0 -28
  248. package/dist/uiConfig-CwpQ-IM6.js +0 -20
  249. package/dist/useModuleLoader-BFiVA41N.js +0 -432
  250. package/dist/vendor-preact-D6SntenC.js +0 -958
  251. package/dist/verificationResult-BrVbUJ4U.js +0 -97
  252. package/dist/verifiedByIncode-ChZBpqNy.js +0 -101
  253. package/dist/watchlistForBusiness-BcSNtHCV.js +0 -77
@@ -1,98 +1,242 @@
1
- import { n as e } from "../i18n-9s4OSqwi.js";
2
- import { p as t, v as n } from "../vendor-preact-D6SntenC.js";
3
- import { o as r } from "../hooks-BVnGysT7.js";
4
- import { t as i } from "../incodeComponent-C1o4M0ZK.js";
5
- import { r as a } from "../loadingIcon-BN5YRQUb.js";
6
- import { t as o } from "../page-C1yT4DLb.js";
7
- import { t as s } from "../button-DcCUEn2n.js";
8
- import { t as c } from "../otpInput-DqRA_egd.js";
9
- import { t as l } from "../checkbox-Cl57ltq_.js";
10
- import { t as u } from "../phoneInputComposed-bvWhGLFZ.js";
11
- import { t as d } from "../incodeModule-BqCjVgEI.js";
12
- import { createPhoneManager as f } from "@incodetech/core/phone";
1
+ import { n as useTranslation } from "../i18n-CoCO2ZuN.js";
2
+ import { h as q, v as u } from "../vendor-preact-DThS2ZQ_.js";
3
+ import { a as isTerminalModuleState, c as useManager, o as useModuleTerminalCallbacks } from "../hooks-Da_yP_Dr.js";
4
+ import { t as IncodeComponent } from "../incodeComponent-wfnHlnXx.js";
5
+ import { r as Spacer } from "../loadingIcon-B0ysgiNq.js";
6
+ import { t as Page } from "../page-DxGQj7Gk.js";
7
+ import { t as Button } from "../button-CM_hgyIP.js";
8
+ import { t as OtpInput } from "../otpInput-_JmtVwa0.js";
9
+ import { t as Checkbox } from "../checkbox-BoeLHKgp.js";
10
+ import { t as PhoneInputComposed } from "../phoneInputComposed-DjNdsmPE.js";
11
+ import { t as registerIncodeModuleElement } from "../incodeModule-BUDoTwT9.js";
12
+ import { createPhoneManager } from "@incodetech/core/phone";
13
13
  //#region src/modules/phone/phone.tsx
14
- function p(e) {
15
- return e === "invalidPhone" ? "phone.invalidPhone" : e === "serverError" ? "phone.serverError" : e;
14
+ /**
15
+ * @module @incodetech/ui/phone
16
+ *
17
+ * Phone verification UI component for the Incode Web SDK.
18
+ * Provides a complete, ready-to-use phone verification experience
19
+ * with country code selection and OTP input.
20
+ *
21
+ * ## UI Usage
22
+ *
23
+ * The Phone component can be used as a React/Preact component or as a
24
+ * Web Component (`<incode-phone>`).
25
+ *
26
+ * @example React/Preact component usage
27
+ * ```tsx
28
+ * import { Phone } from '@incodetech/ui/phone';
29
+ * import { setup } from '@incodetech/core';
30
+ *
31
+ * // Configure the SDK first
32
+ * setup({ apiURL: 'https://api.example.com', token: 'your-token' });
33
+ *
34
+ * function App() {
35
+ * const config = {
36
+ * otpVerification: true,
37
+ * otpExpirationInMinutes: 5,
38
+ * prefill: false,
39
+ * };
40
+ *
41
+ * return (
42
+ * <Phone
43
+ * config={config}
44
+ * onFinish={() => console.log('Phone verified!')}
45
+ * onError={(error) => console.error('Error:', error)}
46
+ * />
47
+ * );
48
+ * }
49
+ * ```
50
+ *
51
+ * @example Web Component usage
52
+ * ```html
53
+ * <!-- Include the script -->
54
+ * <script type="module">
55
+ * import '@incodetech/ui/phone';
56
+ * import { setup } from '@incodetech/core';
57
+ *
58
+ * setup({ apiURL: 'https://api.example.com', token: 'your-token' });
59
+ *
60
+ * const phone = document.querySelector('incode-phone');
61
+ * phone.config = {
62
+ * otpVerification: true,
63
+ * otpExpirationInMinutes: 5,
64
+ * prefill: false,
65
+ * };
66
+ * phone.onFinish = () => console.log('Phone verified!');
67
+ * phone.onError = (error) => console.error('Error:', error);
68
+ * <\/script>
69
+ *
70
+ * <incode-phone></incode-phone>
71
+ * ```
72
+ *
73
+ * ## Styling
74
+ *
75
+ * The component uses CSS custom properties (variables) for theming.
76
+ * Override these variables to customize the appearance:
77
+ *
78
+ * ```css
79
+ * :root {
80
+ * --button-primary-surface-default: #0066cc;
81
+ * --input-border-default: #cccccc;
82
+ * --text-title: #333333;
83
+ * }
84
+ * ```
85
+ *
86
+ * ## Headless Alternative
87
+ *
88
+ * For complete control over the UI, use the headless `createPhoneManager`
89
+ * from `@incodetech/core/phone` instead. See the core module documentation.
90
+ */
91
+ function getPhoneErrorTranslationKey(error) {
92
+ if (error === "invalidPhone") return "phone.invalidPhone";
93
+ if (error === "serverError") return "phone.serverError";
94
+ return error;
16
95
  }
17
- function m(e) {
18
- return e === "serverError" ? "phone.serverError" : e;
96
+ function getOtpErrorTranslationKey(error) {
97
+ if (error === "serverError") return "phone.serverError";
98
+ return error;
19
99
  }
20
- var h = ({ config: i, manager: d, onFinish: h, onError: g }) => {
21
- let { t: _ } = e(), [v, y] = r(() => {
22
- if (d) return d;
23
- if (!i) throw Error("Phone config is required");
24
- return f({ config: i });
25
- }, { manageLifecycle: !d }), [b, x] = t(!1), [S, C] = t(!1), [w, T] = t(!1);
26
- if (v.status === "idle" || v.status === "loadingPrefill" || v.status === "loadingStartInfo") return null;
27
- if (v.status === "inputting" || v.status === "submitting" || v.status === "sendingInitialOtp") {
28
- let e = v.status === "submitting" || v.status === "sendingInitialOtp", t = v.status === "inputting" ? v.countryCode : "US", r = v.status === "inputting" ? v.prefilledPhone : void 0, i = v.status === "inputting" && v.phoneError ? _(p(v.phoneError)) : void 0, c = v.status === "inputting" && S && w && !b ? _("phone.invalidPhone") : void 0, d = i ?? c, f = !b || i !== void 0, m = v.status === "inputting" ? v.optinEnabled ?? !1 : !1;
29
- return /* @__PURE__ */ n(o, {
100
+ var PhoneContent = ({ config, manager: externalManager, onFinish, onError }) => {
101
+ const { t } = useTranslation();
102
+ const [state, manager] = useManager(() => {
103
+ if (externalManager) return externalManager;
104
+ if (!config) throw new Error("Phone config is required");
105
+ return createPhoneManager({ config });
106
+ }, { manageLifecycle: !externalManager });
107
+ const formatHintBuilder = q((example) => t("phone.formatHint", { example }), [t]);
108
+ const countryAriaLabelBuilder = q(({ callingCode, countryName }) => t("phone.countryCodeAriaLabel", {
109
+ callingCode,
110
+ countryName
111
+ }), [t]);
112
+ useModuleTerminalCallbacks({
113
+ status: state.status,
114
+ onFinish,
115
+ onError,
116
+ error: state.status === "error" ? state.error : void 0
117
+ });
118
+ if (state.status === "idle" || state.status === "loadingPrefill" || state.status === "loadingStartInfo") return null;
119
+ if (state.status === "inputting" || state.status === "submitting" || state.status === "sendingInitialOtp") {
120
+ const isLoading = state.status === "submitting" || state.status === "sendingInitialOtp";
121
+ const countryCode = state.status === "inputting" ? state.countryCode : "US";
122
+ const prefilledPhone = state.status === "inputting" ? state.prefilledPhone : void 0;
123
+ const serverPhoneError = state.status === "inputting" && state.phoneError ? t(getPhoneErrorTranslationKey(state.phoneError)) : void 0;
124
+ const clientPhoneError = state.status === "inputting" && state.validationErrors?.phone ? t(getPhoneErrorTranslationKey(state.validationErrors.phone)) : void 0;
125
+ const phoneError = serverPhoneError ?? clientPhoneError;
126
+ const showFormatHintInError = !serverPhoneError && !!clientPhoneError;
127
+ const isValid = state.status === "inputting" ? state.isValid : true;
128
+ const optinEnabled = state.status === "inputting" ? state.optinEnabled ?? false : false;
129
+ return /* @__PURE__ */ u(Page, {
30
130
  className: "IncodePhonePage",
31
- title: _("phone.verify"),
32
- subtitle: _("email.willSendCode"),
131
+ title: t("phone.verify"),
132
+ subtitle: t("email.willSendCode"),
33
133
  children: [
34
- /* @__PURE__ */ n("div", {
134
+ /* @__PURE__ */ u("div", {
35
135
  class: "IncodePhoneInputContainer",
36
136
  children: [
37
- /* @__PURE__ */ n(u, {
137
+ /* @__PURE__ */ u(PhoneInputComposed, {
38
138
  id: "phone",
39
- countryCode: t,
40
- value: r,
41
- error: d,
42
- disabled: e,
43
- onChange: (e, t) => {
44
- y.setPhoneNumber(e, t), C(!0), T(!1), x(t);
139
+ countryCode,
140
+ value: prefilledPhone,
141
+ error: phoneError,
142
+ showFormatHintInError,
143
+ disabled: isLoading,
144
+ onChange: (phone, isValid) => {
145
+ manager.setPhoneNumber(phone, isValid);
45
146
  },
46
147
  onBlur: () => {
47
- T(!0);
148
+ manager.validatePhone();
48
149
  },
150
+ formatHintBuilder,
151
+ countryAriaLabelBuilder,
49
152
  "data-testid": "phone-input",
50
- showErrorIcon: !0
153
+ showErrorIcon: true
51
154
  }),
52
- /* @__PURE__ */ n(a, { size: 16 }),
53
- m && /* @__PURE__ */ n(l, {
155
+ /* @__PURE__ */ u(Spacer, { size: 16 }),
156
+ optinEnabled && /* @__PURE__ */ u(Checkbox, {
54
157
  id: "phone-optin",
55
- label: _("phone.optIn"),
158
+ label: t("phone.optIn"),
56
159
  size: "s",
57
- onChange: (e) => y.setOptInGranted(e.target.checked)
160
+ onChange: (e) => manager.setOptInGranted(e.target.checked)
58
161
  })
59
162
  ]
60
163
  }),
61
- /* @__PURE__ */ n(a, {}),
62
- /* @__PURE__ */ n(s, {
63
- onClick: () => y.submit(),
64
- disabled: f,
65
- isLoading: e,
164
+ /* @__PURE__ */ u(Spacer, {}),
165
+ /* @__PURE__ */ u(Button, {
166
+ onClick: () => manager.submit(),
167
+ disabled: !isValid,
168
+ isLoading,
66
169
  "data-testid": "phone-submit",
67
- children: _("common.continue")
170
+ children: t("common.continue")
68
171
  })
69
172
  ]
70
173
  }, "phone-input");
71
174
  }
72
- if (v.status === "awaitingOtp" || v.status === "verifyingOtp" || v.status === "otpError" || v.status === "resendingOtp") {
73
- let e = v.status === "verifyingOtp", t = v.status === "otpError", r = v.status === "awaitingOtp", i = v.status === "resendingOtp", a = r || t || e, s = t ? _(m(v.otpError)) : void 0;
74
- return /* @__PURE__ */ n(o, {
175
+ if (state.status === "awaitingOtp" || state.status === "verifyingOtp" || state.status === "otpError" || state.status === "resendingOtp") {
176
+ const isVerifying = state.status === "verifyingOtp";
177
+ const hasOtpError = state.status === "otpError";
178
+ const isAwaitingOtp = state.status === "awaitingOtp";
179
+ const isResending = state.status === "resendingOtp";
180
+ const showResendCooldown = isAwaitingOtp || hasOtpError || isVerifying;
181
+ const otpError = hasOtpError ? t(getOtpErrorTranslationKey(state.otpError)) : void 0;
182
+ const otpValidationError = "otpValidationErrors" in state && state.otpValidationErrors?.otp ? t("otp.incompleteCode", { length: state.otpLength }) : void 0;
183
+ const isOtpValid = "isOtpValid" in state ? state.isOtpValid : true;
184
+ return /* @__PURE__ */ u(Page, {
75
185
  className: "IncodePhonePage",
76
- title: _("otp.enterCodeSMS"),
77
- children: /* @__PURE__ */ n(c, {
78
- resendTimer: a ? v.resendTimer : 0,
79
- canResend: a ? v.canResend : !1,
80
- isLoading: e,
81
- disabled: i || e,
82
- error: s,
83
- onSubmit: (e) => y.submitOtp(e),
84
- onResend: () => y.resendOtp(),
85
- onBack: () => y.back()
186
+ title: t("otp.enterCodeSMS"),
187
+ children: /* @__PURE__ */ u(OtpInput, {
188
+ value: state.otpCode,
189
+ otpLength: state.otpLength,
190
+ resendTimer: showResendCooldown ? state.resendTimer : 0,
191
+ canResend: showResendCooldown ? state.canResend : false,
192
+ isLoading: isVerifying,
193
+ disabled: isResending || isVerifying,
194
+ error: otpError,
195
+ validationError: otpValidationError,
196
+ isValid: isOtpValid,
197
+ onSubmit: (code) => manager.submitOtp(code),
198
+ onChange: (code) => manager.setOtpCode(code),
199
+ onValidate: () => manager.validateOtp(),
200
+ onResend: () => manager.resendOtp(),
201
+ onBack: () => manager.back()
86
202
  })
87
203
  }, "phone-otp");
88
204
  }
89
- return v.status === "finished" ? (h?.(), null) : (v.status === "error" && g?.(v.error), null);
90
- }, g = ({ config: e, manager: t, onFinish: r, onError: a }) => /* @__PURE__ */ n(i, { children: e || t ? /* @__PURE__ */ n(h, {
91
- config: e,
92
- manager: t,
93
- onFinish: r,
94
- onError: a
95
- }) : null });
96
- d(g, "incode-phone");
205
+ if (isTerminalModuleState(state)) return null;
206
+ return null;
207
+ };
208
+ /**
209
+ * Phone verification UI component.
210
+ *
211
+ * Provides a complete phone verification experience including:
212
+ * - Country code selector with flag emojis
213
+ * - Phone number input with validation
214
+ * - OTP code entry with resend functionality
215
+ * - Loading states and error handling
216
+ *
217
+ * @example Basic usage
218
+ * ```tsx
219
+ * <Phone
220
+ * config={{
221
+ * otpVerification: true,
222
+ * otpExpirationInMinutes: 5,
223
+ * prefill: false,
224
+ * }}
225
+ * onFinish={() => router.push('/next-step')}
226
+ * onError={(err) => toast.error(err)}
227
+ * />
228
+ * ```
229
+ *
230
+ * @see {@link createPhoneManager} for headless usage
231
+ */
232
+ var Phone = ({ config, manager, onFinish, onError }) => {
233
+ return /* @__PURE__ */ u(IncodeComponent, { children: config || manager ? /* @__PURE__ */ u(PhoneContent, {
234
+ config,
235
+ manager,
236
+ onFinish,
237
+ onError
238
+ }) : null });
239
+ };
240
+ registerIncodeModuleElement(Phone, "incode-phone");
97
241
  //#endregion
98
- export { g as Phone };
242
+ export { Phone };