@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,76 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import { PrizmaIllustrationNfcScan } from '@incodetech/prizma-core-web/illustration-nfc-scan';
3
+ import { PrizmaTutorialScreen, type PrizmaTutorialScreenProps } from './TutorialScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { NfcDocumentType, NfcStrings } from './NfcStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ export interface NfcTutorialScreenProps
9
+ extends Omit<
10
+ PrizmaTutorialScreenProps,
11
+ 'title' | 'subtitle' | 'ctaLabel' | 'illustration' | 'verifiedLabel' | 'navLabel'
12
+ > {
13
+ /** Module copy — this screen reads the `tutorial` slice. */
14
+ strings: NfcStrings;
15
+ /** Which purple section: `nfc.tutorial.passport` or `nfc.tutorial.id`. */
16
+ documentType?: NfcDocumentType;
17
+ /** Replace Core's NFC artwork (hosts that ship their own document art). */
18
+ illustration?: ReactNode;
19
+ screenId?: string;
20
+ overrides?: PrizmaScreenOverrides;
21
+ onAction?: PrizmaScreenActionHandler;
22
+ }
23
+
24
+ /**
25
+ * NFC — "Let's scan your passport chip" / "Read the chip on the ID", the
26
+ * instruction screen the CTA starts the read from. Purple sections
27
+ * `nfc.tutorial.passport` (19974:80984) and `nfc.tutorial.id` (19978:115144),
28
+ * on the Tutorial archetype (GUIDELINES.md §6-A).
29
+ *
30
+ * The centrepiece is Core's `PrizmaIllustrationNfcScan` — the looping
31
+ * phone-approaches-the-chip composition whose Figma frames ARE the two
32
+ * `iOS Animation` / `Android Animation` layers these sections draw. The screen
33
+ * supplies no artwork of its own.
34
+ *
35
+ * This is also what the four `nfc.scanning.*ready` sections show: they are this
36
+ * exact screen with the platform's NFC sheet presented over it, so they need no
37
+ * screen of their own (see `NfcScanningScreen`).
38
+ */
39
+ export const NfcTutorialScreen = forwardRef<HTMLDivElement, NfcTutorialScreenProps>(
40
+ (
41
+ {
42
+ strings,
43
+ documentType = 'passport',
44
+ illustration,
45
+ screenId = `nfc-tutorial-${documentType}`,
46
+ overrides,
47
+ onAction,
48
+ ...shell
49
+ },
50
+ ref,
51
+ ) => (
52
+ <PrizmaTutorialScreen
53
+ ref={ref}
54
+ title={strings.tutorial[documentType].title}
55
+ subtitle={strings.tutorial[documentType].subtitle}
56
+ ctaLabel={strings.tutorial.ctaLabel}
57
+ illustration={
58
+ illustration ?? (
59
+ <PrizmaIllustrationNfcScan
60
+ type={documentType}
61
+ ariaLabel={strings.tutorial.illustrationLabel}
62
+ />
63
+ )
64
+ }
65
+ verifiedLabel={strings.verifiedLabel}
66
+ navLabel={strings.navLabel}
67
+ screenId={screenId}
68
+ overrides={overrides}
69
+ onAction={onAction}
70
+ {...shell}
71
+ />
72
+ ),
73
+ );
74
+ NfcTutorialScreen.displayName = 'NfcTutorialScreen';
75
+
76
+ export default NfcTutorialScreen;
@@ -0,0 +1,90 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { PermissionsStrings } from './PermissionsStrings';
5
+ import './ScreenLayout.css';
6
+
7
+ export interface PermissionsAllowScreenProps
8
+ extends Omit<
9
+ PrizmaResultScreenProps,
10
+ | 'status'
11
+ | 'title'
12
+ | 'subtitle'
13
+ | 'glyph'
14
+ | 'ctaLabel'
15
+ | 'linkLabel'
16
+ | 'verifiedLabel'
17
+ | 'navLabel'
18
+ > {
19
+ /** Family copy — this screen reads the `allow` slice. */
20
+ strings: PermissionsStrings;
21
+ screenId?: string;
22
+ overrides?: PrizmaScreenOverrides;
23
+ onAction?: PrizmaScreenActionHandler;
24
+ }
25
+
26
+ /**
27
+ * Permissions — "Allow Incode to access your camera", built on the Result
28
+ * archetype (GUIDELINES.md §6-F, `PrizmaResultScreen`).
29
+ *
30
+ * Figma: `1-3-2-id-allow-camera` of the `Permissions` section
31
+ * (qGJjfL4O0JSjz1x4tOjJn8, 3:1193). The sibling of
32
+ * `PermissionsRequiredScreen`, and the reason they are two screens rather than
33
+ * one with a variant: this frame states the ask in a centred title + supporting
34
+ * line, that one argues it with a list of reasons hung under the title. Result
35
+ * centres its column, List hangs it from the top — different archetypes, so
36
+ * different screens.
37
+ *
38
+ * `1-3-2-id-allow-camera-quit-process` is the SAME screen with an iOS confirm
39
+ * alert layered over it — an OS surface, not a second Prizma screen (see
40
+ * `PermissionsStrings.ts`).
41
+ *
42
+ * `showHeader={false}` keeps the section's logo-free chrome (the flow has not
43
+ * started) with the nav row still reserved.
44
+ *
45
+ * TWO things Figma draws that this screen does not, both reported rather than
46
+ * worked around:
47
+ * - **The filled amber disc.** Core renders the canonical OUTLINE warning mark
48
+ * (icon-outline sweep, DEVIATIONS #15).
49
+ * - **"Quit process" above the CTA.** Archetype F renders its tertiary link
50
+ * BELOW the button stack (`ResultScreen.tsx`), so this screen ships inverted
51
+ * against its frame. The archetype owns the order and no screen re-declares
52
+ * it — F needs a `ctaOrder` slot alongside the `ctaOrientation` it already
53
+ * has, exactly as Geolocation escalated for the same reason. Borrowing
54
+ * `bandContent` to fake the position is the workaround #VS-17 rejected.
55
+ */
56
+ export const PermissionsAllowScreen = forwardRef<
57
+ HTMLDivElement,
58
+ PermissionsAllowScreenProps
59
+ >(
60
+ (
61
+ {
62
+ strings,
63
+ screenId = 'permissions-allow',
64
+ showHeader = false,
65
+ overrides,
66
+ onAction,
67
+ ...shell
68
+ },
69
+ ref,
70
+ ) => (
71
+ <PrizmaResultScreen
72
+ ref={ref}
73
+ showHeader={showHeader}
74
+ status="warning"
75
+ title={strings.allow.title}
76
+ subtitle={strings.allow.subtitle}
77
+ ctaLabel={strings.allow.ctaLabel}
78
+ linkLabel={strings.allow.quitLabel}
79
+ verifiedLabel={strings.verifiedLabel}
80
+ navLabel={strings.navLabel}
81
+ screenId={screenId}
82
+ overrides={overrides}
83
+ onAction={onAction}
84
+ {...shell}
85
+ />
86
+ ),
87
+ );
88
+ PermissionsAllowScreen.displayName = 'PermissionsAllowScreen';
89
+
90
+ export default PermissionsAllowScreen;
@@ -0,0 +1,158 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import {
3
+ IconArrowLeft,
4
+ IconCamera,
5
+ IconFolderFileOpen,
6
+ IconLock,
7
+ IconLockCheck,
8
+ IconMobilePhone,
9
+ IconNumberedList,
10
+ IconTextAi,
11
+ } from '@incodetech/prizma-core-icons';
12
+ import { PrizmaCardListCommonIssues } from '@incodetech/prizma-core-web/card-list';
13
+ import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
14
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
15
+ import type {
16
+ PermissionsBrowser,
17
+ PermissionsStepKind,
18
+ PermissionsStrings,
19
+ } from './PermissionsStrings';
20
+ import './ScreenLayout.css';
21
+
22
+ /**
23
+ * Step kind → canonical bank glyph. ONE map, in one place, for the same reason
24
+ * Geolocation's exists (`GeolocationBrowserStepsScreen`) and Document Capture's
25
+ * before it (DEVIATIONS #DC-23): Figma leads every row with OS/browser chrome
26
+ * the Prizma bank does not ship — a ⋮ overflow menu, a gear tile, a permission
27
+ * toggle, Safari's "AA" control and each browser's own logo on the last row.
28
+ * Shipping those would mean inventing primitives and bundling brand rasters,
29
+ * both forbidden (rule 1, GUIDELINES §10), so each row takes the nearest
30
+ * canonical glyph:
31
+ *
32
+ * settings → IconLock site settings sit behind the address-bar lock
33
+ * browser → IconTextAi Safari's "AA" is the address-bar text control
34
+ * menu → IconNumberedList the ⋮ overflow opens a menu list
35
+ * permissions → IconLockCheck a granted permission
36
+ * camera → IconCamera exact
37
+ * toggle → IconLockCheck the Allow/Ask switch
38
+ * device → IconMobilePhone the device's Settings app
39
+ * apps → IconFolderFileOpen the app list / app drawer
40
+ * return → IconArrowLeft "return here and refresh" (Figma draws the
41
+ * browser's own logo — never bundled)
42
+ *
43
+ * This is the SAME substitution table Geolocation already escalated to the
44
+ * owner, extended by `camera`/`toggle`/`browser` for this family. Mint the
45
+ * glyphs or bless the substitutions — one decision covers both families.
46
+ */
47
+ const STEP_ICONS: Record<PermissionsStepKind, ReactNode> = {
48
+ settings: <IconLock size="m" />,
49
+ browser: <IconTextAi size="m" />,
50
+ menu: <IconNumberedList size="m" />,
51
+ permissions: <IconLockCheck size="m" />,
52
+ camera: <IconCamera size="m" />,
53
+ toggle: <IconLockCheck size="m" />,
54
+ device: <IconMobilePhone size="m" />,
55
+ apps: <IconFolderFileOpen size="m" />,
56
+ return: <IconArrowLeft size="m" />,
57
+ };
58
+
59
+ export interface PermissionsBrowserStepsScreenProps
60
+ extends Omit<
61
+ PrizmaListScreenProps,
62
+ | 'status'
63
+ | 'title'
64
+ | 'subtitle'
65
+ | 'children'
66
+ | 'ctaLabel'
67
+ | 'linkLabel'
68
+ | 'verifiedLabel'
69
+ | 'navLabel'
70
+ > {
71
+ /** Family copy — this screen reads the `browserSteps` slice. */
72
+ strings: PermissionsStrings;
73
+ /** Which browser's steps to show. Default `safariIos`. */
74
+ browser?: PermissionsBrowser;
75
+ screenId?: string;
76
+ overrides?: PrizmaScreenOverrides;
77
+ onAction?: PrizmaScreenActionHandler;
78
+ }
79
+
80
+ /**
81
+ * Permissions — "Follow the next steps to allow Incode to access your camera",
82
+ * built on the List archetype (GUIDELINES.md §6-G, `PrizmaListScreen`).
83
+ *
84
+ * Figma: `1-4-2-id` of the `Permissions` section, plus the four
85
+ * `Android browsers` frames of the Web full-flow board (4:8159 — Chrome,
86
+ * Firefox, Samsung Internet, Opera). ONE screen for all five: they draw the
87
+ * identical skeleton — title block → a step list filling the middle → the
88
+ * refresh CTA — and differ only in the rows, because re-enabling the camera is
89
+ * a different journey in each browser. Five files would have been five chances
90
+ * to drift.
91
+ *
92
+ * The rows are Core's `PrizmaCardListCommonIssues` verbatim; only the leading
93
+ * glyph is chosen here, from the canonical bank (see `STEP_ICONS`).
94
+ *
95
+ * The title block is LEFT-aligned for this whole family. Every frame starts the
96
+ * two-line headline flush at the gutter over left-led step rows; a centred
97
+ * headline above a left-aligned list reads as a mistake. The screen therefore
98
+ * DEFAULTS the archetype's own `align` override to `left` rather than declaring
99
+ * any alignment of its own, and a host that passes `overrides.align` still wins.
100
+ *
101
+ * One thing Figma draws that this screen does not: **mixed weight inside a
102
+ * row.** Figma bolds the actionable fragment ("Tap **Three dots** in the top
103
+ * right"); Core's row `title` is a plain `string`, so the sentence renders in
104
+ * one weight. Core request already open from Geolocation: a `ReactNode` title.
105
+ */
106
+ export const PermissionsBrowserStepsScreen = forwardRef<
107
+ HTMLDivElement,
108
+ PermissionsBrowserStepsScreenProps
109
+ >(
110
+ (
111
+ {
112
+ strings,
113
+ browser = 'safariIos',
114
+ screenId = `permissions-browser-steps-${browser}`,
115
+ showHeader = false,
116
+ overrides,
117
+ onAction,
118
+ ...shell
119
+ },
120
+ ref,
121
+ ) => {
122
+ const slice = strings.browserSteps.browsers[browser];
123
+ /* Family default, not a local re-declaration: the archetype already owns a
124
+ left variant, so the screen only picks which of ITS variants this family
125
+ uses. An explicit `overrides.align` from the host still wins. */
126
+ const alignedOverrides: PrizmaScreenOverrides = {
127
+ ...overrides,
128
+ align: overrides?.align ?? 'left',
129
+ };
130
+
131
+ return (
132
+ <PrizmaListScreen
133
+ ref={ref}
134
+ showHeader={showHeader}
135
+ title={strings.browserSteps.title}
136
+ subtitle={slice?.label}
137
+ ctaLabel={strings.browserSteps.ctaLabel}
138
+ verifiedLabel={strings.verifiedLabel}
139
+ navLabel={strings.navLabel}
140
+ screenId={screenId}
141
+ overrides={alignedOverrides}
142
+ onAction={onAction}
143
+ {...shell}
144
+ >
145
+ <PrizmaCardListCommonIssues
146
+ items={(slice?.steps ?? []).map((step) => ({
147
+ icon: STEP_ICONS[step.kind],
148
+ title: step.label,
149
+ showSubtitle: false,
150
+ }))}
151
+ />
152
+ </PrizmaListScreen>
153
+ );
154
+ },
155
+ );
156
+ PermissionsBrowserStepsScreen.displayName = 'PermissionsBrowserStepsScreen';
157
+
158
+ export default PermissionsBrowserStepsScreen;
@@ -0,0 +1,118 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import {
3
+ IconApproval,
4
+ IconBankCardSearch,
5
+ IconCamera,
6
+ IconGeoPin,
7
+ IconMicrophone,
8
+ } from '@incodetech/prizma-core-icons';
9
+ import { PrizmaCardListCommonIssues } from '@incodetech/prizma-core-web/card-list';
10
+ import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
11
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
12
+ import type { PermissionsCapability, PermissionsStrings } from './PermissionsStrings';
13
+ import './ScreenLayout.css';
14
+
15
+ /**
16
+ * The reason rows' leading glyphs, in the order the frame lists them: the
17
+ * capability itself · what it proves · that it is required. Canonical bank only
18
+ * (§10). The first row is keyed to the capability so a microphone prompt does
19
+ * not lead with a camera.
20
+ */
21
+ const LEAD_ICON: Record<PermissionsCapability, ReactNode> = {
22
+ camera: <IconCamera size="m" />,
23
+ microphone: <IconMicrophone size="m" />,
24
+ location: <IconGeoPin size="m" />,
25
+ };
26
+
27
+ const TRAILING_ICONS = [
28
+ <IconBankCardSearch key="authenticity" size="m" />,
29
+ <IconApproval key="required" size="m" />,
30
+ ];
31
+
32
+ export interface PermissionsRequiredScreenProps
33
+ extends Omit<
34
+ PrizmaListScreenProps,
35
+ | 'status'
36
+ | 'title'
37
+ | 'subtitle'
38
+ | 'children'
39
+ | 'ctaLabel'
40
+ | 'linkLabel'
41
+ | 'verifiedLabel'
42
+ | 'navLabel'
43
+ > {
44
+ /** Family copy — this screen reads the `required` slice. */
45
+ strings: PermissionsStrings;
46
+ /** Which capability is being asked for. Keys the first row's glyph. Default `camera`. */
47
+ capability?: PermissionsCapability;
48
+ screenId?: string;
49
+ overrides?: PrizmaScreenOverrides;
50
+ onAction?: PrizmaScreenActionHandler;
51
+ }
52
+
53
+ /**
54
+ * Permissions — "Camera permission is required", built on the List archetype
55
+ * (GUIDELINES.md §6-G, `PrizmaListScreen`).
56
+ *
57
+ * Figma: `1-3-2-id` of the `Permissions` section (qGJjfL4O0JSjz1x4tOjJn8,
58
+ * 3:1193). This is the screen a user lands on after refusing the browser's own
59
+ * prompt: a warning mark, the headline, three rows saying what the capability
60
+ * is for, a tertiary "quit" link and the ask.
61
+ *
62
+ * `1-3-2-id-quit-process` is the SAME screen with an iOS confirm alert layered
63
+ * over it — an OS surface, not a second Prizma screen, so it is not built here
64
+ * (see `PermissionsStrings.ts`).
65
+ *
66
+ * `showHeader={false}` keeps the section's logo-free chrome — the flow has not
67
+ * started — with the nav row still reserved so nothing shifts on the next
68
+ * screen.
69
+ *
70
+ * Figma draws the status mark as a filled amber disc; Core renders the
71
+ * canonical OUTLINE warning mark (icon-outline sweep, DEVIATIONS #15). The
72
+ * generic file is one sweep behind, exactly as the module files were.
73
+ */
74
+ export const PermissionsRequiredScreen = forwardRef<
75
+ HTMLDivElement,
76
+ PermissionsRequiredScreenProps
77
+ >(
78
+ (
79
+ {
80
+ strings,
81
+ capability = 'camera',
82
+ screenId = 'permissions-required',
83
+ showHeader = false,
84
+ overrides,
85
+ onAction,
86
+ ...shell
87
+ },
88
+ ref,
89
+ ) => (
90
+ <PrizmaListScreen
91
+ ref={ref}
92
+ showHeader={showHeader}
93
+ status="warning"
94
+ title={strings.required.title}
95
+ subtitle={strings.required.description}
96
+ ctaLabel={strings.required.ctaLabel}
97
+ linkLabel={strings.required.quitLabel}
98
+ verifiedLabel={strings.verifiedLabel}
99
+ navLabel={strings.navLabel}
100
+ screenId={screenId}
101
+ overrides={overrides}
102
+ onAction={onAction}
103
+ {...shell}
104
+ >
105
+ <PrizmaCardListCommonIssues
106
+ items={strings.required.rows.map((row, i) => ({
107
+ icon: i === 0 ? LEAD_ICON[capability] : TRAILING_ICONS[(i - 1) % TRAILING_ICONS.length],
108
+ title: row.title,
109
+ subtitle: row.description,
110
+ showSubtitle: Boolean(row.description),
111
+ }))}
112
+ />
113
+ </PrizmaListScreen>
114
+ ),
115
+ );
116
+ PermissionsRequiredScreen.displayName = 'PermissionsRequiredScreen';
117
+
118
+ export default PermissionsRequiredScreen;
@@ -0,0 +1,129 @@
1
+ // Permission screens — copy contract for the GENERIC family.
2
+ //
3
+ // Figma: `Module Generic Screens` (qGJjfL4O0JSjz1x4tOjJn8), section
4
+ // `Permissions` (3:1193), with the two full-flow frames `🍎 iOS` (3:7788) and
5
+ // `🌐 Web` (3:620).
6
+ //
7
+ // These screens are not one module's. Every module that reaches for the camera
8
+ // — ID Capture, Face Capture, Document Capture, Video Selfie — shows the SAME
9
+ // three surfaces when the browser or the OS says no, which is why the file that
10
+ // documents them is called "Generic Screens" and why they live here rather than
11
+ // under a module prefix. `IdCapturePermissionScreen` predates this family and
12
+ // is the ID Capture-flavoured copy of the same skeleton; it stays where it is so
13
+ // nothing that imports it breaks (DEVIATIONS #IDC-26).
14
+ //
15
+ // The section's seven frames collapse onto THREE built screens:
16
+ //
17
+ // 1-3-2-id → PermissionsRequiredScreen (reason rows)
18
+ // 1-3-2-id-allow-camera → PermissionsAllowScreen (subtitle)
19
+ // 1-4-2-id (+ 4 Android siblings) → PermissionsBrowserStepsScreen
20
+ //
21
+ // The other four are OS chrome and are NOT built:
22
+ //
23
+ // 1-3-1-id-permission-modal the browser's own "Allow camera access" sheet
24
+ // 1-4-1-id the iOS "…Would Like to Access the Camera" alert
25
+ // 1-3-2-id-quit-process an iOS confirm alert layered over 1-3-2-id
26
+ // 1-3-2-id-allow-camera-quit the same alert layered over the allow screen
27
+ //
28
+ // None of them is a Prizma surface: their chrome does not exist in Core and
29
+ // rebuilding it would mean inventing primitives and shipping platform rasters,
30
+ // both forbidden (rule 1, GUIDELINES §10). Same call as Document Capture's iOS
31
+ // action sheets (#DC-20) and Geolocation's system alert. Core Lab draws them as
32
+ // dashed OS mocks on the flow instead, so the chain still reads.
33
+ //
34
+ // No hardcoded English anywhere in a screen: every visible string arrives here,
35
+ // so a host's locale pack drives the family.
36
+
37
+ /**
38
+ * The capability being asked for. The Figma section is drawn for the camera
39
+ * throughout, but the skeleton is identical for a microphone or a location
40
+ * prompt — so the screens never name the device themselves, the copy does, and
41
+ * this type exists only to key the reason-row glyphs.
42
+ */
43
+ export type PermissionsCapability = 'camera' | 'microphone' | 'location';
44
+
45
+ /** A single reason row — Core `PrizmaCardListCommonIssues` rows. */
46
+ export interface PermissionsReasonRow {
47
+ title: string;
48
+ description?: string;
49
+ }
50
+
51
+ /**
52
+ * Which browser's "turn it back on" journey to show. `safariIos` is the base
53
+ * `1-4-2-id` frame; the other four are the `Android browsers` section of the
54
+ * Web flow (4:8159). Re-enabling a permission is a different journey in every
55
+ * browser, which is why one screen carries five step lists rather than five
56
+ * screens carrying one skeleton.
57
+ */
58
+ export type PermissionsBrowser =
59
+ | 'safariIos'
60
+ | 'chromeAndroid'
61
+ | 'firefoxAndroid'
62
+ | 'samsungAndroid'
63
+ | 'operaAndroid';
64
+
65
+ /**
66
+ * Step kind → canonical bank glyph, resolved in
67
+ * `PermissionsBrowserStepsScreen`. Figma leads every row with OS/browser chrome
68
+ * the Prizma bank does not ship — a ⋮ overflow, a gear tile, a permission
69
+ * toggle, and each browser's own logo on the last row. Shipping those would
70
+ * mean inventing primitives and bundling brand rasters, so each row takes the
71
+ * nearest canonical glyph. Same substitution table Geolocation already
72
+ * escalated (`GeolocationBrowserStepsScreen`); this family reuses it rather
73
+ * than inventing a second one.
74
+ */
75
+ export type PermissionsStepKind =
76
+ | 'settings'
77
+ | 'browser'
78
+ | 'menu'
79
+ | 'permissions'
80
+ | 'camera'
81
+ | 'toggle'
82
+ | 'device'
83
+ | 'apps'
84
+ | 'return';
85
+
86
+ export interface PermissionsStep {
87
+ kind: PermissionsStepKind;
88
+ label: string;
89
+ }
90
+
91
+ export interface PermissionsBrowserSteps {
92
+ /** Names the browser under the headline. Figma labels the section, not the
93
+ * screen; the label keeps five otherwise near-identical cards apart. */
94
+ label: string;
95
+ steps: PermissionsStep[];
96
+ }
97
+
98
+ export interface PermissionsStrings {
99
+ /** Accessible name for the logo nav region (i18n — no baked-in English). */
100
+ navLabel?: string;
101
+ /** "verified by" attribution copy for the footer tag. */
102
+ verifiedLabel: string;
103
+
104
+ /** `1-3-2-id` — the permission was refused and the flow explains why it needs it. */
105
+ required: {
106
+ title: string;
107
+ /** Optional line under the title. Figma's frame draws the rows alone. */
108
+ description?: string;
109
+ rows: PermissionsReasonRow[];
110
+ /** Tertiary link — "Quit process". */
111
+ quitLabel: string;
112
+ ctaLabel: string;
113
+ };
114
+
115
+ /** `1-3-2-id-allow-camera` — the first ask, before any refusal. */
116
+ allow: {
117
+ title: string;
118
+ subtitle?: string;
119
+ quitLabel: string;
120
+ ctaLabel: string;
121
+ };
122
+
123
+ /** `1-4-2-id` + the four `Android browsers` siblings. */
124
+ browserSteps: {
125
+ title: string;
126
+ ctaLabel: string;
127
+ browsers: Record<PermissionsBrowser, PermissionsBrowserSteps>;
128
+ };
129
+ }
@@ -0,0 +1,104 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { IconWifiOff } from '@incodetech/prizma-core-icons';
3
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { PhoneInputErrorVariant, PhoneInputStrings } from './PhoneInputStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ export interface PhoneInputErrorScreenProps
9
+ extends Omit<
10
+ PrizmaResultScreenProps,
11
+ | 'status'
12
+ | 'title'
13
+ | 'subtitle'
14
+ | 'glyph'
15
+ | 'ctaLabel'
16
+ | 'verifiedLabel'
17
+ | 'navLabel'
18
+ > {
19
+ /** Module copy — this screen reads the `error` slice its `variant` names. */
20
+ strings: PhoneInputStrings;
21
+ /** Which purple `phoneNumber.error.*` section to render. Default `tryAgain`. */
22
+ variant?: PhoneInputErrorVariant;
23
+ screenId?: string;
24
+ overrides?: PrizmaScreenOverrides;
25
+ onAction?: PrizmaScreenActionHandler;
26
+ }
27
+
28
+ /**
29
+ * Phone Input — the error verdicts, built on the Result archetype
30
+ * (GUIDELINES.md §6-F, `PrizmaResultScreen`).
31
+ *
32
+ * ONE screen for the three purple `phoneNumber.error.*` sections:
33
+ * - `tryAgain` — the code could not be sent, retry
34
+ * - `unknown` — `phonenumber.error.unknown`, the generic failure
35
+ * - `noNetwork` — the connectivity family every module carries
36
+ *
37
+ * `noNetwork` KEEPS the logo header and the verified tag, exactly as the three
38
+ * Wave-2 `*NoConnectionScreen`s do. The module Figma draws this section bare —
39
+ * DEVIATIONS #9 recorded that observation in Wave 1 — but the owner rule of
40
+ * 2026-08-18 (#F-34) supersedes it: the chrome is constant across every screen
41
+ * so nothing shifts between states, and all four modules' connectivity screens
42
+ * must read identically. DEVIATIONS #PI-8.
43
+ *
44
+ * The Wi-Fi mark is Figma's `Icon / Wi-Fi`; Core's `PrizmaTitle` icon allowlist
45
+ * is `status | spinner | none`, so it rides the archetype's `glyph` slot with
46
+ * the foundation's `__glyph` class, drawn from the canonical icon bank
47
+ * (DEVIATIONS #10).
48
+ */
49
+ export const PhoneInputErrorScreen = forwardRef<HTMLDivElement, PhoneInputErrorScreenProps>(
50
+ (
51
+ {
52
+ strings,
53
+ variant = 'tryAgain',
54
+ screenId = `phone-input-error-${variant}`,
55
+ overrides,
56
+ onAction,
57
+ ...shell
58
+ },
59
+ ref,
60
+ ) => {
61
+ const noConnection = variant === 'noNetwork';
62
+ const copy = noConnection
63
+ ? strings.error.noConnection
64
+ : variant === 'unknown'
65
+ ? strings.error.unknown
66
+ : strings.error.tryAgain;
67
+
68
+ return (
69
+ <PrizmaResultScreen
70
+ ref={ref}
71
+ /* The connectivity screen leads with the Wi-Fi glyph instead of a
72
+ status mark; the other two carry the canonical error mark. */
73
+ status={noConnection ? 'none' : 'error'}
74
+ glyph={
75
+ noConnection ? (
76
+ <span
77
+ className={[
78
+ 'prizma-screen-layout__glyph',
79
+ 'prizma-screen-layout__glyph--negative',
80
+ overrides?.align === 'left' ? 'prizma-screen-layout__glyph--left' : '',
81
+ ]
82
+ .filter(Boolean)
83
+ .join(' ')}
84
+ >
85
+ <IconWifiOff size="l" />
86
+ </span>
87
+ ) : undefined
88
+ }
89
+ title={copy.title}
90
+ subtitle={copy.subtitle}
91
+ ctaLabel={copy.ctaLabel}
92
+ verifiedLabel={strings.verifiedLabel}
93
+ navLabel={strings.navLabel}
94
+ screenId={screenId}
95
+ overrides={overrides}
96
+ onAction={onAction}
97
+ {...shell}
98
+ />
99
+ );
100
+ },
101
+ );
102
+ PhoneInputErrorScreen.displayName = 'PhoneInputErrorScreen';
103
+
104
+ export default PhoneInputErrorScreen;