@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,149 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { IconWifiOff } from '@incodetech/prizma-core-icons';
3
+ import { PrizmaSnackbar } from '@incodetech/prizma-core-web/snackbar';
4
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
5
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
6
+ import type { ErrorScreensStrings, ErrorScreensVariant } from './ErrorScreensStrings';
7
+ import './ScreenLayout.css';
8
+
9
+ export interface ErrorScreensScreenProps
10
+ extends Omit<
11
+ PrizmaResultScreenProps,
12
+ | 'status'
13
+ | 'title'
14
+ | 'subtitle'
15
+ | 'glyph'
16
+ | 'ctaLabel'
17
+ | 'linkLabel'
18
+ | 'disclaimer'
19
+ | 'progress'
20
+ | 'verifiedLabel'
21
+ | 'navLabel'
22
+ > {
23
+ /** Family copy — this screen reads the slice its `variant` names. */
24
+ strings: ErrorScreensStrings;
25
+ /** Which section to render. Default `sessionExpired`. */
26
+ variant?: ErrorScreensVariant;
27
+ /** `unsupportedBrowser` only — the real session URL to show above the CTA. */
28
+ sessionUrl?: string;
29
+ /** `unsupportedBrowser` only — draw the "link copied" Snackbar (the frame's
30
+ * second state). Default `false`. */
31
+ copied?: boolean;
32
+ screenId?: string;
33
+ overrides?: PrizmaScreenOverrides;
34
+ onAction?: PrizmaScreenActionHandler;
35
+ }
36
+
37
+ /**
38
+ * Error screens — the session-level failures, built on the Result archetype
39
+ * (GUIDELINES.md §6-F, `PrizmaResultScreen`).
40
+ *
41
+ * ONE screen for all three generic sections. They draw the identical skeleton —
42
+ * a centred mark + title + supporting line over a CTA band — and differ only in
43
+ * copy, in which mark leads, and in what the band carries:
44
+ *
45
+ * - `sessionExpired` — canonical negative mark, NO CTA (a dead end)
46
+ * - `noConnection` — Wi-Fi glyph, "Refresh"
47
+ * - `unsupportedBrowser` — canonical negative mark, the session URL above
48
+ * "Copy link", with "Continue anyways" under it
49
+ *
50
+ * Chrome is CONSTANT. All three frames are drawn without the logo header and
51
+ * without the verified tag; both are kept here, because the owner rule of
52
+ * 2026-08-18 (#F-30, #F-34) makes the chrome the same on every screen so
53
+ * nothing shifts between states, and every module's connectivity screen must
54
+ * read identically (#PI-8). Same call `GeolocationErrorScreen` already makes
55
+ * for its own `noNetwork`.
56
+ *
57
+ * Three things Figma draws that this screen does not, all reported rather than
58
+ * worked around:
59
+ * - **The browser-window mark.** `unsupportedBrowser` leads with a red browser
60
+ * window carrying an ✕. The canonical bank has no such glyph, so the screen
61
+ * uses Core's negative status mark — the nearest thing that means the same
62
+ * (rule 1, GUIDELINES §10; the same substitution logic as #10 / #DC-23).
63
+ * Mint the glyph or bless the substitution.
64
+ * - **Links inside the supporting line.** Figma renders "Safari" and "Chrome"
65
+ * as blue in-sentence links; Core's `PrizmaTitle` subtitle is a plain
66
+ * `string`, so the sentence renders in one colour. Same open Core request as
67
+ * the step rows: a `ReactNode` subtitle.
68
+ * - **"Continue anyways" above the CTA.** Archetype F renders its tertiary link
69
+ * BELOW the button stack, so this screen ships inverted against its frame.
70
+ * The archetype owns the order (see `PermissionsAllowScreen` for the same
71
+ * escalation).
72
+ *
73
+ * The "link copied" Snackbar rides the archetype's `progress` slot — the only
74
+ * block that renders BETWEEN the nav and the content, which is exactly where
75
+ * the frame draws it. `bandContent` would have put it above the buttons instead
76
+ * (the workaround #VS-17 rejected).
77
+ */
78
+ export const ErrorScreensScreen = forwardRef<HTMLDivElement, ErrorScreensScreenProps>(
79
+ (
80
+ {
81
+ strings,
82
+ variant = 'sessionExpired',
83
+ sessionUrl,
84
+ copied = false,
85
+ screenId = `error-screens-${variant}`,
86
+ overrides,
87
+ onAction,
88
+ ...shell
89
+ },
90
+ ref,
91
+ ) => {
92
+ const unsupported = variant === 'unsupportedBrowser';
93
+ const noConnection = variant === 'noConnection';
94
+ const copy = unsupported
95
+ ? strings.unsupportedBrowser
96
+ : noConnection
97
+ ? strings.noConnection
98
+ : strings.sessionExpired;
99
+
100
+ return (
101
+ <PrizmaResultScreen
102
+ ref={ref}
103
+ /* The connectivity screen leads with the Wi-Fi glyph instead of a
104
+ status mark; the other two carry the canonical negative mark. */
105
+ status={noConnection ? 'none' : 'error'}
106
+ glyph={
107
+ noConnection ? (
108
+ <span
109
+ className={[
110
+ 'prizma-screen-layout__glyph',
111
+ 'prizma-screen-layout__glyph--negative',
112
+ overrides?.align === 'left' ? 'prizma-screen-layout__glyph--left' : '',
113
+ ]
114
+ .filter(Boolean)
115
+ .join(' ')}
116
+ >
117
+ <IconWifiOff size="l" />
118
+ </span>
119
+ ) : undefined
120
+ }
121
+ progress={
122
+ unsupported && copied ? (
123
+ <PrizmaSnackbar state="success" contentResizing="fill">
124
+ {strings.unsupportedBrowser.copiedLabel}
125
+ </PrizmaSnackbar>
126
+ ) : undefined
127
+ }
128
+ title={copy.title}
129
+ subtitle={copy.subtitle}
130
+ disclaimer={
131
+ unsupported
132
+ ? sessionUrl ?? strings.unsupportedBrowser.urlPlaceholder
133
+ : undefined
134
+ }
135
+ ctaLabel={copy.ctaLabel}
136
+ linkLabel={unsupported ? strings.unsupportedBrowser.continueLabel : undefined}
137
+ verifiedLabel={strings.verifiedLabel}
138
+ navLabel={strings.navLabel}
139
+ screenId={screenId}
140
+ overrides={overrides}
141
+ onAction={onAction}
142
+ {...shell}
143
+ />
144
+ );
145
+ },
146
+ );
147
+ ErrorScreensScreen.displayName = 'ErrorScreensScreen';
148
+
149
+ export default ErrorScreensScreen;
@@ -0,0 +1,66 @@
1
+ // Error screens — copy contract for the GENERIC family.
2
+ //
3
+ // Figma: `Module Generic Screens` (qGJjfL4O0JSjz1x4tOjJn8):
4
+ //
5
+ // 79:360 ErrorSessionReopen → `sessionExpired`
6
+ // 214:3357 Geolocation.error.noNetwork → `noConnection`
7
+ // 240:154 Error screen - Unsupported browser → `unsupportedBrowser`
8
+ //
9
+ // The three failures that belong to the SESSION rather than to any module: the
10
+ // link has expired, the network went away, the browser cannot run the SDK.
11
+ // Every module can hit all three, which is why they are drawn once in the
12
+ // generic file — a user who sees three different "no internet" screens in one
13
+ // journey reads them as three different products.
14
+ //
15
+ // `noConnection` is deliberately the same screen every module already ships
16
+ // (`FaceCaptureNoConnectionScreen`, `IdCaptureNoConnectionScreen`,
17
+ // `DocumentCaptureNoConnectionScreen`, `GeolocationErrorScreen`'s `noNetwork`).
18
+ // The generic entry is where the shape is DOCUMENTED; the module copies stay
19
+ // put until someone retires them deliberately, because deleting four exported
20
+ // components to save one screen is a breaking change for every host that
21
+ // imports them. Flagged for the owner.
22
+ //
23
+ // The family has no flow of its own: each of these is entered from wherever the
24
+ // session broke and exits to a retry or to nothing. Core Lab lists it as a
25
+ // library of states.
26
+ //
27
+ // No hardcoded English anywhere in a screen: every visible string arrives here.
28
+
29
+ /**
30
+ * The three sections.
31
+ * - `sessionExpired` — the link is dead; the user must go back to the provider
32
+ * - `noConnection` — the network went away; retry when it returns
33
+ * - `unsupportedBrowser` — the SDK cannot run here; copy the link and move
34
+ */
35
+ export type ErrorScreensVariant =
36
+ | 'sessionExpired'
37
+ | 'noConnection'
38
+ | 'unsupportedBrowser';
39
+
40
+ export interface ErrorScreensCopy {
41
+ title: string;
42
+ subtitle?: string;
43
+ /** Primary CTA. Omit — as `sessionExpired` does — for a dead end. */
44
+ ctaLabel?: string;
45
+ }
46
+
47
+ export interface ErrorScreensStrings {
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
+ sessionExpired: ErrorScreensCopy;
54
+ noConnection: ErrorScreensCopy;
55
+
56
+ unsupportedBrowser: ErrorScreensCopy & {
57
+ /** The session URL shown above the CTA, for pasting into a supported
58
+ * browser. A host passes the real one through `sessionUrl`; this is the
59
+ * fallback the gallery draws. */
60
+ urlPlaceholder?: string;
61
+ /** Tertiary link — "Continue anyways". */
62
+ continueLabel: string;
63
+ /** Snackbar copy after the link is copied — the frame's second state. */
64
+ copiedLabel: string;
65
+ };
66
+ }
@@ -0,0 +1,99 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import type { PrizmaSelfieCaptureState } from '@incodetech/prizma-core-web/selfie-capture';
3
+ import { PrizmaCaptureScreen, type PrizmaCaptureScreenProps } from './CaptureScreen';
4
+ import type {
5
+ FaceCaptureCapturingState,
6
+ FaceCaptureStrings,
7
+ } from './FaceCaptureStrings';
8
+ import './FaceCaptureLayout.css';
9
+
10
+ /**
11
+ * Purple `faceCapture.capturing.*` state → Core PrizmaSelfieCapture ring state.
12
+ * - `initiating` — grey ring, blank disc, camera not yet revealed (`enabled`).
13
+ * - `getReady` — face detected, blue glow arc while the capture happens
14
+ * (`ready`). NOTE: the module Figma cell still shows the silhouette during
15
+ * this state; Core hides it per the owner's choreography (2026-07-14) —
16
+ * DEVIATIONS.md #13. The design system wins.
17
+ * - every feedback state — camera + silhouette guide (`empty`) with the
18
+ * instruction line below the ring.
19
+ */
20
+ const SELFIE_STATE: Record<FaceCaptureCapturingState, PrizmaSelfieCaptureState> = {
21
+ initiating: 'enabled',
22
+ getReady: 'ready',
23
+ alignFace: 'empty',
24
+ lookAtCamera: 'empty',
25
+ tooDark: 'empty',
26
+ tooBright: 'empty',
27
+ eyesClosed: 'empty',
28
+ maskDetected: 'empty',
29
+ glassesDetected: 'empty',
30
+ hatDetected: 'empty',
31
+ moveRight: 'empty',
32
+ moveLeft: 'empty',
33
+ moveCloser: 'empty',
34
+ moveAway: 'empty',
35
+ faceOcclusion: 'empty',
36
+ };
37
+
38
+ export interface FaceCaptureCapturingScreenProps
39
+ extends Omit<
40
+ PrizmaCaptureScreenProps,
41
+ 'state' | 'title' | 'feedbackText' | 'statusLabels' | 'verifiedLabel' | 'navLabel'
42
+ > {
43
+ /** Module copy — this screen reads the `capturing` slice (+ shared labels). */
44
+ strings: FaceCaptureStrings;
45
+ /** Which purple `faceCapture.capturing.*` spec section to render. */
46
+ state?: FaceCaptureCapturingState;
47
+ /** Live camera feed (<video>) or sample still (<img>) for the ring window. */
48
+ camera?: ReactNode;
49
+ }
50
+
51
+ /**
52
+ * Face Capture — auto-capture stage (Archetype B, GUIDELINES.md §6-B).
53
+ * Figma: the 15 purple `faceCapture.capturing.*` sections — ring-state and
54
+ * instruction-copy variants of this ONE screen. Ring, silhouette, glow, and the
55
+ * instruction line all come from Core's PrizmaSelfieCapture via the
56
+ * CaptureScreen archetype — never re-implemented (§7).
57
+ *
58
+ * The instruction goes to the component's own `feedbackText` slot, NOT to the
59
+ * archetype's H2-below-the-ring slot: in Figma the line lives INSIDE the
60
+ * `Capture / Selfie` instance at Spacing/32 under the ring (measured y=407 vs
61
+ * ring bottom 375), which is exactly where the component puts it. Routing it
62
+ * through the archetype's `__below-capture` H2 instead would add the
63
+ * component's own 40px bottom padding on top of that 32px and change the type
64
+ * role — DEVIATIONS.md #12.
65
+ *
66
+ * The archetype adds no offsets of its own — the component owns that spacing
67
+ * (same deviation row).
68
+ */
69
+ export const FaceCaptureCapturingScreen = forwardRef<
70
+ HTMLDivElement,
71
+ FaceCaptureCapturingScreenProps
72
+ >(
73
+ (
74
+ {
75
+ strings,
76
+ state = 'initiating',
77
+ camera,
78
+ screenId = 'face-capture-capturing',
79
+ className,
80
+ ...rest
81
+ },
82
+ ref,
83
+ ) => (
84
+ <PrizmaCaptureScreen
85
+ ref={ref}
86
+ className={className}
87
+ state={SELFIE_STATE[state]}
88
+ camera={camera}
89
+ feedbackText={strings.capturing[state]}
90
+ verifiedLabel={strings.verifiedLabel}
91
+ navLabel={strings.navLabel}
92
+ screenId={screenId}
93
+ {...rest}
94
+ />
95
+ ),
96
+ );
97
+ FaceCaptureCapturingScreen.displayName = 'FaceCaptureCapturingScreen';
98
+
99
+ export default FaceCaptureCapturingScreen;
@@ -0,0 +1,18 @@
1
+ /* Face Capture — module layout additions.
2
+ *
3
+ * ONLY what the foundation archetypes do not already own. Every value is a
4
+ * token; each departure from GUIDELINES.md carries a numbered row in
5
+ * DEVIATIONS.md.
6
+ *
7
+ * The pilot's other three additions were promoted INTO the foundation
8
+ * (`ScreenLayout.css`) once they proved to be recurring patterns rather than
9
+ * module quirks: the CTA band recipe (`__band`, DEVIATIONS #8), the no-nav
10
+ * content offset for generic errors (`__content--no-nav`, #9), and the capture
11
+ * stage offset fix (`__content--capture` now adds nothing, #12). Wave agents
12
+ * inherit all three as correct defaults.
13
+ */
14
+
15
+ /* Nothing module-specific is left: the non-status glyph slot this file used to
16
+ * own (`.face-capture-glyph`) was the third byte-identical copy of one pattern,
17
+ * so it moved to `ScreenLayout.css` as `__glyph` — DEVIATIONS #DC-29, closed.
18
+ * The file is kept as the module's landing place for future additions. */
@@ -0,0 +1,65 @@
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
+ /** The two purple `faceCapture.loading.*` spec sections. Identical layout and
7
+ * identical spinner — only the status copy differs, so they are copy variants
8
+ * of ONE screen (same pattern as the 15 capturing states). */
9
+ export type FaceCaptureLoadingStage = 'uploading' | 'processing';
10
+
11
+ export interface FaceCaptureLoadingScreenProps
12
+ extends Omit<
13
+ PrizmaCaptureScreenProps,
14
+ 'state' | 'camera' | 'title' | 'feedbackText' | 'statusLabels' | 'verifiedLabel' | 'navLabel'
15
+ > {
16
+ /** Module copy — this screen reads the `uploading` / `processing` slices. */
17
+ strings: FaceCaptureStrings;
18
+ /** Which purple `faceCapture.loading.*` spec section to render. */
19
+ stage?: FaceCaptureLoadingStage;
20
+ }
21
+
22
+ /**
23
+ * Face Capture — upload / processing (Archetype B, GUIDELINES.md §6-B).
24
+ * Figma: purple sections faceCapture.loading.uploading / .processing.
25
+ *
26
+ * NOT the Processing archetype (§6-C). Both purple sections put the spinner +
27
+ * status line inside the SAME 342-tall "Middle Content" box the capture ring
28
+ * occupies — 40px below the nav, measured at y=84 of the 390 CONTENT frame —
29
+ * whereas §6-C centers in all remaining space (51px lower). Core models this
30
+ * as the `uploading` state of `PrizmaSelfieCapture`, where the stage dissolves
31
+ * into the canonical `PrizmaLoadingSpinner` in the ring's own slot (owner
32
+ * choreography 2026-07-15). Design system wins — DEVIATIONS.md #11.
33
+ *
34
+ * So the ring stage stays, un-re-implemented, and only its state changes.
35
+ * The Core component owns the ring spacing; the archetype adds none
36
+ * (DEVIATIONS.md #12).
37
+ */
38
+ export const FaceCaptureLoadingScreen = forwardRef<
39
+ HTMLDivElement,
40
+ FaceCaptureLoadingScreenProps
41
+ >(
42
+ (
43
+ { strings, stage = 'uploading', screenId = `face-capture-${stage}`, className, ...rest },
44
+ ref,
45
+ ) => (
46
+ <PrizmaCaptureScreen
47
+ // uploading / processing: the feed is closed — not a capture screen (owner rule 2026-08-18).
48
+ cameraOpen={false}
49
+ ref={ref}
50
+ className={className}
51
+ state="uploading"
52
+ statusLabels={{
53
+ uploading:
54
+ stage === 'processing' ? strings.processing.title : strings.uploading.title,
55
+ }}
56
+ verifiedLabel={strings.verifiedLabel}
57
+ navLabel={strings.navLabel}
58
+ screenId={screenId}
59
+ {...rest}
60
+ />
61
+ ),
62
+ );
63
+ FaceCaptureLoadingScreen.displayName = 'FaceCaptureLoadingScreen';
64
+
65
+ export default FaceCaptureLoadingScreen;
@@ -0,0 +1,94 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaSelfieCapture } from '@incodetech/prizma-core-web/selfie-capture';
3
+ import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
4
+ import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
5
+ import { PrizmaScreenNav } from './ScreenNav';
6
+ import type {
7
+ PrizmaScreenActionHandler,
8
+ PrizmaScreenChromeProps,
9
+ PrizmaScreenOverrides,
10
+ } from './types';
11
+ import type { FaceCaptureStrings } from './FaceCaptureStrings';
12
+ import './ScreenLayout.css';
13
+ import './FaceCaptureLayout.css';
14
+
15
+ export interface FaceCaptureManualCaptureScreenProps
16
+ extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'> ,
17
+ PrizmaScreenChromeProps {
18
+ /** Module copy — this screen reads the `manualCapture` slice (+ shared labels). */
19
+ strings: FaceCaptureStrings;
20
+ /** Live camera feed (<video>) or sample still (<img>) for the ring window. */
21
+ camera?: ReactNode;
22
+ screenId?: string;
23
+ overrides?: PrizmaScreenOverrides;
24
+ onAction?: PrizmaScreenActionHandler;
25
+ }
26
+
27
+ /**
28
+ * Face Capture — manual capture (Archetype B layout, GUIDELINES.md §6-B).
29
+ * Figma: purple section faceCapture.manualCapture.default.
30
+ *
31
+ * Goes through Core's PrizmaSelfieCapture in manual mode (§7): the component
32
+ * owns ring, silhouette guide, instruction line, and shutter. Composed on the
33
+ * foundation shell directly because the CaptureScreen archetype does not
34
+ * forward `isManual` / `onCapture` — foundation gap reported to the owner, no
35
+ * foundation file edited. Layout classes are the archetype's own.
36
+ *
37
+ * Verified pixel-exact against Figma 3.1.0: the `Capture / Selfie` instance sits
38
+ * at nav-bottom + 0 with the ring at +40, the manual instruction at +32 below
39
+ * the ring and the 64px shutter at +32 below that — all of it the component's
40
+ * own padding/gap; the archetype adds none of its own (DEVIATIONS.md #12).
41
+ */
42
+ export const FaceCaptureManualCaptureScreen = forwardRef<
43
+ HTMLDivElement,
44
+ FaceCaptureManualCaptureScreenProps
45
+ >(
46
+ (
47
+ {
48
+ strings,
49
+ camera,
50
+ screenId = 'face-capture-manual-capture',
51
+ showHeader,
52
+ showFooter = true,
53
+ overrides,
54
+ onAction,
55
+ className,
56
+ ...shell
57
+ },
58
+ ref,
59
+ ) => (
60
+ <PrizmaScreenShell
61
+ ref={ref}
62
+ theme="light"
63
+ className={className}
64
+ {...shell}
65
+ >
66
+ {/* Capture screen: footer-only by default, the logo is the client's
67
+ opt-in. The row stays RESERVED so nothing shifts up when the logo is
68
+ absent (owner rule 2026-08-18). */}
69
+ <PrizmaScreenNav
70
+ reserved={!(showHeader ?? Boolean(overrides?.logo))}
71
+ logo={overrides?.logo}
72
+ navLabel={strings.navLabel}
73
+ />
74
+ <div className="prizma-screen-layout__content prizma-screen-layout__content--capture">
75
+ <PrizmaSelfieCapture
76
+ state="empty"
77
+ camera={camera}
78
+ isManual
79
+ manualFeedbackText={strings.manualCapture.instruction}
80
+ captureLabel={strings.manualCapture.captureLabel}
81
+ onCapture={() => onAction?.({ type: 'cta', screenId })}
82
+ />
83
+ {showFooter ? (
84
+ <div className="prizma-screen-layout__footer prizma-screen-layout__footer--pinned">
85
+ <PrizmaTag label={strings.verifiedLabel} />
86
+ </div>
87
+ ) : null}
88
+ </div>
89
+ </PrizmaScreenShell>
90
+ ),
91
+ );
92
+ FaceCaptureManualCaptureScreen.displayName = 'FaceCaptureManualCaptureScreen';
93
+
94
+ export default FaceCaptureManualCaptureScreen;
@@ -0,0 +1,73 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { IconWifiOff } from '@incodetech/prizma-core-icons';
3
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { FaceCaptureStrings } from './FaceCaptureStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ export interface FaceCaptureNoConnectionScreenProps
9
+ extends Omit<
10
+ PrizmaResultScreenProps,
11
+ 'status' | 'title' | 'subtitle' | 'glyph' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
12
+ > {
13
+ /** Module copy — this screen reads the `noConnection` slice. */
14
+ strings: FaceCaptureStrings;
15
+ screenId?: string;
16
+ overrides?: PrizmaScreenOverrides;
17
+ onAction?: PrizmaScreenActionHandler;
18
+ }
19
+
20
+ /**
21
+ * Face Capture — no internet connection (purple section
22
+ * `7.faceCapture.genericErrors.noConnection`), built on the
23
+ * `PrizmaResultScreen` archetype (GUIDELINES.md §6-F).
24
+ *
25
+ * Figma's CONTENT frame holds only a Title and a single CTA (measured 390
26
+ * section: Title 24→574, CTAs 574→630). The header and the verified tag are back
27
+ * on by the owner's rule that non-capture screens show both (DEVIATIONS #F-30);
28
+ * the layout is otherwise the archetype's own.
29
+ *
30
+ * The glyph is Figma's `Icon / Wi-Fi` swapped into the Title's icon slot. Core's
31
+ * `PrizmaTitle` allowlist is status | spinner | none, so it rides in the
32
+ * archetype's `glyph` slot with the foundation's `__glyph` class — icon from the
33
+ * canonical bank, no primitive invented, and no module CSS: the class was
34
+ * promoted out of three byte-identical module copies (DEVIATIONS #10, #DC-29).
35
+ */
36
+ export const FaceCaptureNoConnectionScreen = forwardRef<
37
+ HTMLDivElement,
38
+ FaceCaptureNoConnectionScreenProps
39
+ >(
40
+ (
41
+ { strings, screenId = 'face-capture-no-connection', overrides, onAction, ...shell },
42
+ ref,
43
+ ) => (
44
+ <PrizmaResultScreen
45
+ ref={ref}
46
+ glyph={
47
+ <span
48
+ className={[
49
+ 'prizma-screen-layout__glyph',
50
+ 'prizma-screen-layout__glyph--negative',
51
+ overrides?.align === 'left' ? 'prizma-screen-layout__glyph--left' : '',
52
+ ]
53
+ .filter(Boolean)
54
+ .join(' ')}
55
+ >
56
+ <IconWifiOff size="l" />
57
+ </span>
58
+ }
59
+ title={strings.noConnection.title}
60
+ subtitle={strings.noConnection.description}
61
+ ctaLabel={strings.noConnection.ctaLabel}
62
+ verifiedLabel={strings.verifiedLabel}
63
+ navLabel={strings.navLabel}
64
+ screenId={screenId}
65
+ overrides={overrides}
66
+ onAction={onAction}
67
+ {...shell}
68
+ />
69
+ ),
70
+ );
71
+ FaceCaptureNoConnectionScreen.displayName = 'FaceCaptureNoConnectionScreen';
72
+
73
+ export default FaceCaptureNoConnectionScreen;
@@ -0,0 +1,86 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { FaceCaptureStrings } from './FaceCaptureStrings';
5
+ import './ScreenLayout.css';
6
+ import './FaceCaptureLayout.css';
7
+
8
+ export interface FaceCaptureResultErrorScreenProps
9
+ extends Omit<
10
+ PrizmaResultScreenProps,
11
+ 'status' | 'title' | 'subtitle' | 'disclaimer' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
12
+ > {
13
+ /** Module copy — this screen reads the `error` slice (+ shared labels). The
14
+ * host passes the copy of the CURRENT error (faceNotAligned, tooDark, …);
15
+ * all 10 purple base sections share this one layout. */
16
+ strings: FaceCaptureStrings;
17
+ /**
18
+ * The `*Exhausted` half of the purple `faceCapture.resultError.*` pairs
19
+ * (9 of them — `eyesClosed` has no exhausted variant in Figma). Retries are
20
+ * used up: the status icon goes from warning to negative, the attempts line
21
+ * is dropped, and the CTA becomes the forward action instead of "Try again".
22
+ */
23
+ exhausted?: boolean;
24
+ screenId?: string;
25
+ overrides?: PrizmaScreenOverrides;
26
+ onAction?: PrizmaScreenActionHandler;
27
+ }
28
+
29
+ /**
30
+ * Face Capture — error result (Archetype C-with-CTA, GUIDELINES.md §6-C + §6-A
31
+ * CTA band). Figma: the 19 purple `faceCapture.resultError.*` sections — copy,
32
+ * status-icon, and CTA variants of this ONE screen.
33
+ *
34
+ * Layout measured off the purple 390 sections (CONTENT frame, 654 tall):
35
+ * nav 8→52 · Title stretched 52→479 with its icon/heading/subtitle block
36
+ * vertically centered · CTA band 479→646. The centered block is exactly Core's
37
+ * `PrizmaTitle` (icon slot → Spacing/16 → H2 → Spacing/12 → H5), so nothing is
38
+ * re-implemented here; the screen only chooses the status and supplies copy.
39
+ *
40
+ * Now built on the `PrizmaResultScreen` archetype (consolidation 2026-08-18).
41
+ * It previously composed the shell by hand because no template offered a
42
+ * centered status block WITH a CTA band — the gap that made three modules
43
+ * rebuild the same skeleton.
44
+ */
45
+ export const FaceCaptureResultErrorScreen = forwardRef<
46
+ HTMLDivElement,
47
+ FaceCaptureResultErrorScreenProps
48
+ >(
49
+ (
50
+ {
51
+ strings,
52
+ exhausted = false,
53
+ screenId = exhausted ? 'face-capture-error-exhausted' : 'face-capture-error',
54
+ overrides,
55
+ onAction,
56
+ ...shell
57
+ },
58
+ ref,
59
+ ) => {
60
+ // Figma: the base sections carry "N attempts remaining"; every `*Exhausted`
61
+ // section drops it (the subtitle says the limit is reached instead). Gated
62
+ // here too so a host that keeps the label in its locale pack still renders
63
+ // the designed exhausted screen.
64
+ const attemptsLabel = exhausted ? undefined : strings.error.attemptsLabel;
65
+
66
+ return (
67
+ <PrizmaResultScreen
68
+ ref={ref}
69
+ status={exhausted ? 'error' : 'warning'}
70
+ title={strings.error.title}
71
+ subtitle={strings.error.description}
72
+ disclaimer={attemptsLabel}
73
+ ctaLabel={strings.error.ctaLabel}
74
+ verifiedLabel={strings.verifiedLabel}
75
+ navLabel={strings.navLabel}
76
+ screenId={screenId}
77
+ overrides={overrides}
78
+ onAction={onAction}
79
+ {...shell}
80
+ />
81
+ );
82
+ },
83
+ );
84
+ FaceCaptureResultErrorScreen.displayName = 'FaceCaptureResultErrorScreen';
85
+
86
+ export default FaceCaptureResultErrorScreen;