@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,264 @@
1
+ /* Face Match — module layout additions.
2
+ *
3
+ * ONLY what the foundation archetypes do not already own. Every value is a
4
+ * token (or token arithmetic); each departure from GUIDELINES.md or from the
5
+ * module Figma carries a numbered row in DEVIATIONS.md (Wave 2 section).
6
+ *
7
+ * The foundation supplies everything else: the shell, the nav offset, the 24px
8
+ * content padding, the flex middle, the CTA band recipe and the footer tag
9
+ * (ScreenLayout.css). Nothing there is re-declared here.
10
+ */
11
+
12
+ /* ── Face comparison cluster (faceMatch.comparison.*) ────────────────────────
13
+ * The module's one genuinely new composition: two or three captured portraits
14
+ * as circles, each with a label callout above it, that CONVERGE into a rosette
15
+ * in the `matching` state.
16
+ *
17
+ * Anatomy, measured off the purple 390 sections: photo circle 160, top row gap
18
+ * 15 → Spacing/16 (1px, within Figma's off-grid rounding), converged vertical
19
+ * offset 80.25 → `2 × Spacing/40` (0.25px, sub-pixel). The converged HORIZONTAL
20
+ * overlap is 44 and stays a literal — approximating it to 40 was a visible 4px
21
+ * error per seam. DEVIATIONS.md #FM-20, #FM-21.
22
+ *
23
+ * The circles themselves are HOST-supplied content (the same contract as
24
+ * `camera` on the capture screens): Core has no captured-photo primitive, so
25
+ * this layer only masks and positions what the host passes in — no Core
26
+ * primitive is re-implemented. DEVIATIONS.md #FM-22. */
27
+
28
+ .face-match-cluster {
29
+ display: flex;
30
+ flex-direction: column;
31
+ align-items: center;
32
+
33
+ /* The disc's diameter, named once. `--matching`'s rosette and `--animated`'s
34
+ * convergence both have to know it, and a second literal is a second thing to
35
+ * forget. Still a design literal, still DEVIATIONS #FM-22 — just not repeated. */
36
+ --face-match-photo: 160px;
37
+ /* Half the distance between two neighbouring discs: what one of them has to
38
+ * travel to reach the pair's centre line. */
39
+ --face-match-half-step: calc((var(--face-match-photo) + var(--prizma-spacing-16)) / 2);
40
+ }
41
+
42
+ .face-match-cluster__row {
43
+ position: relative; /* z-index stacking context for the overlap order */
44
+ display: flex;
45
+ align-items: flex-end;
46
+ justify-content: center;
47
+ gap: var(--prizma-spacing-16); /* Figma 15 — nearest token (DEVIATIONS #FM-20) */
48
+ }
49
+
50
+ /* Paint order of the converged rosette, per the purple `matching` sections:
51
+ * the lower row sits above the top row, and within a row the first photo sits
52
+ * above the second. */
53
+ .face-match-cluster__row + .face-match-cluster__row {
54
+ z-index: 2;
55
+ }
56
+
57
+ .face-match-cluster__face {
58
+ position: relative;
59
+ display: flex;
60
+ flex-direction: column;
61
+ align-items: center;
62
+ /* label callout → photo. Figma draws 12px between the callout tail tip and
63
+ * the circle; Core's Tooltip owns the tail itself. */
64
+ gap: var(--prizma-spacing-12);
65
+ }
66
+
67
+ .face-match-cluster__row > .face-match-cluster__face:first-child {
68
+ z-index: 1;
69
+ }
70
+
71
+ /* The photo disc. 160×160 is geometry fixed by design (the same class of
72
+ * literal as the capture ring's proportions — GUIDELINES §2); no token exists
73
+ * for component geometry. DEVIATIONS.md #FM-22. */
74
+ .face-match-cluster__photo {
75
+ flex-shrink: 0;
76
+ width: var(--face-match-photo);
77
+ height: var(--face-match-photo);
78
+ border-radius: var(--prizma-border-radius-full);
79
+ overflow: hidden;
80
+ background: var(--prizma-surface-neutral-100);
81
+ }
82
+
83
+ .face-match-cluster__photo > img,
84
+ .face-match-cluster__photo > video,
85
+ .face-match-cluster__photo > svg {
86
+ display: block;
87
+ width: 100%;
88
+ height: 100%;
89
+ object-fit: cover;
90
+ }
91
+
92
+ /* Converged (`*.matching` / `*.threeFacesMatching`): the callouts are gone and
93
+ * the circles overlap.
94
+ *
95
+ * The horizontal overlap is a DESIGN LITERAL, not token arithmetic. Figma draws
96
+ * 44px; the spacing scale stops at 40, so `calc(-1 * Spacing/40)` would render a
97
+ * visibly wrong rosette (4px per seam). Geometry fixed by design and absent from
98
+ * the token set is hardcoded with justification — the same treatment as the
99
+ * 160px photo disc below and the capture ring proportions (GUIDELINES §2).
100
+ * DEVIATIONS.md #FM-20. */
101
+ .face-match-cluster--matching .face-match-cluster__row {
102
+ gap: 0;
103
+ }
104
+
105
+ .face-match-cluster--matching .face-match-cluster__face + .face-match-cluster__face {
106
+ margin-left: -44px; /* hardcoded — Figma converged overlap; no token (verified absent) */
107
+ }
108
+
109
+ .face-match-cluster--matching .face-match-cluster__row + .face-match-cluster__row {
110
+ margin-top: calc(-2 * var(--prizma-spacing-40));
111
+ }
112
+
113
+ /* ── The comparison, moving (`phase` on FaceMatchComparisonScreen) ───────────
114
+ *
115
+ * Everything above draws the comparison STILL — the frames the Figma sections
116
+ * are, and what the Screens grid needs. This draws the same cluster MOVING,
117
+ * which is the thing Face Match actually is: the module has no camera and no
118
+ * control, so the animation is not decoration on top of the screen, it IS the
119
+ * screen. A still of it can only ever be a frame of the film.
120
+ *
121
+ * WHERE THE NUMBERS COME FROM. Not from a judgement call and not from the
122
+ * Figma sections (they carry no motion) — from the SHIPPED WEB SDK, which has
123
+ * animated this module since v1 and whose constants were never written into the
124
+ * token SOT. `ui/src/modules/face-match/animation.css`, read 2026-09-01:
125
+ *
126
+ * ENTRANCE_DELAY 450 · ENTRANCE_DURATION 800 · TOOLTIP_DURATION 1600
127
+ * ANIMATION_DELAY 2850 · ANIMATION_DURATION 800 · TRANSITION_DELAY 200
128
+ * easing cubic-bezier(.25,.46,.45,.94)
129
+ *
130
+ * They are now `Face match/Motion/*` (core/tokens/tokens/components.json), so
131
+ * the SOT states what production does and a motion designer re-times the module
132
+ * by moving a token rather than by finding this file. DEVIATIONS #FM-26.
133
+ *
134
+ * WHY TRANSITIONS AND NOT KEYFRAMES, which is what the SDK uses. A keyframe
135
+ * runs once, on mount, and can never be replayed, stepped into or stepped back
136
+ * out of. The Lab's prototype mounts a screen ONCE for a whole run and steps its
137
+ * props (apps/core-lab/src/lab/prototype/types.ts), so a mount animation would
138
+ * play on arrival and then be gone — "Start over" would show a cluster that is
139
+ * simply already there. Re-expressed as three PHASES the host names, the same
140
+ * choreography plays forwards, backwards, from a seek and from a restart, and
141
+ * the export can photograph it at any instant. The timeline is identical:
142
+ *
143
+ * phase="arriving" the module has opened; the discs are still outside
144
+ * the screen. hold 450
145
+ * phase="comparing" the discs travel in (800), and once they are seated
146
+ * the callouts name them (800, delayed 800). hold 1600
147
+ * phase="converged" the callouts leave (800), and then the discs run
148
+ * together into one and go with them (800,
149
+ * delayed 800), + the module's 200 beat. hold 1800
150
+ *
151
+ * 450 + 1600 + 1800 = 3850ms to the verdict — the SDK's own figure.
152
+ *
153
+ * `--matching` (the static rosette) and `--animated` are mutually exclusive by
154
+ * construction: the screen emits one or the other, never both. The rosette is a
155
+ * FRAME OF THIS, caught partway through the last phase — which is why the
156
+ * moving version does not stop there. */
157
+
158
+ .face-match-cluster--animated .face-match-cluster__face {
159
+ will-change: transform, opacity;
160
+ transition:
161
+ transform var(--prizma-face-match-motion-photo-entrance)
162
+ var(--prizma-face-match-motion-photo-easing),
163
+ opacity var(--prizma-face-match-motion-photo-entrance)
164
+ var(--prizma-face-match-motion-photo-easing);
165
+ }
166
+
167
+ /* The callouts are kept in the DOM in every phase — they have to be there to
168
+ * fade — so their box holds the cluster's height steady while they come and go.
169
+ * Half the cycle each way: the token names the whole life of the label. */
170
+ .face-match-cluster--animated .face-match-cluster__label {
171
+ transition: opacity calc(var(--prizma-face-match-motion-label-cycle) / 2)
172
+ var(--prizma-motion-easing-linear);
173
+ /* Seated last: the discs arrive first, and only then are they named. */
174
+ transition-delay: var(--prizma-face-match-motion-photo-entrance);
175
+ }
176
+
177
+ /* ── phase="arriving" ────────────────────────────────────────────────────────
178
+ * Off the sides, and — for the third face — off the bottom. 200px is the SDK's
179
+ * own throw: far enough that a disc is fully outside a 390 screen, near enough
180
+ * that it does not read as flying. A design literal, like the disc itself. */
181
+
182
+ .face-match-cluster--arriving .face-match-cluster__face,
183
+ .face-match-cluster--arriving .face-match-cluster__label {
184
+ opacity: 0;
185
+ }
186
+
187
+ .face-match-cluster--arriving
188
+ .face-match-cluster__row:first-child
189
+ > .face-match-cluster__face:first-child {
190
+ transform: translateX(-200px);
191
+ }
192
+
193
+ .face-match-cluster--arriving
194
+ .face-match-cluster__row:first-child
195
+ > .face-match-cluster__face:last-child {
196
+ transform: translateX(200px);
197
+ }
198
+
199
+ /* The third face — the NFC portrait's selfie, or the second document's — comes
200
+ * up from below rather than in from a side, because there is no side left. */
201
+ .face-match-cluster--arriving
202
+ .face-match-cluster__row
203
+ + .face-match-cluster__row
204
+ > .face-match-cluster__face {
205
+ transform: translateY(200px);
206
+ }
207
+
208
+ /* ── phase="converged" ───────────────────────────────────────────────────────
209
+ * Every disc onto ONE centre, fading as it goes. Not the 44px rosette: the
210
+ * rosette is where this passes THROUGH at about two thirds, and stopping there
211
+ * would be stopping the sentence in the middle. The discs are gone by the end,
212
+ * which is what lets the verdict take the screen without anything being cleared
213
+ * away first. */
214
+
215
+ .face-match-cluster--converged .face-match-cluster__face {
216
+ opacity: 0;
217
+ /* The labels go first; the discs wait for them to finish before moving. */
218
+ transition-delay: calc(var(--prizma-face-match-motion-label-cycle) / 2);
219
+ }
220
+
221
+ .face-match-cluster--converged .face-match-cluster__label {
222
+ opacity: 0;
223
+ transition-delay: 0ms;
224
+ }
225
+
226
+ .face-match-cluster--converged
227
+ .face-match-cluster__row:first-child
228
+ > .face-match-cluster__face:first-child {
229
+ transform: translateX(var(--face-match-half-step));
230
+ }
231
+
232
+ .face-match-cluster--converged
233
+ .face-match-cluster__row:first-child
234
+ > .face-match-cluster__face:last-child {
235
+ transform: translateX(calc(-1 * var(--face-match-half-step)));
236
+ }
237
+
238
+ /* Up by exactly its own height, which is the row above's height too (same face
239
+ * anatomy) — so the third disc lands concentric with the other two without this
240
+ * file having to know how tall a callout is. */
241
+ .face-match-cluster--converged
242
+ .face-match-cluster__row
243
+ + .face-match-cluster__row
244
+ > .face-match-cluster__face {
245
+ transform: translateY(-100%);
246
+ }
247
+
248
+ /* The one honest thing a reduced-motion block can do here: Face Match's whole
249
+ * screen is the movement, so there is nothing to keep — the discs simply are
250
+ * where the phase says they are, and the module still reads. */
251
+ @media (prefers-reduced-motion: reduce) {
252
+ .face-match-cluster--animated .face-match-cluster__face,
253
+ .face-match-cluster--animated .face-match-cluster__label {
254
+ transition-duration: 1ms;
255
+ transition-delay: 0ms;
256
+ }
257
+ }
258
+
259
+ /* ── Removed: the verdict snackbar row ───────────────────────────────────────
260
+ * `.face-match-band__snackbar` positioned the pill inside the CTA band. The
261
+ * verdict screens now render the `PrizmaResultScreen` archetype and the pill
262
+ * rides its `children` slot, where the centred column supplies the gap —
263
+ * DEVIATIONS #F-33.
264
+ */
@@ -0,0 +1,117 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaSnackbar } from '@incodetech/prizma-core-web/snackbar';
3
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type {
6
+ FaceMatchLivenessVerdict,
7
+ FaceMatchResultStatus,
8
+ FaceMatchStrings,
9
+ } from './FaceMatchStrings';
10
+ import './ScreenLayout.css';
11
+
12
+ export interface FaceMatchResultScreenProps
13
+ extends Omit<
14
+ PrizmaResultScreenProps,
15
+ 'status' | 'title' | 'subtitle' | 'children' | 'bandContent' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
16
+ > {
17
+ /** Module copy — this screen reads the `matched` / `notMatched` / `liveness`
18
+ * slices (+ shared labels). */
19
+ strings: FaceMatchStrings;
20
+ /** `matched` → the purple `faceMatch.success.*` family (positive status icon);
21
+ * `notMatched` → `faceMatch.error.*` (negative). Default `'matched'`. */
22
+ status?: FaceMatchResultStatus;
23
+ /**
24
+ * The `*.livenessSuccess` / `*.livenessFailed` halves of both families. When
25
+ * set, Figma adds the liveness subtitle under the title and a verdict Snackbar
26
+ * above the CTA; the plain `matched` / `notMatched` sections carry neither.
27
+ */
28
+ liveness?: FaceMatchLivenessVerdict;
29
+ screenId?: string;
30
+ overrides?: PrizmaScreenOverrides;
31
+ onAction?: PrizmaScreenActionHandler;
32
+ }
33
+
34
+ /**
35
+ * Face Match — match verdict, built on the `PrizmaResultScreen` archetype
36
+ * (GUIDELINES.md §6-F). Figma: ALL SIX purple result sections —
37
+ * `faceMatch.success.{matched,livenessSuccess,livenessFailed}` and
38
+ * `faceMatch.error.{notMatched,livenessSuccess,livenessFailed}` — which share
39
+ * one identical layout and differ only by status icon, copy and the presence of
40
+ * the verdict Snackbar. One screen, six variants; splitting it into a success
41
+ * and an error component would be pure duplication.
42
+ *
43
+ * Layout measured off the purple 390 sections (CONTENT frame, 650 tall):
44
+ * nav 0→44 · Title vertically centered in the flexible middle · CTA band at the
45
+ * bottom, Button 56 + Spacing/16 + Tag. The centered block is exactly Core's
46
+ * `PrizmaTitle` (icon slot → Spacing/16 → H2 → Spacing/12 → H5), so nothing is
47
+ * re-implemented; the screen only chooses the status and supplies copy.
48
+ *
49
+ * This file used to compose the foundation shell by hand (143 lines) because no
50
+ * archetype offered a centered status block WITH a CTA band — the gap reported as
51
+ * DEVIATIONS #FM-24, now closed by `PrizmaResultScreen`. The verdict pill rides
52
+ * in the archetype's `bandContent` slot, so it sits INSIDE the CTA band rather
53
+ * than immediately above the CTA where Figma draws it (#F-33).
54
+ *
55
+ * The status marks are Core's outline bank icons via `PrizmaTitle.icon`; the
56
+ * module Figma still draws two-tone filled discs (DEVIATIONS.md #15, unchanged
57
+ * from Wave 1). The verdict pill is Core's `PrizmaSnackbar`, which always
58
+ * carries its state glyph — Figma's pill has none (DEVIATIONS.md #FM-23).
59
+ */
60
+ export const FaceMatchResultScreen = forwardRef<HTMLDivElement, FaceMatchResultScreenProps>(
61
+ (
62
+ {
63
+ strings,
64
+ status = 'matched',
65
+ liveness,
66
+ screenId = liveness
67
+ ? `face-match-${status === 'matched' ? 'matched' : 'not-matched'}-liveness-${liveness}`
68
+ : status === 'matched'
69
+ ? 'face-match-matched'
70
+ : 'face-match-not-matched',
71
+ overrides,
72
+ onAction,
73
+ ...shell
74
+ },
75
+ ref,
76
+ ) => {
77
+ const result = status === 'matched' ? strings.matched : strings.notMatched;
78
+ // Figma gives the subtitle ONLY to the two liveness halves of each family;
79
+ // the plain `matched` / `notMatched` sections are title-only. Gated here (the
80
+ // same way Face Capture gates its attempts line on `exhausted`) so a host
81
+ // whose locale pack always carries the line still renders both designs.
82
+ const description = liveness ? strings.liveness.description : undefined;
83
+
84
+ return (
85
+ <PrizmaResultScreen
86
+ ref={ref}
87
+ status={status === 'matched' ? 'success' : 'error'}
88
+ title={result.title}
89
+ subtitle={description}
90
+ ctaLabel={result.ctaLabel}
91
+ verifiedLabel={strings.verifiedLabel}
92
+ navLabel={strings.navLabel}
93
+ screenId={screenId}
94
+ overrides={overrides}
95
+ onAction={onAction}
96
+ // Figma puts the verdict pill INSIDE the CTA band, Spacing/32 above the
97
+ // button — the band's own 16 plus the slot's 16 (FM-23).
98
+ bandContent={
99
+ liveness ? (
100
+ <PrizmaSnackbar
101
+ state={liveness === 'success' ? 'success' : 'error'}
102
+ contentResizing="hug"
103
+ >
104
+ {liveness === 'success'
105
+ ? strings.liveness.successLabel
106
+ : strings.liveness.failedLabel}
107
+ </PrizmaSnackbar>
108
+ ) : null
109
+ }
110
+ {...shell}
111
+ />
112
+ );
113
+ },
114
+ );
115
+ FaceMatchResultScreen.displayName = 'FaceMatchResultScreen';
116
+
117
+ export default FaceMatchResultScreen;
@@ -0,0 +1,95 @@
1
+ // Face Match module — copy contract.
2
+ //
3
+ // Every Face Match screen receives the SAME `strings: FaceMatchStrings` object
4
+ // (rule: all copy via props, no hardcoded English — GUIDELINES.md §9). The
5
+ // object is the module's locale pack: one instance drives the whole flow, which
6
+ // is what the FlowPlayer steps through. Sample copy lives only in previews /
7
+ // host apps.
8
+ //
9
+ // Authoritative screen list: the PURPLE parent sections of the Face Match Figma
10
+ // file (BXeJ6Q3TXahJVWEt8QoMVA, page 18:19332) — four sections, 12 variants:
11
+ // faceMatch.comparison initialState · matching · nfc ·
12
+ // firstAndSecondID · threeFacesMatching
13
+ // faceMatch.comparisonCompact matching
14
+ // faceMatch.error notMatched · livenessSuccess · livenessFailed
15
+ // faceMatch.success matched · livenessSuccess · livenessFailed
16
+ //
17
+ // Face Match ships NO tutorial and NO capture stage of its own: the selfie and
18
+ // the document images arrive from the modules upstream (Face Capture / ID
19
+ // Capture / NFC). That is why no Face Capture screen is reused here — see
20
+ // DEVIATIONS.md #FM-24.
21
+
22
+ /**
23
+ * Which purple `faceMatch.comparison.*` photo set to render.
24
+ * - `selfieId` — 2 photos: the selfie and the ID portrait.
25
+ * - `nfc` — 3 photos: the chip portrait + the ID portrait on the
26
+ * top row, the selfie below.
27
+ * - `firstAndSecondID` — 3 photos: two ID portraits on the top row, the selfie
28
+ * below. Same layout as `nfc`; only the labels differ.
29
+ */
30
+ export type FaceMatchComparisonVariant = 'selfieId' | 'nfc' | 'firstAndSecondID';
31
+
32
+ /** The two result families: `faceMatch.success.*` and `faceMatch.error.*`. */
33
+ export type FaceMatchResultStatus = 'matched' | 'notMatched';
34
+
35
+ /** The `*.livenessSuccess` / `*.livenessFailed` halves of both result families. */
36
+ export type FaceMatchLivenessVerdict = 'success' | 'failed';
37
+
38
+ /** Title + CTA of one result family. Both families share the SAME layout, so
39
+ * they are variants of one screen (FaceMatchResultScreen), not two screens. */
40
+ export interface FaceMatchResultStrings {
41
+ /** H2 status line ("Matched!" / "Faces do not match"). */
42
+ title: string;
43
+ /** CTA label ("Continue"). */
44
+ ctaLabel: string;
45
+ }
46
+
47
+ export interface FaceMatchStrings {
48
+ /** Accessible name for the logo nav region (i18n — no baked-in English). */
49
+ navLabel?: string;
50
+ /** "verified by" attribution copy for the footer tag. */
51
+ verifiedLabel: string;
52
+
53
+ /** faceMatch.comparison.* — one H2 for all five sections, plus the tooltip
54
+ * labels the variants swap above each photo. */
55
+ comparison: {
56
+ /** H2 ("Verifying identity") — identical across the five sections. */
57
+ title: string;
58
+ /** Label above the captured selfie. Used by every variant. */
59
+ selfieLabel: string;
60
+ /** Label above the ID portrait (`selfieId` and `nfc`). */
61
+ idLabel: string;
62
+ /** `nfc` only — the portrait read off the document chip. */
63
+ nfcLabel?: string;
64
+ /** `firstAndSecondID` only — first document. */
65
+ firstIdLabel?: string;
66
+ /** `firstAndSecondID` only — second document. */
67
+ secondIdLabel?: string;
68
+ };
69
+
70
+ /** faceMatch.comparisonCompact.matching — the photo-less matching state. */
71
+ comparisonCompact: {
72
+ /** H2 ("Checking your photos"). */
73
+ title: string;
74
+ /** H5 below it ("This may take a few seconds"). */
75
+ description?: string;
76
+ };
77
+
78
+ /** faceMatch.success.* */
79
+ matched: FaceMatchResultStrings;
80
+ /** faceMatch.error.* */
81
+ notMatched: FaceMatchResultStrings;
82
+
83
+ /** The liveness verdict slice — the `*.livenessSuccess` / `*.livenessFailed`
84
+ * variants of BOTH result families. Figma gives those (and only those) a
85
+ * subtitle and a verdict Snackbar above the CTA, which is why the subtitle
86
+ * belongs to this slice rather than to `matched` / `notMatched`. */
87
+ liveness: {
88
+ /** H5 below the result title ("User already exists"). */
89
+ description?: string;
90
+ /** Snackbar copy on `*.livenessSuccess` ("Liveness success"). */
91
+ successLabel: string;
92
+ /** Snackbar copy on `*.livenessFailed` ("Liveness failed"). */
93
+ failedLabel: string;
94
+ };
95
+ }
@@ -0,0 +1,78 @@
1
+ /* FormScreen — Archetype E field stack (GUIDELINES.md §6-E).
2
+ *
3
+ * Title block → field stack is Spacing/32, measured off Phone Input's purple
4
+ * sections (the `middle container` of every `phoneNumber.verify.*` /
5
+ * `phoneNumber.OTP.*` frame draws a flat 32 between the Title and
6
+ * `Input / Combined`). The archetype shipped Spacing/24 from the Studio-era
7
+ * guidelines before any module consumed it; Phone Input is the first real
8
+ * consumer, so the value is corrected here — in the ONE place it exists —
9
+ * rather than overridden per module. DEVIATIONS #PI-2.
10
+ */
11
+
12
+ /* The two offsets are token-driven custom properties so a module whose purple
13
+ * section draws a different rhythm can SELECT another step of the spacing scale
14
+ * instead of re-declaring a value in its own stylesheet (the forbidden
15
+ * per-module override). The fallbacks are the measured Phone Input values, so
16
+ * every existing Form consumer is byte-identical.
17
+ *
18
+ * Data Sharing Consent is the first module to move them: `User Consent`
19
+ * (27151:321) draws a flat Spacing/24 down the whole middle column — title
20
+ * 0→28, disclosure at y=52 (24 below), disclosure ends 304, first consent card
21
+ * at 328 (24) — and the tall variant (29645:5306) repeats 24 between every
22
+ * card (459 → 557 → 655, each 74 tall). DEVIATIONS #DSC-1. */
23
+ .prizma-form-screen__fields {
24
+ flex: 1;
25
+ min-height: 0;
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: var(--pfs-fields-gap, var(--prizma-spacing-16));
29
+ padding-top: var(--pfs-fields-offset, var(--prizma-spacing-32));
30
+ }
31
+
32
+ /* ── Scrolling field stack ───────────────────────────────────────────────────
33
+ * Screens are authored at 390×844 and never reflow (DEVIATIONS #17), but some
34
+ * Form sections draw a middle column taller than the frame and let it pan:
35
+ * CURP's six labelled fields, Data Sharing Consent's disclosure + N consent
36
+ * cards, and the long-form / signature / eKYB sections. Without an overflow
37
+ * behaviour the surplus is silently clipped by `ScreenShell`'s
38
+ * `overflow: hidden` and paints over the sibling CTA on the way out.
39
+ *
40
+ * Five modules hand-rolled this rule in their own stylesheets; it belongs here
41
+ * once, driven by `scrollFields` on `PrizmaFormScreen`.
42
+ *
43
+ * The `margin-bottom` is the frame's own breathing room, and it is what makes
44
+ * the cut read as a cut: `29645:5306` clips the column at y=698 and starts the
45
+ * CTA band there with 16px of internal padding, so the sliced consent card is
46
+ * followed by clear surface before the button rather than the button appearing
47
+ * painted on the card's cut edge. It is a MARGIN, not padding — padding-bottom
48
+ * sits inside a scroll container's padding box and never moves the clip edge. */
49
+ .prizma-form-screen__fields--scroll {
50
+ overflow-y: auto;
51
+ margin-bottom: var(--prizma-spacing-16);
52
+ }
53
+
54
+ /* Rows in a scrolling stack keep their intrinsic height. A flex item defaults to
55
+ * `flex-shrink: 1`, so once the stack overflows the column SQUASHES every child
56
+ * that has no explicit floor — Qualified Signature's document row collapsed from
57
+ * 74px to 18px and, because `PrizmaCardDocumentContainer` is `overflow: hidden`,
58
+ * its 56px View button was clipped away entirely (owner-reported 2026-08-19).
59
+ * The identical row rendered correctly on the non-scrolling screens, which is
60
+ * what made it look like a Card bug rather than a layout one.
61
+ *
62
+ * Fixed here, for every child, rather than in Core: the flaw is the scroll
63
+ * container's, and it applies to any row a module puts in one (cards, fields,
64
+ * consent rows) — not just this component. DEVIATIONS #QS-1. */
65
+ .prizma-form-screen__fields--scroll > * {
66
+ flex-shrink: 0;
67
+ }
68
+
69
+ /* CTA column: primary, then the optional tertiary link below it. Core's
70
+ * `PrizmaButtonGroup` owns this primary → tertiary rhythm at Spacing/12, so the
71
+ * same value is used here rather than a new one (the archetype composes two
72
+ * Buttons directly because the group cannot forward `loadingLabel` — the open
73
+ * Core request logged in DEVIATIONS #F-32). */
74
+ .prizma-form-screen__cta {
75
+ display: flex;
76
+ flex-direction: column;
77
+ gap: var(--prizma-spacing-12);
78
+ }