@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,178 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
3
+ import { PrizmaDateField } from '@incodetech/prizma-core-web/date-field';
4
+ import { PrizmaStepper } from '@incodetech/prizma-core-web/stepper';
5
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
6
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
7
+ import type { EkycDetailsState, EkycDetailsValues, EkycStrings } from './EkycStrings';
8
+ import './ScreenLayout.css';
9
+ import './EkycLayout.css';
10
+
11
+ export interface EkycDetailsScreenProps
12
+ extends Omit<
13
+ PrizmaFormScreenProps,
14
+ | 'title'
15
+ | 'subtitle'
16
+ | 'ctaLabel'
17
+ | 'ctaLoading'
18
+ | 'ctaLoadingLabel'
19
+ | 'verifiedLabel'
20
+ | 'children'
21
+ | 'navLabel'
22
+ | 'linkLabel'
23
+ | 'linkContent'
24
+ | 'progress'
25
+ > {
26
+ /** Module copy โ€” this screen reads the `details` slice. */
27
+ strings: EkycStrings;
28
+ /** Which page-1 purple section to render. Default `default`. */
29
+ state?: EkycDetailsState;
30
+ /** The values the fields start with. Empty renders the resting empty field. */
31
+ values?: EkycDetailsValues;
32
+ screenId?: string;
33
+ overrides?: PrizmaScreenOverrides;
34
+ onAction?: PrizmaScreenActionHandler;
35
+ }
36
+
37
+ /**
38
+ * eKYC โ€” page 1, the applicant's identity data, built on the Form archetype
39
+ * (GUIDELINES.md ยง6-E, `PrizmaFormScreen`).
40
+ *
41
+ * ONE screen for all three page-1 purple sections (`default` 2101:7877,
42
+ * `focused` 2101:8159, `filled` 5849:60225): measured against the 390 frames
43
+ * they share an identical skeleton โ€” nav โ†’ Title โ†’ Spacing/32 โ†’ four labelled
44
+ * fields at Spacing/16 โ†’ "Continue" โ†’ tag (the archetype's own offsets, and the
45
+ * exact ones Figma draws: `middle container` puts Title at 8, `container 1` at
46
+ * 99, and stacks the fields at 0 / 94 / 188 / 282, i.e. 78-tall fields with a
47
+ * flat 16 between) โ€” and differ ONLY in field content and field treatment.
48
+ *
49
+ * Four things are deliberate, each one a lesson an earlier module paid for:
50
+ *
51
+ * 1. The fields are UNCONTROLLED (`defaultValue`). A screen is one static spec
52
+ * state, so no `onChange` is needed โ€” and Core's `readOnly`, the other way
53
+ * to freeze a field, paints the DISABLED grey surface on sections Figma
54
+ * draws white (#PI-6). Page 1 greys nothing, so nothing here is `disabled`.
55
+ * 2. `focused` gets Core's OWN `--focused` modifier through `className` โ€” the
56
+ * class its CSS already implements beside `:focus-within`. `PrizmaTextField`
57
+ * still has no `forceState` prop, unlike `PrizmaDropdown` (#PI-7); nothing
58
+ * is re-styled here.
59
+ * 3. The clear โœ• is asked for ONLY on the focused field, the one field
60
+ * 2101:8159 draws it in. `clearable` alone would be a prop that silently
61
+ * does nothing โ€” Core reveals the button under `:focus-within`, a guard a
62
+ * static spec state can never satisfy โ€” so `EkycLayout.css` releases that
63
+ * one guard, the same idiom (and the same Core request) as
64
+ * `CurpLayout.css`'s error rule. No โœ• glyph is declared here.
65
+ * 4. Date of Birth is Core's `PrizmaDateField`, not a text field with a bolted-on
66
+ * icon: the frame's trailing glyph is the date kind's own calendar
67
+ * affordance, and the DD/MM/YYYY value Figma fills in ("14/03/1989") is the
68
+ * mask that kind applies.
69
+ *
70
+ * The required asterisk is Core's `requiredHint` suffix on a `required` field โ€”
71
+ * the label row Figma draws as "First name *" โ€” so Middle name, the one
72
+ * optional field, correctly renders none.
73
+ *
74
+ * Figma draws a two-segment journey bar between the nav and the title on every
75
+ * page-1 frame, and it is the only chrome that separates page 1 from page 2.
76
+ * Archetype E had no slot above the title; the gap is now CLOSED in the
77
+ * archetype (`PrizmaFormScreen.progress`, offsets in `ScreenLayout.css`) rather
78
+ * than worked around here, and the bar itself is Core's shipped `PrizmaStepper`
79
+ * โ€” no two-div bar is hand-rolled. All three page-1 sections draw segment 1
80
+ * solid brand blue and segment 2 grey, i.e. `steps={2} currentState="Start"`,
81
+ * with the icons row off (the frames draw the bar alone). DEVIATIONS #EK-1.
82
+ */
83
+ export const EkycDetailsScreen = forwardRef<HTMLDivElement, EkycDetailsScreenProps>(
84
+ (
85
+ {
86
+ strings,
87
+ state = 'default',
88
+ values,
89
+ screenId = `ekyc-details-${state}`,
90
+ className,
91
+ overrides,
92
+ onAction,
93
+ ...shell
94
+ },
95
+ ref,
96
+ ) => {
97
+ // The one field treatment that varies across the three sections: 2101:8159
98
+ // rings First name blue and shows its clear โœ•; the other two draw every
99
+ // field resting.
100
+ const focused = state === 'focused';
101
+
102
+ return (
103
+ <PrizmaFormScreen
104
+ ref={ref}
105
+ /* Scopes the single rule that lets the focused field keep the clear โœ•
106
+ Figma draws inside it. See EkycLayout.css. */
107
+ className={['ekyc-details', focused ? 'ekyc-details--focused' : '', className]
108
+ .filter(Boolean)
109
+ .join(' ')}
110
+ /* Page 1 of 2: segment 1 filled, segment 2 still grey โ€” Core's own
111
+ `Start` state at `steps={2}`. `showIcons={false}` because the frames
112
+ draw the bar with no glyph row (and it keeps the icon lookup, which
113
+ has no id+2 sequence, out of the render entirely). */
114
+ progress={
115
+ <PrizmaStepper
116
+ steps={2}
117
+ currentState="Start"
118
+ showIcons={false}
119
+ aria-label={strings.stepperLabel}
120
+ />
121
+ }
122
+ title={strings.details.title}
123
+ subtitle={strings.details.subtitle}
124
+ ctaLabel={strings.details.ctaLabel}
125
+ verifiedLabel={strings.verifiedLabel}
126
+ navLabel={strings.navLabel}
127
+ screenId={screenId}
128
+ /* Every eKYC form frame LEFT-aligns its title block, while the archetype
129
+ defaults to centred. The module supplies its designed alignment through
130
+ the sanctioned override rather than declaring any layout, and a host
131
+ that passes its own `align` still wins. */
132
+ overrides={{ align: overrides?.align ?? 'left', logo: overrides?.logo }}
133
+ onAction={onAction}
134
+ {...shell}
135
+ >
136
+ <PrizmaTextField
137
+ className={focused ? 'prizma-input-textfield--focused' : undefined}
138
+ label={strings.details.firstNameLabel}
139
+ required
140
+ requiredHint={strings.details.requiredHint}
141
+ defaultValue={values?.firstName ?? ''}
142
+ autoComplete="off"
143
+ /* Only 2101:8159 draws the โœ•, and only in this field. */
144
+ clearable={focused}
145
+ clearLabel={strings.details.clearLabel}
146
+ />
147
+ <PrizmaTextField
148
+ label={strings.details.middleNameLabel}
149
+ defaultValue={values?.middleName ?? ''}
150
+ autoComplete="off"
151
+ clearable={false}
152
+ />
153
+ <PrizmaTextField
154
+ label={strings.details.lastNameLabel}
155
+ required
156
+ requiredHint={strings.details.requiredHint}
157
+ defaultValue={values?.lastName ?? ''}
158
+ autoComplete="off"
159
+ clearable={false}
160
+ />
161
+ <PrizmaDateField
162
+ label={strings.details.dateOfBirthLabel}
163
+ required
164
+ requiredHint={strings.details.requiredHint}
165
+ defaultValue={values?.dateOfBirth ?? ''}
166
+ autoComplete="off"
167
+ /* No `onCalendarClick`: a screen is a static spec state with no
168
+ picker to open, and Core renders the glyph as a decorative
169
+ aria-hidden span in that case โ€” so `calendarLabel` would be a prop
170
+ that silently does nothing and is deliberately not passed. */
171
+ />
172
+ </PrizmaFormScreen>
173
+ );
174
+ },
175
+ );
176
+ EkycDetailsScreen.displayName = 'EkycDetailsScreen';
177
+
178
+ export default EkycDetailsScreen;
@@ -0,0 +1,64 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { EkycStrings } from './EkycStrings';
5
+ import './ScreenLayout.css';
6
+
7
+ export interface EkycErrorScreenProps
8
+ extends Omit<
9
+ PrizmaResultScreenProps,
10
+ 'status' | 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
11
+ > {
12
+ /** Module copy โ€” this screen reads the `error` slice. */
13
+ strings: EkycStrings;
14
+ screenId?: string;
15
+ overrides?: PrizmaScreenOverrides;
16
+ onAction?: PrizmaScreenActionHandler;
17
+ }
18
+
19
+ /**
20
+ * eKYC โ€” the failure verdict, built on the Result archetype
21
+ * (GUIDELINES.md ยง6-F, `PrizmaResultScreen`).
22
+ *
23
+ * Figma: the purple `eKYC.error` section (2101:7979), which holds exactly ONE
24
+ * screen โ€” a centred negative mark + H2 ("Something went wrong") over the "Try
25
+ * again" CTA band. The module draws no connectivity section anywhere in the
26
+ * file, so this screen ships no `variant` axis and no Wi-Fi glyph: adding one
27
+ * would invent a state the spec does not have (the #EI-5 precedent).
28
+ *
29
+ * Two things Figma draws are deliberately NOT reproduced, both owner-settled:
30
+ * the nav's close โœ• (GUIDELINES ยง3 forbids it โ€” the standing #PI-9 ruling) and
31
+ * the missing verified tag, since the chrome stays constant across a module's
32
+ * screens (#PI-8, #F-34). The header and the tag stay.
33
+ *
34
+ * The mark is Core's outline status icon; the module Figma still draws the
35
+ * two-tone filled disc, one icon sweep behind (DEVIATIONS #15).
36
+ */
37
+ export const EkycErrorScreen = forwardRef<HTMLDivElement, EkycErrorScreenProps>(
38
+ (
39
+ {
40
+ strings,
41
+ screenId = 'ekyc-error',
42
+ overrides,
43
+ onAction,
44
+ ...shell
45
+ },
46
+ ref,
47
+ ) => (
48
+ <PrizmaResultScreen
49
+ ref={ref}
50
+ status="error"
51
+ title={strings.error.title}
52
+ ctaLabel={strings.error.ctaLabel}
53
+ verifiedLabel={strings.verifiedLabel}
54
+ navLabel={strings.navLabel}
55
+ screenId={screenId}
56
+ overrides={overrides}
57
+ onAction={onAction}
58
+ {...shell}
59
+ />
60
+ ),
61
+ );
62
+ EkycErrorScreen.displayName = 'EkycErrorScreen';
63
+
64
+ export default EkycErrorScreen;
@@ -0,0 +1,39 @@
1
+ /* eKYC โ€” module layout additions.
2
+ *
3
+ * ONE rule, and it declares no spacing: the content column, the 24px gutters,
4
+ * the title โ†’ fields Spacing/32, the 16 between fields, the CTA column and the
5
+ * anchored footer all stay the foundation's (`ScreenLayout.css`,
6
+ * `FormScreen.css`). Nothing here re-declares an archetype value, invents a
7
+ * primitive or repaints one โ€” the rule RELEASES a Core constraint that a purple
8
+ * eKYC section contradicts, the same idiom as `CurpLayout.css`'s error rule and
9
+ * Phone Input's `width: auto` on Core's fill-width Dropdown (DEVIATIONS #PI-1).
10
+ */
11
+
12
+ /* โ”€โ”€ The focused First-name field keeps its clear โœ• โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
13
+ * `eKYC.focused` (2101:8159) draws three things at once: the blue focus ring on
14
+ * First name, the partial value ("Juli") AND the grey clear โœ• at the field's
15
+ * right edge. Core renders that button (`PrizmaTextField clearable`) but reveals
16
+ * it only under `:focus-within` (TextField.css:121) โ€” a guard a STATIC spec
17
+ * state can never satisfy, because nothing in a gallery card ever takes real
18
+ * DOM focus. Left alone, `clearable` would be a prop that silently does nothing,
19
+ * which is the exact defect the CURP build was pulled up on.
20
+ *
21
+ * This releases the guard for that ONE section, and only where Core has already
22
+ * decided the button should exist: `__clear--show` is Core's own state class,
23
+ * set only when the field has a value. It is Core's button, icon, box, size and
24
+ * color token โ€” no โœ• glyph is declared here, no geometry, no spacing; only
25
+ * Core's `display: none` is lifted. Every other eKYC field asks for
26
+ * `clearable={false}` and gets no button in the DOM at all, exactly as
27
+ * 2101:7877 / 5849:60225 / 5849:51109 / 5849:66890 / 5849:71925 draw them.
28
+ *
29
+ * CORE REQUEST (already open as DEVIATIONS #PI-7): `PrizmaTextField` needs the
30
+ * `forceState` prop `PrizmaDropdown` has, so a documentation/spec surface can
31
+ * render the designed focused state โ€” ring AND clear affordance โ€” without a
32
+ * consumer releasing a CSS guard. Every module with a "focused" purple section
33
+ * hits this.
34
+ */
35
+ .ekyc-details--focused
36
+ .prizma-input-textfield--focused
37
+ .prizma-input-textfield__clear--show {
38
+ display: inline-flex;
39
+ }
@@ -0,0 +1,164 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
3
+ import { PrizmaDateField } from '@incodetech/prizma-core-web/date-field';
4
+ import { PrizmaDropdown } from '@incodetech/prizma-core-web/dropdown';
5
+ import { PrizmaStepper, type PrizmaStepperState } from '@incodetech/prizma-core-web/stepper';
6
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
7
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
8
+ import type {
9
+ EkycLicenseState,
10
+ EkycLicenseStateOption,
11
+ EkycLicenseValues,
12
+ EkycStrings,
13
+ } from './EkycStrings';
14
+ import './ScreenLayout.css';
15
+ import './EkycLayout.css';
16
+
17
+ export interface EkycLicenseScreenProps
18
+ extends Omit<
19
+ PrizmaFormScreenProps,
20
+ | 'title'
21
+ | 'subtitle'
22
+ | 'ctaLabel'
23
+ | 'ctaLoading'
24
+ | 'ctaLoadingLabel'
25
+ | 'verifiedLabel'
26
+ | 'children'
27
+ | 'navLabel'
28
+ | 'linkLabel'
29
+ | 'linkContent'
30
+ | 'progress'
31
+ > {
32
+ /** Module copy โ€” this screen reads the `license` slice. */
33
+ strings: EkycStrings;
34
+ /** Which page-2 purple section to render. Default `default`. */
35
+ state?: EkycLicenseState;
36
+ /** The values the fields start with. */
37
+ values?: EkycLicenseValues;
38
+ /** The jurisdictions the state chooser offers. Runtime data, never copy. */
39
+ stateOptions?: EkycLicenseStateOption[];
40
+ screenId?: string;
41
+ overrides?: PrizmaScreenOverrides;
42
+ onAction?: PrizmaScreenActionHandler;
43
+ }
44
+
45
+ /**
46
+ * eKYC โ€” page 2, the document's own fields, built on the Form archetype
47
+ * (GUIDELINES.md ยง6-E, `PrizmaFormScreen`).
48
+ *
49
+ * ONE screen for all three page-2 purple sections (`default` 5849:51109,
50
+ * `filled` 5849:66890, `loading` 5849:71925): the frames share page 1's
51
+ * skeleton exactly โ€” nav โ†’ Title โ†’ Spacing/32 โ†’ labelled fields at Spacing/16
52
+ * โ†’ "Continue" โ†’ tag โ€” with a three-field stack (text ยท chooser ยท date) and no
53
+ * subtitle, and they differ ONLY in field content and CTA state.
54
+ *
55
+ * Three things are deliberate:
56
+ *
57
+ * 1. The middle field is Core's `PrizmaDropdown`, the chooser Figma draws
58
+ * (`Dropdown`, 342ร—78, trailing chevron), not a text field. It is left
59
+ * UNCONTROLLED via `defaultValue` for the same reason the text fields are.
60
+ * 2. `loading` is the ONE section Figma greys, so it is the only one that sets
61
+ * `disabled` โ€” on all three fields, exactly as drawn (#PI-6: `readOnly` is
62
+ * never used to freeze a field, because it greys sections drawn white).
63
+ * 3. The in-flight spinner rides the CTA (`ctaLoading`), never a field โ€” the
64
+ * standing #PI-5 ruling, and what 5849:71925 draws: the button's label is
65
+ * replaced by the spinner while every field stays put.
66
+ *
67
+ * Page 2 draws NO required asterisks โ€” 5849:51109's three label rows are bare โ€”
68
+ * so no field here is `required`, and the page carries no "* are required"
69
+ * subtitle either.
70
+ *
71
+ * As on page 1, the two-segment journey bar rides the archetype's `progress`
72
+ * slot (`PrizmaFormScreen.progress`, offsets in `ScreenLayout.css`) and is
73
+ * Core's shipped `PrizmaStepper`. Page 2 advances it: 5849:51109 and 5849:66890
74
+ * draw segment 1 pale (Core's `past` โ€” brand blue at 0.5) and segment 2 solid
75
+ * brand blue, which is `currentState={2}`; 5849:71925 turns BOTH segments green,
76
+ * which is Core's `Completed`. The bar is therefore what tells `loading` apart
77
+ * from `filled` at a glance, on top of the greyed fields and the CTA spinner.
78
+ * DEVIATIONS #EK-1.
79
+ */
80
+ /** Page-2 section โ†’ the journey-bar state Figma paints on it. */
81
+ const STEPPER_STATE: Record<EkycLicenseState, PrizmaStepperState> = {
82
+ /* 5849:51109 / 5849:66890 โ€” segment 1 pale ("past"), segment 2 solid. */
83
+ default: 2,
84
+ filled: 2,
85
+ /* 5849:71925 โ€” both segments green. */
86
+ loading: 'Completed',
87
+ };
88
+
89
+ export const EkycLicenseScreen = forwardRef<HTMLDivElement, EkycLicenseScreenProps>(
90
+ (
91
+ {
92
+ strings,
93
+ state = 'default',
94
+ values,
95
+ stateOptions = [],
96
+ screenId = `ekyc-license-${state}`,
97
+ className,
98
+ overrides,
99
+ onAction,
100
+ ...shell
101
+ },
102
+ ref,
103
+ ) => {
104
+ const busy = state === 'loading';
105
+
106
+ return (
107
+ <PrizmaFormScreen
108
+ ref={ref}
109
+ className={['ekyc-license', className].filter(Boolean).join(' ')}
110
+ /* Page 2 of 2 โ€” advanced past page 1, and green once the submit is in
111
+ flight. `showIcons={false}`: the frames draw the bar alone. */
112
+ progress={
113
+ <PrizmaStepper
114
+ steps={2}
115
+ currentState={STEPPER_STATE[state]}
116
+ showIcons={false}
117
+ aria-label={strings.stepperLabel}
118
+ completedValueText={strings.stepperCompletedLabel}
119
+ />
120
+ }
121
+ title={strings.license.title}
122
+ ctaLabel={strings.license.ctaLabel}
123
+ /* 5849:71925 swaps the CTA label for Core's designed spinner. */
124
+ ctaLoading={busy}
125
+ ctaLoadingLabel={strings.license.ctaLoadingLabel}
126
+ verifiedLabel={strings.verifiedLabel}
127
+ navLabel={strings.navLabel}
128
+ screenId={screenId}
129
+ /* Left-aligned title block, same as page 1; a host `align` still wins. */
130
+ overrides={{ align: overrides?.align ?? 'left', logo: overrides?.logo }}
131
+ onAction={onAction}
132
+ {...shell}
133
+ >
134
+ <PrizmaTextField
135
+ label={strings.license.numberLabel}
136
+ defaultValue={values?.number ?? ''}
137
+ autoComplete="off"
138
+ spellCheck={false}
139
+ disabled={busy}
140
+ /* No section on this page draws the clear โœ•. */
141
+ clearable={false}
142
+ />
143
+ <PrizmaDropdown
144
+ label={strings.license.stateLabel}
145
+ options={stateOptions}
146
+ defaultValue={values?.state ?? null}
147
+ disabled={busy}
148
+ />
149
+ <PrizmaDateField
150
+ label={strings.license.expirationLabel}
151
+ defaultValue={values?.expirationDate ?? ''}
152
+ autoComplete="off"
153
+ disabled={busy}
154
+ /* No `onCalendarClick` โ€” see the note in `EkycDetailsScreen`: Core
155
+ renders the calendar as a decorative aria-hidden glyph without one,
156
+ so `calendarLabel` would do nothing and is not passed. */
157
+ />
158
+ </PrizmaFormScreen>
159
+ );
160
+ },
161
+ );
162
+ EkycLicenseScreen.displayName = 'EkycLicenseScreen';
163
+
164
+ export default EkycLicenseScreen;
@@ -0,0 +1,60 @@
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 { EkycStrings } from './EkycStrings';
8
+ import './ScreenLayout.css';
9
+
10
+ export interface EkycProcessingScreenProps
11
+ extends Omit<
12
+ PrizmaProcessingScreenProps,
13
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
14
+ > {
15
+ /** Module copy โ€” this screen reads the `processing` slice. */
16
+ strings: EkycStrings;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+
22
+ /**
23
+ * eKYC โ€” the submitted data is being checked, built on the Processing archetype
24
+ * (GUIDELINES.md ยง6-C, `PrizmaProcessingScreen`).
25
+ *
26
+ * Figma: the purple `eKYC.processing` section (2101:7959). A centred spinner
27
+ * over a bare H2 ("Processingโ€ฆ") with **no subtitle and no CTA** โ€” exactly the
28
+ * pure no-button case ยง6-F reserves for C rather than the Result archetype.
29
+ *
30
+ * The title block is centred here, unlike the module's two form pages: the
31
+ * verdict frames draw the mark and the status line on the screen's centre line,
32
+ * so the archetype's own default is the designed one and nothing is overridden.
33
+ */
34
+ export const EkycProcessingScreen = forwardRef<HTMLDivElement, EkycProcessingScreenProps>(
35
+ (
36
+ {
37
+ strings,
38
+ screenId = 'ekyc-processing',
39
+ overrides,
40
+ onAction,
41
+ ...shell
42
+ },
43
+ ref,
44
+ ) => (
45
+ <PrizmaProcessingScreen
46
+ ref={ref}
47
+ status="loading"
48
+ title={strings.processing.title}
49
+ verifiedLabel={strings.verifiedLabel}
50
+ navLabel={strings.navLabel}
51
+ screenId={screenId}
52
+ overrides={overrides}
53
+ onAction={onAction}
54
+ {...shell}
55
+ />
56
+ ),
57
+ );
58
+ EkycProcessingScreen.displayName = 'EkycProcessingScreen';
59
+
60
+ export default EkycProcessingScreen;
@@ -0,0 +1,157 @@
1
+ // eKYC โ€” copy contract.
2
+ //
3
+ // Figma: `๐Ÿ‘๏ธ eKYC / ๐Ÿ’ผ eKYB - Screens specs + Localization`
4
+ // (`TWgYZVhurQCizfC4tfLEut`, page `2003:12082`). The file holds THREE top-level
5
+ // sections; only the two eKYC ones are this module's scope:
6
+ // `2098:20865` ๐Ÿ‘๏ธ eKYC Initial screen options โ€” the field-option catalogue
7
+ // (V1 references ยท dashboard options ยท the "all options" matrix).
8
+ // A spec board, not screens: every 390 frame it feeds is drawn
9
+ // in the section below.
10
+ // `2101:7869` ๐Ÿ‘๏ธ eKYC - Screens specs + Localization โ€” the nine 390ร—844
11
+ // frames this module builds.
12
+ // `2116:23785` ๐Ÿ’ผ eKYB โ€” a DIFFERENT module, deliberately untouched.
13
+ //
14
+ // The nine eKYC frames, by their 390ร—844 node id:
15
+ // 2101:7877 eKYC.default (page 1 โ€” personal details, empty)
16
+ // 2101:8159 eKYC.focused (page 1 โ€” First name focused, partial value)
17
+ // 5849:60225 eKYC.filled (page 1 โ€” all four values)
18
+ // 5849:51109 eKYC.default (page 2 โ€” driver's-licence details, empty)
19
+ // 5849:66890 eKYC.filled (page 2 โ€” all three values)
20
+ // 5849:71925 eKYC.loading (page 2 โ€” fields inert, spinner in the CTA)
21
+ // 2101:7959 eKYC.processing
22
+ // 2101:7979 eKYC.error
23
+ // 2101:7969 eKYC.success
24
+ //
25
+ // The module is a TWO-PAGE form: the data-capture pages are archetype E
26
+ // (`PrizmaFormScreen`), the two no-button verdicts are archetype C
27
+ // (`PrizmaProcessingScreen`) and the failure verdict is archetype F
28
+ // (`PrizmaResultScreen`) โ€” the same C/F split `EmailInputSuccessScreen` and
29
+ // `EmailInputErrorScreen` settled (DEVIATIONS #EI-4/#EI-5).
30
+ //
31
+ // No hardcoded English anywhere in a screen: every visible string arrives here,
32
+ // so the host's locale pack drives the module (the Figma file ships ES + PT
33
+ // columns alongside EN).
34
+
35
+ /**
36
+ * The page-1 sections (`eKYC.default` / `eKYC.focused` / `eKYC.filled`). All
37
+ * three draw the SAME layout โ€” nav โ†’ Title (H2 + H5) โ†’ Spacing/32 โ†’ four
38
+ * labelled fields at Spacing/16 โ†’ "Continue" โ†’ tag โ€” and differ only in field
39
+ * content and field treatment, which is what GUIDELINES ยง6-E means by "states
40
+ * are separate screens sharing the identical layout":
41
+ * - `default` โ€” every field empty
42
+ * - `focused` โ€” First name carries the blue focus ring, a partial value and
43
+ * the clear โœ• (2101:8159 draws the OS keyboard over the CTA; the
44
+ * keyboard is OS chrome, never a screen element)
45
+ * - `filled` โ€” all four fields resting with their values
46
+ */
47
+ export type EkycDetailsState = 'default' | 'focused' | 'filled';
48
+
49
+ /**
50
+ * The page-2 sections (`eKYC.default` / `eKYC.filled` / `eKYC.loading`), same
51
+ * layout with the document field set:
52
+ * - `default` โ€” licence number, state chooser and expiry all empty
53
+ * - `filled` โ€” all three resting with their values
54
+ * - `loading` โ€” the submit is in flight: Figma greys all three fields and swaps
55
+ * the CTA label for the spinner (the spinner rides the CTA, never
56
+ * a field โ€” the standing #PI-5 ruling)
57
+ */
58
+ export type EkycLicenseState = 'default' | 'filled' | 'loading';
59
+
60
+ /** One row of the licence-state chooser. Runtime data, never copy โ€” the host
61
+ * supplies the jurisdictions its tenant accepts, exactly as Phone Input's
62
+ * `PhoneInputCountry` supplies dial codes. */
63
+ export interface EkycLicenseStateOption {
64
+ value: string;
65
+ label: string;
66
+ }
67
+
68
+ /** Page-1 field values. A screen is one static spec state, so these are the
69
+ * UNCONTROLLED starting values of Core's fields โ€” no `onChange` is wired and
70
+ * `readOnly` is never used to freeze them (it paints Core's DISABLED grey on
71
+ * sections Figma draws white โ€” the standing #PI-6 ruling). */
72
+ export interface EkycDetailsValues {
73
+ firstName?: string;
74
+ middleName?: string;
75
+ lastName?: string;
76
+ dateOfBirth?: string;
77
+ }
78
+
79
+ /** Page-2 field values. Same contract as `EkycDetailsValues`. */
80
+ export interface EkycLicenseValues {
81
+ /** The licence number as printed on the document. */
82
+ number?: string;
83
+ /** `value` of one `EkycLicenseStateOption`. */
84
+ state?: string;
85
+ /** Masked DD/MM/YYYY, the mask Core's date field applies. */
86
+ expirationDate?: string;
87
+ }
88
+
89
+ export interface EkycStrings {
90
+ /** "verified by" attribution in the footer tag. */
91
+ verifiedLabel: string;
92
+ /** Accessible name for the logo nav row. */
93
+ navLabel?: string;
94
+
95
+ /**
96
+ * Accessible name for the two-segment journey bar the six form frames draw
97
+ * between the nav and the title (Core's `PrizmaStepper`, `role="progressbar"`).
98
+ * The bar is the ONLY chrome that separates page 1 from page 2, so it carries
99
+ * a real name rather than none โ€” supplied here because it is copy.
100
+ */
101
+ stepperLabel: string;
102
+ /**
103
+ * `aria-valuetext` the same bar announces once both segments are green โ€” the
104
+ * page-2 `loading` section (5849:71925). Same contract as Video Selfie's
105
+ * `stepperCompletedLabel`.
106
+ */
107
+ stepperCompletedLabel: string;
108
+
109
+ /** `eKYC.*` page 1 โ€” the applicant's name and date of birth. */
110
+ details: {
111
+ /** H2 screen title. */
112
+ title: string;
113
+ /** H5 description under the title. */
114
+ subtitle: string;
115
+ /**
116
+ * Suffix Core appends to a REQUIRED field's label โ€” Figma draws a bare
117
+ * asterisk ("First name *") and the subtitle explains it. Configurable
118
+ * because it is visible copy: a locale may prefer "(obligatorio)".
119
+ */
120
+ requiredHint: string;
121
+ firstNameLabel: string;
122
+ middleNameLabel: string;
123
+ lastNameLabel: string;
124
+ dateOfBirthLabel: string;
125
+ /** Accessible name for the clear โœ• inside the focused field. */
126
+ clearLabel: string;
127
+ ctaLabel: string;
128
+ };
129
+
130
+ /** `eKYC.*` page 2 โ€” the document's own fields. */
131
+ license: {
132
+ /** H2 screen title. */
133
+ title: string;
134
+ numberLabel: string;
135
+ stateLabel: string;
136
+ expirationLabel: string;
137
+ ctaLabel: string;
138
+ /** Visible/accessible copy while the submit is in flight. */
139
+ ctaLoadingLabel: string;
140
+ };
141
+
142
+ /** `eKYC.processing` โ€” spinner over the status line, no button. */
143
+ processing: {
144
+ title: string;
145
+ };
146
+
147
+ /** `eKYC.success` โ€” positive mark over the status line, no button. */
148
+ success: {
149
+ title: string;
150
+ };
151
+
152
+ /** `eKYC.error` โ€” negative mark, status line and the retry CTA. */
153
+ error: {
154
+ title: string;
155
+ ctaLabel: string;
156
+ };
157
+ }