@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,49 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaCaptureScreen, type PrizmaCaptureScreenProps } from './CaptureScreen';
3
+ import type { FaceCaptureStrings } from './FaceCaptureStrings';
4
+ import './FaceCaptureLayout.css';
5
+
6
+ export interface FaceCaptureResultSuccessScreenProps
7
+ extends Omit<
8
+ PrizmaCaptureScreenProps,
9
+ 'state' | 'camera' | 'title' | 'feedbackText' | 'statusLabels' | 'verifiedLabel' | 'navLabel'
10
+ > {
11
+ /** Module copy — this screen reads the `success` slice (+ shared labels). */
12
+ strings: FaceCaptureStrings;
13
+ }
14
+
15
+ /**
16
+ * Face Capture — success result (Archetype B, GUIDELINES.md §6-B).
17
+ * Figma: purple section faceCapture.resultSuccess.default.
18
+ *
19
+ * Same reasoning as FaceCaptureLoadingScreen: the check + "Success!" sit in the
20
+ * ring's own 342-tall slot 40px below the nav (Figma "Middle Content" y=84),
21
+ * not in a §6-C full-height centered column. Core renders exactly that as the
22
+ * `success` state of `PrizmaSelfieCapture` — the stage dissolves into the
23
+ * canonical `PrizmaTitle` with the positive status icon (owner choreography
24
+ * 2026-07-15). DEVIATIONS.md #11.
25
+ *
26
+ * The verdict icon, its color token, and the dissolve all belong to Core; this
27
+ * screen only supplies copy (§7 — success reuses the capture geometry, never a
28
+ * new layout). The Core component owns the ring spacing (DEVIATIONS.md #12).
29
+ */
30
+ export const FaceCaptureResultSuccessScreen = forwardRef<
31
+ HTMLDivElement,
32
+ FaceCaptureResultSuccessScreenProps
33
+ >(({ strings, screenId = 'face-capture-success', className, ...rest }, ref) => (
34
+ <PrizmaCaptureScreen
35
+ // success: the feed is closed — not a capture screen (owner rule 2026-08-18).
36
+ cameraOpen={false}
37
+ ref={ref}
38
+ className={className}
39
+ state="success"
40
+ statusLabels={{ success: strings.success.title }}
41
+ verifiedLabel={strings.verifiedLabel}
42
+ navLabel={strings.navLabel}
43
+ screenId={screenId}
44
+ {...rest}
45
+ />
46
+ ));
47
+ FaceCaptureResultSuccessScreen.displayName = 'FaceCaptureResultSuccessScreen';
48
+
49
+ export default FaceCaptureResultSuccessScreen;
@@ -0,0 +1,92 @@
1
+ // Face Capture module — copy contract.
2
+ //
3
+ // Every Face Capture screen receives the SAME `strings: FaceCaptureStrings`
4
+ // object (rule: all copy via props, no hardcoded English — GUIDELINES.md §9).
5
+ // The object is the module's locale pack: one instance drives the whole flow,
6
+ // which is what the future FlowPlayer steps through. Sample copy lives only
7
+ // in previews / host apps.
8
+ //
9
+ // Authoritative screen list: the PURPLE "screen specs" sections of the
10
+ // Face Capture Figma file (wssQwsBcqYrWqVsZTFVVVA, page 18:19332) —
11
+ // tutorial · capturing (15 states) · manualCapture · loading (uploading /
12
+ // processing) · resultSuccess · resultError (+ exhausted) · genericErrors
13
+ // (noConnection).
14
+
15
+ /**
16
+ * The capturing sub-states — one per purple `faceCapture.capturing.*` spec
17
+ * section. They are copy/ring-state variants of ONE screen
18
+ * (FaceCaptureCapturingScreen), not separate screens.
19
+ */
20
+ export type FaceCaptureCapturingState =
21
+ | 'initiating'
22
+ | 'getReady'
23
+ | 'alignFace'
24
+ | 'lookAtCamera'
25
+ | 'tooDark'
26
+ | 'tooBright'
27
+ | 'eyesClosed'
28
+ | 'maskDetected'
29
+ | 'glassesDetected'
30
+ | 'hatDetected'
31
+ | 'moveRight'
32
+ | 'moveLeft'
33
+ | 'moveCloser'
34
+ | 'moveAway'
35
+ | 'faceOcclusion';
36
+
37
+ export interface FaceCaptureStrings {
38
+ /** Accessible name for the logo nav region (i18n — no baked-in English). */
39
+ navLabel?: string;
40
+ /** "verified by" attribution copy for the footer tag. */
41
+ verifiedLabel: string;
42
+
43
+ /** faceCapture.tutorial.* — default / loading / ageAssurance are copy +
44
+ * CTA-state variants of this one screen. */
45
+ tutorial: {
46
+ title: string;
47
+ subtitle?: string;
48
+ /** "Stay still, selfie will be taken automatically" */
49
+ disclaimer?: string;
50
+ ctaLabel: string;
51
+ /** Visible/accessible copy while the CTA is loading (tutorial.loading). */
52
+ ctaLoadingLabel?: string;
53
+ };
54
+
55
+ /** faceCapture.capturing.* — the H2 instruction under the ring, per state.
56
+ * `initiating` has no instruction in the design; omit it. */
57
+ capturing: Partial<Record<FaceCaptureCapturingState, string>>;
58
+
59
+ /** faceCapture.manualCapture.default */
60
+ manualCapture: {
61
+ /** "Align your face within the silhouette and press the button to capture" */
62
+ instruction: string;
63
+ /** Accessible name of the shutter button. */
64
+ captureLabel: string;
65
+ };
66
+
67
+ /** faceCapture.loading.uploading */
68
+ uploading: { title: string };
69
+ /** faceCapture.loading.processing */
70
+ processing: { title: string };
71
+ /** faceCapture.resultSuccess.default */
72
+ success: { title: string };
73
+
74
+ /** faceCapture.resultError.* — the host passes the copy of the CURRENT
75
+ * error (faceNotAligned, tooDark, …); exhausted variants change icon +
76
+ * copy + CTA via the same slice. */
77
+ error: {
78
+ title: string;
79
+ description?: string;
80
+ /** "2 attempts remaining" — omit on exhausted variants. */
81
+ attemptsLabel?: string;
82
+ /** "Try again" / "Continue" */
83
+ ctaLabel: string;
84
+ };
85
+
86
+ /** faceCapture.genericErrors.noConnection */
87
+ noConnection: {
88
+ title: string;
89
+ description?: string;
90
+ ctaLabel: string;
91
+ };
92
+ }
@@ -0,0 +1,77 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaIllustrationSelfie } from '@incodetech/prizma-core-web/illustration-selfie';
3
+ import { PrizmaTutorialScreen, type PrizmaTutorialScreenProps } from './TutorialScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { FaceCaptureStrings } from './FaceCaptureStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ export interface FaceCaptureTutorialScreenProps
9
+ extends Omit<
10
+ PrizmaTutorialScreenProps,
11
+ | 'title'
12
+ | 'subtitle'
13
+ | 'disclaimer'
14
+ | 'ctaLabel'
15
+ | 'ctaLoadingLabel'
16
+ | 'verifiedLabel'
17
+ | 'navLabel'
18
+ > {
19
+ /** Module copy — this screen reads the `tutorial` slice (+ shared labels). */
20
+ strings: FaceCaptureStrings;
21
+ /** faceCapture.tutorial.loading: CTA shows the designed loading treatment. */
22
+ ctaLoading?: boolean;
23
+ /** Replace the default selfie illustration (Core PrizmaIllustrationSelfie). */
24
+ illustration?: ReactNode;
25
+ screenId?: string;
26
+ overrides?: PrizmaScreenOverrides;
27
+ onAction?: PrizmaScreenActionHandler;
28
+ }
29
+
30
+ /**
31
+ * Face Capture — tutorial, built on the `PrizmaTutorialScreen` archetype
32
+ * (GUIDELINES.md §6-A). Figma: purple sections faceCapture.tutorial.default /
33
+ * .loading / .ageAssurance (copy + CTA-state variants of this one screen).
34
+ *
35
+ * It previously composed the foundation shell by hand because the archetype had
36
+ * no CTA-loading slot and `faceCapture.tutorial.loading` needs one. The slot now
37
+ * exists (`ctaLoading` / `ctaLoadingLabel`, forwarded to Core's own
38
+ * `PrizmaButton` loading treatment — #F-32), so the screen is a single archetype
39
+ * call and declares no layout.
40
+ */
41
+ export const FaceCaptureTutorialScreen = forwardRef<
42
+ HTMLDivElement,
43
+ FaceCaptureTutorialScreenProps
44
+ >(
45
+ (
46
+ {
47
+ strings,
48
+ ctaLoading = false,
49
+ illustration,
50
+ screenId = 'face-capture-tutorial',
51
+ overrides,
52
+ onAction,
53
+ ...shell
54
+ },
55
+ ref,
56
+ ) => (
57
+ <PrizmaTutorialScreen
58
+ ref={ref}
59
+ title={strings.tutorial.title}
60
+ subtitle={strings.tutorial.subtitle}
61
+ disclaimer={strings.tutorial.disclaimer}
62
+ ctaLabel={strings.tutorial.ctaLabel}
63
+ ctaLoading={ctaLoading}
64
+ ctaLoadingLabel={strings.tutorial.ctaLoadingLabel}
65
+ illustration={illustration ?? <PrizmaIllustrationSelfie />}
66
+ verifiedLabel={strings.verifiedLabel}
67
+ navLabel={strings.navLabel}
68
+ screenId={screenId}
69
+ overrides={overrides}
70
+ onAction={onAction}
71
+ {...shell}
72
+ />
73
+ ),
74
+ );
75
+ FaceCaptureTutorialScreen.displayName = 'FaceCaptureTutorialScreen';
76
+
77
+ export default FaceCaptureTutorialScreen;
@@ -0,0 +1,51 @@
1
+ import React, { forwardRef } from 'react';
2
+ import {
3
+ PrizmaProcessingScreen,
4
+ type PrizmaProcessingScreenProps,
5
+ } from './ProcessingScreen';
6
+ import type { FaceMatchStrings } from './FaceMatchStrings';
7
+
8
+ export interface FaceMatchComparisonCompactScreenProps
9
+ extends Omit<
10
+ PrizmaProcessingScreenProps,
11
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
12
+ > {
13
+ /** Module copy — this screen reads the `comparisonCompact` slice. */
14
+ strings: FaceMatchStrings;
15
+ }
16
+
17
+ /**
18
+ * Face Match — compact matching state (Archetype C, GUIDELINES.md §6-C).
19
+ * Figma: purple section `faceMatch.comparisonCompact.matching` — the photo-less
20
+ * variant of the matching state, used when the captured images are not shown.
21
+ *
22
+ * This one IS the centered Processing archetype, and it is the counter-example
23
+ * DEVIATIONS.md #11 predicted: Face Capture's loading screens use archetype B
24
+ * because their Figma pins the spinner inside the 342-tall ring box, whereas
25
+ * this section really centers — the spinner + title + subtitle block (342×129)
26
+ * sits at the exact midpoint of the flexible middle frame (middle content
27
+ * 44→456 tall 412, block at y=141.5 = (412 − 129) / 2). So the foundation
28
+ * archetype is reused verbatim and this screen only supplies copy; it is NOT a
29
+ * copy of FaceCaptureLoadingScreen, whose layout differs. DEVIATIONS.md #FM-24.
30
+ *
31
+ * The spinner, its 48px geometry and the title typography all belong to Core's
32
+ * `PrizmaTitle` spinner slot inside the archetype — nothing re-implemented (§7).
33
+ */
34
+ export const FaceMatchComparisonCompactScreen = forwardRef<
35
+ HTMLDivElement,
36
+ FaceMatchComparisonCompactScreenProps
37
+ >(({ strings, screenId = 'face-match-comparison-compact', ...rest }, ref) => (
38
+ <PrizmaProcessingScreen
39
+ ref={ref}
40
+ status="loading"
41
+ title={strings.comparisonCompact.title}
42
+ subtitle={strings.comparisonCompact.description}
43
+ verifiedLabel={strings.verifiedLabel}
44
+ navLabel={strings.navLabel}
45
+ screenId={screenId}
46
+ {...rest}
47
+ />
48
+ ));
49
+ FaceMatchComparisonCompactScreen.displayName = 'FaceMatchComparisonCompactScreen';
50
+
51
+ export default FaceMatchComparisonCompactScreen;
@@ -0,0 +1,201 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaTitle } from '@incodetech/prizma-core-web/title';
3
+ import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
4
+ import { PrizmaTooltip } from '@incodetech/prizma-core-web/tooltip';
5
+ import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
6
+ import { PrizmaScreenNav } from './ScreenNav';
7
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
8
+ import type {
9
+ FaceMatchComparisonVariant,
10
+ FaceMatchStrings,
11
+ } from './FaceMatchStrings';
12
+ import './ScreenLayout.css';
13
+ import './FaceMatchLayout.css';
14
+
15
+ /** Which captured image fills a circle. The host owns the pixels (same
16
+ * contract as `camera` on the capture screens) — Face Match never captures. */
17
+ export type FaceMatchPhotoRole = 'selfie' | 'id' | 'nfc' | 'secondId';
18
+
19
+ /** Host-supplied portraits, one per role the chosen variant asks for. Any role
20
+ * left out renders an empty neutral disc. */
21
+ export type FaceMatchComparisonPhotos = Partial<Record<FaceMatchPhotoRole, ReactNode>>;
22
+
23
+ /**
24
+ * Photo layout per purple `faceMatch.comparison.*` section. `nfc` and
25
+ * `firstAndSecondID` are the SAME two-row layout — they differ only in which
26
+ * label each circle carries, so they are copy variants, not separate screens.
27
+ */
28
+ const ROWS: Record<FaceMatchComparisonVariant, readonly (readonly FaceMatchPhotoRole[])[]> = {
29
+ selfieId: [['selfie', 'id']],
30
+ nfc: [['nfc', 'id'], ['selfie']],
31
+ firstAndSecondID: [['id', 'secondId'], ['selfie']],
32
+ };
33
+
34
+ /** Figma swaps the `id` circle's label between "ID" and "First ID"; every other
35
+ * role has one label. */
36
+ function labelFor(
37
+ role: FaceMatchPhotoRole,
38
+ variant: FaceMatchComparisonVariant,
39
+ comparison: FaceMatchStrings['comparison'],
40
+ ): string | undefined {
41
+ switch (role) {
42
+ case 'selfie':
43
+ return comparison.selfieLabel;
44
+ case 'nfc':
45
+ return comparison.nfcLabel;
46
+ case 'secondId':
47
+ return comparison.secondIdLabel;
48
+ case 'id':
49
+ default:
50
+ return variant === 'firstAndSecondID' ? comparison.firstIdLabel : comparison.idLabel;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Where the comparison is in its own choreography — the module MOVING rather
56
+ * than one of the frames it passes through (FaceMatchLayout.css § "The
57
+ * comparison, moving", which carries the timeline and where its numbers come
58
+ * from).
59
+ *
60
+ * arriving The module has just opened. Title only; the discs are still
61
+ * outside the screen.
62
+ * comparing The discs travel in and are then named by their callouts.
63
+ * converged The callouts leave, and the discs run together into one and go
64
+ * with them — handing the screen to the verdict.
65
+ *
66
+ * Setting it puts the screen in its moving form, and `matching` is then ignored:
67
+ * the rosette that prop draws is a frame partway through `converged`, not a
68
+ * place the module rests.
69
+ */
70
+ export type FaceMatchComparisonPhase = 'arriving' | 'comparing' | 'converged';
71
+
72
+ export interface FaceMatchComparisonScreenProps
73
+ extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'> {
74
+ /** Module copy — this screen reads the `comparison` slice (+ shared labels). */
75
+ strings: FaceMatchStrings;
76
+ /** Which purple photo set to render. Default `'selfieId'`. */
77
+ variant?: FaceMatchComparisonVariant;
78
+ /** The converged state (`comparison.matching` / `comparison.threeFacesMatching`):
79
+ * the label callouts are dropped and the circles overlap into a rosette.
80
+ * A STILL — ignored once `phase` is set. */
81
+ matching?: boolean;
82
+ /** Play the comparison instead of drawing one frame of it. Absent = the still
83
+ * the Figma sections are, which is what a screen grid wants. */
84
+ phase?: FaceMatchComparisonPhase;
85
+ /** The captured portraits. Roles the variant does not use are ignored. */
86
+ photos?: FaceMatchComparisonPhotos;
87
+ screenId?: string;
88
+ overrides?: PrizmaScreenOverrides;
89
+ onAction?: PrizmaScreenActionHandler;
90
+ }
91
+
92
+ /**
93
+ * Face Match — identity comparison (Archetype A layout minus the CTA,
94
+ * GUIDELINES.md §6-A). Figma: the five purple `faceMatch.comparison.*` sections
95
+ * — `initialState` · `matching` · `nfc` · `firstAndSecondID` ·
96
+ * `threeFacesMatching` — which are photo-count / label / convergence variants of
97
+ * this ONE screen.
98
+ *
99
+ * This is the module's only genuinely new composition, and the reason Face Match
100
+ * is not a copy of Face Capture: there is no ring, no camera and no CTA. The
101
+ * purple sections' CONTENT frame holds exactly Navigation → Title → the photo
102
+ * cluster → the verified Tag (measured 390 section: nav 0→44, Title 68→96 i.e.
103
+ * the archetype's 24px nav→content gap, cluster in the flexible middle, Tag
104
+ * 616→650).
105
+ *
106
+ * Composed on the foundation shell rather than wrapping PrizmaTutorialScreen
107
+ * because that archetype always renders a CTA and these sections have none —
108
+ * foundation gap reported to the owner, no foundation file edited.
109
+ *
110
+ * TWO FORMS, one component. Without `phase` it draws a FRAME — the purple
111
+ * sections exactly as Figma has them, which is what a screen grid and an export
112
+ * still need. With `phase` it PLAYS, because Face Match has no camera and no
113
+ * control and the movement is therefore the whole screen rather than polish on
114
+ * top of it: the discs arrive from off-screen, are named, and then run together
115
+ * into one and go. That choreography, its three phases and the shipped-SDK
116
+ * numbers behind it live in FaceMatchLayout.css § "The comparison, moving".
117
+ *
118
+ * The label callouts are Core's `PrizmaTooltip` with a bottom-centred arrow. The
119
+ * module Figma draws a bespoke light pill instead (a hand-drawn boolean Union,
120
+ * not a Tooltip instance); the design system wins and these render as the
121
+ * canonical dark tooltip. DEVIATIONS.md #FM-21.
122
+ */
123
+ export const FaceMatchComparisonScreen = forwardRef<
124
+ HTMLDivElement,
125
+ FaceMatchComparisonScreenProps
126
+ >(
127
+ (
128
+ {
129
+ strings,
130
+ variant = 'selfieId',
131
+ matching = false,
132
+ phase,
133
+ photos,
134
+ screenId = 'face-match-comparison',
135
+ overrides,
136
+ onAction,
137
+ ...shell
138
+ },
139
+ ref,
140
+ ) => (
141
+ <PrizmaScreenShell ref={ref} {...shell}>
142
+ <PrizmaScreenNav logo={overrides?.logo} navLabel={strings.navLabel} />
143
+ <div className="prizma-screen-layout__content">
144
+ <PrizmaTitle
145
+ variant={overrides?.align === 'left' ? 'left' : 'centered'}
146
+ title={strings.comparison.title}
147
+ />
148
+ <div className="prizma-screen-layout__flex">
149
+ <div
150
+ className={[
151
+ 'face-match-cluster',
152
+ // A phase means the screen is MOVING, and the two are exclusive:
153
+ // the rosette is a frame of the movement, not a state beside it.
154
+ phase ? 'face-match-cluster--animated' : '',
155
+ phase ? `face-match-cluster--${phase}` : '',
156
+ !phase && matching ? 'face-match-cluster--matching' : '',
157
+ ]
158
+ .filter(Boolean)
159
+ .join(' ')}
160
+ >
161
+ {ROWS[variant].map((row, rowIndex) => (
162
+ <div className="face-match-cluster__row" key={rowIndex}>
163
+ {row.map((role) => {
164
+ const label = labelFor(role, variant, strings.comparison);
165
+ return (
166
+ <div className="face-match-cluster__face" key={role}>
167
+ {/* The converged STILL drops the callouts entirely — the
168
+ rosette offsets are measured from circle to circle
169
+ (DEVIATIONS.md #FM-20). The moving version keeps them
170
+ in every phase and fades them, because a callout that
171
+ leaves the DOM cannot leave the screen, and its box is
172
+ what holds the cluster's height still while it goes. */}
173
+ {(phase || !matching) && label ? (
174
+ <PrizmaTooltip
175
+ className="face-match-cluster__label"
176
+ arrow="bottom"
177
+ arrowAlignment="center"
178
+ >
179
+ {label}
180
+ </PrizmaTooltip>
181
+ ) : null}
182
+ <div className="face-match-cluster__photo">
183
+ {photos?.[role]}
184
+ </div>
185
+ </div>
186
+ );
187
+ })}
188
+ </div>
189
+ ))}
190
+ </div>
191
+ </div>
192
+ <div className="prizma-screen-layout__footer">
193
+ <PrizmaTag label={strings.verifiedLabel} />
194
+ </div>
195
+ </div>
196
+ </PrizmaScreenShell>
197
+ ),
198
+ );
199
+ FaceMatchComparisonScreen.displayName = 'FaceMatchComparisonScreen';
200
+
201
+ export default FaceMatchComparisonScreen;