@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
package/src/flows.ts ADDED
@@ -0,0 +1,711 @@
1
+ // Per-module screen sequences — the data the FlowPlayer prototypes step
2
+ // through. A flow is pure data: ordered `{ screenId, component }` entries plus
3
+ // the fixed `variant` props that pin a component to ONE Figma spec section when
4
+ // a single component covers several (GUIDELINES.md §8).
5
+ //
6
+ // Flows carry NO copy: every screen takes the module's one `strings` object, so
7
+ // the player renders `<step.component strings={strings} {...step.variant} />`.
8
+
9
+ import type { ComponentType } from 'react';
10
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
11
+ import type {
12
+ FaceCaptureCapturingState,
13
+ FaceCaptureStrings,
14
+ } from './FaceCaptureStrings';
15
+ import { FaceCaptureTutorialScreen } from './FaceCaptureTutorialScreen';
16
+ import { FaceCaptureCapturingScreen } from './FaceCaptureCapturingScreen';
17
+ import { FaceCaptureManualCaptureScreen } from './FaceCaptureManualCaptureScreen';
18
+ import { FaceCaptureLoadingScreen } from './FaceCaptureLoadingScreen';
19
+ import { FaceCaptureResultSuccessScreen } from './FaceCaptureResultSuccessScreen';
20
+ import { FaceCaptureResultErrorScreen } from './FaceCaptureResultErrorScreen';
21
+ import { FaceCaptureNoConnectionScreen } from './FaceCaptureNoConnectionScreen';
22
+ import type {
23
+ FaceMatchComparisonVariant,
24
+ FaceMatchLivenessVerdict,
25
+ FaceMatchResultStatus,
26
+ FaceMatchStrings,
27
+ } from './FaceMatchStrings';
28
+ import { FaceMatchComparisonScreen } from './FaceMatchComparisonScreen';
29
+ import { FaceMatchComparisonCompactScreen } from './FaceMatchComparisonCompactScreen';
30
+ import { FaceMatchResultScreen } from './FaceMatchResultScreen';
31
+ import type {
32
+ DocumentCaptureConfirmStage,
33
+ DocumentCaptureMethodSelectionVariant,
34
+ DocumentCaptureStrings,
35
+ DocumentCaptureTutorialVariant,
36
+ } from './DocumentCaptureStrings';
37
+ import { DocumentCaptureTutorialScreen } from './DocumentCaptureTutorialScreen';
38
+ import { DocumentCaptureMethodSelectionScreen } from './DocumentCaptureMethodSelectionScreen';
39
+ import { DocumentCaptureCaptureScreen } from './DocumentCaptureCaptureScreen';
40
+ import { DocumentCaptureConfirmImageScreen } from './DocumentCaptureConfirmImageScreen';
41
+ import { DocumentCaptureConfirmUploadScreen } from './DocumentCaptureConfirmUploadScreen';
42
+ import { DocumentCaptureNextPageScreen } from './DocumentCaptureNextPageScreen';
43
+ import { DocumentCaptureCommonIssuesScreen } from './DocumentCaptureCommonIssuesScreen';
44
+ import { DocumentCaptureGenericErrorScreen } from './DocumentCaptureGenericErrorScreen';
45
+ import { DocumentCaptureNoConnectionScreen } from './DocumentCaptureNoConnectionScreen';
46
+ import type {
47
+ IdCaptureDocumentType,
48
+ IdCaptureSide,
49
+ IdCaptureStageState,
50
+ IdCaptureStrings,
51
+ } from './IdCaptureStrings';
52
+ import {
53
+ IdCaptureTutorialScreen,
54
+ type IdCaptureTutorialVariant,
55
+ } from './IdCaptureTutorialScreen';
56
+ import { IdCaptureStageScreen } from './IdCaptureStageScreen';
57
+ import {
58
+ IdCaptureResultScreen,
59
+ type IdCaptureResultVerdict,
60
+ } from './IdCaptureResultScreen';
61
+ import { IdCaptureAnalyzingScreen } from './IdCaptureAnalyzingScreen';
62
+ import { IdCaptureFlipScreen } from './IdCaptureFlipScreen';
63
+ import { IdCaptureHoldOnScreen } from './IdCaptureHoldOnScreen';
64
+ import { IdCaptureNoConnectionScreen } from './IdCaptureNoConnectionScreen';
65
+ import { IdCaptureDocumentSelectionScreen } from './IdCaptureDocumentSelectionScreen';
66
+ import { IdCaptureAgeVerificationScreen } from './IdCaptureAgeVerificationScreen';
67
+ import { IdCaptureCommonIssuesScreen } from './IdCaptureCommonIssuesScreen';
68
+ import { IdCapturePermissionScreen } from './IdCapturePermissionScreen';
69
+ import { IdCaptureDocumentErrorScreen } from './IdCaptureDocumentErrorScreen';
70
+
71
+ /** The prop shape EVERY Face Capture screen accepts — the flow player needs
72
+ * nothing more to render any step. */
73
+ export interface FaceCaptureScreenProps {
74
+ strings: FaceCaptureStrings;
75
+ screenId?: string;
76
+ overrides?: PrizmaScreenOverrides;
77
+ onAction?: PrizmaScreenActionHandler;
78
+ }
79
+
80
+ /** Fixed variant props: they select the Figma spec section, never the copy. */
81
+ export interface FaceCaptureFlowVariant {
82
+ /** FaceCaptureTutorialScreen — `faceCapture.tutorial.loading`. */
83
+ ctaLoading?: boolean;
84
+ /** FaceCaptureCapturingScreen — which of the 15 `capturing.*` sections. */
85
+ state?: FaceCaptureCapturingState;
86
+ /** FaceCaptureLoadingScreen — `loading.uploading` vs `loading.processing`. */
87
+ stage?: 'uploading' | 'processing';
88
+ /** FaceCaptureResultErrorScreen — the `*Exhausted` half of the error pairs. */
89
+ exhausted?: boolean;
90
+ }
91
+
92
+ export interface FaceCaptureFlowStep {
93
+ /** Stable screen id — also what the screen reports through `onAction`. */
94
+ screenId: string;
95
+ component: ComponentType<FaceCaptureScreenProps>;
96
+ variant?: FaceCaptureFlowVariant;
97
+ }
98
+
99
+ /**
100
+ * Face Capture — the happy path, in the order the purple Figma sections are
101
+ * numbered (1 tutorial → 2 capturing → 3 manualCapture → 4 loading →
102
+ * 5 resultSuccess), which is also GUIDELINES.md §8's canonical capture
103
+ * sequence.
104
+ *
105
+ * `faceCapture.resultError.*` and `faceCapture.genericErrors.noConnection` are
106
+ * NOT steps: they are branches the host swaps in when a verdict or the network
107
+ * fails. They are exported separately so a player can offer them without
108
+ * implying they follow success.
109
+ */
110
+ export const faceCaptureFlow: readonly FaceCaptureFlowStep[] = [
111
+ { screenId: 'face-capture-tutorial', component: FaceCaptureTutorialScreen },
112
+ {
113
+ screenId: 'face-capture-capturing',
114
+ component: FaceCaptureCapturingScreen,
115
+ variant: { state: 'initiating' },
116
+ },
117
+ {
118
+ screenId: 'face-capture-capturing-align',
119
+ component: FaceCaptureCapturingScreen,
120
+ variant: { state: 'alignFace' },
121
+ },
122
+ {
123
+ screenId: 'face-capture-capturing-ready',
124
+ component: FaceCaptureCapturingScreen,
125
+ variant: { state: 'getReady' },
126
+ },
127
+ {
128
+ screenId: 'face-capture-uploading',
129
+ component: FaceCaptureLoadingScreen,
130
+ variant: { stage: 'uploading' },
131
+ },
132
+ {
133
+ screenId: 'face-capture-processing',
134
+ component: FaceCaptureLoadingScreen,
135
+ variant: { stage: 'processing' },
136
+ },
137
+ { screenId: 'face-capture-success', component: FaceCaptureResultSuccessScreen },
138
+ ];
139
+
140
+ /** The off-path screens: manual capture (offered when auto-capture is turned
141
+ * off or gives up), the two error verdicts, and the connectivity error. */
142
+ export const faceCaptureBranches: readonly FaceCaptureFlowStep[] = [
143
+ {
144
+ screenId: 'face-capture-manual-capture',
145
+ component: FaceCaptureManualCaptureScreen,
146
+ },
147
+ { screenId: 'face-capture-error', component: FaceCaptureResultErrorScreen },
148
+ {
149
+ screenId: 'face-capture-error-exhausted',
150
+ component: FaceCaptureResultErrorScreen,
151
+ variant: { exhausted: true },
152
+ },
153
+ {
154
+ screenId: 'face-capture-no-connection',
155
+ component: FaceCaptureNoConnectionScreen,
156
+ },
157
+ ];
158
+
159
+ /* ── Face Match ─────────────────────────────────────────────────────────────
160
+ * Purple sections of the Face Match Figma file (BXeJ6Q3TXahJVWEt8QoMVA, page
161
+ * 18:19332): faceMatch.comparison (5) · comparisonCompact (1) · error (3) ·
162
+ * success (3).
163
+ *
164
+ * NOTE ON REUSE: no Face Capture component appears in these flows. Face Match
165
+ * ships no tutorial and no capture stage — its images come from the modules
166
+ * upstream — and its three screens each differ structurally from the Face
167
+ * Capture screen they superficially resemble: the comparison view is a new
168
+ * two/three-photo composition, `comparisonCompact.matching` really centers (so
169
+ * it is archetype C, while FaceCaptureLoadingScreen is archetype B), and the six
170
+ * result sections need a positive status and a verdict Snackbar that
171
+ * FaceCaptureResultErrorScreen has no slot for. What IS reused is the
172
+ * foundation: PrizmaProcessingScreen verbatim, plus ScreenShell / ScreenNav /
173
+ * ScreenLayout.css. DEVIATIONS.md #24. */
174
+
175
+ /** The prop shape EVERY Face Match screen accepts. */
176
+ export interface FaceMatchScreenProps {
177
+ strings: FaceMatchStrings;
178
+ screenId?: string;
179
+ overrides?: PrizmaScreenOverrides;
180
+ onAction?: PrizmaScreenActionHandler;
181
+ }
182
+
183
+ /** Fixed variant props: they select the Figma spec section, never the copy. */
184
+ export interface FaceMatchFlowVariant {
185
+ /** FaceMatchComparisonScreen — which purple photo set. */
186
+ variant?: FaceMatchComparisonVariant;
187
+ /** FaceMatchComparisonScreen — the converged `*.matching` sections. */
188
+ matching?: boolean;
189
+ /** FaceMatchResultScreen — `success.*` vs `error.*`. */
190
+ status?: FaceMatchResultStatus;
191
+ /** FaceMatchResultScreen — the `*.liveness{Success,Failed}` halves. */
192
+ liveness?: FaceMatchLivenessVerdict;
193
+ }
194
+
195
+ export interface FaceMatchFlowStep {
196
+ /** Stable screen id — also what the screen reports through `onAction`. */
197
+ screenId: string;
198
+ component: ComponentType<FaceMatchScreenProps>;
199
+ variant?: FaceMatchFlowVariant;
200
+ }
201
+
202
+ /**
203
+ * Face Match — the happy path: the two captured photos are presented, they
204
+ * converge while the comparison runs, and the verdict is a match.
205
+ *
206
+ * The other comparison variants (`nfc`, `firstAndSecondID`,
207
+ * `threeFacesMatching`), the photo-less compact matching state and the failing /
208
+ * liveness verdicts are branches, exported separately.
209
+ */
210
+ export const faceMatchFlow: readonly FaceMatchFlowStep[] = [
211
+ {
212
+ screenId: 'face-match-comparison',
213
+ component: FaceMatchComparisonScreen,
214
+ variant: { variant: 'selfieId' },
215
+ },
216
+ {
217
+ screenId: 'face-match-comparison-matching',
218
+ component: FaceMatchComparisonScreen,
219
+ variant: { variant: 'selfieId', matching: true },
220
+ },
221
+ {
222
+ screenId: 'face-match-matched',
223
+ component: FaceMatchResultScreen,
224
+ variant: { status: 'matched' },
225
+ },
226
+ ];
227
+
228
+ /**
229
+ * The off-path screens: the three-photo comparison variants (NFC portrait, or a
230
+ * second document, joining the selfie), the compact matching state shown when
231
+ * the captures are not displayed, and the five remaining verdicts.
232
+ *
233
+ * `comparison.threeFacesMatching` is the converged state of BOTH three-photo
234
+ * variants — Figma authors it once, with the labels hidden, so `nfc` stands in
235
+ * for either.
236
+ */
237
+ export const faceMatchBranches: readonly FaceMatchFlowStep[] = [
238
+ {
239
+ screenId: 'face-match-comparison-nfc',
240
+ component: FaceMatchComparisonScreen,
241
+ variant: { variant: 'nfc' },
242
+ },
243
+ {
244
+ screenId: 'face-match-comparison-first-and-second-id',
245
+ component: FaceMatchComparisonScreen,
246
+ variant: { variant: 'firstAndSecondID' },
247
+ },
248
+ {
249
+ screenId: 'face-match-comparison-three-faces-matching',
250
+ component: FaceMatchComparisonScreen,
251
+ variant: { variant: 'nfc', matching: true },
252
+ },
253
+ {
254
+ screenId: 'face-match-comparison-compact',
255
+ component: FaceMatchComparisonCompactScreen,
256
+ },
257
+ {
258
+ screenId: 'face-match-not-matched',
259
+ component: FaceMatchResultScreen,
260
+ variant: { status: 'notMatched' },
261
+ },
262
+ {
263
+ screenId: 'face-match-matched-liveness-success',
264
+ component: FaceMatchResultScreen,
265
+ variant: { status: 'matched', liveness: 'success' },
266
+ },
267
+ {
268
+ screenId: 'face-match-matched-liveness-failed',
269
+ component: FaceMatchResultScreen,
270
+ variant: { status: 'matched', liveness: 'failed' },
271
+ },
272
+ {
273
+ screenId: 'face-match-not-matched-liveness-success',
274
+ component: FaceMatchResultScreen,
275
+ variant: { status: 'notMatched', liveness: 'success' },
276
+ },
277
+ {
278
+ screenId: 'face-match-not-matched-liveness-failed',
279
+ component: FaceMatchResultScreen,
280
+ variant: { status: 'notMatched', liveness: 'failed' },
281
+ },
282
+ ];
283
+
284
+ /* ══════════════════════════════════════════════════════════════════════════
285
+ Document Capture (wave 2)
286
+ ══════════════════════════════════════════════════════════════════════════ */
287
+
288
+ /** The prop shape EVERY Document Capture screen accepts. */
289
+ export interface DocumentCaptureScreenProps {
290
+ strings: DocumentCaptureStrings;
291
+ screenId?: string;
292
+ overrides?: PrizmaScreenOverrides;
293
+ onAction?: PrizmaScreenActionHandler;
294
+ }
295
+
296
+ /** Fixed variant props: they select the Figma spec section, never the copy. */
297
+ export interface DocumentCaptureFlowVariant {
298
+ /** DocumentCaptureTutorialScreen — which `tutorial.*` intro section. */
299
+ variant?: DocumentCaptureTutorialVariant;
300
+ /** DocumentCaptureMethodSelectionScreen — 2-row (web), 3-row (native), or the
301
+ * native pair without the camera row (nativeUpload). */
302
+ method?: DocumentCaptureMethodSelectionVariant;
303
+ /** DocumentCaptureCaptureScreen — `capture.default` vs `capture.filled`. */
304
+ state?: 'empty' | 'filled';
305
+ /** DocumentCaptureConfirm*Screen — review / analyzing / success. */
306
+ stage?: DocumentCaptureConfirmStage;
307
+ /** DocumentCaptureNextPageScreen — the `.mandatory` half of the pair. */
308
+ mandatory?: boolean;
309
+ /** DocumentCaptureGenericErrorScreen — the `*Exhausted` half of the pair. */
310
+ exhausted?: boolean;
311
+ }
312
+
313
+ export interface DocumentCaptureFlowStep {
314
+ /** Stable screen id — also what the screen reports through `onAction`. */
315
+ screenId: string;
316
+ component: ComponentType<DocumentCaptureScreenProps>;
317
+ variant?: DocumentCaptureFlowVariant;
318
+ }
319
+
320
+ /**
321
+ * Document Capture BRANCHES at the tutorial: the method sheet sends the user
322
+ * down the camera path or the upload path, and the two paths have different
323
+ * confirmation screens (`confirmImage.*` vs `confirmUpload.*`). So the module
324
+ * ships three sequences instead of one:
325
+ *
326
+ * documentCaptureFlow the shared head — tutorial → method sheet
327
+ * documentCaptureCameraFlow capture → confirmImage(review→analyzing→success)
328
+ * documentCaptureUploadFlow confirmUpload(review→analyzing→success)
329
+ *
330
+ * `documentCaptureBranchesByMethod` maps the sheet's two answers onto the two
331
+ * tails, so a player can resolve the branch without hardcoding screen ids.
332
+ *
333
+ * Not steps in any sequence: `commonIssues` (help, reachable from the camera
334
+ * stage's "?" control), the two generic-error verdicts, and the connectivity
335
+ * error. They are exported as `documentCaptureBranches`.
336
+ */
337
+ export const documentCaptureFlow: readonly DocumentCaptureFlowStep[] = [
338
+ {
339
+ screenId: 'document-capture-tutorial-default',
340
+ component: DocumentCaptureTutorialScreen,
341
+ variant: { variant: 'default' },
342
+ },
343
+ {
344
+ screenId: 'document-capture-method-selection-web',
345
+ component: DocumentCaptureMethodSelectionScreen,
346
+ variant: { method: 'web' },
347
+ },
348
+ ];
349
+
350
+ /** Tail A — "Take photo": the dark camera stage, then the photo confirmation. */
351
+ export const documentCaptureCameraFlow: readonly DocumentCaptureFlowStep[] = [
352
+ {
353
+ screenId: 'document-capture-capture-empty',
354
+ component: DocumentCaptureCaptureScreen,
355
+ variant: { state: 'empty' },
356
+ },
357
+ {
358
+ screenId: 'document-capture-capture-filled',
359
+ component: DocumentCaptureCaptureScreen,
360
+ variant: { state: 'filled' },
361
+ },
362
+ {
363
+ screenId: 'document-capture-confirm-image-review',
364
+ component: DocumentCaptureConfirmImageScreen,
365
+ variant: { stage: 'review' },
366
+ },
367
+ {
368
+ screenId: 'document-capture-confirm-image-analyzing',
369
+ component: DocumentCaptureConfirmImageScreen,
370
+ variant: { stage: 'analyzing' },
371
+ },
372
+ {
373
+ screenId: 'document-capture-confirm-image-success',
374
+ component: DocumentCaptureConfirmImageScreen,
375
+ variant: { stage: 'success' },
376
+ },
377
+ ];
378
+
379
+ /** Tail B — "Upload document": the picker is OS chrome (DEVIATIONS #20), so the
380
+ * Prizma sequence resumes at the file confirmation. */
381
+ export const documentCaptureUploadFlow: readonly DocumentCaptureFlowStep[] = [
382
+ {
383
+ screenId: 'document-capture-confirm-upload-review',
384
+ component: DocumentCaptureConfirmUploadScreen,
385
+ variant: { stage: 'review' },
386
+ },
387
+ {
388
+ screenId: 'document-capture-confirm-upload-analyzing',
389
+ component: DocumentCaptureConfirmUploadScreen,
390
+ variant: { stage: 'analyzing' },
391
+ },
392
+ {
393
+ screenId: 'document-capture-confirm-upload-success',
394
+ component: DocumentCaptureConfirmUploadScreen,
395
+ variant: { stage: 'success' },
396
+ },
397
+ ];
398
+
399
+ /** The method sheet's two answers → the tail each one leads to. */
400
+ export const documentCaptureBranchesByMethod: Readonly<
401
+ Record<'camera' | 'upload', readonly DocumentCaptureFlowStep[]>
402
+ > = {
403
+ camera: documentCaptureCameraFlow,
404
+ upload: documentCaptureUploadFlow,
405
+ };
406
+
407
+ /** The off-path screens: the two native method sheets, the multi-page prompt,
408
+ * the common-issues help, the two error verdicts, and the connectivity error. */
409
+ export const documentCaptureBranches: readonly DocumentCaptureFlowStep[] = [
410
+ {
411
+ screenId: 'document-capture-tutorial-captureOnly',
412
+ component: DocumentCaptureTutorialScreen,
413
+ variant: { variant: 'captureOnly' },
414
+ },
415
+ {
416
+ screenId: 'document-capture-tutorial-uploadOnly',
417
+ component: DocumentCaptureTutorialScreen,
418
+ variant: { variant: 'uploadOnly' },
419
+ },
420
+ {
421
+ screenId: 'document-capture-method-selection-native',
422
+ component: DocumentCaptureMethodSelectionScreen,
423
+ variant: { method: 'native' },
424
+ },
425
+ {
426
+ screenId: 'document-capture-method-selection-nativeUpload',
427
+ component: DocumentCaptureMethodSelectionScreen,
428
+ variant: { method: 'nativeUpload' },
429
+ },
430
+ {
431
+ screenId: 'document-capture-next-page',
432
+ component: DocumentCaptureNextPageScreen,
433
+ },
434
+ {
435
+ screenId: 'document-capture-next-page-mandatory',
436
+ component: DocumentCaptureNextPageScreen,
437
+ variant: { mandatory: true },
438
+ },
439
+ {
440
+ screenId: 'document-capture-common-issues',
441
+ component: DocumentCaptureCommonIssuesScreen,
442
+ },
443
+ {
444
+ screenId: 'document-capture-generic-error',
445
+ component: DocumentCaptureGenericErrorScreen,
446
+ },
447
+ {
448
+ screenId: 'document-capture-generic-error-exhausted',
449
+ component: DocumentCaptureGenericErrorScreen,
450
+ variant: { exhausted: true },
451
+ },
452
+ {
453
+ screenId: 'document-capture-no-connection',
454
+ component: DocumentCaptureNoConnectionScreen,
455
+ },
456
+ ];
457
+
458
+ /* ── ID Capture ───────────────────────────────────────────────────────────── */
459
+
460
+ /** The prop shape EVERY ID Capture screen accepts — the flow player needs
461
+ * nothing more to render any step. */
462
+ export interface IdCaptureScreenProps {
463
+ strings: IdCaptureStrings;
464
+ screenId?: string;
465
+ overrides?: PrizmaScreenOverrides;
466
+ onAction?: PrizmaScreenActionHandler;
467
+ }
468
+
469
+ /** Fixed variant props: they select the Figma spec section, never the copy. */
470
+ export interface IdCaptureFlowVariant {
471
+ /** IdCaptureTutorialScreen — which of the three tutorial sections. */
472
+ variant?: IdCaptureTutorialVariant;
473
+ /** IdCaptureStageScreen / IdCaptureResultScreen / IdCaptureAnalyzingScreen —
474
+ * `id` vs `passport` (the `Passport capture` groups). */
475
+ documentType?: IdCaptureDocumentType;
476
+ /** IdCaptureStageScreen — which face of a two-sided document. */
477
+ side?: IdCaptureSide;
478
+ /** The `↕️ vertical` groups. */
479
+ vertical?: boolean;
480
+ /** IdCaptureStageScreen — which stage section. */
481
+ state?: IdCaptureStageState;
482
+ /** IdCaptureStageScreen — the `*-manual` sections. */
483
+ manual?: boolean;
484
+ /** IdCaptureResultScreen — which verdict section. */
485
+ verdict?: IdCaptureResultVerdict;
486
+ /** IdCaptureDocumentErrorScreen — the `-empty` section. */
487
+ empty?: boolean;
488
+ }
489
+
490
+ export interface IdCaptureFlowStep {
491
+ /** Stable screen id — also what the screen reports through `onAction`. */
492
+ screenId: string;
493
+ component: ComponentType<IdCaptureScreenProps>;
494
+ variant?: IdCaptureFlowVariant;
495
+ }
496
+
497
+ /**
498
+ * ID Capture — the happy path of a TWO-SIDED document, in the order the purple
499
+ * sections are numbered: document selection (1-1) → tutorial (1-2) → camera
500
+ * stage (1-5 … 1-8) → analyzing (1-9-1) → review (1-9-2) → front success (1-10)
501
+ * → flip (1-11) → back stage (1-12 … 1-15) → back analyzing (1-16-1) → back
502
+ * success (1-17) → hold on (1-18).
503
+ *
504
+ * The passport path is the same list without the flip and the back half, with
505
+ * `documentType: 'passport'` on every capture step (the `Passport capture`
506
+ * group's numbering, 3-x, mirrors it exactly) — see `idCapturePassportFlow`.
507
+ * Failures and the chrome-free error screens are branches, not steps, so they
508
+ * are exported separately: nothing about them follows success.
509
+ */
510
+ export const idCaptureFlow: readonly IdCaptureFlowStep[] = [
511
+ {
512
+ screenId: 'id-capture-document-selection',
513
+ component: IdCaptureDocumentSelectionScreen,
514
+ },
515
+ {
516
+ screenId: 'id-capture-tutorial-front',
517
+ component: IdCaptureTutorialScreen,
518
+ variant: { variant: 'front' },
519
+ },
520
+ {
521
+ screenId: 'id-capture-front-empty',
522
+ component: IdCaptureStageScreen,
523
+ variant: { side: 'front', state: 'empty' },
524
+ },
525
+ {
526
+ screenId: 'id-capture-front-hint',
527
+ component: IdCaptureStageScreen,
528
+ variant: { side: 'front', state: 'hint' },
529
+ },
530
+ {
531
+ screenId: 'id-capture-front-countdown',
532
+ component: IdCaptureStageScreen,
533
+ variant: { side: 'front', state: 'countdown' },
534
+ },
535
+ {
536
+ screenId: 'id-capture-front-flash',
537
+ component: IdCaptureStageScreen,
538
+ variant: { side: 'front', state: 'flash' },
539
+ },
540
+ { screenId: 'id-capture-analyzing', component: IdCaptureAnalyzingScreen },
541
+ {
542
+ screenId: 'id-capture-review',
543
+ component: IdCaptureResultScreen,
544
+ variant: { verdict: 'review' },
545
+ },
546
+ {
547
+ screenId: 'id-capture-front-success',
548
+ component: IdCaptureResultScreen,
549
+ variant: { verdict: 'success' },
550
+ },
551
+ { screenId: 'id-capture-flip', component: IdCaptureFlipScreen },
552
+ {
553
+ screenId: 'id-capture-tutorial-back',
554
+ component: IdCaptureTutorialScreen,
555
+ variant: { variant: 'back' },
556
+ },
557
+ {
558
+ screenId: 'id-capture-back-empty',
559
+ component: IdCaptureStageScreen,
560
+ variant: { side: 'back', state: 'empty' },
561
+ },
562
+ {
563
+ screenId: 'id-capture-back-countdown',
564
+ component: IdCaptureStageScreen,
565
+ variant: { side: 'back', state: 'countdown' },
566
+ },
567
+ {
568
+ screenId: 'id-capture-back-analyzing',
569
+ component: IdCaptureAnalyzingScreen,
570
+ },
571
+ {
572
+ screenId: 'id-capture-back-success',
573
+ component: IdCaptureResultScreen,
574
+ variant: { verdict: 'success' },
575
+ },
576
+ { screenId: 'id-capture-hold-on', component: IdCaptureHoldOnScreen },
577
+ ];
578
+
579
+ /** The single-sided passport path — the `Passport capture` group (3-x). */
580
+ export const idCapturePassportFlow: readonly IdCaptureFlowStep[] = [
581
+ {
582
+ screenId: 'id-capture-tutorial-passport',
583
+ component: IdCaptureTutorialScreen,
584
+ variant: { variant: 'passport' },
585
+ },
586
+ {
587
+ screenId: 'id-capture-passport-empty',
588
+ component: IdCaptureStageScreen,
589
+ variant: { documentType: 'passport', state: 'empty' },
590
+ },
591
+ {
592
+ screenId: 'id-capture-passport-hint',
593
+ component: IdCaptureStageScreen,
594
+ variant: { documentType: 'passport', state: 'hint' },
595
+ },
596
+ {
597
+ screenId: 'id-capture-passport-countdown',
598
+ component: IdCaptureStageScreen,
599
+ variant: { documentType: 'passport', state: 'countdown' },
600
+ },
601
+ {
602
+ screenId: 'id-capture-passport-analyzing',
603
+ component: IdCaptureAnalyzingScreen,
604
+ variant: { documentType: 'passport' },
605
+ },
606
+ {
607
+ screenId: 'id-capture-passport-review',
608
+ component: IdCaptureResultScreen,
609
+ variant: { documentType: 'passport', verdict: 'review' },
610
+ },
611
+ {
612
+ screenId: 'id-capture-passport-success',
613
+ component: IdCaptureResultScreen,
614
+ variant: { documentType: 'passport', verdict: 'success' },
615
+ },
616
+ ];
617
+
618
+ /**
619
+ * The off-path screens: the manual stage (offered when auto-capture is turned
620
+ * off or gives up), the five on-camera error stages, every verdict failure, the
621
+ * help sheet, the permission gate, the document-error screens and the
622
+ * connectivity error.
623
+ *
624
+ * The `↕️ vertical` groups are not separate branches — they are the same steps
625
+ * with `vertical: true`, which is why `idCaptureVerticalOf` exists below.
626
+ */
627
+ export const idCaptureBranches: readonly IdCaptureFlowStep[] = [
628
+ {
629
+ screenId: 'id-capture-permission',
630
+ component: IdCapturePermissionScreen,
631
+ },
632
+ {
633
+ screenId: 'id-capture-age-verification',
634
+ component: IdCaptureAgeVerificationScreen,
635
+ },
636
+ {
637
+ screenId: 'id-capture-front-manual',
638
+ component: IdCaptureStageScreen,
639
+ variant: { state: 'empty', manual: true },
640
+ },
641
+ {
642
+ screenId: 'id-capture-front-error-wrong-side',
643
+ component: IdCaptureStageScreen,
644
+ variant: { state: 'error-wrong-side' },
645
+ },
646
+ {
647
+ screenId: 'id-capture-front-error-not-aligned',
648
+ component: IdCaptureStageScreen,
649
+ variant: { state: 'error-not-aligned' },
650
+ },
651
+ {
652
+ screenId: 'id-capture-front-error-blurry',
653
+ component: IdCaptureStageScreen,
654
+ variant: { state: 'error-blurry' },
655
+ },
656
+ {
657
+ screenId: 'id-capture-front-error-glare',
658
+ component: IdCaptureStageScreen,
659
+ variant: { state: 'error-glare' },
660
+ },
661
+ {
662
+ screenId: 'id-capture-front-error-too-dark',
663
+ component: IdCaptureStageScreen,
664
+ variant: { state: 'error-too-dark' },
665
+ },
666
+ { screenId: 'id-capture-common-issues', component: IdCaptureCommonIssuesScreen },
667
+ {
668
+ screenId: 'id-capture-error',
669
+ component: IdCaptureResultScreen,
670
+ variant: { verdict: 'error' },
671
+ },
672
+ {
673
+ screenId: 'id-capture-exhausted',
674
+ component: IdCaptureResultScreen,
675
+ variant: { verdict: 'exhausted' },
676
+ },
677
+ {
678
+ screenId: 'id-capture-classification',
679
+ component: IdCaptureResultScreen,
680
+ variant: { verdict: 'classification' },
681
+ },
682
+ {
683
+ screenId: 'id-capture-document-error',
684
+ component: IdCaptureDocumentErrorScreen,
685
+ },
686
+ {
687
+ screenId: 'id-capture-document-error-empty',
688
+ component: IdCaptureDocumentErrorScreen,
689
+ variant: { empty: true },
690
+ },
691
+ {
692
+ screenId: 'id-capture-no-connection',
693
+ component: IdCaptureNoConnectionScreen,
694
+ },
695
+ ];
696
+
697
+ /**
698
+ * The `ID capture ↕️ vertical` (2-x) and `Passport capture ↕️ vertical` (4-x)
699
+ * groups: the SAME steps with the portrait frame. Kept as a derivation rather
700
+ * than two more literal lists, because that is precisely what the Figma groups
701
+ * are — the numbering, the states and the copy are identical and only
702
+ * `PrizmaIdCapture.isVertical` flips.
703
+ */
704
+ export const idCaptureVerticalOf = (
705
+ steps: readonly IdCaptureFlowStep[],
706
+ ): readonly IdCaptureFlowStep[] =>
707
+ steps.map((step) => ({
708
+ ...step,
709
+ screenId: `${step.screenId}-vertical`,
710
+ variant: { ...step.variant, vertical: true },
711
+ }));