@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,81 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaTutorialScreen, type PrizmaTutorialScreenProps } from './TutorialScreen';
3
+ import { DocumentCaptureIllustration } from './DocumentCaptureIllustration';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { QualifiedSignatureStrings } from './QualifiedSignatureStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ export interface QualifiedSignatureUploadScreenProps
9
+ extends Omit<
10
+ PrizmaTutorialScreenProps,
11
+ 'title' | 'subtitle' | 'disclaimer' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
12
+ > {
13
+ /** Module copy — this screen reads the `upload` slice. */
14
+ strings: QualifiedSignatureStrings;
15
+ /** Replace the document illustration (a host may ship its own artwork). */
16
+ illustration?: ReactNode;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+
22
+ /**
23
+ * Qualified Signature — the intro that asks for the file, built on the Tutorial
24
+ * archetype (GUIDELINES.md §6-A, `PrizmaTutorialScreen`).
25
+ *
26
+ * Figma: purple section `QSign.upload.default` (10196:67095). Measured off the
27
+ * 390 frame (CONTENT 654, `top container` 342×127): nav 8→52 · Title 68→127
28
+ * (nav + Spacing/24) · `illustration container` flexes · `Call to Actions`
29
+ * 536→638 = the primary + the Tag. Exactly the archetype's own rhythm, so this
30
+ * file declares no layout.
31
+ *
32
+ * The illustration is `DocumentCaptureIllustration` — NOT a fourth inline copy
33
+ * of the same artwork. The Figma `Illustrations` frame here is 310.47 × 325 and
34
+ * Document Capture's is 342 × 358: the SAME ratio to five decimals (0.90775),
35
+ * with the same three layers (halo ellipse `bg` · `documents` page · the
36
+ * `frame-border` outline), i.e. one asset drawn at two scales. Core still ships
37
+ * no document illustration, so the standing request stands — DEVIATIONS #DC-21
38
+ * asked to promote it to `PrizmaIllustrationDocument`; a second module now
39
+ * depends on a Document-Capture-named export, which is the strongest argument
40
+ * yet for the promotion.
41
+ *
42
+ * `QSign.upload.select` (10196:67173), the section between this screen and the
43
+ * review, is the **iOS Files app** — OS chrome, not a Prizma surface. Not built,
44
+ * for the reason DEVIATIONS #DC-20 settled: a screen composed only of Core
45
+ * components cannot render OS chrome, and faking it would ship a fake system UI.
46
+ * A host that needs the picker calls the platform API.
47
+ */
48
+ export const QualifiedSignatureUploadScreen = forwardRef<
49
+ HTMLDivElement,
50
+ QualifiedSignatureUploadScreenProps
51
+ >(
52
+ (
53
+ {
54
+ strings,
55
+ illustration,
56
+ screenId = 'qualified-signature-upload',
57
+ overrides,
58
+ onAction,
59
+ ...shell
60
+ },
61
+ ref,
62
+ ) => (
63
+ <PrizmaTutorialScreen
64
+ ref={ref}
65
+ title={strings.upload.title}
66
+ subtitle={strings.upload.subtitle}
67
+ disclaimer={strings.upload.disclaimer}
68
+ ctaLabel={strings.upload.ctaLabel}
69
+ illustration={illustration ?? <DocumentCaptureIllustration />}
70
+ verifiedLabel={strings.verifiedLabel}
71
+ navLabel={strings.navLabel}
72
+ screenId={screenId}
73
+ overrides={overrides}
74
+ onAction={onAction}
75
+ {...shell}
76
+ />
77
+ ),
78
+ );
79
+ QualifiedSignatureUploadScreen.displayName = 'QualifiedSignatureUploadScreen';
80
+
81
+ export default QualifiedSignatureUploadScreen;
@@ -0,0 +1,211 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaTitle } from '@incodetech/prizma-core-web/title';
3
+ import { PrizmaButton } from '@incodetech/prizma-core-web/button';
4
+ import { PrizmaDisclaimer } from '@incodetech/prizma-core-web/disclaimer';
5
+ import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
6
+ import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
7
+ import { PrizmaScreenNav } from './ScreenNav';
8
+ import type {
9
+ PrizmaScreenActionHandler,
10
+ PrizmaScreenChromeProps,
11
+ PrizmaScreenOverrides,
12
+ } from './types';
13
+ import './ScreenLayout.css';
14
+
15
+ /** `loading` renders Core's spinner slot; the verdicts render its status mark. */
16
+ export type PrizmaResultStatus = 'loading' | 'success' | 'error' | 'warning' | 'none';
17
+
18
+ export interface PrizmaResultScreenProps
19
+ extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'>,
20
+ PrizmaScreenChromeProps {
21
+ /** The status mark above the title. `none` renders the title alone. */
22
+ status?: PrizmaResultStatus;
23
+ /**
24
+ * An optional block between the logo nav and the content — a journey stepper.
25
+ * Video Selfie draws Core's `PrizmaStepper` on EVERY screen of the flow, not
26
+ * just its camera stages, and it is the only chrome that tells the steps
27
+ * apart; the archetypes had a slot on E alone, so the rest of the module shed
28
+ * it (owner-reported 2026-08-19). Takes a `ReactNode` so the module supplies
29
+ * Core's own component — no primitive invented, and both offsets live once in
30
+ * `ScreenLayout.css` (`.prizma-screen-layout__progress`). Omit it and nothing
31
+ * renders, so every existing consumer is byte-identical. DEVIATIONS #VS-4.
32
+ */
33
+ progress?: ReactNode;
34
+ /** H2 result line ("Verification complete", "Face not aligned"). */
35
+ title: string;
36
+ /** Supporting copy below the title. */
37
+ subtitle?: string;
38
+ /**
39
+ * A non-status glyph ABOVE the title — Core's `PrizmaTitle.icon` allowlist is
40
+ * `status | spinner | none`, so anything else (a Wi-Fi mark on a connectivity
41
+ * error) is composed here rather than forced into the slot. DEVIATIONS #10.
42
+ */
43
+ glyph?: ReactNode;
44
+ /**
45
+ * Anything between the title block and the CTA band: a verdict Snackbar
46
+ * (Face Match), the captured document still (ID Capture), a hint list. Kept as
47
+ * a slot so one template covers every module's result screen instead of each
48
+ * hand-building the same skeleton.
49
+ */
50
+ children?: ReactNode;
51
+ /**
52
+ * Content that belongs INSIDE the CTA band, above the buttons — Face Match's
53
+ * verdict Snackbar sits there in Figma (Spacing/32 above the CTA, reached as
54
+ * the band's own 16 plus the slot's 16). Distinct from `children`, which sits
55
+ * with the centered title block.
56
+ */
57
+ bandContent?: ReactNode;
58
+ /**
59
+ * How the two CTAs sit. `stacked` (default) puts the secondary above the
60
+ * primary; `row` pairs them side by side, which is what ID Capture's review
61
+ * screen draws (Retake | Continue, ~166/163 in a 342 column).
62
+ */
63
+ ctaOrientation?: 'stacked' | 'row';
64
+ /** Legal/hint copy directly above the CTA. Supplies the designed 28px
65
+ * text→CTA gap through its own padding (DEVIATIONS #8). */
66
+ disclaimer?: string;
67
+ /** Primary CTA. Omit for result screens that only report. */
68
+ ctaLabel?: string;
69
+ /** Secondary CTA rendered BELOW the primary (#GEO-1). */
70
+ secondaryCtaLabel?: string;
71
+ /**
72
+ * A tertiary underlined LINK, rendered BELOW the button stack — the position
73
+ * archetype A uses. Video Selfie's `14.3`/`14.4` draw "Retry" first with
74
+ * "Quit process" underneath; with no slot here the module had to borrow
75
+ * `bandContent`, which renders ABOVE the buttons and put the link on the
76
+ * wrong side (owner QA 2026-08-19). `bandContent` returns to its intended
77
+ * job (Face Match's verdict Snackbar). DEVIATIONS #VS-17.
78
+ */
79
+ linkLabel?: string;
80
+ /** "verified by" attribution copy for the footer tag. */
81
+ verifiedLabel: string;
82
+ navLabel?: string;
83
+ screenId?: string;
84
+ overrides?: PrizmaScreenOverrides;
85
+ onAction?: PrizmaScreenActionHandler;
86
+ }
87
+
88
+ /**
89
+ * Archetype F — Result.
90
+ *
91
+ * The "centered status + CTA band + tag" recipe. It exists because three
92
+ * modules hand-built it independently — `FaceCaptureResultErrorScreen` (100
93
+ * lines), `FaceMatchResultScreen` (143) and `IdCaptureResultScreen` (198) —
94
+ * each differing only in what sat between the title and the CTA. Every
95
+ * hand-build was a fresh chance to get the spacing subtly wrong, which is
96
+ * exactly how the tag ended up at 0 on some screens and 16 on others.
97
+ *
98
+ * Layout: nav (or reserved row) → vertically centered title block → optional
99
+ * slot → CTA band (secondary, primary, disclaimer at a flat Spacing/16) →
100
+ * anchored footer tag. Every offset comes from ScreenLayout.css; this file
101
+ * declares none of its own.
102
+ *
103
+ * `ProcessingScreen` stays the pure spinner/no-CTA case; reach for this one as
104
+ * soon as a result screen needs a button.
105
+ */
106
+ export const PrizmaResultScreen = forwardRef<HTMLDivElement, PrizmaResultScreenProps>(
107
+ (
108
+ {
109
+ progress,
110
+ status = 'none',
111
+ title,
112
+ subtitle,
113
+ glyph,
114
+ children,
115
+ bandContent,
116
+ disclaimer,
117
+ ctaOrientation = 'stacked',
118
+ ctaLabel,
119
+ secondaryCtaLabel,
120
+ linkLabel,
121
+ verifiedLabel,
122
+ navLabel,
123
+ screenId,
124
+ showHeader = true,
125
+ showFooter = true,
126
+ overrides,
127
+ onAction,
128
+ ...shell
129
+ },
130
+ ref,
131
+ ) => (
132
+ <PrizmaScreenShell ref={ref} {...shell}>
133
+ <PrizmaScreenNav reserved={!showHeader} logo={overrides?.logo} navLabel={navLabel} />
134
+ {progress ? (
135
+ <div className="prizma-screen-layout__progress">{progress}</div>
136
+ ) : null}
137
+ <div className="prizma-screen-layout__content prizma-screen-layout__content--centered">
138
+ {glyph}
139
+ <PrizmaTitle
140
+ variant={overrides?.align === 'left' ? 'left' : 'centered'}
141
+ title={title}
142
+ showSubtitle={Boolean(subtitle)}
143
+ subtitle={subtitle}
144
+ icon={
145
+ status === 'loading'
146
+ ? { type: 'spinner' }
147
+ : status === 'none'
148
+ ? { type: 'none' }
149
+ : { type: 'status', status }
150
+ }
151
+ />
152
+ {children}
153
+ </div>
154
+ {ctaLabel || secondaryCtaLabel || linkLabel || disclaimer || bandContent ? (
155
+ <div className="prizma-screen-layout__band prizma-screen-layout__band--result">
156
+ {bandContent ? (
157
+ <div className="prizma-screen-layout__band__content">{bandContent}</div>
158
+ ) : null}
159
+ {disclaimer ? <PrizmaDisclaimer text={disclaimer} /> : null}
160
+ <div
161
+ className={
162
+ ctaOrientation === 'row'
163
+ ? 'prizma-screen-layout__band__ctas prizma-screen-layout__band__ctas--row'
164
+ : 'prizma-screen-layout__band__ctas'
165
+ }
166
+ >
167
+ {/* THE PRIMARY ALWAYS SITS ABOVE THE SECONDARY (owner rule
168
+ 2026-08-19, DEVIATIONS #GEO-1). Not a per-screen choice and not
169
+ a prop — a screen never picks its own button order. `row` pairs
170
+ them side by side instead, where the rule does not apply. */}
171
+ {ctaLabel ? (
172
+ <PrizmaButton
173
+ variant="primary"
174
+ size="L"
175
+ onClick={() => onAction?.({ type: 'cta', screenId })}
176
+ >
177
+ {ctaLabel}
178
+ </PrizmaButton>
179
+ ) : null}
180
+ {secondaryCtaLabel ? (
181
+ <PrizmaButton
182
+ variant="secondary"
183
+ size="L"
184
+ onClick={() => onAction?.({ type: 'secondary', screenId })}
185
+ >
186
+ {secondaryCtaLabel}
187
+ </PrizmaButton>
188
+ ) : null}
189
+ {linkLabel ? (
190
+ <PrizmaButton
191
+ variant="tertiary-link"
192
+ size="L"
193
+ onClick={() => onAction?.({ type: 'tertiary', screenId })}
194
+ >
195
+ {linkLabel}
196
+ </PrizmaButton>
197
+ ) : null}
198
+ </div>
199
+ </div>
200
+ ) : null}
201
+ {showFooter ? (
202
+ <div className="prizma-screen-layout__footer">
203
+ <PrizmaTag label={verifiedLabel} />
204
+ </div>
205
+ ) : null}
206
+ </PrizmaScreenShell>
207
+ ),
208
+ );
209
+ PrizmaResultScreen.displayName = 'PrizmaResultScreen';
210
+
211
+ export default PrizmaResultScreen;
@@ -0,0 +1,196 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaTitle } from '@incodetech/prizma-core-web/title';
3
+ import { PrizmaButtonGroup } from '@incodetech/prizma-core-web/button-group';
4
+ import { PrizmaLoadingBar } from '@incodetech/prizma-core-web/loading-bar';
5
+ import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
6
+ import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
7
+ import { PrizmaScreenNav } from './ScreenNav';
8
+ import type {
9
+ PrizmaScreenActionHandler,
10
+ PrizmaScreenChromeProps,
11
+ PrizmaScreenOverrides,
12
+ } from './types';
13
+ import './ScreenLayout.css';
14
+
15
+ /**
16
+ * The three stages every captured-media review section shares. Identical
17
+ * skeleton — only the header block (Title vs loading bar), the media's own
18
+ * state and the presence of the CTA row change. Named to match the modules'
19
+ * own stage axis (`DocumentCaptureConfirmStage`, Video Selfie's review step).
20
+ */
21
+ export type PrizmaReviewStage = 'review' | 'analyzing' | 'success';
22
+
23
+ export interface PrizmaReviewScreenProps
24
+ extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'>,
25
+ Pick<PrizmaScreenChromeProps, 'showHeader' | 'showFooter'> {
26
+ /** Which review stage to render. Default `review`. */
27
+ stage?: PrizmaReviewStage;
28
+ /** H2 review/base title ("Review your document"). */
29
+ title: string;
30
+ /** Supporting copy under the title — drawn on `review` only (Figma). */
31
+ subtitle?: string;
32
+ /** Title shown on `success`; falls back to `title` when omitted. */
33
+ successTitle?: string;
34
+ /** Caption inside the loading bar on `analyzing`. */
35
+ analyzingLabel?: string;
36
+ /**
37
+ * Which Core `PrizmaLoadingBar` treatment the `analyzing` stage runs — the
38
+ * captured-photo review shows the `analyzing` sweep, the uploaded-file review
39
+ * shows `uploading`. Default `analyzing`.
40
+ */
41
+ analyzingState?: 'analyzing' | 'uploading';
42
+ /** Loading-bar progress on `analyzing`, 0–100. */
43
+ progress?: number;
44
+ /**
45
+ * The flexing captured-media slot: a `PrizmaIdCapture` still, an uploaded-file
46
+ * preview card, a portrait review. Kept a slot so one template serves every
47
+ * module's review screen — the module supplies the media in the right state
48
+ * for the stage; the archetype owns every offset around it.
49
+ */
50
+ children: ReactNode;
51
+ /**
52
+ * Extra class on the media stage for per-media adapters that Core does not
53
+ * own (an uploaded-file column inset, the light-surface encrypted re-tint).
54
+ * These shape CONTENT, never archetype spacing — the header, stage flex, CTA
55
+ * offset and footer all come from ScreenLayout.css regardless.
56
+ */
57
+ stageClassName?: string;
58
+ /** Primary CTA — the forward action. Drawn on `review` and `success`. */
59
+ primaryLabel: string;
60
+ /** Secondary CTA ("Replace" / "Retake") — drawn on `review` only. */
61
+ secondaryLabel?: string;
62
+ /** "verified by" attribution copy for the footer tag. */
63
+ verifiedLabel: string;
64
+ navLabel?: string;
65
+ screenId?: string;
66
+ overrides?: PrizmaScreenOverrides;
67
+ onAction?: PrizmaScreenActionHandler;
68
+ }
69
+
70
+ /**
71
+ * Archetype H — Review (captured-media confirmation).
72
+ *
73
+ * The "header → flexing captured-media stage → CTA band → tag" recipe, with a
74
+ * `review → analyzing → success` stage axis. It exists because two Document
75
+ * Capture screens hand-built it independently (`DocumentCaptureConfirmImage`,
76
+ * `DocumentCaptureConfirmUpload`) with their own three-band arithmetic in
77
+ * `DocumentCaptureLayout.css`, and Video Selfie's review step needs the same
78
+ * skeleton — a captured still under a title, confirmed or replaced.
79
+ *
80
+ * It is NOT archetype F (Result): F centres a small status + CTA block, while a
81
+ * review TOP-aligns the header over a large media stage that flexes to fill the
82
+ * middle, and adds an in-flight `analyzing` state (the Title swaps for Core's
83
+ * `PrizmaLoadingBar` and the CTA row drops). `IdCaptureResultScreen`'s review
84
+ * verdict stays on F — its small on-surface still fits F's centred column, and
85
+ * splitting one file across two archetypes buys nothing (owner call 2026-08-18).
86
+ *
87
+ * Layout (measured off the Document Capture 390 sections, DEVIATIONS #DC-22/24):
88
+ * no logo nav → header block (Title or loading bar) → Spacing/32 → media stage
89
+ * (flexes, centred) → Spacing/24 → CTA band (`review`/`success`) → anchored
90
+ * VerifiedTag. `analyzing` drops the band and the stage carries the Spacing/24
91
+ * to the bottom itself. Every offset lives in ScreenLayout.css; this file
92
+ * declares none of its own.
93
+ */
94
+ export const PrizmaReviewScreen = forwardRef<HTMLDivElement, PrizmaReviewScreenProps>(
95
+ (
96
+ {
97
+ stage = 'review',
98
+ title,
99
+ subtitle,
100
+ successTitle,
101
+ analyzingLabel,
102
+ analyzingState = 'analyzing',
103
+ progress = 0,
104
+ children,
105
+ stageClassName,
106
+ primaryLabel,
107
+ secondaryLabel,
108
+ verifiedLabel,
109
+ navLabel,
110
+ showHeader,
111
+ showFooter = true,
112
+ screenId,
113
+ overrides,
114
+ onAction,
115
+ ...shell
116
+ },
117
+ ref,
118
+ ) => {
119
+ // Review screens are the capture family: no logo unless the client opts in
120
+ // by supplying one (types.ts chrome contract). `showHeader` still wins when
121
+ // set explicitly.
122
+ const withNav = showHeader ?? Boolean(overrides?.logo);
123
+ const showSecondary = stage === 'review' && Boolean(secondaryLabel);
124
+ const showBand = stage !== 'analyzing' && Boolean(primaryLabel || secondaryLabel);
125
+
126
+ return (
127
+ <PrizmaScreenShell ref={ref} {...shell}>
128
+ {withNav ? (
129
+ <PrizmaScreenNav logo={overrides?.logo} navLabel={navLabel} />
130
+ ) : null}
131
+ <div
132
+ className={[
133
+ 'prizma-screen-layout__content',
134
+ withNav ? '' : 'prizma-screen-layout__content--no-nav',
135
+ ]
136
+ .filter(Boolean)
137
+ .join(' ')}
138
+ >
139
+ <div className="prizma-screen-layout__review-header">
140
+ {stage === 'analyzing' ? (
141
+ <div className="prizma-screen-layout__review-loading">
142
+ <PrizmaLoadingBar
143
+ state={analyzingState}
144
+ progress={progress}
145
+ title={analyzingLabel}
146
+ />
147
+ </div>
148
+ ) : (
149
+ <PrizmaTitle
150
+ variant={overrides?.align === 'left' ? 'left' : 'centered'}
151
+ title={stage === 'success' ? successTitle ?? title : title}
152
+ showSubtitle={stage === 'review' && Boolean(subtitle)}
153
+ subtitle={subtitle}
154
+ icon={stage === 'success' ? { type: 'status', status: 'success' } : undefined}
155
+ />
156
+ )}
157
+ </div>
158
+
159
+ <div
160
+ className={[
161
+ 'prizma-screen-layout__review-stage',
162
+ stage === 'analyzing' ? 'prizma-screen-layout__review-stage--flush' : '',
163
+ stageClassName ?? '',
164
+ ]
165
+ .filter(Boolean)
166
+ .join(' ')}
167
+ >
168
+ {children}
169
+ </div>
170
+
171
+ {showBand ? (
172
+ <div className="prizma-screen-layout__band prizma-screen-layout__band--review">
173
+ <PrizmaButtonGroup
174
+ orientation="horizontal-v1"
175
+ showSecondary={showSecondary}
176
+ primaryLabel={primaryLabel}
177
+ onPrimaryClick={() => onAction?.({ type: 'cta', screenId })}
178
+ secondaryLabel={secondaryLabel}
179
+ onSecondaryClick={() => onAction?.({ type: 'secondary', screenId })}
180
+ />
181
+ </div>
182
+ ) : null}
183
+
184
+ {showFooter ? (
185
+ <div className="prizma-screen-layout__band__tag">
186
+ <PrizmaTag label={verifiedLabel} />
187
+ </div>
188
+ ) : null}
189
+ </div>
190
+ </PrizmaScreenShell>
191
+ );
192
+ },
193
+ );
194
+ PrizmaReviewScreen.displayName = 'PrizmaReviewScreen';
195
+
196
+ export default PrizmaReviewScreen;