@incodetech/prizma-core-screens 0.1.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 (497) hide show
  1. package/README.md +74 -0
  2. package/dist/CaptureOverlay.css +55 -0
  3. package/dist/CaptureOverlay.d.ts +34 -0
  4. package/dist/CaptureOverlay.js +32 -0
  5. package/dist/CaptureScreen.d.ts +51 -0
  6. package/dist/CaptureScreen.js +30 -0
  7. package/dist/CurpConfirmScreen.d.ts +33 -0
  8. package/dist/CurpConfirmScreen.js +29 -0
  9. package/dist/CurpEnterScreen.d.ts +51 -0
  10. package/dist/CurpEnterScreen.js +77 -0
  11. package/dist/CurpGenerateScreen.d.ts +47 -0
  12. package/dist/CurpGenerateScreen.js +57 -0
  13. package/dist/CurpLayout.css +92 -0
  14. package/dist/CurpProcessingScreen.d.ts +32 -0
  15. package/dist/CurpProcessingScreen.js +29 -0
  16. package/dist/CurpResultScreen.d.ts +37 -0
  17. package/dist/CurpResultScreen.js +36 -0
  18. package/dist/CurpStrings.d.ts +170 -0
  19. package/dist/CurpStrings.js +16 -0
  20. package/dist/DataSharingConsentConsentScreen.d.ts +73 -0
  21. package/dist/DataSharingConsentConsentScreen.js +120 -0
  22. package/dist/DataSharingConsentLayout.css +78 -0
  23. package/dist/DataSharingConsentStrings.d.ts +96 -0
  24. package/dist/DataSharingConsentStrings.js +38 -0
  25. package/dist/DemoScreensEndScreen.d.ts +33 -0
  26. package/dist/DemoScreensEndScreen.js +27 -0
  27. package/dist/DemoScreensStrings.d.ts +11 -0
  28. package/dist/DemoScreensStrings.js +19 -0
  29. package/dist/DocumentCaptureCaptureScreen.d.ts +53 -0
  30. package/dist/DocumentCaptureCaptureScreen.js +51 -0
  31. package/dist/DocumentCaptureCommonIssuesScreen.d.ts +32 -0
  32. package/dist/DocumentCaptureCommonIssuesScreen.js +45 -0
  33. package/dist/DocumentCaptureConfirmImageScreen.d.ts +38 -0
  34. package/dist/DocumentCaptureConfirmImageScreen.js +34 -0
  35. package/dist/DocumentCaptureConfirmUploadScreen.d.ts +43 -0
  36. package/dist/DocumentCaptureConfirmUploadScreen.js +29 -0
  37. package/dist/DocumentCaptureGenericErrorScreen.d.ts +36 -0
  38. package/dist/DocumentCaptureGenericErrorScreen.js +30 -0
  39. package/dist/DocumentCaptureIllustration.d.ts +45 -0
  40. package/dist/DocumentCaptureIllustration.js +7 -0
  41. package/dist/DocumentCaptureLayout.css +226 -0
  42. package/dist/DocumentCaptureMethodSelectionScreen.d.ts +45 -0
  43. package/dist/DocumentCaptureMethodSelectionScreen.js +70 -0
  44. package/dist/DocumentCaptureNextPageScreen.d.ts +33 -0
  45. package/dist/DocumentCaptureNextPageScreen.js +28 -0
  46. package/dist/DocumentCaptureNoConnectionScreen.d.ts +28 -0
  47. package/dist/DocumentCaptureNoConnectionScreen.js +29 -0
  48. package/dist/DocumentCaptureStrings.d.ts +158 -0
  49. package/dist/DocumentCaptureStrings.js +21 -0
  50. package/dist/DocumentCaptureTutorialScreen.d.ts +36 -0
  51. package/dist/DocumentCaptureTutorialScreen.js +27 -0
  52. package/dist/EkybAddressDetailsScreen.d.ts +61 -0
  53. package/dist/EkybAddressDetailsScreen.js +63 -0
  54. package/dist/EkybBusinessDetailsScreen.d.ts +55 -0
  55. package/dist/EkybBusinessDetailsScreen.js +57 -0
  56. package/dist/EkybCountryScreen.d.ts +52 -0
  57. package/dist/EkybCountryScreen.js +58 -0
  58. package/dist/EkybErrorScreen.d.ts +30 -0
  59. package/dist/EkybErrorScreen.js +24 -0
  60. package/dist/EkybOwnersScreen.d.ts +73 -0
  61. package/dist/EkybOwnersScreen.js +87 -0
  62. package/dist/EkybProcessingScreen.d.ts +28 -0
  63. package/dist/EkybProcessingScreen.js +22 -0
  64. package/dist/EkybStrings.d.ts +200 -0
  65. package/dist/EkybStrings.js +27 -0
  66. package/dist/EkybSuccessScreen.d.ts +28 -0
  67. package/dist/EkybSuccessScreen.js +22 -0
  68. package/dist/EkycDetailsScreen.d.ts +65 -0
  69. package/dist/EkycDetailsScreen.js +81 -0
  70. package/dist/EkycErrorScreen.d.ts +32 -0
  71. package/dist/EkycErrorScreen.js +26 -0
  72. package/dist/EkycLayout.css +39 -0
  73. package/dist/EkycLicenseScreen.d.ts +21 -0
  74. package/dist/EkycLicenseScreen.js +68 -0
  75. package/dist/EkycProcessingScreen.d.ts +26 -0
  76. package/dist/EkycProcessingScreen.js +20 -0
  77. package/dist/EkycStrings.d.ts +112 -0
  78. package/dist/EkycStrings.js +34 -0
  79. package/dist/EkycSuccessScreen.d.ts +29 -0
  80. package/dist/EkycSuccessScreen.js +23 -0
  81. package/dist/ElectronicSignatureDrawScreen.d.ts +57 -0
  82. package/dist/ElectronicSignatureDrawScreen.js +53 -0
  83. package/dist/ElectronicSignatureErrorScreen.d.ts +31 -0
  84. package/dist/ElectronicSignatureErrorScreen.js +25 -0
  85. package/dist/ElectronicSignatureLayout.css +80 -0
  86. package/dist/ElectronicSignatureReviewScreen.d.ts +51 -0
  87. package/dist/ElectronicSignatureReviewScreen.js +36 -0
  88. package/dist/ElectronicSignatureStrings.d.ts +50 -0
  89. package/dist/ElectronicSignatureStrings.js +12 -0
  90. package/dist/ElectronicSignatureSuccessScreen.d.ts +30 -0
  91. package/dist/ElectronicSignatureSuccessScreen.js +24 -0
  92. package/dist/EmailInputErrorScreen.d.ts +34 -0
  93. package/dist/EmailInputErrorScreen.js +28 -0
  94. package/dist/EmailInputOtpScreen.d.ts +56 -0
  95. package/dist/EmailInputOtpScreen.js +82 -0
  96. package/dist/EmailInputProcessingScreen.d.ts +29 -0
  97. package/dist/EmailInputProcessingScreen.js +23 -0
  98. package/dist/EmailInputStrings.d.ts +130 -0
  99. package/dist/EmailInputStrings.js +19 -0
  100. package/dist/EmailInputSuccessScreen.d.ts +37 -0
  101. package/dist/EmailInputSuccessScreen.js +31 -0
  102. package/dist/EmailInputVerifyScreen.d.ts +46 -0
  103. package/dist/EmailInputVerifyScreen.js +55 -0
  104. package/dist/ErrorScreensScreen.d.ts +62 -0
  105. package/dist/ErrorScreensScreen.js +71 -0
  106. package/dist/ErrorScreensStrings.d.ts +31 -0
  107. package/dist/ErrorScreensStrings.js +28 -0
  108. package/dist/FaceCaptureCapturingScreen.d.ts +32 -0
  109. package/dist/FaceCaptureCapturingScreen.js +53 -0
  110. package/dist/FaceCaptureLayout.css +18 -0
  111. package/dist/FaceCaptureLoadingScreen.d.ts +32 -0
  112. package/dist/FaceCaptureLoadingScreen.js +30 -0
  113. package/dist/FaceCaptureManualCaptureScreen.d.ts +32 -0
  114. package/dist/FaceCaptureManualCaptureScreen.js +27 -0
  115. package/dist/FaceCaptureNoConnectionScreen.d.ts +30 -0
  116. package/dist/FaceCaptureNoConnectionScreen.js +31 -0
  117. package/dist/FaceCaptureResultErrorScreen.d.ts +40 -0
  118. package/dist/FaceCaptureResultErrorScreen.js +32 -0
  119. package/dist/FaceCaptureResultSuccessScreen.d.ts +25 -0
  120. package/dist/FaceCaptureResultSuccessScreen.js +27 -0
  121. package/dist/FaceCaptureStrings.d.ts +62 -0
  122. package/dist/FaceCaptureStrings.js +14 -0
  123. package/dist/FaceCaptureTutorialScreen.d.ts +29 -0
  124. package/dist/FaceCaptureTutorialScreen.js +20 -0
  125. package/dist/FaceMatchComparisonCompactScreen.d.ts +26 -0
  126. package/dist/FaceMatchComparisonCompactScreen.js +24 -0
  127. package/dist/FaceMatchComparisonScreen.d.ts +80 -0
  128. package/dist/FaceMatchComparisonScreen.js +81 -0
  129. package/dist/FaceMatchLayout.css +264 -0
  130. package/dist/FaceMatchResultScreen.d.ts +50 -0
  131. package/dist/FaceMatchResultScreen.js +52 -0
  132. package/dist/FaceMatchStrings.d.ts +66 -0
  133. package/dist/FaceMatchStrings.js +21 -0
  134. package/dist/FormScreen.css +78 -0
  135. package/dist/FormScreen.d.ts +101 -0
  136. package/dist/FormScreen.js +36 -0
  137. package/dist/FormsChoiceScreen.d.ts +66 -0
  138. package/dist/FormsChoiceScreen.js +63 -0
  139. package/dist/FormsErrorScreen.d.ts +28 -0
  140. package/dist/FormsErrorScreen.js +22 -0
  141. package/dist/FormsFieldScreen.d.ts +66 -0
  142. package/dist/FormsFieldScreen.js +85 -0
  143. package/dist/FormsLayout.css +45 -0
  144. package/dist/FormsLongFormScreen.d.ts +70 -0
  145. package/dist/FormsLongFormScreen.js +149 -0
  146. package/dist/FormsStrings.d.ts +181 -0
  147. package/dist/FormsStrings.js +36 -0
  148. package/dist/FormsSuccessScreen.d.ts +32 -0
  149. package/dist/FormsSuccessScreen.js +26 -0
  150. package/dist/GeolocationBrowserStepsScreen.d.ts +56 -0
  151. package/dist/GeolocationBrowserStepsScreen.js +95 -0
  152. package/dist/GeolocationErrorScreen.d.ts +43 -0
  153. package/dist/GeolocationErrorScreen.js +56 -0
  154. package/dist/GeolocationIntroScreen.d.ts +49 -0
  155. package/dist/GeolocationIntroScreen.js +38 -0
  156. package/dist/GeolocationPermissionScreen.d.ts +38 -0
  157. package/dist/GeolocationPermissionScreen.js +30 -0
  158. package/dist/GeolocationStrings.d.ts +157 -0
  159. package/dist/GeolocationStrings.js +28 -0
  160. package/dist/IdCaptureAgeVerificationScreen.d.ts +25 -0
  161. package/dist/IdCaptureAgeVerificationScreen.js +38 -0
  162. package/dist/IdCaptureAnalyzingScreen.d.ts +41 -0
  163. package/dist/IdCaptureAnalyzingScreen.js +30 -0
  164. package/dist/IdCaptureCommonIssuesScreen.d.ts +31 -0
  165. package/dist/IdCaptureCommonIssuesScreen.js +49 -0
  166. package/dist/IdCaptureDocumentErrorScreen.d.ts +37 -0
  167. package/dist/IdCaptureDocumentErrorScreen.js +30 -0
  168. package/dist/IdCaptureDocumentSelectionScreen.d.ts +41 -0
  169. package/dist/IdCaptureDocumentSelectionScreen.js +49 -0
  170. package/dist/IdCaptureFlipScreen.d.ts +31 -0
  171. package/dist/IdCaptureFlipScreen.js +26 -0
  172. package/dist/IdCaptureHoldOnScreen.d.ts +28 -0
  173. package/dist/IdCaptureHoldOnScreen.js +22 -0
  174. package/dist/IdCaptureLayout.css +111 -0
  175. package/dist/IdCaptureNoConnectionScreen.d.ts +28 -0
  176. package/dist/IdCaptureNoConnectionScreen.js +29 -0
  177. package/dist/IdCapturePermissionScreen.d.ts +34 -0
  178. package/dist/IdCapturePermissionScreen.js +45 -0
  179. package/dist/IdCaptureResultScreen.d.ts +59 -0
  180. package/dist/IdCaptureResultScreen.js +89 -0
  181. package/dist/IdCaptureStageScreen.d.ts +69 -0
  182. package/dist/IdCaptureStageScreen.js +88 -0
  183. package/dist/IdCaptureStrings.d.ts +199 -0
  184. package/dist/IdCaptureStrings.js +15 -0
  185. package/dist/IdCaptureTutorialScreen.d.ts +36 -0
  186. package/dist/IdCaptureTutorialScreen.js +30 -0
  187. package/dist/ListScreen.d.ts +95 -0
  188. package/dist/ListScreen.js +46 -0
  189. package/dist/LoaderScreen.d.ts +32 -0
  190. package/dist/LoaderScreen.js +27 -0
  191. package/dist/LoadersStrings.d.ts +20 -0
  192. package/dist/LoadersStrings.js +16 -0
  193. package/dist/NfcCommonIssuesScreen.d.ts +35 -0
  194. package/dist/NfcCommonIssuesScreen.js +48 -0
  195. package/dist/NfcErrorScreen.d.ts +41 -0
  196. package/dist/NfcErrorScreen.js +27 -0
  197. package/dist/NfcLayout.css +36 -0
  198. package/dist/NfcProcessingScreen.d.ts +28 -0
  199. package/dist/NfcProcessingScreen.js +22 -0
  200. package/dist/NfcScanningScreen.d.ts +66 -0
  201. package/dist/NfcScanningScreen.js +61 -0
  202. package/dist/NfcSettingsScreen.d.ts +53 -0
  203. package/dist/NfcSettingsScreen.js +57 -0
  204. package/dist/NfcStrings.d.ts +112 -0
  205. package/dist/NfcStrings.js +7 -0
  206. package/dist/NfcSuccessScreen.d.ts +28 -0
  207. package/dist/NfcSuccessScreen.js +22 -0
  208. package/dist/NfcSymbolScreen.d.ts +39 -0
  209. package/dist/NfcSymbolScreen.js +32 -0
  210. package/dist/NfcTryAgainScreen.d.ts +53 -0
  211. package/dist/NfcTryAgainScreen.js +45 -0
  212. package/dist/NfcTutorialScreen.d.ts +33 -0
  213. package/dist/NfcTutorialScreen.js +24 -0
  214. package/dist/PermissionsAllowScreen.d.ts +44 -0
  215. package/dist/PermissionsAllowScreen.js +38 -0
  216. package/dist/PermissionsBrowserStepsScreen.d.ts +42 -0
  217. package/dist/PermissionsBrowserStepsScreen.js +86 -0
  218. package/dist/PermissionsRequiredScreen.d.ts +37 -0
  219. package/dist/PermissionsRequiredScreen.js +51 -0
  220. package/dist/PermissionsStrings.d.ts +70 -0
  221. package/dist/PermissionsStrings.js +36 -0
  222. package/dist/PhoneInputErrorScreen.d.ts +37 -0
  223. package/dist/PhoneInputErrorScreen.js +47 -0
  224. package/dist/PhoneInputLayout.css +61 -0
  225. package/dist/PhoneInputOtpScreen.d.ts +37 -0
  226. package/dist/PhoneInputOtpScreen.js +44 -0
  227. package/dist/PhoneInputSnaLoadingScreen.d.ts +23 -0
  228. package/dist/PhoneInputSnaLoadingScreen.js +17 -0
  229. package/dist/PhoneInputStrings.d.ts +121 -0
  230. package/dist/PhoneInputStrings.js +13 -0
  231. package/dist/PhoneInputSuccessScreen.d.ts +23 -0
  232. package/dist/PhoneInputSuccessScreen.js +17 -0
  233. package/dist/PhoneInputVerifyScreen.d.ts +41 -0
  234. package/dist/PhoneInputVerifyScreen.js +71 -0
  235. package/dist/ProcessingScreen.d.ts +42 -0
  236. package/dist/ProcessingScreen.js +21 -0
  237. package/dist/QualifiedSignatureAcceptScreen.d.ts +71 -0
  238. package/dist/QualifiedSignatureAcceptScreen.js +86 -0
  239. package/dist/QualifiedSignatureDocumentScreen.d.ts +62 -0
  240. package/dist/QualifiedSignatureDocumentScreen.js +56 -0
  241. package/dist/QualifiedSignatureLayout.css +206 -0
  242. package/dist/QualifiedSignatureProcessingScreen.d.ts +46 -0
  243. package/dist/QualifiedSignatureProcessingScreen.js +48 -0
  244. package/dist/QualifiedSignatureResultScreen.d.ts +65 -0
  245. package/dist/QualifiedSignatureResultScreen.js +76 -0
  246. package/dist/QualifiedSignatureReviewScreen.d.ts +49 -0
  247. package/dist/QualifiedSignatureReviewScreen.js +40 -0
  248. package/dist/QualifiedSignatureStrings.d.ts +222 -0
  249. package/dist/QualifiedSignatureStrings.js +25 -0
  250. package/dist/QualifiedSignatureUploadScreen.d.ts +42 -0
  251. package/dist/QualifiedSignatureUploadScreen.js +35 -0
  252. package/dist/ResultScreen.d.ts +93 -0
  253. package/dist/ResultScreen.js +37 -0
  254. package/dist/ReviewScreen.d.ts +81 -0
  255. package/dist/ReviewScreen.js +56 -0
  256. package/dist/ScreenLayout.css +469 -0
  257. package/dist/ScreenNav.css +43 -0
  258. package/dist/ScreenNav.d.ts +26 -0
  259. package/dist/ScreenNav.js +13 -0
  260. package/dist/ScreenShell.css +130 -0
  261. package/dist/ScreenShell.d.ts +45 -0
  262. package/dist/ScreenShell.js +22 -0
  263. package/dist/TutorialScreen.d.ts +70 -0
  264. package/dist/TutorialScreen.js +24 -0
  265. package/dist/VideoSelfieCameraStepsScreen.d.ts +47 -0
  266. package/dist/VideoSelfieCameraStepsScreen.js +56 -0
  267. package/dist/VideoSelfieErrorScreen.d.ts +63 -0
  268. package/dist/VideoSelfieErrorScreen.js +94 -0
  269. package/dist/VideoSelfieFlipCameraScreen.d.ts +34 -0
  270. package/dist/VideoSelfieFlipCameraScreen.js +38 -0
  271. package/dist/VideoSelfieFlipIdScreen.d.ts +34 -0
  272. package/dist/VideoSelfieFlipIdScreen.js +29 -0
  273. package/dist/VideoSelfieIdCaptureScreen.d.ts +75 -0
  274. package/dist/VideoSelfieIdCaptureScreen.js +86 -0
  275. package/dist/VideoSelfieLayout.css +259 -0
  276. package/dist/VideoSelfiePermissionRequiredScreen.d.ts +35 -0
  277. package/dist/VideoSelfiePermissionRequiredScreen.js +45 -0
  278. package/dist/VideoSelfiePermissionScreen.d.ts +51 -0
  279. package/dist/VideoSelfiePermissionScreen.js +44 -0
  280. package/dist/VideoSelfieProcessingScreen.d.ts +28 -0
  281. package/dist/VideoSelfieProcessingScreen.js +22 -0
  282. package/dist/VideoSelfieRetryScreen.d.ts +31 -0
  283. package/dist/VideoSelfieRetryScreen.js +32 -0
  284. package/dist/VideoSelfieSelfieCaptureScreen.d.ts +52 -0
  285. package/dist/VideoSelfieSelfieCaptureScreen.js +58 -0
  286. package/dist/VideoSelfieSpeakScreen.d.ts +64 -0
  287. package/dist/VideoSelfieSpeakScreen.js +95 -0
  288. package/dist/VideoSelfieStrings.d.ts +196 -0
  289. package/dist/VideoSelfieStrings.js +14 -0
  290. package/dist/VideoSelfieSuccessScreen.d.ts +25 -0
  291. package/dist/VideoSelfieSuccessScreen.js +19 -0
  292. package/dist/VideoSelfieTutorialScreen.d.ts +33 -0
  293. package/dist/VideoSelfieTutorialScreen.js +41 -0
  294. package/dist/ViewfinderScreen.css +107 -0
  295. package/dist/ViewfinderScreen.d.ts +40 -0
  296. package/dist/ViewfinderScreen.js +26 -0
  297. package/dist/WatchlistBusinessFormScreen.d.ts +61 -0
  298. package/dist/WatchlistBusinessFormScreen.js +85 -0
  299. package/dist/WatchlistBusinessProcessingScreen.d.ts +25 -0
  300. package/dist/WatchlistBusinessProcessingScreen.js +19 -0
  301. package/dist/WatchlistBusinessStrings.d.ts +95 -0
  302. package/dist/WatchlistBusinessStrings.js +19 -0
  303. package/dist/WatchlistBusinessSuccessScreen.d.ts +29 -0
  304. package/dist/WatchlistBusinessSuccessScreen.js +23 -0
  305. package/dist/flows.d.ts +216 -0
  306. package/dist/flows.js +516 -0
  307. package/dist/index.d.ts +145 -0
  308. package/dist/index.js +130 -0
  309. package/dist/styles.css +33 -0
  310. package/dist/types.d.ts +56 -0
  311. package/dist/types.js +8 -0
  312. package/package.json +689 -0
  313. package/samples/camera-surface.png +0 -0
  314. package/samples/document-still.png +0 -0
  315. package/samples/document-thumbnail.png +0 -0
  316. package/samples/face-match-bottom.png +0 -0
  317. package/samples/face-match-left.png +0 -0
  318. package/samples/face-match-right.png +0 -0
  319. package/samples/id-back-blur.png +0 -0
  320. package/samples/id-back-dark.png +0 -0
  321. package/samples/id-back-glare.png +0 -0
  322. package/samples/id-back.png +0 -0
  323. package/samples/id-front-blur.png +0 -0
  324. package/samples/id-front-dark.png +0 -0
  325. package/samples/id-front-glare.png +0 -0
  326. package/samples/id-front.png +0 -0
  327. package/samples/id-passport.png +0 -0
  328. package/samples/selfie-glasses.png +0 -0
  329. package/samples/selfie-hat.png +0 -0
  330. package/samples/selfie-mask.png +0 -0
  331. package/samples/selfie.png +0 -0
  332. package/samples/video-selfie-camera.png +0 -0
  333. package/src/CaptureOverlay.css +55 -0
  334. package/src/CaptureOverlay.tsx +56 -0
  335. package/src/CaptureScreen.tsx +121 -0
  336. package/src/CurpConfirmScreen.tsx +75 -0
  337. package/src/CurpEnterScreen.tsx +149 -0
  338. package/src/CurpGenerateScreen.tsx +172 -0
  339. package/src/CurpLayout.css +92 -0
  340. package/src/CurpProcessingScreen.tsx +75 -0
  341. package/src/CurpResultScreen.tsx +80 -0
  342. package/src/CurpStrings.ts +178 -0
  343. package/src/DataSharingConsentConsentScreen.tsx +223 -0
  344. package/src/DataSharingConsentLayout.css +78 -0
  345. package/src/DataSharingConsentStrings.ts +144 -0
  346. package/src/DemoScreensEndScreen.tsx +56 -0
  347. package/src/DemoScreensStrings.ts +31 -0
  348. package/src/DocumentCaptureCaptureScreen.tsx +135 -0
  349. package/src/DocumentCaptureCommonIssuesScreen.tsx +97 -0
  350. package/src/DocumentCaptureConfirmImageScreen.tsx +112 -0
  351. package/src/DocumentCaptureConfirmUploadScreen.tsx +113 -0
  352. package/src/DocumentCaptureGenericErrorScreen.tsx +82 -0
  353. package/src/DocumentCaptureIllustration.tsx +153 -0
  354. package/src/DocumentCaptureLayout.css +226 -0
  355. package/src/DocumentCaptureMethodSelectionScreen.tsx +151 -0
  356. package/src/DocumentCaptureNextPageScreen.tsx +82 -0
  357. package/src/DocumentCaptureNoConnectionScreen.tsx +77 -0
  358. package/src/DocumentCaptureStrings.ts +192 -0
  359. package/src/DocumentCaptureTutorialScreen.tsx +79 -0
  360. package/src/EkybAddressDetailsScreen.tsx +200 -0
  361. package/src/EkybBusinessDetailsScreen.tsx +147 -0
  362. package/src/EkybCountryScreen.tsx +124 -0
  363. package/src/EkybErrorScreen.tsx +61 -0
  364. package/src/EkybOwnersScreen.tsx +230 -0
  365. package/src/EkybProcessingScreen.tsx +57 -0
  366. package/src/EkybStrings.ts +239 -0
  367. package/src/EkybSuccessScreen.tsx +54 -0
  368. package/src/EkycDetailsScreen.tsx +178 -0
  369. package/src/EkycErrorScreen.tsx +64 -0
  370. package/src/EkycLayout.css +39 -0
  371. package/src/EkycLicenseScreen.tsx +164 -0
  372. package/src/EkycProcessingScreen.tsx +60 -0
  373. package/src/EkycStrings.ts +157 -0
  374. package/src/EkycSuccessScreen.tsx +63 -0
  375. package/src/ElectronicSignatureDrawScreen.tsx +127 -0
  376. package/src/ElectronicSignatureErrorScreen.tsx +74 -0
  377. package/src/ElectronicSignatureLayout.css +80 -0
  378. package/src/ElectronicSignatureReviewScreen.tsx +106 -0
  379. package/src/ElectronicSignatureStrings.ts +67 -0
  380. package/src/ElectronicSignatureSuccessScreen.tsx +67 -0
  381. package/src/EmailInputErrorScreen.tsx +67 -0
  382. package/src/EmailInputOtpScreen.tsx +169 -0
  383. package/src/EmailInputProcessingScreen.tsx +67 -0
  384. package/src/EmailInputStrings.ts +166 -0
  385. package/src/EmailInputSuccessScreen.tsx +72 -0
  386. package/src/EmailInputVerifyScreen.tsx +117 -0
  387. package/src/ErrorScreensScreen.tsx +149 -0
  388. package/src/ErrorScreensStrings.ts +66 -0
  389. package/src/FaceCaptureCapturingScreen.tsx +99 -0
  390. package/src/FaceCaptureLayout.css +18 -0
  391. package/src/FaceCaptureLoadingScreen.tsx +65 -0
  392. package/src/FaceCaptureManualCaptureScreen.tsx +94 -0
  393. package/src/FaceCaptureNoConnectionScreen.tsx +73 -0
  394. package/src/FaceCaptureResultErrorScreen.tsx +86 -0
  395. package/src/FaceCaptureResultSuccessScreen.tsx +49 -0
  396. package/src/FaceCaptureStrings.ts +92 -0
  397. package/src/FaceCaptureTutorialScreen.tsx +77 -0
  398. package/src/FaceMatchComparisonCompactScreen.tsx +51 -0
  399. package/src/FaceMatchComparisonScreen.tsx +201 -0
  400. package/src/FaceMatchLayout.css +264 -0
  401. package/src/FaceMatchResultScreen.tsx +117 -0
  402. package/src/FaceMatchStrings.ts +95 -0
  403. package/src/FormScreen.css +78 -0
  404. package/src/FormScreen.tsx +213 -0
  405. package/src/FormsChoiceScreen.tsx +150 -0
  406. package/src/FormsErrorScreen.tsx +61 -0
  407. package/src/FormsFieldScreen.tsx +198 -0
  408. package/src/FormsLayout.css +45 -0
  409. package/src/FormsLongFormScreen.tsx +295 -0
  410. package/src/FormsStrings.ts +243 -0
  411. package/src/FormsSuccessScreen.tsx +67 -0
  412. package/src/GeolocationBrowserStepsScreen.tsx +173 -0
  413. package/src/GeolocationErrorScreen.tsx +113 -0
  414. package/src/GeolocationIntroScreen.tsx +100 -0
  415. package/src/GeolocationPermissionScreen.tsx +88 -0
  416. package/src/GeolocationStrings.ts +193 -0
  417. package/src/IdCaptureAgeVerificationScreen.tsx +84 -0
  418. package/src/IdCaptureAnalyzingScreen.tsx +94 -0
  419. package/src/IdCaptureCommonIssuesScreen.tsx +109 -0
  420. package/src/IdCaptureDocumentErrorScreen.tsx +92 -0
  421. package/src/IdCaptureDocumentSelectionScreen.tsx +100 -0
  422. package/src/IdCaptureFlipScreen.tsx +66 -0
  423. package/src/IdCaptureHoldOnScreen.tsx +51 -0
  424. package/src/IdCaptureLayout.css +111 -0
  425. package/src/IdCaptureNoConnectionScreen.tsx +68 -0
  426. package/src/IdCapturePermissionScreen.tsx +102 -0
  427. package/src/IdCaptureResultScreen.tsx +197 -0
  428. package/src/IdCaptureStageScreen.tsx +241 -0
  429. package/src/IdCaptureStrings.ts +228 -0
  430. package/src/IdCaptureTutorialScreen.tsx +99 -0
  431. package/src/ListScreen.tsx +213 -0
  432. package/src/LoaderScreen.tsx +69 -0
  433. package/src/LoadersStrings.ts +38 -0
  434. package/src/NfcCommonIssuesScreen.tsx +104 -0
  435. package/src/NfcErrorScreen.tsx +83 -0
  436. package/src/NfcLayout.css +36 -0
  437. package/src/NfcProcessingScreen.tsx +57 -0
  438. package/src/NfcScanningScreen.tsx +127 -0
  439. package/src/NfcSettingsScreen.tsx +124 -0
  440. package/src/NfcStrings.ts +127 -0
  441. package/src/NfcSuccessScreen.tsx +56 -0
  442. package/src/NfcSymbolScreen.tsx +85 -0
  443. package/src/NfcTryAgainScreen.tsx +114 -0
  444. package/src/NfcTutorialScreen.tsx +76 -0
  445. package/src/PermissionsAllowScreen.tsx +90 -0
  446. package/src/PermissionsBrowserStepsScreen.tsx +158 -0
  447. package/src/PermissionsRequiredScreen.tsx +118 -0
  448. package/src/PermissionsStrings.ts +129 -0
  449. package/src/PhoneInputErrorScreen.tsx +104 -0
  450. package/src/PhoneInputLayout.css +61 -0
  451. package/src/PhoneInputOtpScreen.tsx +126 -0
  452. package/src/PhoneInputSnaLoadingScreen.tsx +61 -0
  453. package/src/PhoneInputStrings.ts +136 -0
  454. package/src/PhoneInputSuccessScreen.tsx +56 -0
  455. package/src/PhoneInputVerifyScreen.tsx +153 -0
  456. package/src/ProcessingScreen.tsx +97 -0
  457. package/src/QualifiedSignatureAcceptScreen.tsx +198 -0
  458. package/src/QualifiedSignatureDocumentScreen.tsx +124 -0
  459. package/src/QualifiedSignatureLayout.css +206 -0
  460. package/src/QualifiedSignatureProcessingScreen.tsx +112 -0
  461. package/src/QualifiedSignatureResultScreen.tsx +146 -0
  462. package/src/QualifiedSignatureReviewScreen.tsx +113 -0
  463. package/src/QualifiedSignatureStrings.ts +256 -0
  464. package/src/QualifiedSignatureUploadScreen.tsx +81 -0
  465. package/src/ResultScreen.tsx +211 -0
  466. package/src/ReviewScreen.tsx +196 -0
  467. package/src/ScreenLayout.css +469 -0
  468. package/src/ScreenNav.css +43 -0
  469. package/src/ScreenNav.tsx +46 -0
  470. package/src/ScreenShell.css +130 -0
  471. package/src/ScreenShell.tsx +66 -0
  472. package/src/TutorialScreen.tsx +166 -0
  473. package/src/VideoSelfieCameraStepsScreen.tsx +145 -0
  474. package/src/VideoSelfieErrorScreen.tsx +168 -0
  475. package/src/VideoSelfieFlipCameraScreen.tsx +88 -0
  476. package/src/VideoSelfieFlipIdScreen.tsx +74 -0
  477. package/src/VideoSelfieIdCaptureScreen.tsx +213 -0
  478. package/src/VideoSelfieLayout.css +259 -0
  479. package/src/VideoSelfiePermissionRequiredScreen.tsx +104 -0
  480. package/src/VideoSelfiePermissionScreen.tsx +102 -0
  481. package/src/VideoSelfieProcessingScreen.tsx +68 -0
  482. package/src/VideoSelfieRetryScreen.tsx +92 -0
  483. package/src/VideoSelfieSelfieCaptureScreen.tsx +122 -0
  484. package/src/VideoSelfieSpeakScreen.tsx +237 -0
  485. package/src/VideoSelfieStrings.ts +222 -0
  486. package/src/VideoSelfieSuccessScreen.tsx +64 -0
  487. package/src/VideoSelfieTutorialScreen.tsx +129 -0
  488. package/src/ViewfinderScreen.css +107 -0
  489. package/src/ViewfinderScreen.tsx +113 -0
  490. package/src/WatchlistBusinessFormScreen.tsx +176 -0
  491. package/src/WatchlistBusinessProcessingScreen.tsx +63 -0
  492. package/src/WatchlistBusinessStrings.ts +121 -0
  493. package/src/WatchlistBusinessSuccessScreen.tsx +67 -0
  494. package/src/flows.ts +711 -0
  495. package/src/index.ts +591 -0
  496. package/src/styles.css +33 -0
  497. package/src/types.ts +69 -0
