@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,213 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaTitle } from '@incodetech/prizma-core-web/title';
3
+ import { PrizmaButton } from '@incodetech/prizma-core-web/button';
4
+ import { PrizmaDisclaimer } from '@incodetech/prizma-core-web/disclaimer';
5
+ import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
6
+ import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
7
+ import { PrizmaScreenNav } from './ScreenNav';
8
+ import type {
9
+ PrizmaScreenActionHandler,
10
+ PrizmaScreenChromeProps,
11
+ PrizmaScreenOverrides,
12
+ } from './types';
13
+ import './ScreenLayout.css';
14
+
15
+ /** Same vocabulary as `PrizmaResultScreen`: `loading` renders Core's spinner
16
+ * slot, the verdicts render its status mark, `none` shows the title alone. */
17
+ export type PrizmaListStatus = 'loading' | 'success' | 'error' | 'warning' | 'none';
18
+
19
+ export interface PrizmaListScreenProps
20
+ extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'>,
21
+ PrizmaScreenChromeProps {
22
+ /** The status mark above the title. `none` (default) renders the title alone. */
23
+ status?: PrizmaListStatus;
24
+ /**
25
+ * An optional block between the logo nav and the content — a journey stepper.
26
+ * Video Selfie draws Core's `PrizmaStepper` on EVERY screen of the flow, not
27
+ * just its camera stages, and it is the only chrome that tells the steps
28
+ * apart; the archetypes had a slot on E alone, so the rest of the module shed
29
+ * it (owner-reported 2026-08-19). Takes a `ReactNode` so the module supplies
30
+ * Core's own component — no primitive invented, and both offsets live once in
31
+ * `ScreenLayout.css` (`.prizma-screen-layout__progress`). Omit it and nothing
32
+ * renders, so every existing consumer is byte-identical. DEVIATIONS #VS-4.
33
+ */
34
+ progress?: ReactNode;
35
+ /** H2 screen title ("Common issues", "Camera permission is required"). */
36
+ title: string;
37
+ /** Supporting copy below the title (H5). */
38
+ subtitle?: string;
39
+ /**
40
+ * A non-status glyph ABOVE the title — Core's `PrizmaTitle.icon` allowlist is
41
+ * `status | spinner | none`, so anything else (the question mark on ID
42
+ * Capture's common issues) is composed here. Wrap it in
43
+ * `prizma-screen-layout__glyph` (+ `--neutral` / `--negative`); the slot's
44
+ * geometry and its Spacing/16 live in `ScreenLayout.css`. DEVIATIONS #10.
45
+ */
46
+ glyph?: ReactNode;
47
+ /**
48
+ * THE list — a Core `PrizmaCardListCommonIssues`,
49
+ * `PrizmaCardListVerificationOptions`, `PrizmaCardDocumentList`… It fills the
50
+ * middle between the title block and the CTA band; the archetype supplies the
51
+ * Spacing/24 below the title and nothing else, so the list keeps its own row
52
+ * rhythm.
53
+ */
54
+ children?: ReactNode;
55
+ /** Hang the list off the BOTTOM of the middle instead of the top — the
56
+ * document chooser's option rows. Default `'start'`. */
57
+ listAlign?: 'start' | 'end';
58
+ /**
59
+ * Let the list PAN inside the column when the section draws a middle taller
60
+ * than the 844 frame — the archetype-G twin of `scrollFields` on E. The
61
+ * title, the CTA band and the anchored tag hold still while the rows scroll,
62
+ * instead of the surplus painting over them. DEVIATIONS #VS-12.
63
+ */
64
+ scrollList?: boolean;
65
+ /** Legal/hint copy directly above the CTA. Supplies the designed 28px
66
+ * text→CTA gap through its own padding (DEVIATIONS #8). */
67
+ disclaimer?: string;
68
+ /** Primary CTA. Omit for list screens whose rows ARE the actions (the
69
+ * document chooser: Core makes each row a real `<button>`). */
70
+ ctaLabel?: string;
71
+ /** Secondary CTA (a second filled action) rendered ABOVE the primary. */
72
+ secondaryCtaLabel?: string;
73
+ /** Tertiary underlined LINK above the primary — "Take the photo manually"
74
+ * (common issues) and "Quit process" (permission). Figma draws Core's
75
+ * `tertiary-link` composite in the band's top slot. */
76
+ linkLabel?: string;
77
+ /** "verified by" attribution copy for the footer tag. */
78
+ verifiedLabel: string;
79
+ navLabel?: string;
80
+ screenId?: string;
81
+ overrides?: PrizmaScreenOverrides;
82
+ onAction?: PrizmaScreenActionHandler;
83
+ }
84
+
85
+ /**
86
+ * Archetype G — List.
87
+ *
88
+ * Nav (or reserved row) → optional glyph → title block → a Core card / option
89
+ * list filling the middle → CTA band → anchored footer tag.
90
+ *
91
+ * It exists because EIGHT screens hand-built it independently: ID Capture's
92
+ * common issues, permission, age verification and document chooser, Document
93
+ * Capture's common issues, and the document-error card lists. Each re-declared
94
+ * the title→list offset (24 on the ID screens, 32 on Document Capture's) and
95
+ * each inserted the verified tag by hand — which is how the tag ended up at 0 on
96
+ * some screens and 16 on others (DEVIATIONS #F-29, #F-31).
97
+ *
98
+ * CTA band order is the family's designed one: disclaimer → tertiary link →
99
+ * secondary → primary. The link sits ABOVE the primary here (Figma
100
+ * `tertiaryPosition="top"` on `1-5-2-id-common-issues` and `1-3-2-id`), which is
101
+ * the mirror of Archetype A, where it sits below. Stacked at the foundation's
102
+ * flat Spacing/16 (DEVIATIONS #8) — every offset comes from ScreenLayout.css and
103
+ * this file declares none of its own.
104
+ *
105
+ * Reach for `PrizmaResultScreen` instead when the middle is a centred verdict
106
+ * rather than a list.
107
+ */
108
+ export const PrizmaListScreen = forwardRef<HTMLDivElement, PrizmaListScreenProps>(
109
+ (
110
+ {
111
+ progress,
112
+ status = 'none',
113
+ title,
114
+ subtitle,
115
+ glyph,
116
+ children,
117
+ listAlign = 'start',
118
+ scrollList = false,
119
+ disclaimer,
120
+ ctaLabel,
121
+ secondaryCtaLabel,
122
+ linkLabel,
123
+ verifiedLabel,
124
+ navLabel,
125
+ screenId,
126
+ showHeader = true,
127
+ showFooter = true,
128
+ overrides,
129
+ onAction,
130
+ ...shell
131
+ },
132
+ ref,
133
+ ) => (
134
+ <PrizmaScreenShell ref={ref} {...shell}>
135
+ <PrizmaScreenNav reserved={!showHeader} logo={overrides?.logo} navLabel={navLabel} />
136
+ {progress ? (
137
+ <div className="prizma-screen-layout__progress">{progress}</div>
138
+ ) : null}
139
+ <div className="prizma-screen-layout__content">
140
+ {glyph}
141
+ <PrizmaTitle
142
+ variant={overrides?.align === 'left' ? 'left' : 'centered'}
143
+ title={title}
144
+ showSubtitle={Boolean(subtitle)}
145
+ subtitle={subtitle}
146
+ icon={
147
+ status === 'loading'
148
+ ? { type: 'spinner' }
149
+ : status === 'none'
150
+ ? { type: 'none' }
151
+ : { type: 'status', status }
152
+ }
153
+ />
154
+ <div
155
+ className={[
156
+ 'prizma-screen-layout__list',
157
+ listAlign === 'end' ? 'prizma-screen-layout__list--end' : '',
158
+ scrollList ? 'prizma-screen-layout__list--scroll' : '',
159
+ ]
160
+ .filter(Boolean)
161
+ .join(' ')}
162
+ >
163
+ {children}
164
+ </div>
165
+ {ctaLabel || secondaryCtaLabel || linkLabel || disclaimer ? (
166
+ <div className="prizma-screen-layout__band">
167
+ {disclaimer ? <PrizmaDisclaimer text={disclaimer} /> : null}
168
+ {linkLabel ? (
169
+ <PrizmaButton
170
+ variant="tertiary-link"
171
+ size="L"
172
+ onClick={() => onAction?.({ type: 'secondary', screenId })}
173
+ >
174
+ {linkLabel}
175
+ </PrizmaButton>
176
+ ) : null}
177
+ {/* THE PRIMARY ALWAYS SITS ABOVE THE SECONDARY (owner rule
178
+ 2026-08-19, DEVIATIONS #GEO-1). The rule governs the
179
+ primary/secondary pair only — the tertiary link keeps this
180
+ archetype's own fixed position ABOVE both (§6-G, the mirror of
181
+ A where it sits below), which is an explicit exception. */}
182
+ {ctaLabel ? (
183
+ <PrizmaButton
184
+ variant="primary"
185
+ size="L"
186
+ onClick={() => onAction?.({ type: 'cta', screenId })}
187
+ >
188
+ {ctaLabel}
189
+ </PrizmaButton>
190
+ ) : null}
191
+ {secondaryCtaLabel ? (
192
+ <PrizmaButton
193
+ variant="secondary"
194
+ size="L"
195
+ onClick={() => onAction?.({ type: 'secondary', screenId })}
196
+ >
197
+ {secondaryCtaLabel}
198
+ </PrizmaButton>
199
+ ) : null}
200
+ </div>
201
+ ) : null}
202
+ </div>
203
+ {showFooter ? (
204
+ <div className="prizma-screen-layout__footer">
205
+ <PrizmaTag label={verifiedLabel} />
206
+ </div>
207
+ ) : null}
208
+ </PrizmaScreenShell>
209
+ ),
210
+ );
211
+ PrizmaListScreen.displayName = 'PrizmaListScreen';
212
+
213
+ export default PrizmaListScreen;
@@ -0,0 +1,69 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaProcessingScreen, type PrizmaProcessingScreenProps } from './ProcessingScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { LoadersStrings, LoadersVariant } from './LoadersStrings';
5
+ import './ScreenLayout.css';
6
+
7
+ export interface LoaderScreenProps
8
+ extends Omit<
9
+ PrizmaProcessingScreenProps,
10
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
11
+ > {
12
+ /** Family copy — this screen reads the `variants` slice its `variant` names. */
13
+ strings: LoadersStrings;
14
+ /** Which copy pair to render. Default `processing`. */
15
+ variant?: LoadersVariant;
16
+ screenId?: string;
17
+ overrides?: PrizmaScreenOverrides;
18
+ onAction?: PrizmaScreenActionHandler;
19
+ }
20
+
21
+ /**
22
+ * Loaders — the generic wait screen, built on the Processing archetype
23
+ * (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
24
+ *
25
+ * Figma: `Module Generic Screens` frames `67:2388` ("Processing…") and
26
+ * `67:3593` ("Just a moment…"). ONE screen for both, and for every module
27
+ * loader after them: logo header → Core's spinner → status line → reassurance
28
+ * line → the verified tag, with no CTA. The archetype already IS this recipe;
29
+ * this component exists so the family has a name a designer can point at and a
30
+ * copy contract a host can fill, not to add layout.
31
+ *
32
+ * Reach for `PrizmaResultScreen` the moment a wait screen needs a button — a
33
+ * loader with a "Cancel" is a result screen, and the missing CTA band here is
34
+ * exactly what made three modules hand-build the skeleton (see
35
+ * `ResultScreen.tsx`).
36
+ */
37
+ export const LoaderScreen = forwardRef<HTMLDivElement, LoaderScreenProps>(
38
+ (
39
+ {
40
+ strings,
41
+ variant = 'processing',
42
+ screenId = `loaders-${variant}`,
43
+ overrides,
44
+ onAction,
45
+ ...shell
46
+ },
47
+ ref,
48
+ ) => {
49
+ const copy = strings.variants[variant];
50
+
51
+ return (
52
+ <PrizmaProcessingScreen
53
+ ref={ref}
54
+ status="loading"
55
+ title={copy.title}
56
+ subtitle={copy.subtitle}
57
+ verifiedLabel={strings.verifiedLabel}
58
+ navLabel={strings.navLabel}
59
+ screenId={screenId}
60
+ overrides={overrides}
61
+ onAction={onAction}
62
+ {...shell}
63
+ />
64
+ );
65
+ },
66
+ );
67
+ LoaderScreen.displayName = 'LoaderScreen';
68
+
69
+ export default LoaderScreen;
@@ -0,0 +1,38 @@
1
+ // Loaders — copy contract for the GENERIC family.
2
+ //
3
+ // Figma: `Module Generic Screens` (qGJjfL4O0JSjz1x4tOjJn8), frames `67:2388`
4
+ // and `67:3593`.
5
+ //
6
+ // The wait screen every module shows while the server thinks. It is drawn once
7
+ // in the generic file and reused verbatim — logo header, Core's spinner, a
8
+ // status line, a reassurance line, the verified tag — because a user who sees a
9
+ // different loader between two steps reads it as a different product.
10
+ //
11
+ // The family has no flow of its own: a loader is always ENTERED from the module
12
+ // that is waiting and LEFT for that module's next screen, so there is nothing
13
+ // to draw. Core Lab lists it as a library of states.
14
+ //
15
+ // No hardcoded English anywhere in a screen: every visible string arrives here.
16
+
17
+ /**
18
+ * The two frames in the generic file. They are the same screen with different
19
+ * copy — which is the point of the family: the loader is a shape, and the two
20
+ * entries here are examples of filling it, not a closed set. A module that
21
+ * waits for something else supplies its own pair of strings under a new key.
22
+ */
23
+ export type LoadersVariant = 'processing' | 'validating';
24
+
25
+ export interface LoadersCopy {
26
+ /** H2 status line ("Processing…"). */
27
+ title: string;
28
+ /** Reassurance line under it ("This won't take long."). */
29
+ subtitle?: string;
30
+ }
31
+
32
+ export interface LoadersStrings {
33
+ /** Accessible name for the logo nav region (i18n — no baked-in English). */
34
+ navLabel?: string;
35
+ /** "verified by" attribution copy for the footer tag. */
36
+ verifiedLabel: string;
37
+ variants: Record<LoadersVariant, LoadersCopy>;
38
+ }
@@ -0,0 +1,104 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import {
3
+ IconChipNotFound,
4
+ IconIdTooFar,
5
+ IconPassportCover,
6
+ IconPassportTooFar,
7
+ IconPhoneCover,
8
+ IconPhoneMoved,
9
+ } from '@incodetech/prizma-core-icons';
10
+ import { PrizmaList } from '@incodetech/prizma-core-web/list';
11
+ import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
12
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
13
+ import type { NfcDocumentType, NfcIssueKind, NfcStrings } from './NfcStrings';
14
+ import './ScreenLayout.css';
15
+
16
+ /**
17
+ * Issue kind → canonical bank glyph. Unlike Document Capture's and
18
+ * Geolocation's maps (#DC-23), NOTHING here is a substitution: the bank ships
19
+ * this module's five glyphs by name — the NFC sweep minted `passport-cover`,
20
+ * `passport-too-far`, `id-too-far`, `chip-not-found`, `phone-moved` and
21
+ * `phone-cover` — so every row draws the icon its Figma section draws.
22
+ */
23
+ const ISSUE_ICONS: Record<NfcIssueKind, ReactNode> = {
24
+ passportInCover: <IconPassportCover size="m" />,
25
+ passportTooFar: <IconPassportTooFar size="m" />,
26
+ idTooFar: <IconIdTooFar size="m" />,
27
+ chipOtherPage: <IconChipNotFound size="m" />,
28
+ phoneMoved: <IconPhoneMoved size="m" />,
29
+ phoneCover: <IconPhoneCover size="m" />,
30
+ };
31
+
32
+ export interface NfcCommonIssuesScreenProps
33
+ extends Omit<
34
+ PrizmaListScreenProps,
35
+ 'title' | 'children' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
36
+ > {
37
+ /** Module copy — this screen reads the `commonIssues` slice. */
38
+ strings: NfcStrings;
39
+ /** Which purple section: `nfc.commonissues.id` (3 rows) or `.passport` (5). */
40
+ documentType?: NfcDocumentType;
41
+ screenId?: string;
42
+ overrides?: PrizmaScreenOverrides;
43
+ onAction?: PrizmaScreenActionHandler;
44
+ }
45
+
46
+ /**
47
+ * NFC — the "Common issues" help sheet reached from the retry screen's Help
48
+ * button. Purple sections `nfc.commonissues.id` (19976:109863, three rows) and
49
+ * `nfc.commonissues.passport` (19976:112072, five), on the List archetype
50
+ * (GUIDELINES.md §6-G).
51
+ *
52
+ * Like ID Capture's and Document Capture's help sheets, these sections draw no
53
+ * logo, so `showHeader={false}` drops the wordmark while the nav row stays
54
+ * reserved — the content starts where every other screen's does and the tag
55
+ * keeps its one fixed position (#F-34, #F-29).
56
+ *
57
+ * The rows are Core's `PrizmaList variant="icons-m"`, which IS the `List`
58
+ * instance the sections place: a 40px leading icon slot, a single-line label,
59
+ * rows stacked by the component's own rhythm. (Figma spaces its rows 16 apart
60
+ * and Core's icons-m gap is Spacing/12 — Core wins, a 4px family-level
61
+ * difference that no module re-declares.) `PrizmaCardListCommonIssues`, which
62
+ * two other modules use for their help sheets, is deliberately NOT used here:
63
+ * it is the two-line title+description row, and these rows have one line.
64
+ */
65
+ export const NfcCommonIssuesScreen = forwardRef<HTMLDivElement, NfcCommonIssuesScreenProps>(
66
+ (
67
+ {
68
+ strings,
69
+ documentType = 'passport',
70
+ screenId = `nfc-common-issues-${documentType}`,
71
+ showHeader = false,
72
+ overrides,
73
+ onAction,
74
+ ...shell
75
+ },
76
+ ref,
77
+ ) => (
78
+ <PrizmaListScreen
79
+ ref={ref}
80
+ showHeader={showHeader}
81
+ title={strings.commonIssues.title}
82
+ ctaLabel={strings.commonIssues.ctaLabel}
83
+ verifiedLabel={strings.verifiedLabel}
84
+ navLabel={strings.navLabel}
85
+ screenId={screenId}
86
+ overrides={overrides}
87
+ onAction={onAction}
88
+ {...shell}
89
+ >
90
+ <PrizmaList
91
+ variant="icons-m"
92
+ aria-label={strings.commonIssues.listLabel}
93
+ items={strings.commonIssues.issues[documentType].map((issue) => ({
94
+ variant: 'icon-m' as const,
95
+ label: issue.label,
96
+ icon: ISSUE_ICONS[issue.kind],
97
+ }))}
98
+ />
99
+ </PrizmaListScreen>
100
+ ),
101
+ );
102
+ NfcCommonIssuesScreen.displayName = 'NfcCommonIssuesScreen';
103
+
104
+ export default NfcCommonIssuesScreen;
@@ -0,0 +1,83 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { NfcStrings } from './NfcStrings';
5
+ import './ScreenLayout.css';
6
+
7
+ /**
8
+ * Which error verdict. `unable` is the pre-flight refusal (the device or the
9
+ * document cannot do NFC at all); `general` is the read failing on a chip that
10
+ * should have worked.
11
+ */
12
+ export type NfcErrorVariant = 'unable' | 'general';
13
+
14
+ export interface NfcErrorScreenProps
15
+ extends Omit<
16
+ PrizmaResultScreenProps,
17
+ | 'status'
18
+ | 'title'
19
+ | 'subtitle'
20
+ | 'children'
21
+ | 'ctaLabel'
22
+ | 'secondaryCtaLabel'
23
+ | 'verifiedLabel'
24
+ | 'navLabel'
25
+ > {
26
+ /** Module copy — this screen reads the `error` slice. */
27
+ strings: NfcStrings;
28
+ /** Which purple section to render. Default `unable`. */
29
+ variant?: NfcErrorVariant;
30
+ screenId?: string;
31
+ overrides?: PrizmaScreenOverrides;
32
+ onAction?: PrizmaScreenActionHandler;
33
+ }
34
+
35
+ /**
36
+ * NFC — the two error verdicts, on the Result archetype (GUIDELINES.md §6-F):
37
+ *
38
+ * - `unable` — `nfc.error.unable` (19975:107734): a WARNING mark over "We're
39
+ * sorry, you're unable to continue the process" + "Only passports and phones
40
+ * with NFC are allowed."
41
+ * - `general` — `nfc.error.generalerror` (19975:108644): a NEGATIVE mark over
42
+ * "Unable to authenticate document chip", no supporting line.
43
+ *
44
+ * The two are one screen because they differ only in mark and copy; the amber
45
+ * vs red distinction is real and deliberate (a device that CANNOT do NFC is not
46
+ * a failed read), so it rides Core's own status axis rather than a colour
47
+ * literal.
48
+ *
49
+ * Chrome: both sections draw the verdict alone — no logo row, no tag. Both are
50
+ * kept, which is the standing ruling for the error family (#PI-8, restated by
51
+ * the owner 2026-08-19 and applied to four modules' connectivity screens), so
52
+ * nothing shifts between the module's states (#F-29).
53
+ */
54
+ export const NfcErrorScreen = forwardRef<HTMLDivElement, NfcErrorScreenProps>(
55
+ (
56
+ {
57
+ strings,
58
+ variant = 'unable',
59
+ screenId = `nfc-error-${variant}`,
60
+ overrides,
61
+ onAction,
62
+ ...shell
63
+ },
64
+ ref,
65
+ ) => (
66
+ <PrizmaResultScreen
67
+ ref={ref}
68
+ status={variant === 'unable' ? 'warning' : 'error'}
69
+ title={strings.error[variant].title}
70
+ subtitle={variant === 'unable' ? strings.error.unable.subtitle : undefined}
71
+ ctaLabel={strings.error[variant].ctaLabel}
72
+ verifiedLabel={strings.verifiedLabel}
73
+ navLabel={strings.navLabel}
74
+ screenId={screenId}
75
+ overrides={overrides}
76
+ onAction={onAction}
77
+ {...shell}
78
+ />
79
+ ),
80
+ );
81
+ NfcErrorScreen.displayName = 'NfcErrorScreen';
82
+
83
+ export default NfcErrorScreen;
@@ -0,0 +1,36 @@
1
+ /* NFC — module-owned layer.
2
+ *
3
+ * Only ONE thing lives here, and it is presentation, not archetype spacing: the
4
+ * scrim + centring frame that presents Core's `PrizmaModalContent` on the
5
+ * `nfc.error.nfcsettings` section. No offset, size or type value in this file
6
+ * duplicates anything the archetypes own — every screen offset in this module
7
+ * comes from `ScreenLayout.css`.
8
+ *
9
+ * Why the screen owns the presentation: Core's safe presenter (`PrizmaModal`)
10
+ * `createPortal`s to `document.body`, which escapes the 390 × 844 screen frame
11
+ * and the host's `transform: scale()` (DEVIATIONS #17), and a screen is one
12
+ * static spec state with no open/close clock. This is the same division of
13
+ * labour Document Capture's bottom sheet already uses (#DC-30) — Core owns the
14
+ * card, the surface owns the scrim.
15
+ */
16
+
17
+ .nfc-modal-scrim {
18
+ position: absolute;
19
+ inset: 0;
20
+ z-index: 1;
21
+ background: var(--prizma-surface-overlay);
22
+ }
23
+
24
+ /* Centres the dialog in the frame. `PrizmaModalContent` is `width: 100%` up to
25
+ * its own `Modal/Size/Max-width`, so the only thing added here is the gutter
26
+ * Figma draws (12 each side of the 390 frame) — a Spacing token, not a literal. */
27
+ .nfc-modal-panel {
28
+ position: absolute;
29
+ inset: 0;
30
+ z-index: 2;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ padding-inline: var(--prizma-spacing-12);
35
+ box-sizing: border-box;
36
+ }
@@ -0,0 +1,57 @@
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 NfcProcessingScreenProps
11
+ extends Omit<
12
+ PrizmaProcessingScreenProps,
13
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
14
+ > {
15
+ /** Module copy — this screen reads the `loading` slice. */
16
+ strings: NfcStrings;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+
22
+ /**
23
+ * NFC — "Hold on a sec.. / We're verifying your identity": the chip has been
24
+ * read and the data is being checked. Purple section `nfc.loading.default`
25
+ * (19974:82917), on the Processing archetype (GUIDELINES.md §6-C).
26
+ *
27
+ * A pure spinner + title screen with no button, which is the case §6-F reserves
28
+ * for C rather than the Result archetype — the same split Email Input's success
29
+ * screen sits on (#EI-4).
30
+ *
31
+ * Chrome: the section draws neither the logo nor the tag (its CONTENT frame
32
+ * holds only the `Loading spinner` instance). Both are kept, per the owner rule
33
+ * that non-capture screens show header AND footer and that fixed chrome never
34
+ * moves between states (#F-30, #F-29, and the #PI-8 restatement).
35
+ */
36
+ export const NfcProcessingScreen = forwardRef<HTMLDivElement, NfcProcessingScreenProps>(
37
+ (
38
+ { strings, screenId = 'nfc-loading', overrides, onAction, ...shell },
39
+ ref,
40
+ ) => (
41
+ <PrizmaProcessingScreen
42
+ ref={ref}
43
+ status="loading"
44
+ title={strings.loading.title}
45
+ subtitle={strings.loading.subtitle}
46
+ verifiedLabel={strings.verifiedLabel}
47
+ navLabel={strings.navLabel}
48
+ screenId={screenId}
49
+ overrides={overrides}
50
+ onAction={onAction}
51
+ {...shell}
52
+ />
53
+ ),
54
+ );
55
+ NfcProcessingScreen.displayName = 'NfcProcessingScreen';
56
+
57
+ export default NfcProcessingScreen;