@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,237 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { IconSoundWave, IconStatusPositive } from '@incodetech/prizma-core-icons';
3
+ import { PrizmaLoadingSpinner } from '@incodetech/prizma-core-web/loading-spinner';
4
+ import { PrizmaModalContent } from '@incodetech/prizma-core-web/modal';
5
+ import { PrizmaStepper } from '@incodetech/prizma-core-web/stepper';
6
+ import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
7
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
8
+ import type {
9
+ VideoSelfieDocumentType,
10
+ VideoSelfieSpeakFamily,
11
+ VideoSelfieStrings,
12
+ } from './VideoSelfieStrings';
13
+ import './ScreenLayout.css';
14
+ import './ViewfinderScreen.css';
15
+ import './VideoSelfieLayout.css';
16
+
17
+ /** Which purple section of groups 10 / 11 to render. */
18
+ export type VideoSelfieSpeakStage =
19
+ | 'idle'
20
+ | 'recording'
21
+ | 'processing'
22
+ | 'success'
23
+ | 'confirm';
24
+
25
+ /** Which beat of the seven-step journey each spoken family occupies — the
26
+ * questions are step 6, the consent sentence is the last one. */
27
+ const STEP: Record<VideoSelfieSpeakFamily, 6 | 7> = { question: 6, voiceConsent: 7 };
28
+
29
+ export interface VideoSelfieSpeakScreenProps
30
+ extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'> {
31
+ /** Module copy — this screen reads the `speak` slice. */
32
+ strings: VideoSelfieStrings;
33
+ /** Which prompt family: the consent sentence (group 10) or the identity
34
+ * questions (group 11). Default `voiceConsent`. */
35
+ family?: VideoSelfieSpeakFamily;
36
+ /** Which prompt of the family to show. Default `0`. */
37
+ promptIndex?: number;
38
+ /** Which purple section to render. Default `idle`. */
39
+ stage?: VideoSelfieSpeakStage;
40
+ /** Which document the journey collects — the Stepper's own `documentType`. */
41
+ documentType?: VideoSelfieDocumentType;
42
+ /** Live camera feed (<video>) or sample still (<img>). */
43
+ camera?: ReactNode;
44
+ screenId?: string;
45
+ overrides?: PrizmaScreenOverrides;
46
+ onAction?: PrizmaScreenActionHandler;
47
+ }
48
+
49
+ /**
50
+ * Video Selfie — the spoken steps. ONE screen for ELEVEN purple sections:
51
+ * `voice consent 10.0–10.4` and `questions 11.0–11.5`. The two Figma groups
52
+ * draw the identical skeleton — the live camera under Core's Modal card, the
53
+ * journey stepper on top — and differ only in which prompt the card asks and
54
+ * which beat of the stepper is lit. Two files would have been two chances to
55
+ * drift, the same reasoning `GeolocationBrowserStepsScreen` settled for its
56
+ * nine browser sections.
57
+ *
58
+ * No archetype models "a card over a live camera": archetype A's `overlay` slot
59
+ * is the closest, but its base is a tutorial, not a viewfinder. So this screen
60
+ * owns its composition the way archetype D is owned (a recipe, not a
61
+ * component), reusing the foundation's camera-surface and HUD-typography
62
+ * classes verbatim (`.prizma-viewfinder__surface` / `__content` / `__title`).
63
+ * The card itself is Core's `PrizmaModalContent` — the exact instance Figma
64
+ * names (`modal-light`) — and the scrim/panel positioning is the recipe
65
+ * Document Capture's method sheet already established (DEVIATIONS #DC-30): the
66
+ * safe presenter portals to `document.body`, which would escape the 390×844
67
+ * frame and the host's `transform: scale()`.
68
+ *
69
+ * Two divergences from the frames, both Core-wins and both reported:
70
+ *
71
+ * - **Eyebrow position.** Figma stacks "Please say out loud" ABOVE the prompt.
72
+ * Core's Modal renders `subtitle` BELOW `title` and has no eyebrow slot, so
73
+ * the eyebrow ships as the subtitle.
74
+ * - **Leading media.** Figma puts the spinner / verdict mark ABOVE the label on
75
+ * the `processing` and `success` cards. Core's Modal renders `body` and
76
+ * `image` after the heading; a Core `leading` slot is requested.
77
+ *
78
+ * Every stage renders differently: `idle` draws the outlined "Tap to answer",
79
+ * `recording` swaps it for the filled "Tap when done" AND lights the sound-wave
80
+ * HUD over the camera, `processing` replaces the card body with Core's spinner,
81
+ * `success` with the verdict mark, and `confirm` dims the whole screen behind a
82
+ * centred two-button dialog.
83
+ */
84
+ export const VideoSelfieSpeakScreen = forwardRef<
85
+ HTMLDivElement,
86
+ VideoSelfieSpeakScreenProps
87
+ >(
88
+ (
89
+ {
90
+ strings,
91
+ family = 'voiceConsent',
92
+ promptIndex = 0,
93
+ stage = 'idle',
94
+ documentType = 'id',
95
+ camera,
96
+ screenId = `video-selfie-${family}-${stage}`,
97
+ overrides,
98
+ onAction,
99
+ className,
100
+ ...shell
101
+ },
102
+ ref,
103
+ ) => {
104
+ const slice = strings.speak[family];
105
+ const prompt = slice.prompts[promptIndex] ?? slice.prompts[0] ?? '';
106
+ const isConfirm = stage === 'confirm';
107
+
108
+ const card = isConfirm ? (
109
+ <PrizmaModalContent
110
+ title={slice.confirm.title}
111
+ subtitle={slice.confirm.subtitle}
112
+ showCloseIcon={false}
113
+ buttonGroupProps={{
114
+ orientation: 'vertical-v1',
115
+ showPrimary: true,
116
+ showSecondary: true,
117
+ primaryLabel: slice.confirm.ctaLabel,
118
+ onPrimaryClick: () => onAction?.({ type: 'cta', screenId }),
119
+ secondaryLabel: slice.confirm.retryLabel,
120
+ onSecondaryClick: () => onAction?.({ type: 'secondary', screenId }),
121
+ }}
122
+ />
123
+ ) : stage === 'processing' ? (
124
+ <PrizmaModalContent
125
+ title={slice.processingLabel}
126
+ showButtonGroup={false}
127
+ closeLabel={slice.closeLabel}
128
+ onClose={() => onAction?.({ type: 'tertiary', screenId })}
129
+ body={<PrizmaLoadingSpinner loadingLabel={slice.processingLabel} />}
130
+ />
131
+ ) : stage === 'success' ? (
132
+ <PrizmaModalContent
133
+ title={slice.successLabel}
134
+ showButtonGroup={false}
135
+ closeLabel={slice.closeLabel}
136
+ onClose={() => onAction?.({ type: 'tertiary', screenId })}
137
+ body={
138
+ <span className="video-selfie-sheet-status">
139
+ <IconStatusPositive size="xl" />
140
+ </span>
141
+ }
142
+ />
143
+ ) : (
144
+ <PrizmaModalContent
145
+ title={prompt}
146
+ subtitle={slice.eyebrow}
147
+ /* No dismiss ✕ on the record step: the sheet IS the step, and closing it
148
+ would strand the user mid-recording with no way back into the flow
149
+ (owner-reported 2026-08-19). The confirm sheet already suppressed it;
150
+ this is the same call, applied consistently. DEVIATIONS #VS-5. */
151
+ showCloseIcon={false}
152
+ buttonGroupProps={
153
+ stage === 'recording'
154
+ ? {
155
+ orientation: 'vertical-v1',
156
+ showPrimary: true,
157
+ showSecondary: false,
158
+ primaryLabel: slice.recordingCtaLabel,
159
+ onPrimaryClick: () => onAction?.({ type: 'cta', screenId }),
160
+ }
161
+ : {
162
+ orientation: 'vertical-v1',
163
+ showPrimary: false,
164
+ showSecondary: true,
165
+ secondaryLabel: slice.idleCtaLabel,
166
+ onSecondaryClick: () => onAction?.({ type: 'cta', screenId }),
167
+ }
168
+ }
169
+ />
170
+ );
171
+
172
+ return (
173
+ <PrizmaScreenShell ref={ref} dark className={className} {...shell}>
174
+ <div className="prizma-viewfinder__surface">{camera}</div>
175
+ <div className="video-selfie-stepper">
176
+ <PrizmaStepper
177
+ steps={7}
178
+ currentState={STEP[family]}
179
+ documentType={documentType}
180
+ completedValueText={strings.stepperCompletedLabel}
181
+ />
182
+ </div>
183
+ <div
184
+ className={[
185
+ 'prizma-viewfinder__content',
186
+ overrides?.align === 'left' ? 'prizma-viewfinder__content--left' : '',
187
+ ]
188
+ .filter(Boolean)
189
+ .join(' ')}
190
+ >
191
+ <div className="video-selfie-band">
192
+ {stage === 'recording' ? (
193
+ <span className="video-selfie-recording">
194
+ <IconSoundWave size="xl" />
195
+ <span className="prizma-viewfinder__title">{slice.recordingLabel}</span>
196
+ </span>
197
+ ) : null}
198
+ </div>
199
+ </div>
200
+ {isConfirm ? (
201
+ <div className="video-selfie-sheet-scrim" aria-hidden="true" />
202
+ ) : null}
203
+ {/* The sheet is LIGHT even though the screen is dark. `PrizmaScreenShell
204
+ dark` pins the whole subtree to the dark theme so the camera inks
205
+ read, and `PrizmaModalContent` was drinking it — the card came out
206
+ solid black where every `10.x`/`11.x` section draws Figma's
207
+ `modal-light`: dark title on white (owner QA 2026-08-19).
208
+ `data-prizma-theme` is the same per-subtree switch `ScreenShell`
209
+ itself uses, so the pin is scoped back to light for the card only —
210
+ the feed, the stepper and the "Recording…" HUD stay dark.
211
+ DEVIATIONS #VS-10. */}
212
+ <div
213
+ data-prizma-theme="light"
214
+ className={[
215
+ 'video-selfie-sheet-panel',
216
+ isConfirm ? 'video-selfie-sheet-panel--centered' : '',
217
+ ]
218
+ .filter(Boolean)
219
+ .join(' ')}
220
+ >
221
+ {card}
222
+ </div>
223
+ {/* NO footer tag on the spoken steps — and this is deliberate, not an
224
+ omission. The sheet is bottom-anchored and covers exactly the strip
225
+ the tag occupies, so a tag here is painted over on all 11 states
226
+ (owner QA 2026-08-19 measured it under the panel). Figma agrees:
227
+ `10.x` / `11.x` draw no tag. Rendering one invisibly is the worst of
228
+ both — the attribution is absent either way, but the DOM claims
229
+ otherwise. The capture screens that DO have room keep theirs
230
+ (`VideoSelfieIdCaptureScreen`, #VS-3). DEVIATIONS #VS-11. */}
231
+ </PrizmaScreenShell>
232
+ );
233
+ },
234
+ );
235
+ VideoSelfieSpeakScreen.displayName = 'VideoSelfieSpeakScreen';
236
+
237
+ export default VideoSelfieSpeakScreen;
@@ -0,0 +1,222 @@
1
+ // Video Selfie — module copy contract.
2
+ //
3
+ // Every string the module's screens render arrives through this shape: the
4
+ // screens themselves ship NO English (GUIDELINES.md §9, same rule as
5
+ // prizma-core-web). Figma: `🎥 Video selfie - Screens specs & behavior`
6
+ // (X1clC8Sf8V0vJ1CbD61VJu, page 2013:23309) — 14 numbered groups holding 54
7
+ // purple spec sections.
8
+ //
9
+ // The slice names track the Figma group numbers so a designer can go from a
10
+ // frame to a key without a translation table:
11
+ // tutorial (1) · permission (2) · idCapture (3 · 5 · 6) · flipId (4) ·
12
+ // flipCamera (7) · selfieCapture (8 · 9) · speak (10 · 11) ·
13
+ // processing (12) · success (13) · errors (14).
14
+
15
+ /** Which document the journey is collecting — drives the tutorial row list
16
+ * and Core's `PrizmaStepper` icon sequence. */
17
+ export type VideoSelfieDocumentType = 'id' | 'passport';
18
+
19
+ /** One icon + label row of the tutorial's "you'll be requested to" list. */
20
+ export interface VideoSelfieTutorialRow {
21
+ /** Which canonical bank glyph leads the row. */
22
+ kind: VideoSelfieTutorialRowKind;
23
+ label: string;
24
+ }
25
+
26
+ /**
27
+ * The seven beats of the journey, in Figma order. They double as the icon keys
28
+ * for the tutorial rows — the same seven glyphs Core's `PrizmaStepper` uses
29
+ * (its icon set is documented as "the Video Selfie sequence").
30
+ */
31
+ export type VideoSelfieTutorialRowKind =
32
+ | 'recording'
33
+ | 'idFront'
34
+ | 'idBack'
35
+ | 'passport'
36
+ | 'frontCamera'
37
+ | 'waveHand'
38
+ | 'questions'
39
+ | 'speak';
40
+
41
+ /** The eleven live-feedback messages of group 9, in Figma order. */
42
+ export type VideoSelfieFeedbackKind =
43
+ | 'dark'
44
+ | 'blurry'
45
+ | 'maskDetected'
46
+ | 'glassesDetected'
47
+ | 'headTilted'
48
+ | 'lookAtCamera'
49
+ | 'turnRight'
50
+ | 'turnLeft'
51
+ | 'alignFace'
52
+ | 'moveCloser'
53
+ | 'moveAway';
54
+
55
+ /** Which face of the document the ID stage is on (groups 3 and 5). */
56
+ export type VideoSelfieIdSide = 'front' | 'back';
57
+
58
+ /** Why an ID read was rejected (group 6, the `.1`–`.4` variants). */
59
+ /**
60
+ * REMOVED (2026-08-19). A rejection-REASON axis (`scanFailed | name | photo |
61
+ * typeMismatch`) was invented: group 6 draws exactly FOUR sections —
62
+ * `6.1.1`/`6.2.1` (front try-again / failed) and `6.3.1`/`6.4.1` (back) — with
63
+ * no reason axis at all, so the four kinds multiplied the gallery to 16 error
64
+ * cards where the spec has 4. Severity is the only real axis. DEVIATIONS #VS-1.
65
+ */
66
+
67
+ /** Whether the rejection invites a retry (`6.1` / `6.3`) or is terminal
68
+ * (`6.2` / `6.4`). */
69
+ export type VideoSelfieIdErrorSeverity = 'tryAgain' | 'failed';
70
+
71
+ /** Which prompt family the speak step is running: the consent sentence
72
+ * (group 10) or one of the identity questions (group 11). */
73
+ export type VideoSelfieSpeakFamily = 'voiceConsent' | 'question';
74
+
75
+ /**
76
+ * Which device family the settings walk-through documents. The purple section
77
+ * `permissions 2.5 - camera access instructions` holds TWO Incode-drawn
78
+ * symbols, not one: `2.5 - ios` and `2.6 - android`. They are NOT the same
79
+ * screen with translated copy — Android draws a SECOND five-step numbered list
80
+ * under "Screen recording permission" where iOS draws a one-line remark, and
81
+ * adds a closing note under both lists.
82
+ */
83
+ export type VideoSelfieStepsOs = 'ios' | 'android';
84
+
85
+ /** One device variant of the OS settings walk-through (`2.5` / `2.6`). */
86
+ export interface VideoSelfieStepsStrings {
87
+ title: string;
88
+ subtitle: string;
89
+ /** Label over the first numbered list. */
90
+ microphoneTitle: string;
91
+ /** The five numbered microphone rows — different wording per OS. */
92
+ microphoneSteps: string[];
93
+ /** Label over the screen-recording section. */
94
+ recordingTitle: string;
95
+ /** iOS (`2.5`) closes the recording section with a plain remark and NO steps.
96
+ * Read only when `recordingSteps` is absent. */
97
+ recordingNote?: string;
98
+ /** Android (`2.6`) draws a SECOND numbered list here instead of the remark. */
99
+ recordingSteps?: string[];
100
+ /** Android (`2.6`) only — the closing remark under both lists. */
101
+ closingNote?: string;
102
+ ctaLabel: string;
103
+ }
104
+
105
+ export interface VideoSelfieSpeakStrings {
106
+ /** Small line above the prompt ("Please say out loud"). */
107
+ eyebrow: string;
108
+ /** The sentences/questions the user must speak, in Figma order. */
109
+ prompts: string[];
110
+ /** CTA before recording starts. */
111
+ idleCtaLabel: string;
112
+ /** CTA while recording. */
113
+ recordingCtaLabel: string;
114
+ /** HUD line over the camera while recording ("Recording…"). */
115
+ recordingLabel: string;
116
+ /** In-flight card copy. */
117
+ processingLabel: string;
118
+ /** Accepted card copy. */
119
+ successLabel: string;
120
+ /** Accessible name for the card's dismiss control. */
121
+ closeLabel: string;
122
+ /** The "Finished speaking?" confirmation dialog (10.4). */
123
+ confirm: {
124
+ title: string;
125
+ subtitle: string;
126
+ ctaLabel: string;
127
+ retryLabel: string;
128
+ };
129
+ }
130
+
131
+ export interface VideoSelfieStrings {
132
+ /** Accessible name for the nav region. */
133
+ navLabel: string;
134
+ /** "verified by" attribution copy for the footer tag. */
135
+ verifiedLabel: string;
136
+ /** Accessible name Core's Stepper announces when the journey is done. */
137
+ stepperCompletedLabel: string;
138
+
139
+ /** Group 1 — tutorial (`1.0` id · `1.2` passport). */
140
+ tutorial: {
141
+ title: string;
142
+ subtitle: string;
143
+ ctaLabel: string;
144
+ /** Row list per document type — the two purple variants. */
145
+ rows: Record<VideoSelfieDocumentType, VideoSelfieTutorialRow[]>;
146
+ };
147
+
148
+ /** Group 2 — permissions. */
149
+ permission: {
150
+ /** `2.0` — the in-page request. */
151
+ request: {
152
+ title: string;
153
+ subtitle: string;
154
+ ctaLabel: string;
155
+ learnMoreLabel: string;
156
+ };
157
+ /** `2.2` — permission refused / required. */
158
+ required: {
159
+ title: string;
160
+ rows: string[];
161
+ ctaLabel: string;
162
+ quitLabel: string;
163
+ };
164
+ /** `2.5` / `2.6` — the OS settings walk-through, one entry per device
165
+ * family. Both symbols live inside the SAME purple section. */
166
+ steps: Record<VideoSelfieStepsOs, VideoSelfieStepsStrings>;
167
+ };
168
+
169
+ /** Groups 3 · 5 · 6 — the document stage. */
170
+ idCapture: {
171
+ /** In-flight label under the frame (`3.2` / `5.2`). */
172
+ processingLabel: string;
173
+ /** Accepted label (`3.3` / `5.3`). */
174
+ successLabel: string;
175
+ /** Rejection copy, keyed reason → severity (group 6). */
176
+ /** Rejection copy per severity (group 6: try-again vs failed). */
177
+ errors: Record<VideoSelfieIdErrorSeverity, string>;
178
+ };
179
+
180
+ /** Group 4 — the flip interstitial. */
181
+ flipId: { title: string };
182
+
183
+ /** Group 7 — the camera swap interstitial. */
184
+ flipCamera: { title: string };
185
+
186
+ /** Groups 8 · 9 — the liveness ring. */
187
+ selfieCapture: {
188
+ /** `8.0` instruction. */
189
+ startLabel: string;
190
+ /** `8.1` in-flight. */
191
+ processingLabel: string;
192
+ /** `8.2` accepted. */
193
+ successLabel: string;
194
+ /** `8.3` rejected. */
195
+ failedLabel: string;
196
+ /** Group 9 — the eleven live-feedback lines. */
197
+ feedback: Record<VideoSelfieFeedbackKind, string>;
198
+ };
199
+
200
+ /** Groups 10 · 11 — the spoken steps. */
201
+ speak: Record<VideoSelfieSpeakFamily, VideoSelfieSpeakStrings>;
202
+
203
+ /** Group 12. */
204
+ processing: { title: string; subtitle: string };
205
+
206
+ /** Group 13. */
207
+ success: { title: string };
208
+
209
+ /** Group 14 — the generic errors. */
210
+ errors: {
211
+ /** `14.0` — the module could not process the recording. */
212
+ processingFailed: { title: string; subtitle: string; ctaLabel: string };
213
+ /** `14.1` — recoverable, with the "how to do better" list. */
214
+ retry: { title: string; tips: string[]; ctaLabel: string };
215
+ /** `14.2` — a single step blew up (drawn on the dark camera surface). */
216
+ stepError: { title: string; ctaLabel: string };
217
+ /** `14.3` — the whole module blew up. */
218
+ moduleError: { title: string; ctaLabel: string; quitLabel: string };
219
+ /** `14.4` — connectivity. */
220
+ noConnection: { title: string; ctaLabel: string; quitLabel: string };
221
+ };
222
+ }
@@ -0,0 +1,64 @@
1
+ import React, { forwardRef } from 'react';
2
+ import {
3
+ PrizmaProcessingScreen,
4
+ type PrizmaProcessingScreenProps,
5
+ } from './ProcessingScreen';
6
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
7
+ import type { VideoSelfieStrings } from './VideoSelfieStrings';
8
+ import './ScreenLayout.css';
9
+
10
+ export interface VideoSelfieSuccessScreenProps
11
+ extends Omit<
12
+ PrizmaProcessingScreenProps,
13
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
14
+ > {
15
+ /** Module copy — this screen reads the `success` slice. */
16
+ strings: VideoSelfieStrings;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+
22
+ /**
23
+ * Video Selfie — the module's verdict, built on the Processing archetype
24
+ * (GUIDELINES.md §6-C). Figma: purple section `video selfie - success
25
+ * 13.0 - default`.
26
+ *
27
+ * The same skeleton as the processing screen with the spinner swapped for
28
+ * Core's positive status mark and no supporting line — which is precisely the
29
+ * `status` axis archetype C already models, so the two screens cannot drift
30
+ * apart. Still archetype C rather than F: the section carries no button at all
31
+ * (the host advances the flow).
32
+ */
33
+ export const VideoSelfieSuccessScreen = forwardRef<
34
+ HTMLDivElement,
35
+ VideoSelfieSuccessScreenProps
36
+ >(
37
+ (
38
+ {
39
+ strings,
40
+ screenId = 'video-selfie-success',
41
+ showHeader = true,
42
+ overrides,
43
+ onAction,
44
+ ...shell
45
+ },
46
+ ref,
47
+ ) => (
48
+ <PrizmaProcessingScreen
49
+ ref={ref}
50
+ showHeader={showHeader}
51
+ status="success"
52
+ title={strings.success.title}
53
+ verifiedLabel={strings.verifiedLabel}
54
+ navLabel={strings.navLabel}
55
+ screenId={screenId}
56
+ overrides={overrides}
57
+ onAction={onAction}
58
+ {...shell}
59
+ />
60
+ ),
61
+ );
62
+ VideoSelfieSuccessScreen.displayName = 'VideoSelfieSuccessScreen';
63
+
64
+ export default VideoSelfieSuccessScreen;
@@ -0,0 +1,129 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import {
3
+ IconBankCard,
4
+ IconIdFront,
5
+ IconMessages,
6
+ IconMicrophone,
7
+ IconNumberedList,
8
+ IconPassport,
9
+ IconUser,
10
+ IconWavingHand,
11
+ } from '@incodetech/prizma-core-icons';
12
+ import { PrizmaListItem } from '@incodetech/prizma-core-web/list';
13
+ import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
14
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
15
+ import type {
16
+ VideoSelfieDocumentType,
17
+ VideoSelfieStrings,
18
+ VideoSelfieTutorialRowKind,
19
+ } from './VideoSelfieStrings';
20
+ import './ScreenLayout.css';
21
+
22
+ /**
23
+ * Journey beat → canonical bank glyph. ONE map, in one place — the same seven
24
+ * glyphs Core's `PrizmaStepper` carries (its icon set is documented as "the
25
+ * Video Selfie sequence"), so the tutorial promises exactly the steps the
26
+ * stepper later counts off. Nothing is drawn here (§10).
27
+ */
28
+ const ROW_ICONS: Record<VideoSelfieTutorialRowKind, ReactNode> = {
29
+ recording: <IconMicrophone size="m" />,
30
+ idFront: <IconIdFront size="m" />,
31
+ idBack: <IconBankCard size="m" />,
32
+ passport: <IconPassport size="m" />,
33
+ frontCamera: <IconUser size="m" />,
34
+ waveHand: <IconWavingHand size="m" />,
35
+ questions: <IconNumberedList size="m" />,
36
+ speak: <IconMessages size="m" />,
37
+ };
38
+
39
+ export interface VideoSelfieTutorialScreenProps
40
+ extends Omit<
41
+ PrizmaListScreenProps,
42
+ | 'status'
43
+ | 'title'
44
+ | 'subtitle'
45
+ | 'children'
46
+ | 'ctaLabel'
47
+ | 'secondaryCtaLabel'
48
+ | 'linkLabel'
49
+ | 'verifiedLabel'
50
+ | 'navLabel'
51
+ > {
52
+ /** Module copy — this screen reads the `tutorial` slice. */
53
+ strings: VideoSelfieStrings;
54
+ /** Which purple tutorial section: `1.0` (id) or `1.2` (passport). Default
55
+ * `id`. The two differ ONLY in the row list — the passport journey collects
56
+ * one photo page instead of a front and a back. */
57
+ documentType?: VideoSelfieDocumentType;
58
+ screenId?: string;
59
+ overrides?: PrizmaScreenOverrides;
60
+ onAction?: PrizmaScreenActionHandler;
61
+ }
62
+
63
+ /**
64
+ * Video Selfie — tutorial, built on the List archetype (GUIDELINES.md §6-G,
65
+ * `PrizmaListScreen`). Figma: purple sections `video selfie - tutorial 1.0`
66
+ * and `1.2 - with passport`.
67
+ *
68
+ * The screen is a title block over a promise list and one CTA, which is exactly
69
+ * archetype G: the rows are Core's `PrizmaListItem` (`icon-m`) verbatim (only
70
+ * the leading glyph is chosen here, from `ROW_ICONS`), the Spacing/24 above the
71
+ * list is the archetype's `__list`, and the band is the archetype's. This file
72
+ * declares no layout of its own.
73
+ *
74
+ * NOT archetype A: A centres one illustration in the flexible middle; here the
75
+ * middle is a seven-row list that must span the column and start at the top —
76
+ * the distinction `ScreenLayout.css` draws between `__flex` and `__list`.
77
+ */
78
+ export const VideoSelfieTutorialScreen = forwardRef<
79
+ HTMLDivElement,
80
+ VideoSelfieTutorialScreenProps
81
+ >(
82
+ (
83
+ {
84
+ strings,
85
+ documentType = 'id',
86
+ screenId = `video-selfie-tutorial-${documentType}`,
87
+ overrides,
88
+ onAction,
89
+ ...shell
90
+ },
91
+ ref,
92
+ ) => (
93
+ <PrizmaListScreen
94
+ ref={ref}
95
+ title={strings.tutorial.title}
96
+ subtitle={strings.tutorial.subtitle}
97
+ ctaLabel={strings.tutorial.ctaLabel}
98
+ verifiedLabel={strings.verifiedLabel}
99
+ navLabel={strings.navLabel}
100
+ screenId={screenId}
101
+ overrides={overrides}
102
+ onAction={onAction}
103
+ {...shell}
104
+ >
105
+ {/* Core's LIST-WITH-ICON rows. `1.0`/`1.2` draw the steps as plain
106
+ icon + label rows with NO card surface behind them, so
107
+ `PrizmaCardListCommonIssues` was wrong — it gave every row a tinted
108
+ card the design does not have (owner-reported 2026-08-19).
109
+
110
+ The rows are Core's `PrizmaListItem` (`icon-m`), composed directly
111
+ rather than through `PrizmaList`: the wrapper's icon variants cap at
112
+ SIX slots and silently drop the rest, and this tutorial draws SEVEN
113
+ steps. The <ul> carries only the variant's own Spacing/12 rhythm —
114
+ no new value. CORE REQUEST: let `PrizmaList`'s icon variants take a
115
+ seventh row. DEVIATIONS #VS-8.
116
+ */}
117
+ <ul className="video-selfie-tutorial-list">
118
+ {strings.tutorial.rows[documentType].map((row) => (
119
+ <li key={row.kind}>
120
+ <PrizmaListItem variant="icon-m" label={row.label} icon={ROW_ICONS[row.kind]} />
121
+ </li>
122
+ ))}
123
+ </ul>
124
+ </PrizmaListScreen>
125
+ ),
126
+ );
127
+ VideoSelfieTutorialScreen.displayName = 'VideoSelfieTutorialScreen';
128
+
129
+ export default VideoSelfieTutorialScreen;