@@ -0,0 +1,169 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaOtp } from '@incodetech/prizma-core-web/otp';
3
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { EmailInputOtpState, EmailInputStrings } from './EmailInputStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ export interface EmailInputOtpScreenProps
9
+ extends Omit<
10
+ PrizmaFormScreenProps,
11
+ 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
12
+ > {
13
+ /** Module copy — this screen reads the `otp` slice. */
14
+ strings: EmailInputStrings;
15
+ /** Which purple `email.OTP.*` section to render. Default `typing`. */
16
+ state?: EmailInputOtpState;
17
+ /** The code as typed. Figma's sample is the alphanumeric `A1B2C3`. */
18
+ value?: string;
19
+ /** How many characters the code carries. Default 6. */
20
+ length?: number;
21
+ screenId?: string;
22
+ overrides?: PrizmaScreenOverrides;
23
+ onAction?: PrizmaScreenActionHandler;
24
+ }
25
+
26
+ /**
27
+ * Email Input — the one-time-code screen, built on the Form archetype
28
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
29
+ *
30
+ * ONE screen for all five purple `email.OTP.*` sections (`typing` / `filled` /
31
+ * `processing` and the module's TWO error sections) — identical layout,
32
+ * differing in the state of the code field, the CTA, and the line under it.
33
+ *
34
+ * The code field is Core's `PrizmaOtp`, which is a single centred, letter-spaced
35
+ * field rather than a segmented box row — exactly what the Figma sections draw
36
+ * ("A1B2C3" as one line of type inside one 56px field).
37
+ *
38
+ * `processing` deliberately does NOT use Core's `PrizmaOtp.loading`. That prop
39
+ * centres the spinner INSIDE the code field (owner definition 2026-07-12), but
40
+ * the purple section draws the field simply DISABLED with the code still
41
+ * legible and puts the spinner in the CTA — the same treatment as
42
+ * `verify.loading`, which is what makes the module read consistently.
43
+ * DEVIATIONS #PI-5.
44
+ *
45
+ * DEVIATIONS #EI-3 — the band under the CTA is NOT one treatment for all five
46
+ * sections, which is this module's own finding rather than anything inherited
47
+ * from Phone Input. Measured on the 390 frames, three different treatments:
48
+ * - `typing` (146:37111) draws a re-send COUNTDOWN ("Resend code in 30s") —
49
+ * plain secondary copy, NO links, because the code has only just been sent
50
+ * and re-sending it immediately is meaningless
51
+ * - `filled` (150:38395) and both error sections (150:63411 generic,
52
+ * 150:70717 invalid-code) draw the two-link sentence
53
+ * - `processing` (150:63409) draws that same sentence INERT — every word in
54
+ * the secondary ink, no underline, nothing clickable, because the request is
55
+ * in flight. Rendering the labels as plain text is what produces that, so
56
+ * `processing` reads differently from `filled` in the band as well as in the
57
+ * field.
58
+ * The consequence for a host: `resendCountdown` and `resendPrompt` are not
59
+ * alternatives it may choose between — which one is drawn is decided by
60
+ * `state`, so both must be supplied for the five sections to render as drawn.
61
+ */
62
+ export const EmailInputOtpScreen = forwardRef<HTMLDivElement, EmailInputOtpScreenProps>(
63
+ (
64
+ {
65
+ strings,
66
+ state = 'typing',
67
+ value,
68
+ length = 6,
69
+ screenId = `email-input-otp-${state}`,
70
+ overrides,
71
+ onAction,
72
+ ...shell
73
+ },
74
+ ref,
75
+ ) => {
76
+ const busy = state === 'processing';
77
+ const invalid = state === 'error' || state === 'errorGeneric';
78
+ const focused = state === 'typing';
79
+
80
+ const errorText =
81
+ state === 'error'
82
+ ? strings.otp.errorText
83
+ : state === 'errorGeneric'
84
+ ? strings.otp.genericErrorText
85
+ : undefined;
86
+
87
+ /* `typing` shows the countdown; every other section shows the sentence. */
88
+ const countdown = focused ? strings.otp.resendCountdown : undefined;
89
+
90
+ /* Both links are wrapped by the same helper so the inert (`processing`)
91
+ rendering cannot drift from the actionable one — only the element type
92
+ changes. Each link emits a DISTINCT action: re-sending the code and
93
+ returning to email entry are different flows a host must tell apart
94
+ (DEVIATIONS #PI-10). */
95
+ const link = (label: string, type: 'secondary' | 'tertiary'): ReactNode =>
96
+ busy ? (
97
+ label
98
+ ) : (
99
+ <button
100
+ type="button"
101
+ className="prizma-screen-layout__inline-link"
102
+ onClick={() => onAction?.({ type, screenId })}
103
+ >
104
+ {label}
105
+ </button>
106
+ );
107
+
108
+ const resendLine: ReactNode = countdown ? (
109
+ <p className="prizma-screen-layout__inline-prompt">{countdown}</p>
110
+ ) : strings.otp.resendPrompt ? (
111
+ <p className="prizma-screen-layout__inline-prompt">
112
+ {strings.otp.resendPrompt}{' '}
113
+ {strings.otp.resendLabel ? link(strings.otp.resendLabel, 'secondary') : null}
114
+ {strings.otp.changeEmailLabel ? (
115
+ <>
116
+ {' '}
117
+ {strings.otp.resendSeparator}{' '}
118
+ {link(strings.otp.changeEmailLabel, 'tertiary')}
119
+ </>
120
+ ) : null}
121
+ </p>
122
+ ) : undefined;
123
+
124
+ return (
125
+ <PrizmaFormScreen
126
+ ref={ref}
127
+ title={strings.otp.title}
128
+ subtitle={strings.otp.subtitle}
129
+ ctaLabel={strings.otp.ctaLabel}
130
+ /* Figma greys the CTA on both error sections; `typing` keeps it live. */
131
+ ctaDisabled={invalid}
132
+ /* The spinner rides the CTA, not the field (see the note above). */
133
+ ctaLoading={busy}
134
+ ctaLoadingLabel={strings.otp.ctaLoadingLabel}
135
+ linkContent={resendLine}
136
+ verifiedLabel={strings.verifiedLabel}
137
+ navLabel={strings.navLabel}
138
+ screenId={screenId}
139
+ overrides={overrides}
140
+ onAction={onAction}
141
+ {...shell}
142
+ >
143
+ <PrizmaOtp
144
+ length={length}
145
+ /* Core's own static-focus modifier, the same mechanism the verify
146
+ field uses: `typing` is the one section Figma draws focused, and
147
+ `filled` sits on the resting border. DEVIATIONS #PI-7. */
148
+ className={focused ? 'prizma-input-otp--focused' : undefined}
149
+ aria-label={strings.otp.fieldLabel}
150
+ /* Uncontrolled, for the same reason as the email field: `readOnly`
151
+ would paint Core's DISABLED surface on the resting states, which is
152
+ grey Figma does not draw there (DEVIATIONS #PI-6). */
153
+ defaultValue={value ?? ''}
154
+ /* Figma's code is alphanumeric ("A1B2C3"), so the field must not
155
+ advertise a numeric keypad the way Core's OTP default does. */
156
+ inputMode="text"
157
+ /* `processing` is the one section Figma greys — the code stays
158
+ legible while the check runs. */
159
+ disabled={busy}
160
+ error={invalid}
161
+ errorText={errorText}
162
+ />
163
+ </PrizmaFormScreen>
164
+ );
165
+ },
166
+ );
167
+ EmailInputOtpScreen.displayName = 'EmailInputOtpScreen';
168
+
169
+ export default EmailInputOtpScreen;
@@ -0,0 +1,67 @@
1
+ import React, { forwardRef } from 'react';
2
+ import {
3
+ PrizmaProcessingScreen,
4
+ type PrizmaProcessingScreenProps,
5
+ } from './ProcessingScreen';
6
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
7
+ import type { EmailInputStrings } from './EmailInputStrings';
8
+ import './ScreenLayout.css';
9
+
10
+ export interface EmailInputProcessingScreenProps
11
+ extends Omit<
12
+ PrizmaProcessingScreenProps,
13
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
14
+ > {
15
+ /** Module copy — this screen reads the `processing` slice. */
16
+ strings: EmailInputStrings;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+
22
+ /**
23
+ * Email Input — the code is being checked, built on the Processing archetype
24
+ * (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
25
+ *
26
+ * Figma: the purple `email.OTP.processing` section holding `email.processing`
27
+ * — a separate SCREEN from the in-form `email.OTP.processing` state, which
28
+ * keeps the code field and only swaps the CTA. This one is a pure spinner + H2
29
+ * with no button, which is exactly the case §6-F reserves for C rather than the
30
+ * Result archetype.
31
+ *
32
+ * Figma draws this section with a close ✕ in the nav and no verified tag; both
33
+ * are owner-settled and neither is reproduced — GUIDELINES §3 forbids the ✕
34
+ * (DEVIATIONS #PI-9, a standing Wave-3 ruling) and the chrome stays constant
35
+ * across the module's screens (#F-30, #F-34, #PI-8).
36
+ */
37
+ export const EmailInputProcessingScreen = forwardRef<
38
+ HTMLDivElement,
39
+ EmailInputProcessingScreenProps
40
+ >(
41
+ (
42
+ {
43
+ strings,
44
+ screenId = 'email-input-processing',
45
+ overrides,
46
+ onAction,
47
+ ...shell
48
+ },
49
+ ref,
50
+ ) => (
51
+ <PrizmaProcessingScreen
52
+ ref={ref}
53
+ status="loading"
54
+ title={strings.processing.title}
55
+ subtitle={strings.processing.subtitle}
56
+ verifiedLabel={strings.verifiedLabel}
57
+ navLabel={strings.navLabel}
58
+ screenId={screenId}
59
+ overrides={overrides}
60
+ onAction={onAction}
61
+ {...shell}
62
+ />
63
+ ),
64
+ );
65
+ EmailInputProcessingScreen.displayName = 'EmailInputProcessingScreen';
66
+
67
+ export default EmailInputProcessingScreen;
@@ -0,0 +1,166 @@
1
+ // Email Input — copy contract.
2
+ //
3
+ // Figma: `📨 Email - Screens specs + Localization` (IovIhDAPjR7zxjC4NKZzfq,
4
+ // page 5:13191). Four purple parent sections:
5
+ // email.verifyEmail — default / typing / filled / error / loading
6
+ // email.OTP — typing / filled / processing / error(×2) + email.processing
7
+ // email.error — somethingWentWrong
8
+ // email.success — success
9
+ //
10
+ // Sibling of Phone Input (`PhoneInputStrings.ts`) and deliberately shaped the
11
+ // same way: same archetypes, same state axes, same inline-link split. The two
12
+ // real differences are that the entry field is a single email TextField (no
13
+ // dial-code pairing, so no `Input / Combined` and no country list) and that the
14
+ // module draws no Silent-Network-Auth and no connectivity section.
15
+ //
16
+ // No hardcoded English anywhere in a screen: every visible string arrives here,
17
+ // so the host's locale pack drives the module (the Figma file ships ES + PT
18
+ // columns alongside EN).
19
+
20
+ /**
21
+ * The `email.verifyEmail.*` sections. All five draw the SAME layout — nav →
22
+ * Title (H2 + H5) → Spacing/32 → a single email field → CTA → tag — and differ
23
+ * only in field content and CTA state, which is what GUIDELINES §6-E means by
24
+ * "states are separate screens sharing the identical layout":
25
+ * - `default` — empty field showing the placeholder, CTA enabled
26
+ * - `typing` — focused field with a partial address
27
+ * - `filled` — focused field with a complete address
28
+ * - `error` — negative field + clear ✕ + the invalid-format row
29
+ * - `loading` — field greyed while the code is requested, spinner in the CTA
30
+ */
31
+ export type EmailInputVerifyState =
32
+ | 'default'
33
+ | 'typing'
34
+ | 'filled'
35
+ | 'error'
36
+ | 'loading';
37
+
38
+ /**
39
+ * The `email.OTP.*` sections — same layout, different code-field state:
40
+ * - `typing` — focused field, partial code, CTA enabled, and the line
41
+ * under the CTA is the RE-SEND COUNTDOWN, not the two links
42
+ * - `filled` — resting field, complete code, the two-link line
43
+ * - `processing` — code submitted: field greyed, spinner in the CTA, and the
44
+ * same sentence rendered INERT (no links)
45
+ * - `error` — wrong code: negative field + "Invalid code…", CTA disabled
46
+ * - `errorGeneric` — the second purple error section, same treatment carrying
47
+ * the generic "Something went wrong" row instead
48
+ */
49
+ export type EmailInputOtpState =
50
+ | 'typing'
51
+ | 'filled'
52
+ | 'processing'
53
+ | 'error'
54
+ | 'errorGeneric';
55
+
56
+ export interface EmailInputStrings {
57
+ /** "verified by" attribution in the footer tag. */
58
+ verifiedLabel: string;
59
+ /** Accessible name for the logo nav row. */
60
+ navLabel?: string;
61
+
62
+ /** email.verifyEmail.* */
63
+ verify: {
64
+ /** H2 ("Verify your email"). */
65
+ title: string;
66
+ /** H5 ("We'll send you a code to ensure it's yours"). */
67
+ subtitle: string;
68
+ /** Field placeholder ("Email"). */
69
+ placeholder: string;
70
+ /**
71
+ * Accessible label for the email field.
72
+ *
73
+ * DEVIATIONS #EI-2 — Figma draws NO visible label row above the field: the
74
+ * placeholder ("Email") carries the whole meaning, measured on
75
+ * `email.verifyYourEmail.default` (28:13802) and unchanged across all five
76
+ * purple sections. A screen reader would therefore reach an unnamed input,
77
+ * so the copy rides `aria-label` instead of a drawn row — Core wins over
78
+ * Figma on the accessible name, and nothing new is painted. This is the
79
+ * #PI-4 precedent applied unchanged; Phone Input resolved the identical
80
+ * conflict the same way.
81
+ */
82
+ fieldLabel?: string;
83
+ /** Accessible name for the clear ✕ affordance. Core ships no English
84
+ * default, so the row is only drawn when this is supplied. */
85
+ clearLabel?: string;
86
+ /** Error row on the `error` state ("Invalid email format"). */
87
+ errorText: string;
88
+ /** Primary CTA ("Continue"). */
89
+ ctaLabel: string;
90
+ /** Accessible busy label while the code is requested (`loading`). */
91
+ ctaLoadingLabel?: string;
92
+ };
93
+
94
+ /** email.OTP.* */
95
+ otp: {
96
+ /** H2 ("Enter the code we've sent to your email"). */
97
+ title: string;
98
+ /** H5 — carries the masked destination address, when a section shows one. */
99
+ subtitle?: string;
100
+ /** Accessible label for the code field (no visible label row in Figma). */
101
+ fieldLabel?: string;
102
+ /** Error row on `error` ("Invalid code. Please try again."). */
103
+ errorText: string;
104
+ /** Error row on `errorGeneric` ("Something went wrong"). */
105
+ genericErrorText: string;
106
+ /**
107
+ * The `typing` section draws a COUNTDOWN instead of the two links —
108
+ * "Resend code in 30s". Pre-formatted by the host, which owns the clock
109
+ * (a screen is one static spec state and runs no timer).
110
+ */
111
+ resendCountdown?: string;
112
+ /**
113
+ * The line under the CTA on `filled` / `processing` / both error sections
114
+ * is ONE sentence carrying TWO separate links:
115
+ * "Didn't receive the code? [Resend code] or [Change email]".
116
+ * Split into four strings because the links are independently actionable —
117
+ * the host must tell a re-send from a return to email entry — and because a
118
+ * locale needs to order the fragments itself. Omit `resendPrompt` to render
119
+ * no line at all. DEVIATIONS #PI-10.
120
+ */
121
+ resendPrompt?: string;
122
+ /** First link — re-sends the code. Emits `secondary`. */
123
+ resendLabel?: string;
124
+ /** The conjunction between the two links ("or"). */
125
+ resendSeparator?: string;
126
+ /** Second link — returns to email entry. Emits `tertiary`. */
127
+ changeEmailLabel?: string;
128
+ /** Primary CTA. */
129
+ ctaLabel: string;
130
+ /** Accessible / visible busy copy while the code is checked (`processing`). */
131
+ ctaLoadingLabel?: string;
132
+ };
133
+
134
+ /** email.OTP → `email.processing`: the post-submit spinner screen. */
135
+ processing: {
136
+ /** H2 shown under the spinner ("Processing…"). */
137
+ title: string;
138
+ subtitle?: string;
139
+ };
140
+
141
+ /** email.success */
142
+ success: {
143
+ /** H2 ("Email verified!"). */
144
+ title: string;
145
+ subtitle?: string;
146
+ };
147
+
148
+ /**
149
+ * email.error.somethingWentWrong.
150
+ *
151
+ * DEVIATIONS #EI-5 — this is the module's ONLY error verdict. The purple
152
+ * `email.error` section (3058:103116) holds exactly one screen, and the file
153
+ * draws no connectivity section anywhere. Phone Input's error screen carries
154
+ * a `variant` axis precisely because its Figma splits `somethingWentWrong`
155
+ * from a no-connection screen with a Wi-Fi glyph; this module has nothing to
156
+ * switch between, so `EmailInputErrorScreen` ships NO `variant` prop and no
157
+ * Wi-Fi glyph. Adding either would be inventing a state the spec does not
158
+ * have. If a connectivity section is added upstream, this row is where the
159
+ * axis gets reinstated.
160
+ */
161
+ error: {
162
+ title: string;
163
+ subtitle?: string;
164
+ ctaLabel: string;
165
+ };
166
+ }
@@ -0,0 +1,72 @@
1
+ import React, { forwardRef } from 'react';
2
+ import {
3
+ PrizmaProcessingScreen,
4
+ type PrizmaProcessingScreenProps,
5
+ } from './ProcessingScreen';
6
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
7
+ import type { EmailInputStrings } from './EmailInputStrings';
8
+ import './ScreenLayout.css';
9
+
10
+ export interface EmailInputSuccessScreenProps
11
+ extends Omit<
12
+ PrizmaProcessingScreenProps,
13
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
14
+ > {
15
+ /** Module copy — this screen reads the `success` slice. */
16
+ strings: EmailInputStrings;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+
22
+ /**
23
+ * Email Input — the verified verdict, built on the Processing archetype
24
+ * (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
25
+ *
26
+ * Figma: the purple `email.success` section. A centred status mark over a bare
27
+ * H2 ("Email verified!") with **no CTA and no subtitle** — the module hands
28
+ * control straight back to the flow.
29
+ *
30
+ * DEVIATIONS #EI-4 — this screen sits on archetype C while its Phone Input
31
+ * sibling sits on F, and that split is deliberate, not an oversight. Measured
32
+ * on `email.success` (31:19307): mark + H2 and then nothing — the CTA band is
33
+ * empty all the way down to the browser chrome, where the error verdict
34
+ * (40:33375) does draw "Try again" in the same slot. `phoneNumber.success`
35
+ * draws a button; `email.success` does not. §6-F reserves the Result archetype
36
+ * for "every verdict screen that needs a button" and keeps C as the pure
37
+ * no-button case, so following the archetype rule across two modules whose
38
+ * Figma disagrees is what produces two different archetypes here. Putting this
39
+ * screen on F to match its sibling would draw a button the spec omits.
40
+ *
41
+ * The mark is Core's outline status icon via `PrizmaTitle`'s icon slot — the
42
+ * module Figma still draws the two-tone filled disc, one icon sweep behind
43
+ * (DEVIATIONS #15, unchanged here).
44
+ */
45
+ export const EmailInputSuccessScreen = forwardRef<HTMLDivElement, EmailInputSuccessScreenProps>(
46
+ (
47
+ {
48
+ strings,
49
+ screenId = 'email-input-success',
50
+ overrides,
51
+ onAction,
52
+ ...shell
53
+ },
54
+ ref,
55
+ ) => (
56
+ <PrizmaProcessingScreen
57
+ ref={ref}
58
+ status="success"
59
+ title={strings.success.title}
60
+ subtitle={strings.success.subtitle}
61
+ verifiedLabel={strings.verifiedLabel}
62
+ navLabel={strings.navLabel}
63
+ screenId={screenId}
64
+ overrides={overrides}
65
+ onAction={onAction}
66
+ {...shell}
67
+ />
68
+ ),
69
+ );
70
+ EmailInputSuccessScreen.displayName = 'EmailInputSuccessScreen';
71
+
72
+ export default EmailInputSuccessScreen;
@@ -0,0 +1,117 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
3
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { EmailInputStrings, EmailInputVerifyState } from './EmailInputStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ export interface EmailInputVerifyScreenProps
9
+ extends Omit<
10
+ PrizmaFormScreenProps,
11
+ 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
12
+ > {
13
+ /** Module copy — this screen reads the `verify` slice. */
14
+ strings: EmailInputStrings;
15
+ /** Which purple `email.verifyEmail.*` section to render. Default `default`. */
16
+ state?: EmailInputVerifyState;
17
+ /** The address as typed. Empty renders the placeholder (`default`). */
18
+ value?: string;
19
+ screenId?: string;
20
+ overrides?: PrizmaScreenOverrides;
21
+ onAction?: PrizmaScreenActionHandler;
22
+ }
23
+
24
+ /**
25
+ * Email Input — the address-entry screen, built on the Form archetype
26
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
27
+ *
28
+ * ONE screen for all five purple `email.verifyEmail.*` sections
29
+ * (`default` / `typing` / `filled` / `error` / `loading`): measured against the
30
+ * 390 frames they share an identical layout — nav → Title (H2 + H5) →
31
+ * Spacing/32 → the email field → CTA → tag — and differ ONLY in field content
32
+ * and CTA state.
33
+ *
34
+ * Where this parts company with its Phone Input sibling: there is no dial-code
35
+ * pairing here, so no `Input / Combined` row and no module CSS at all — a bare
36
+ * `PrizmaTextField` is the whole field stack, and every offset stays the
37
+ * archetype's.
38
+ *
39
+ * Field treatments, one per Figma frame rather than one for all:
40
+ * - `default` — resting field, placeholder only
41
+ * - `typing` / `filled` — Figma draws BOTH with the focused blue border and a
42
+ * caret, differing only in how much of the address is typed
43
+ * - `error` — Core's negative treatment plus the clear ✕ Figma draws on this
44
+ * section alone
45
+ * - `loading` — the one section Figma greys, with the spinner in the CTA
46
+ *
47
+ * Core's `readOnly` is deliberately NOT used to make the field static: it
48
+ * paints the DISABLED surface (owner definition 2026-07-12), which would grey
49
+ * the four resting states Figma draws white. The field is uncontrolled instead
50
+ * (DEVIATIONS #PI-6).
51
+ */
52
+ export const EmailInputVerifyScreen = forwardRef<HTMLDivElement, EmailInputVerifyScreenProps>(
53
+ (
54
+ {
55
+ strings,
56
+ state = 'default',
57
+ value,
58
+ screenId = `email-input-verify-${state}`,
59
+ overrides,
60
+ onAction,
61
+ ...shell
62
+ },
63
+ ref,
64
+ ) => {
65
+ const busy = state === 'loading';
66
+ const invalid = state === 'error';
67
+ const focused = state === 'typing' || state === 'filled';
68
+
69
+ return (
70
+ <PrizmaFormScreen
71
+ ref={ref}
72
+ title={strings.verify.title}
73
+ subtitle={strings.verify.subtitle}
74
+ ctaLabel={strings.verify.ctaLabel}
75
+ /* Figma's `loading` section swaps the CTA label for Core's spinner. */
76
+ ctaLoading={busy}
77
+ ctaLoadingLabel={strings.verify.ctaLoadingLabel}
78
+ verifiedLabel={strings.verifiedLabel}
79
+ navLabel={strings.navLabel}
80
+ screenId={screenId}
81
+ overrides={overrides}
82
+ onAction={onAction}
83
+ {...shell}
84
+ >
85
+ <PrizmaTextField
86
+ className={
87
+ /* Core's OWN static-focus modifier — the class its CSS already
88
+ implements beside `:focus-within`. `PrizmaTextField` has no
89
+ `forceState` prop the way `PrizmaDropdown` does, so this is how a
90
+ static spec state draws the focus ring without redeclaring any
91
+ styling (DEVIATIONS #PI-7). */
92
+ focused ? 'prizma-input-textfield--focused' : undefined
93
+ }
94
+ type="email"
95
+ inputMode="email"
96
+ autoComplete="email"
97
+ /* Figma's field has no visible label row — the placeholder carries
98
+ the meaning — so the copy rides `aria-label` (DEVIATIONS #PI-4). */
99
+ aria-label={strings.verify.fieldLabel}
100
+ placeholder={strings.verify.placeholder}
101
+ /* Uncontrolled: a screen is one static spec state, so no `onChange`
102
+ is needed and no warning is raised. */
103
+ defaultValue={value ?? ''}
104
+ disabled={busy}
105
+ error={invalid}
106
+ errorText={invalid ? strings.verify.errorText : undefined}
107
+ /* The clear ✕ is drawn on the `error` section only. */
108
+ clearable={invalid}
109
+ clearLabel={strings.verify.clearLabel}
110
+ />
111
+ </PrizmaFormScreen>
112
+ );
113
+ },
114
+ );
115
+ EmailInputVerifyScreen.displayName = 'EmailInputVerifyScreen';
116
+
117
+ export default EmailInputVerifyScreen;