@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,127 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaLoadingBar } from '@incodetech/prizma-core-web/loading-bar';
3
+ import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { NfcStrings } from './NfcStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ /** Which moment of the read this is. The two moments the Prizma layer actually
9
+ * draws: the bar filling under "Scanning..", then full and green under "Done".
10
+ * There is no `error` member — the failed read never reaches this layer; see
11
+ * the note below. */
12
+ export type NfcScanningState = 'scanning' | 'done';
13
+
14
+ /** State → Core `PrizmaLoadingBar` phase + the progress the section draws. */
15
+ const BAR: Record<NfcScanningState, { state: 'analyzing' | 'success'; progress: number }> = {
16
+ scanning: { state: 'analyzing', progress: 15 },
17
+ done: { state: 'success', progress: 100 },
18
+ };
19
+
20
+ export interface NfcScanningScreenProps
21
+ extends Omit<
22
+ PrizmaListScreenProps,
23
+ | 'title'
24
+ | 'subtitle'
25
+ | 'children'
26
+ | 'ctaLabel'
27
+ | 'secondaryCtaLabel'
28
+ | 'linkLabel'
29
+ | 'verifiedLabel'
30
+ | 'navLabel'
31
+ > {
32
+ /** Module copy — this screen reads the `scanning` slice. */
33
+ strings: NfcStrings;
34
+ /** Which moment of the read to render. Default `scanning`. */
35
+ state?: NfcScanningState;
36
+ /** Override the bar's fill (runtime data, never copy). */
37
+ progress?: number;
38
+ screenId?: string;
39
+ overrides?: PrizmaScreenOverrides;
40
+ onAction?: PrizmaScreenActionHandler;
41
+ }
42
+
43
+ /**
44
+ * NFC — the read in flight: "Scanning.." → "Done". The Prizma layer of the
45
+ * `nfc.scanning` group (22469:32916).
46
+ *
47
+ * **What this screen is, and what it deliberately is not.** All ten of that
48
+ * group's purple sections draw the PLATFORM's own NFC dialog — iOS's "Ready to
49
+ * scan" sheet with its status glyph and Cancel row, and Android's equivalent on
50
+ * a blacked-out backdrop. Those are OS chrome, not Prizma surfaces: a screen
51
+ * composed only of Core components cannot render them, and faking them would
52
+ * ship a counterfeit system UI. Same ruling as ID Capture's OS permission
53
+ * dialogs (#IDC-26) and Document Capture's iOS action sheet / Photos picker
54
+ * (#DC-20). What IS a Prizma surface is the screen UNDER the sheet — visible
55
+ * through it in the iOS sections, and the whole screen once the sheet is
56
+ * dismissed — and that is what this file builds: nav → title block → the
57
+ * progress bar and its "Hold still.." line.
58
+ *
59
+ * Only TWO of the ten sections carry a distinct Prizma layer, and they are the
60
+ * two states above: `nfc.scanning.scanning` (22469:34999) and
61
+ * `nfc.scanning.success` (22469:36706, "Done" + the full green bar). The other
62
+ * eight have no screen of their own:
63
+ * - the four `*ready` sections sit over `NfcTutorialScreen`, unchanged;
64
+ * - `androidscanning` / `androiddone` / `androidscanningError` black the app out
65
+ * entirely behind Android's sheet — there is nothing of ours to draw;
66
+ * - `scanningerror` (23291:19865) and `androidscanningError` (22526:20450) put
67
+ * the words "We couldn't scan the chip" INSIDE the OS sheet. Re-checked frame
68
+ * by frame on 2026-08-19: behind the iOS sheet the Prizma layer is
69
+ * byte-for-byte `nfc.scanning.scanning` — same "Scanning.." title, same
70
+ * subtitle, same partly-filled bar, same "Hold still..". So this file has NO
71
+ * `error` state: hoisting the sheet's copy into the title block would invent a
72
+ * screen Figma never draws, and a `failed` bar appears nowhere in the group.
73
+ * A failed read is communicated by the OS sheet, then by `NfcTryAgainScreen`.
74
+ *
75
+ * Archetype G (`PrizmaListScreen`) carries it — the frames put the bar at
76
+ * Spacing/24 under a top-aligned title block, which is exactly G's middle slot
77
+ * (F would centre the pair and drop the title). The bar is Core's
78
+ * `PrizmaLoadingBar`, capped at Figma's 164px by the foundation's own
79
+ * `__review-loading` rule (#DC-28 / #REV-1) rather than a second copy of that
80
+ * literal in a module file.
81
+ *
82
+ * One Core-wins colour call, already settled: Figma fills the in-flight bar
83
+ * GREEN, Core fills it brand blue because "green is reserved for success"
84
+ * (owner, 2026-07-11 — DEVIATIONS #DC-28). `done` is genuinely green.
85
+ */
86
+ export const NfcScanningScreen = forwardRef<HTMLDivElement, NfcScanningScreenProps>(
87
+ (
88
+ {
89
+ strings,
90
+ state = 'scanning',
91
+ progress,
92
+ screenId = `nfc-scanning-${state}`,
93
+ overrides,
94
+ onAction,
95
+ ...shell
96
+ },
97
+ ref,
98
+ ) => {
99
+ const bar = BAR[state];
100
+ const slice = strings.scanning[state];
101
+
102
+ return (
103
+ <PrizmaListScreen
104
+ ref={ref}
105
+ title={slice.title}
106
+ subtitle={slice.subtitle}
107
+ verifiedLabel={strings.verifiedLabel}
108
+ navLabel={strings.navLabel}
109
+ screenId={screenId}
110
+ overrides={overrides}
111
+ onAction={onAction}
112
+ {...shell}
113
+ >
114
+ <div className="prizma-screen-layout__review-loading">
115
+ <PrizmaLoadingBar
116
+ progress={progress ?? bar.progress}
117
+ state={bar.state}
118
+ title={strings.scanning.progressLabel}
119
+ />
120
+ </div>
121
+ </PrizmaListScreen>
122
+ );
123
+ },
124
+ );
125
+ NfcScanningScreen.displayName = 'NfcScanningScreen';
126
+
127
+ export default NfcScanningScreen;
@@ -0,0 +1,124 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { IconStatusWarning } from '@incodetech/prizma-core-icons';
3
+ import { PrizmaModalContent } from '@incodetech/prizma-core-web/modal';
4
+ import { PrizmaTutorialScreen, type PrizmaTutorialScreenProps } from './TutorialScreen';
5
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
6
+ import type { NfcStrings } from './NfcStrings';
7
+ import './ScreenLayout.css';
8
+ import './NfcLayout.css';
9
+
10
+ export interface NfcSettingsScreenProps
11
+ extends Omit<
12
+ PrizmaTutorialScreenProps,
13
+ | 'title'
14
+ | 'subtitle'
15
+ | 'ctaLabel'
16
+ | 'linkLabel'
17
+ | 'illustration'
18
+ | 'overlay'
19
+ | 'verifiedLabel'
20
+ | 'navLabel'
21
+ > {
22
+ /** Module copy — this screen reads the `settings` slice. */
23
+ strings: NfcStrings;
24
+ screenId?: string;
25
+ overrides?: PrizmaScreenOverrides;
26
+ onAction?: PrizmaScreenActionHandler;
27
+ }
28
+
29
+ /**
30
+ * NFC — "Enable NFC scanning", the dialog shown when the device has NFC but it
31
+ * is switched off. Purple section `nfc.error.nfcsettings` (23003:23652).
32
+ *
33
+ * The section is a Core `Modal` on a scrim over a backgrounded app: there is no
34
+ * Prizma surface behind it at all (its CONTENT frame holds the Modal instance
35
+ * and nothing else). Core's `PrizmaModalContent` renders the card verbatim; the
36
+ * screen supplies only the scrim and the centring frame, exactly as Document
37
+ * Capture's method sheet does (#DC-30) — the safe presenter portals to
38
+ * `document.body` and would escape the screen frame.
39
+ *
40
+ * TWO shortcomings, both reported rather than worked around:
41
+ * - **No archetype models "an overlay over nothing".** `PrizmaTutorialScreen`
42
+ * is used purely because A's `overlay` is the only shell-level slot in the
43
+ * archetype layer; its own content is emptied out (no illustration, no CTA,
44
+ * header and footer off) and its required `title` is passed the empty string
45
+ * so nothing renders behind the scrim. That is a workaround at the archetype
46
+ * BOUNDARY, not inside a module file, and it is the gap being reported.
47
+ * - **⚠️ KNOWN MISMATCH — the status mark lands below the copy.** Figma stacks
48
+ * the amber mark ABOVE the title (mark → "Enable NFC scanning" → the two-line
49
+ * body → the filled blue button). Core's only mark-shaped slot is
50
+ * `with-image`, and `Modal.tsx` renders it AFTER the content block — title
51
+ * (l. 218), subtitle (l. 220), body, THEN `prizma-modal__image` (l. 224) —
52
+ * so the rendered card is title → body → mark → button. Re-confirmed against
53
+ * Core source on 2026-08-19; `title` is typed `string`, so the mark cannot
54
+ * ride along in the heading either. Every in-module alternative (hand-rolling
55
+ * the card, or reordering Core's own BEM children from `NfcLayout.css`) is a
56
+ * local workaround around a missing archetype/Core slot, which rule 2 forbids
57
+ * — so this state SHIPS KNOWINGLY WRONG rather than being treated as matching
58
+ * the frame, and the fix is Core-side. **Core request: a status-mark slot on
59
+ * `PrizmaModalContent` rendered ABOVE the title, mirroring `PrizmaTitle`'s
60
+ * status-icon position; this screen switches to it the day it lands.**
61
+ * The mark itself is the bank's OUTLINE `IconStatusWarning`, not Figma's
62
+ * filled disc (#15), wearing Core's OWN `prizma-title__status-icon--warning`
63
+ * class so both the Title/Icon/Size (40) and the amber token come from the
64
+ * design system — the #PI-7 idiom of borrowing a Core modifier through
65
+ * `className` rather than redeclaring anything.
66
+ */
67
+ export const NfcSettingsScreen = forwardRef<HTMLDivElement, NfcSettingsScreenProps>(
68
+ (
69
+ {
70
+ strings,
71
+ screenId = 'nfc-settings',
72
+ showHeader = false,
73
+ showFooter = false,
74
+ overrides,
75
+ onAction,
76
+ ...shell
77
+ },
78
+ ref,
79
+ ) => (
80
+ <PrizmaTutorialScreen
81
+ ref={ref}
82
+ /* Nothing renders behind the scrim — see the note above. Not copy, so
83
+ nothing to translate. */
84
+ title=""
85
+ showHeader={showHeader}
86
+ showFooter={showFooter}
87
+ verifiedLabel={strings.verifiedLabel}
88
+ navLabel={strings.navLabel}
89
+ screenId={screenId}
90
+ overrides={overrides}
91
+ onAction={onAction}
92
+ overlay={
93
+ <>
94
+ <div className="nfc-modal-scrim" aria-hidden="true" />
95
+ <div className="nfc-modal-panel">
96
+ <PrizmaModalContent
97
+ variant="with-image"
98
+ title={strings.settings.title}
99
+ subtitle={strings.settings.subtitle}
100
+ ariaLabel={strings.settings.dialogLabel}
101
+ image={
102
+ <IconStatusWarning
103
+ size="m"
104
+ className="prizma-title__status-icon prizma-title__status-icon--warning"
105
+ />
106
+ }
107
+ showCloseIcon={false}
108
+ buttonGroupProps={{
109
+ showPrimary: true,
110
+ showSecondary: false,
111
+ primaryLabel: strings.settings.ctaLabel,
112
+ onPrimaryClick: () => onAction?.({ type: 'cta', screenId }),
113
+ }}
114
+ />
115
+ </div>
116
+ </>
117
+ }
118
+ {...shell}
119
+ />
120
+ ),
121
+ );
122
+ NfcSettingsScreen.displayName = 'NfcSettingsScreen';
123
+
124
+ export default NfcSettingsScreen;
@@ -0,0 +1,127 @@
1
+ // NFC — every string the module's screens render.
2
+ //
3
+ // Screens are pure presentational components (GUIDELINES.md §9): no English is
4
+ // baked into a screen file, so the whole module is translated by swapping this
5
+ // one object. Mirrors the module's Figma localization columns (🇺🇸 US · 🇪🇸 ES ·
6
+ // 🇵🇹 PT) on `dlEkkopentyypbxlYjDWTZ`, page `19971:96836`.
7
+
8
+ /** Which document's chip is being read. Drives artwork AND copy on every
9
+ * family that has a passport/ID split (symbol · tutorial · tryAgain ·
10
+ * commonIssues). */
11
+ export type NfcDocumentType = 'passport' | 'id';
12
+
13
+ /**
14
+ * Which common-issue row this is. The kind — not the copy — picks the row's
15
+ * canonical bank glyph (`NfcCommonIssuesScreen`), so a translated label never
16
+ * changes the icon. `passportTooFar` / `idTooFar` are two kinds rather than one
17
+ * because the bank draws the document itself in the glyph.
18
+ */
19
+ export type NfcIssueKind =
20
+ | 'passportInCover'
21
+ | 'passportTooFar'
22
+ | 'idTooFar'
23
+ | 'chipOtherPage'
24
+ | 'phoneMoved'
25
+ | 'phoneCover';
26
+
27
+ export interface NfcIssueStrings {
28
+ /** Which glyph leads the row. */
29
+ kind: NfcIssueKind;
30
+ /** The row's single line of copy. */
31
+ label: string;
32
+ }
33
+
34
+ /** One title + subtitle pair. Used by every family that varies only in copy. */
35
+ export interface NfcHeadingStrings {
36
+ title: string;
37
+ subtitle: string;
38
+ }
39
+
40
+ export interface NfcStrings {
41
+ /** "verified by" attribution copy for the footer tag. */
42
+ verifiedLabel: string;
43
+ /** Accessible name for the nav region. */
44
+ navLabel: string;
45
+
46
+ /** `nfc.symbol.{passport,id}` — "Is this symbol visible…?" */
47
+ symbol: {
48
+ passport: { title: string };
49
+ id: { title: string };
50
+ /** Filled primary. */
51
+ yesLabel: string;
52
+ /** Outlined secondary. */
53
+ noLabel: string;
54
+ /** Accessible name for the chip-location artwork. */
55
+ illustrationLabel: string;
56
+ };
57
+
58
+ /** `nfc.tutorial.{passport,id}` — the pre-scan instruction. */
59
+ tutorial: {
60
+ passport: NfcHeadingStrings;
61
+ id: NfcHeadingStrings;
62
+ ctaLabel: string;
63
+ illustrationLabel: string;
64
+ };
65
+
66
+ /**
67
+ * `nfc.scanning.*` — the Prizma layer that runs UNDER the platform's own NFC
68
+ * sheet: title block + progress bar. The sheet itself is OS chrome and is not
69
+ * a screen this package can build (see `NfcScanningScreen`).
70
+ *
71
+ * Two entries only. There is no `error` copy here: on the failure frames
72
+ * (`nfc.scanning.scanningerror` · `.androidscanningError`) the words "We
73
+ * couldn't scan the chip" belong to the OS sheet, and the Prizma layer behind
74
+ * it is still the `scanning` one.
75
+ */
76
+ scanning: {
77
+ scanning: NfcHeadingStrings;
78
+ done: NfcHeadingStrings;
79
+ /** The line under the bar ("Hold still.."). */
80
+ progressLabel: string;
81
+ };
82
+
83
+ /** `nfc.tryagain.*` — retry instructions, one per passport page + the ID. */
84
+ tryAgain: {
85
+ passport: NfcHeadingStrings;
86
+ firstPage: NfcHeadingStrings;
87
+ photoPage: NfcHeadingStrings;
88
+ backPage: NfcHeadingStrings;
89
+ id: NfcHeadingStrings;
90
+ /** Filled primary. */
91
+ ctaLabel: string;
92
+ /** Outlined secondary — opens the common-issues sheet. */
93
+ helpLabel: string;
94
+ illustrationLabel: string;
95
+ };
96
+
97
+ /** `nfc.commonissues.{id,passport}` — the help sheet. */
98
+ commonIssues: {
99
+ title: string;
100
+ ctaLabel: string;
101
+ /** Accessible name for the row list. */
102
+ listLabel: string;
103
+ /** Three rows on the ID sheet, five on the passport one. */
104
+ issues: Record<NfcDocumentType, NfcIssueStrings[]>;
105
+ };
106
+
107
+ /** `nfc.loading.default` — chip read, identity being verified. */
108
+ loading: NfcHeadingStrings;
109
+
110
+ /** `nfc.success.default` — the verdict. No button. */
111
+ success: { title: string };
112
+
113
+ /** `nfc.error.{unable,generalerror}` — the two verdict errors. */
114
+ error: {
115
+ unable: NfcHeadingStrings & { ctaLabel: string };
116
+ general: { title: string; ctaLabel: string };
117
+ };
118
+
119
+ /** `nfc.error.nfcsettings` — the "turn NFC on" dialog. */
120
+ settings: {
121
+ title: string;
122
+ subtitle: string;
123
+ ctaLabel: string;
124
+ /** Accessible name for the dialog. */
125
+ dialogLabel: string;
126
+ };
127
+ }
@@ -0,0 +1,56 @@
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 { NfcStrings } from './NfcStrings';
8
+ import './ScreenLayout.css';
9
+
10
+ export interface NfcSuccessScreenProps
11
+ extends Omit<
12
+ PrizmaProcessingScreenProps,
13
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
14
+ > {
15
+ /** Module copy — this screen reads the `success` slice. */
16
+ strings: NfcStrings;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+
22
+ /**
23
+ * NFC — "Identity successfully verified", the module's positive verdict.
24
+ * Purple section `nfc.success.default` (19975:109249).
25
+ *
26
+ * Archetype C, not F: the section draws NO button (the flow advances on its
27
+ * own), and §6-F reserves C for exactly the pure no-CTA case — the same split
28
+ * Email Input's success takes while Phone Input's, which does draw a button,
29
+ * sits on F (#EI-4).
30
+ *
31
+ * Figma draws the check as a filled green disc; Core renders the single-colour
32
+ * OUTLINE mark from the icon bank (icon-outline sweep, owner 2026-07-28), so
33
+ * this screen shows the outline — the module Figma is one sweep behind, exactly
34
+ * as recorded for every other module's status marks (#15, #DC-34).
35
+ */
36
+ export const NfcSuccessScreen = forwardRef<HTMLDivElement, NfcSuccessScreenProps>(
37
+ (
38
+ { strings, screenId = 'nfc-success', overrides, onAction, ...shell },
39
+ ref,
40
+ ) => (
41
+ <PrizmaProcessingScreen
42
+ ref={ref}
43
+ status="success"
44
+ title={strings.success.title}
45
+ verifiedLabel={strings.verifiedLabel}
46
+ navLabel={strings.navLabel}
47
+ screenId={screenId}
48
+ overrides={overrides}
49
+ onAction={onAction}
50
+ {...shell}
51
+ />
52
+ ),
53
+ );
54
+ NfcSuccessScreen.displayName = 'NfcSuccessScreen';
55
+
56
+ export default NfcSuccessScreen;
@@ -0,0 +1,85 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaIllustrationNfcLocation } from '@incodetech/prizma-core-web/illustration-nfc-scan';
3
+ import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { NfcDocumentType, NfcStrings } from './NfcStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ export interface NfcSymbolScreenProps
9
+ extends Omit<
10
+ PrizmaListScreenProps,
11
+ | 'title'
12
+ | 'subtitle'
13
+ | 'children'
14
+ | 'ctaLabel'
15
+ | 'secondaryCtaLabel'
16
+ | 'linkLabel'
17
+ | 'verifiedLabel'
18
+ | 'navLabel'
19
+ > {
20
+ /** Module copy — this screen reads the `symbol` slice. */
21
+ strings: NfcStrings;
22
+ /** Which purple section: `nfc.symbol.passport` or `nfc.symbol.id`. */
23
+ documentType?: NfcDocumentType;
24
+ screenId?: string;
25
+ overrides?: PrizmaScreenOverrides;
26
+ onAction?: PrizmaScreenActionHandler;
27
+ }
28
+
29
+ /**
30
+ * NFC — "Is this symbol visible on your passport cover / on the front or back
31
+ * of your ID?", the gate that decides whether the chip flow can run at all.
32
+ * Purple sections `nfc.symbol.passport` (19974:74431) and `nfc.symbol.id`
33
+ * (19978:116624).
34
+ *
35
+ * Built on the List archetype (GUIDELINES.md §6-G, `PrizmaListScreen`) rather
36
+ * than the Tutorial one, because the frames TOP-align the title at the nav's
37
+ * Spacing/24 and hang the artwork under it — which is exactly what G's middle
38
+ * slot does — while archetype A's `__flex` centres its illustration in the
39
+ * whole middle and would drop the title ~84px. G's slot is a generic middle,
40
+ * not a list-only slot; the class name is the only thing that says otherwise.
41
+ *
42
+ * The artwork is Core's own `PrizmaIllustrationNfcLocation` — the "where is the
43
+ * chip" companion from the same Figma section as the scan animation — so
44
+ * nothing is inlined here (GUIDELINES §10).
45
+ *
46
+ * ONE thing Figma draws that this screen does not: the two answers side by
47
+ * side, "No" left and "Yes" right. Archetype G has no `ctaOrientation` (only F
48
+ * does, #F-33), and a screen never declares its own button layout, so the pair
49
+ * stacks — primary "Yes" above secondary "No", which is the standing order rule
50
+ * (#GEO-1). Reported as an archetype gap rather than worked around.
51
+ */
52
+ export const NfcSymbolScreen = forwardRef<HTMLDivElement, NfcSymbolScreenProps>(
53
+ (
54
+ {
55
+ strings,
56
+ documentType = 'passport',
57
+ screenId = `nfc-symbol-${documentType}`,
58
+ overrides,
59
+ onAction,
60
+ ...shell
61
+ },
62
+ ref,
63
+ ) => (
64
+ <PrizmaListScreen
65
+ ref={ref}
66
+ title={strings.symbol[documentType].title}
67
+ ctaLabel={strings.symbol.yesLabel}
68
+ secondaryCtaLabel={strings.symbol.noLabel}
69
+ verifiedLabel={strings.verifiedLabel}
70
+ navLabel={strings.navLabel}
71
+ screenId={screenId}
72
+ overrides={overrides}
73
+ onAction={onAction}
74
+ {...shell}
75
+ >
76
+ <PrizmaIllustrationNfcLocation
77
+ type={documentType}
78
+ ariaLabel={strings.symbol.illustrationLabel}
79
+ />
80
+ </PrizmaListScreen>
81
+ ),
82
+ );
83
+ NfcSymbolScreen.displayName = 'NfcSymbolScreen';
84
+
85
+ export default NfcSymbolScreen;
@@ -0,0 +1,114 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaIllustrationNfcScan } from '@incodetech/prizma-core-web/illustration-nfc-scan';
3
+ import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { NfcDocumentType, NfcStrings } from './NfcStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ /**
9
+ * Which retry instruction to show. The four passport values are the pages a
10
+ * passport read walks through — `nfc.tryagain.passport` (the cover),
11
+ * `.passportfirstpage`, `.passportphotopage`, `.passportbackpage` — and `id` is
12
+ * the single-surface ID section.
13
+ */
14
+ export type NfcTryAgainStep = 'passport' | 'firstPage' | 'photoPage' | 'backPage' | 'id';
15
+
16
+ /** Which document each step belongs to — picks the artwork. */
17
+ const DOCUMENT_BY_STEP: Record<NfcTryAgainStep, NfcDocumentType> = {
18
+ passport: 'passport',
19
+ firstPage: 'passport',
20
+ photoPage: 'passport',
21
+ backPage: 'passport',
22
+ id: 'id',
23
+ };
24
+
25
+ export interface NfcTryAgainScreenProps
26
+ extends Omit<
27
+ PrizmaListScreenProps,
28
+ | 'title'
29
+ | 'subtitle'
30
+ | 'children'
31
+ | 'ctaLabel'
32
+ | 'secondaryCtaLabel'
33
+ | 'linkLabel'
34
+ | 'verifiedLabel'
35
+ | 'navLabel'
36
+ > {
37
+ /** Module copy — this screen reads the `tryAgain` slice. */
38
+ strings: NfcStrings;
39
+ /** Which purple section to render. Default `passport`. */
40
+ step?: NfcTryAgainStep;
41
+ /** Replace Core's NFC artwork. */
42
+ illustration?: ReactNode;
43
+ screenId?: string;
44
+ overrides?: PrizmaScreenOverrides;
45
+ onAction?: PrizmaScreenActionHandler;
46
+ }
47
+
48
+ /**
49
+ * NFC — the retry instructions: "Let's try again" for the cover, then one
50
+ * screen per passport page ("Scan the first page" / "the photo page" / "the
51
+ * back page"), plus the ID's own. Purple sections `nfc.tryagain.*`
52
+ * (22469:40368), five in all.
53
+ *
54
+ * ONE screen for all five: they draw the identical skeleton — title block →
55
+ * document artwork filling the middle → Help + Try again — and differ only in
56
+ * the instruction, so five files would have been five chances to drift. The
57
+ * artwork is Core's `PrizmaIllustrationNfcScan`, frozen (`animated={false}`)
58
+ * because these sections draw the document at rest, not the scan loop.
59
+ *
60
+ * Archetype G (`PrizmaListScreen`) for the same reason as `NfcSymbolScreen`:
61
+ * the frames top-align the title at Spacing/24 under the nav and hang the
62
+ * artwork below it.
63
+ *
64
+ * TWO things Figma draws that this screen does not, both reported rather than
65
+ * worked around:
66
+ * - **The page-position dots.** Every passport section carries a 52 × 7 row of
67
+ * four dots under the artwork, marking which page is being read. Core ships
68
+ * no pagination/dots primitive — `PrizmaStepper` is a journey stepper with
69
+ * labelled segments and icons, a different thing — and GUIDELINES §10 forbids
70
+ * inventing one. The step is still legible: each section's title names the
71
+ * page. **Core request: a dots/page-indicator primitive.**
72
+ * - **Help | Try again side by side.** Archetype G has no `ctaOrientation`
73
+ * (only F does, #F-33), so the pair stacks: primary "Try again" above
74
+ * secondary "Help", per the standing order rule (#GEO-1).
75
+ */
76
+ export const NfcTryAgainScreen = forwardRef<HTMLDivElement, NfcTryAgainScreenProps>(
77
+ (
78
+ {
79
+ strings,
80
+ step = 'passport',
81
+ illustration,
82
+ screenId = `nfc-try-again-${step}`,
83
+ overrides,
84
+ onAction,
85
+ ...shell
86
+ },
87
+ ref,
88
+ ) => (
89
+ <PrizmaListScreen
90
+ ref={ref}
91
+ title={strings.tryAgain[step].title}
92
+ subtitle={strings.tryAgain[step].subtitle}
93
+ ctaLabel={strings.tryAgain.ctaLabel}
94
+ secondaryCtaLabel={strings.tryAgain.helpLabel}
95
+ verifiedLabel={strings.verifiedLabel}
96
+ navLabel={strings.navLabel}
97
+ screenId={screenId}
98
+ overrides={overrides}
99
+ onAction={onAction}
100
+ {...shell}
101
+ >
102
+ {illustration ?? (
103
+ <PrizmaIllustrationNfcScan
104
+ type={DOCUMENT_BY_STEP[step]}
105
+ animated={false}
106
+ ariaLabel={strings.tryAgain.illustrationLabel}
107
+ />
108
+ )}
109
+ </PrizmaListScreen>
110
+ ),
111
+ );
112
+ NfcTryAgainScreen.displayName = 'NfcTryAgainScreen';
113
+
114
+ export default NfcTryAgainScreen;