@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,469 @@
1
+ /* ScreenLayout — THE archetype spacing layer (GUIDELINES.md §5, §6).
2
+ *
3
+ * Every spacing rule of the screen system lives HERE and only here; archetype
4
+ * and module screens compose these classes and never re-declare the values.
5
+ * Values are tokens; the recipes below were corrected against the Face Capture
6
+ * purple sections in the pilot (DEVIATIONS.md #8, #12) — the two rules that
7
+ * double-counted padding Core components already carry are gone.
8
+ */
9
+
10
+ /* Content column: 24px horizontal padding, fills the shell. */
11
+ /* The footer's total footprint: bottom offset + tag height + gap above it.
12
+ * Derived from the real Core token, so a tag resize propagates. */
13
+ .prizma-screen-shell {
14
+ --pcs-footer-space: calc(
15
+ var(--prizma-spacing-16) + var(--prizma-tag-size-height) + var(--prizma-spacing-16)
16
+ );
17
+ /* Capture screens also carry the anchored control strip (shutter + help)
18
+ * between the frame and the footer. Reserving its footprint is what lets
19
+ * Core's capture frame — which FILLS whatever box the host gives it — shrink
20
+ * to fit instead of running under the controls. Owner: the frame may get
21
+ * smaller, that is not a constraint (2026-08-18).
22
+ * = footer space + the strip's own 8 offset + the 64 strip + 12 breathing. */
23
+ --pcs-capture-chrome-space: calc(
24
+ var(--pcs-footer-space) + var(--prizma-spacing-8) + var(--prizma-icon-size-3xl) +
25
+ var(--prizma-spacing-12)
26
+ );
27
+ }
28
+
29
+ .prizma-screen-layout__content {
30
+ display: flex;
31
+ flex-direction: column;
32
+ flex: 1;
33
+ min-height: 0;
34
+ padding-inline: var(--prizma-spacing-24);
35
+ padding-top: var(--prizma-spacing-24); /* nav → first content block */
36
+ /* Must be allowed to shrink: a taller stage (vertical ID / passport) used to
37
+ * overflow the fixed-height shell and push the anchored chrome out of view. */
38
+ min-height: 0;
39
+ }
40
+
41
+ /* Capture screens: the ring offset is NOT applied here. Core's capture
42
+ * components (PrizmaSelfieCapture / PrizmaIdCapture) carry the designed
43
+ * `padding: 40px 0` + `gap: 32` in their own root, pixel-exact against every
44
+ * module Figma file — the capture instance sits at nav-bottom + 0. Adding
45
+ * GUIDELINES §5's 40px on top pushed the ring 80px down. DEVIATIONS.md #12. */
46
+ .prizma-screen-layout__content--capture {
47
+ padding-top: 0;
48
+ }
49
+
50
+ /* Screens with no logo nav (every module's `genericErrors` family — the nav and
51
+ * the verified tag are both absent there, so GUIDELINES §1's "tag is always the
52
+ * last child" does not hold). The status-bar reserve normally rides on
53
+ * `.prizma-screen-nav`; with no nav the content column carries it, via the same
54
+ * custom property so a host that draws its own chrome still overrides it once.
55
+ * DEVIATIONS.md #9. */
56
+ .prizma-screen-layout__content--no-nav {
57
+ padding-top: calc(var(--pcs-status-bar, 47px) + var(--prizma-spacing-24));
58
+ }
59
+
60
+ /* ── Progress slot (archetype E) ─────────────────────────────────────────────
61
+ * The journey bar a form module draws between the logo nav and the title block.
62
+ * eKYC is the first consumer: all six of its form frames put a two-segment Core
63
+ * `PrizmaStepper` across the full content width there (page 1 blue + grey —
64
+ * 2101:7877 / 2101:8159 / 5849:60225; page 2 pale + blue — 5849:51109 /
65
+ * 5849:66890; page 2 loading both green — 5849:71925).
66
+ *
67
+ * Figma measures nav bottom → bar = Spacing/16 and bar → Title block =
68
+ * Spacing/24, so the column's own "nav → first content block" 24 is retuned to
69
+ * the 16 for the one column that actually carries a bar. BOTH offsets live here
70
+ * and nowhere else — a module never re-declares them (GUIDELINES §5), and the
71
+ * slot renders nothing when unused, so every existing screen is untouched.
72
+ * DEVIATIONS #EK-1. */
73
+ .prizma-screen-layout__content:has(> .prizma-screen-layout__progress) {
74
+ padding-top: var(--prizma-spacing-16);
75
+ }
76
+
77
+ .prizma-screen-layout__progress {
78
+ flex-shrink: 0;
79
+ margin-bottom: var(--prizma-spacing-24); /* bar → title block */
80
+ }
81
+
82
+ /* THE GUTTER, for the archetypes that hang the slot off the SHELL.
83
+ *
84
+ * Only archetype E puts `progress` inside `.prizma-screen-layout__content`,
85
+ * which already carries the column's 24px `padding-inline`. C, F, G, A and H
86
+ * render it as a sibling of the content column instead, so anything in the slot
87
+ * ran full-bleed — edge to edge across the phone, ignoring the 24px gutter every
88
+ * other block on the screen respects. Camila caught it on the Error screens'
89
+ * "link copied" Snackbar (2026-09-03); Video Selfie's stepper has the same shape
90
+ * on the same five archetypes.
91
+ *
92
+ * Scoped to the DIRECT CHILD of the shell so archetype E is untouched — inside
93
+ * the content column the padding is already there, and adding it here would
94
+ * double it to 48. One rule, one place; no archetype re-declares the value
95
+ * (GUIDELINES §5). */
96
+ .prizma-screen-shell > .prizma-screen-layout__progress {
97
+ padding-inline: var(--prizma-spacing-24);
98
+ }
99
+
100
+ /* Processing/result screens: fully centered column. */
101
+ .prizma-screen-layout__content--centered {
102
+ align-items: center;
103
+ justify-content: center;
104
+ gap: var(--prizma-spacing-16);
105
+ }
106
+
107
+ /* The flexible middle (tutorial illustration area, form field stack). */
108
+ .prizma-screen-layout__flex {
109
+ flex: 1;
110
+ min-height: 0;
111
+ display: flex;
112
+ flex-direction: column;
113
+ align-items: center;
114
+ justify-content: center;
115
+ }
116
+
117
+ /* ── List archetype middle (archetype G) ─────────────────────────────────────
118
+ * A Core card/option list filling the space between the title block and the CTA
119
+ * band. NOT `__flex`, which centres AND shrink-wraps its child — that slot is
120
+ * for a centred illustration; a list must span the column and start at the top.
121
+ *
122
+ * The Spacing/24 is GUIDELINES §5's "title block → first content block", and it
123
+ * lives here so the eight screens that hand-built this pattern stop each
124
+ * declaring their own (they had 24 on the three ID screens and 32 on Document
125
+ * Capture's — DEVIATIONS #F-31). */
126
+ .prizma-screen-layout__list {
127
+ flex: 1;
128
+ min-height: 0;
129
+ display: flex;
130
+ flex-direction: column;
131
+ padding-top: var(--prizma-spacing-24);
132
+ }
133
+
134
+ /* Bottom-anchored variant: `1-1-1-Document Chooser V2` hangs its option rows off
135
+ * the bottom of the middle instead of the top. */
136
+ .prizma-screen-layout__list--end {
137
+ justify-content: flex-end;
138
+ }
139
+
140
+ /* Scrolling variant — the same release archetype E has as `scrollFields`.
141
+ * Video Selfie's Android settings walk-through draws TWO five-step lists plus a
142
+ * closing note; Figma gives that frame 1041px, and squeezed into the 844 shell
143
+ * the second list painted straight through the CTA and the anchored tag, with
144
+ * the last line clipped (owner QA 2026-08-19, measured ~57px of overlap).
145
+ * Letting the middle pan keeps the title, the CTA band and the tag still.
146
+ * Rows keep their intrinsic height for the same reason as #QS-1. */
147
+ .prizma-screen-layout__list--scroll {
148
+ overflow-y: auto;
149
+ margin-bottom: var(--prizma-spacing-16);
150
+ }
151
+
152
+ .prizma-screen-layout__list--scroll > * {
153
+ flex-shrink: 0;
154
+ }
155
+
156
+ /* ── Review archetype middle (archetype H) ───────────────────────────────────
157
+ * The captured-media review pattern (GUIDELINES.md §6-H): a header block over a
158
+ * flexing media stage. Promoted here from the two Document Capture confirm
159
+ * screens, which hand-built these three offsets in `DocumentCaptureLayout.css`
160
+ * (`.document-capture-confirm-header`, `.document-capture-stage`,
161
+ * `.document-capture-band--offset`) — Wave 2, now the foundation's so every
162
+ * module's review screen stops re-declaring them (DEVIATIONS #REV-1).
163
+ *
164
+ * Header → media stage is Spacing/32 (Figma draws 32 on reviewPhoto / reviewFile
165
+ * / analyzing; the hand-nudged 24–40 on the other sections is Figma rounding —
166
+ * DEVIATIONS #DC-24). The header holds the Title OR, on `analyzing`, the loading
167
+ * bar; either way the gap below it is the same. */
168
+ .prizma-screen-layout__review-header {
169
+ flex-shrink: 0;
170
+ margin-bottom: var(--prizma-spacing-32);
171
+ }
172
+
173
+ /* The media stage: a centred column that flexes into whatever the header
174
+ * leaves, so the captured still / file card sits in the middle at every screen
175
+ * height. Its own child gap is Spacing/16 (the file card → encrypted-notice gap
176
+ * on the upload variant; a no-op when the media is a single child). */
177
+ .prizma-screen-layout__review-stage {
178
+ flex: 1 1 auto;
179
+ min-height: 0;
180
+ box-sizing: border-box;
181
+ display: flex;
182
+ flex-direction: column;
183
+ align-items: center;
184
+ justify-content: center;
185
+ gap: var(--prizma-spacing-16);
186
+ width: 100%;
187
+ }
188
+
189
+ /* `analyzing` has no CTA band, so nothing supplies the Spacing/24 the band
190
+ * normally puts between the stage and the screen bottom — the stage carries it
191
+ * itself (Figma: the column ends at 630 of a 654 CONTENT frame). */
192
+ .prizma-screen-layout__review-stage--flush {
193
+ margin-bottom: var(--prizma-spacing-24);
194
+ }
195
+
196
+ /* The `analyzing` loading bar is centred and capped at Figma's 164px instance
197
+ * width; Core's `PrizmaLoadingBar` is `width: 100%` and takes its cap from the
198
+ * host. 164 is absent from the spacing SOT — a documented literal, the same
199
+ * class as the file-card thumbnail (DEVIATIONS #DC-28, #REV-1). */
200
+ .prizma-screen-layout__review-loading {
201
+ width: 164px; /* hardcoded — Figma Loading bar instance width; absent from the token SOT (DEVIATIONS #DC-28) */
202
+ max-width: 100%;
203
+ margin-inline: auto;
204
+ }
205
+
206
+ /* ── Non-status glyph slot ───────────────────────────────────────────────────
207
+ * Figma swaps arbitrary glyphs into the Title's icon slot (`Icon / Wi-Fi` on
208
+ * every module's noConnection, a question mark on ID Capture's common issues).
209
+ * Core's `PrizmaTitle.icon` allowlist is `status | spinner | none`
210
+ * (title.md §2.3), so the glyph is composed ABOVE the Title using the very same
211
+ * Title/Icon/Size the component applies to its own slot — icon from the
212
+ * canonical bank, no primitive invented. DEVIATIONS #10.
213
+ *
214
+ * Promoted here from three byte-identical module copies
215
+ * (`.face-capture-glyph`, `.id-capture-glyph`, `.document-capture-glyph`) —
216
+ * DEVIATIONS #DC-29 asked for exactly this. */
217
+ .prizma-screen-layout__glyph {
218
+ display: flex;
219
+ width: 100%;
220
+ justify-content: center;
221
+ }
222
+
223
+ /* Mirrors `.prizma-title--left .prizma-title__icon-slot` so the glyph follows
224
+ * the same alignment override as the Title it belongs to. */
225
+ .prizma-screen-layout__glyph--left {
226
+ justify-content: flex-start;
227
+ }
228
+
229
+ .prizma-screen-layout__glyph > svg {
230
+ display: block;
231
+ width: var(--prizma-title-icon-size);
232
+ height: var(--prizma-title-icon-size);
233
+ }
234
+
235
+ /* Ink: the two tones Figma uses for non-status glyphs. */
236
+ .prizma-screen-layout__glyph--negative {
237
+ color: var(--prizma-icon-status-negative);
238
+ }
239
+
240
+ .prizma-screen-layout__glyph--neutral {
241
+ color: var(--prizma-icon-neutral-800);
242
+ }
243
+
244
+ /* The glyph → Title gap is Core's own Title/Icon → heading Spacing/16. On the
245
+ * centered column the flex `gap` already supplies it, so the margin is scoped to
246
+ * the plain column — one value, declared once, never in a module file. */
247
+ .prizma-screen-layout__content:not(.prizma-screen-layout__content--centered)
248
+ > .prizma-screen-layout__glyph {
249
+ margin-bottom: var(--prizma-spacing-16);
250
+ }
251
+
252
+ /* Instruction text 32px below a bare capture stage. NOT for Core's capture
253
+ * components — they render their own instruction line (H4) at the designed
254
+ * offset via `feedbackText`. Use this only for a custom stage that carries no
255
+ * gap of its own. DEVIATIONS.md #12, #14. */
256
+ .prizma-screen-layout__below-capture {
257
+ padding-top: var(--prizma-spacing-32);
258
+ }
259
+
260
+ /* ── CTA band ────────────────────────────────────────────────────────────────
261
+ * Core's own composition recipe (documented in prizma-core-web
262
+ * `Disclaimer.tsx`): disclaimer + button + tag stacked at a flat Spacing/16.
263
+ * Because `PrizmaDisclaimer` carries its own Spacing/12, that yields exactly
264
+ * the 28px disclaimer-text → CTA gap GUIDELINES §5 asks for — with no literal.
265
+ * The old `__disclaimer { padding-bottom: 28px }` double-counted it (40px).
266
+ * DEVIATIONS.md #8 (supersedes #5). */
267
+ .prizma-screen-layout__band {
268
+ flex-shrink: 0;
269
+ display: flex;
270
+ flex-direction: column;
271
+ gap: var(--prizma-spacing-16);
272
+ /* No bottom padding: the anchored footer reserves its own space through
273
+ * `--pcs-footer-space` on the content column. */
274
+ }
275
+
276
+ .prizma-screen-layout__band .prizma-button {
277
+ width: 100%;
278
+ }
279
+
280
+ /* A band rendered as a direct shell child (ResultScreen) rather than inside the
281
+ * content column: it supplies its own gutters and clears the anchored footer. */
282
+ /* CTA pair inside a band. `--row` pairs them side by side at the band's own
283
+ * Spacing/16 gap — ID Capture's review screen (Retake | Continue). Stacked is
284
+ * the default, so nothing else changes. */
285
+ .prizma-screen-layout__band__ctas {
286
+ display: flex;
287
+ flex-direction: column;
288
+ gap: var(--prizma-spacing-16);
289
+ }
290
+
291
+ .prizma-screen-layout__band__ctas--row {
292
+ flex-direction: row;
293
+ }
294
+
295
+ .prizma-screen-layout__band__ctas--row .prizma-button {
296
+ flex: 1 1 0;
297
+ min-width: 0;
298
+ }
299
+
300
+ /* Band content above the buttons (Face Match's verdict Snackbar). The band's
301
+ * flat Spacing/16 plus this row's own 16 reaches the designed 32 to the CTA —
302
+ * the same idiom as the Disclaimer's 12 + 16 = 28 (DEVIATIONS #8, #FM-23). */
303
+ .prizma-screen-layout__band__content {
304
+ display: flex;
305
+ justify-content: center;
306
+ padding-bottom: var(--prizma-spacing-16);
307
+ }
308
+
309
+ .prizma-screen-layout__band--result {
310
+ padding-inline: var(--prizma-spacing-24);
311
+ margin-bottom: var(--pcs-footer-space);
312
+ }
313
+
314
+ /* Review archetype (H): the stage flexes, so the Spacing/24 between it and the
315
+ * CTA row rides on the band as a top margin (Figma: the media `Container` ends
316
+ * at 550, the `bottom container` starts at 574). The band sits INSIDE the
317
+ * content column, which already carries the 24 gutters and reserves the footer
318
+ * via `--pcs-footer-space` — so unlike `--result` this variant adds only the
319
+ * top offset. Promoted from `.document-capture-band--offset` (DEVIATIONS #REV-1). */
320
+ .prizma-screen-layout__band--review {
321
+ margin-top: var(--prizma-spacing-24);
322
+ }
323
+
324
+ /* Retained for screens that genuinely carry no tag; the anchored footer
325
+ * otherwise reserves the bottom space. */
326
+ .prizma-screen-layout__band--bare {
327
+ padding-bottom: var(--prizma-spacing-24);
328
+ }
329
+
330
+ /* Full-width CTA row — for screens whose CTA is not part of a band. */
331
+ .prizma-screen-layout__cta {
332
+ flex-shrink: 0;
333
+ }
334
+ .prizma-screen-layout__cta .prizma-button {
335
+ width: 100%;
336
+ }
337
+
338
+ /* ── Inline prompt with links ────────────────────────────────────────────────
339
+ * A line of body copy carrying one or more INLINE links — Phone Input's
340
+ * "Didn't receive the code? Resend code or Change phone number", and the same
341
+ * shape every other OTP-bearing module draws (Email Input, eKYC…).
342
+ *
343
+ * Core has no inline-link primitive: `PrizmaButton variant="tertiary-link"` is
344
+ * the right INK (underlined, `button/tertiary/text/default`) but size L is
345
+ * `width: 100%; min-height: 56px`, so it cannot sit inside a sentence. The
346
+ * recipe therefore lives here — built from Core's OWN tokens, inventing no
347
+ * palette — and is placed in the foundation rather than a module file because
348
+ * it is a cross-module pattern (DEVIATIONS #PI-10, #DC-29 precedent).
349
+ */
350
+ .prizma-screen-layout__inline-prompt {
351
+ margin: 0;
352
+ text-align: center;
353
+ text-wrap: balance;
354
+ color: var(--prizma-text-body-500-secondary);
355
+ font-family: var(--prizma-body-family);
356
+ font-size: var(--prizma-body-m-regular-font-size);
357
+ font-weight: var(--prizma-body-m-regular-font-weight);
358
+ line-height: var(--prizma-body-m-regular-line-height);
359
+ letter-spacing: var(--prizma-body-m-regular-letter-spacing);
360
+ }
361
+
362
+ /* The link itself: a real <button> for semantics and keyboard support, drawn
363
+ * with the tertiary-link ink so it is visually identical to Core's link. */
364
+ .prizma-screen-layout__inline-link {
365
+ display: inline;
366
+ margin: 0;
367
+ padding: 0;
368
+ border: none;
369
+ background: none;
370
+ cursor: pointer;
371
+ font: inherit;
372
+ color: var(--prizma-button-tertiary-text-default);
373
+ text-decoration: underline;
374
+ }
375
+
376
+ /* Core's tertiary-link drops the underline on hover; mirrored so the two
377
+ * behave identically. */
378
+ .prizma-screen-layout__inline-link:hover {
379
+ text-decoration: none;
380
+ }
381
+
382
+ /* ── Footer (verified-by tag) ─────────────────────────────────────────────────
383
+ * ANCHORED to the shell, not flowed after the content. The owner's rule is
384
+ * absolute: where a tag exists it sits at exactly the same position on every
385
+ * screen — never higher, never lower (2026-08-18).
386
+ *
387
+ * Flowing it made the position depend on whatever came before: a band with its
388
+ * own padding gave 16, a bare content column gave 0, and the taller vertical-ID
389
+ * stage overflowed the shell and pushed the tag 62px BELOW the fold, where
390
+ * `overflow: hidden` ate it. Anchoring removes the whole class of bug.
391
+ *
392
+ * Screens reserve the footprint via `--pcs-footer-space` (derived from the real
393
+ * tag height token) so content can never sit under the tag. */
394
+ .prizma-screen-layout__footer,
395
+ .prizma-screen-layout__band__tag {
396
+ position: absolute;
397
+ left: 0;
398
+ right: 0;
399
+ bottom: var(--prizma-spacing-16);
400
+ display: flex;
401
+ justify-content: center;
402
+ }
403
+
404
+ /* Kept as a no-op alias: the anchor makes "pinned" the only behaviour. */
405
+ .prizma-screen-layout__footer--pinned {
406
+ margin-top: 0;
407
+ }
408
+
409
+ /* Any screen carrying a footer reserves its space: 16 bottom + tag + 16 gap. */
410
+ .prizma-screen-shell:has(.prizma-screen-layout__footer) .prizma-screen-layout__content,
411
+ .prizma-screen-shell:has(.prizma-screen-layout__band__tag) .prizma-screen-layout__content {
412
+ padding-bottom: var(--pcs-footer-space);
413
+ }
414
+
415
+ /* …and capture screens reserve the strip on top of it, so the frame stops above
416
+ * the shutter/help row rather than sliding under it. */
417
+ .prizma-screen-shell:has(.prizma-screen-layout__capture-strip) .prizma-screen-layout__content {
418
+ padding-bottom: var(--pcs-capture-chrome-space);
419
+ }
420
+
421
+ /* Camera screens built on the viewfinder surface (ID / Document stages) reserve
422
+ * the same chrome footprint on their content column. Without it, Core's poa
423
+ * frame — which has NO aspect lock and FILLS its box — grows to the full shell
424
+ * height and runs under the shutter/help strip (owner report 2026-08-18). The
425
+ * frame now fills only down to above the strip; aspect-locked ID frames are
426
+ * unaffected (they were already smaller than the space). */
427
+ .prizma-screen-shell:has(.prizma-screen-layout__capture-strip) .prizma-viewfinder__content {
428
+ padding-bottom: var(--pcs-capture-chrome-space);
429
+ }
430
+
431
+ /* ── Capture control strip (shutter + help) ──────────────────────────────────
432
+ * ANCHORED like the footer. The strip used to sit in the content flow, so the
433
+ * help affordance moved with whatever was above it: 28px off the bottom on the
434
+ * landscape ID stages, 11px on the taller vertical-ID frame, 66px on Document
435
+ * Capture. The owner's rule is that it does not move with frame orientation
436
+ * (2026-08-18), so it is pinned once, above the footer's reserved space.
437
+ *
438
+ * Core ships `PrizmaCaptureManual` at a fixed 352 width, which overhangs the
439
+ * 342 content column and pushed the help icon 5px inside the 24 gutter on
440
+ * Document Capture. Constrained here to the column it is given — the Core-side
441
+ * request is logged (DEVIATIONS #DC-33). */
442
+ .prizma-screen-shell .prizma-screen-layout__capture-strip {
443
+ position: absolute;
444
+ left: var(--prizma-spacing-24);
445
+ right: var(--prizma-spacing-24);
446
+ bottom: calc(var(--pcs-footer-space) + var(--prizma-spacing-8));
447
+ display: flex;
448
+ justify-content: center;
449
+ }
450
+
451
+ .prizma-screen-shell .prizma-screen-layout__capture-strip > .prizma-capture-manual {
452
+ width: 100%;
453
+ max-width: 100%;
454
+ }
455
+
456
+ /* ── Anchored-chrome layering ─────────────────────────────────────────────────
457
+ * The camera HUD bands lift themselves to `z-index: 1` so their copy paints
458
+ * above `PrizmaIdCapture`'s scrim (an absolutely positioned box-shadow that
459
+ * escapes the frame by design). The anchored chrome — verified-by tag, shutter
460
+ * and help affordance — must sit ABOVE that layer, or the band covers it: the
461
+ * owner reported the tag and help button hidden behind the overlay
462
+ * (2026-08-18). One step higher is enough; keep it here so module bands and the
463
+ * chrome are ordered in a single place. */
464
+ .prizma-screen-shell .prizma-screen-layout__footer,
465
+ .prizma-screen-shell .prizma-screen-layout__band__tag,
466
+ .prizma-screen-shell .prizma-screen-layout__capture-strip {
467
+ z-index: 2;
468
+ }
469
+
@@ -0,0 +1,43 @@
1
+ /* ScreenNav — logo header (GUIDELINES.md §3).
2
+ *
3
+ * The 390×844 design reference includes the OS status-bar area at the top of
4
+ * the screen; standalone hosts (hub frames, previews) have no device chrome,
5
+ * so the nav reserves that offset itself: `--pcs-status-bar` (default 47px —
6
+ * the reference status-bar height; hardcoded, no Core token). Hosts that DO
7
+ * own the chrome (a real phone viewport, a device frame that draws the status
8
+ * bar) set `--pcs-status-bar: 0px` — or `env(safe-area-inset-top)` on device.
9
+ * Below the offset: 12px gap, then the 44px nav row (GUIDELINES §3, §5).
10
+ *
11
+ * Core's PrizmaNavigation positions itself `fixed` (viewport-pinned on a real
12
+ * SDK page). Inside a composed screen the nav must occupy real flow space —
13
+ * the title block sits 24px below it — so the wrapper provides the 44px flow
14
+ * slot and the inner nav is made static within it.
15
+ */
16
+
17
+ .prizma-screen-nav {
18
+ flex-shrink: 0;
19
+ margin-top: calc(var(--pcs-status-bar, 47px) + var(--prizma-spacing-12));
20
+ height: 44px; /* hardcoded — Studio nav row height (GUIDELINES §3); no Core token */
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: center;
24
+ }
25
+
26
+ .prizma-screen-nav .prizma-nav {
27
+ position: static;
28
+ width: 100%;
29
+ }
30
+
31
+ .prizma-screen-nav__custom-logo {
32
+ display: flex;
33
+ align-items: center;
34
+ justify-content: center;
35
+ height: 100%;
36
+ }
37
+
38
+ .prizma-screen-nav__custom-logo > img,
39
+ .prizma-screen-nav__custom-logo > svg {
40
+ max-height: 24px;
41
+ max-width: 120px;
42
+ object-fit: contain;
43
+ }
@@ -0,0 +1,26 @@
1
+ import React, { type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ import './ScreenNav.css';
3
+ export interface PrizmaScreenNavProps extends ComponentPropsWithoutRef<'header'> {
4
+ /** Custom brand logo (e.g. an <img> of the client logo). Rendered centered,
5
+ * contained to the logo box (GUIDELINES.md §3: height 24 / max-width 120 /
6
+ * object-fit contain — enforced by CSS). Default: the Incode wordmark via
7
+ * PrizmaNavigation. */
8
+ logo?: ReactNode;
9
+ /** Accessible name for the nav region (i18n — no baked-in English). */
10
+ navLabel?: string;
11
+ /**
12
+ * Render the nav's BOX but not its contents. The header is hidden on capture
13
+ * screens, and removing it outright would pull every element up — the owner's
14
+ * requirement is that spacing stays identical whether or not the logo shows
15
+ * (2026-08-18). So the 44px row and its status-bar offset are still reserved;
16
+ * only the logo disappears, and the row leaves the a11y tree.
17
+ */
18
+ reserved?: boolean;
19
+ }
20
+ /**
21
+ * ScreenNav — the logo header of every SDK screen.
22
+ * Sits 12px below the top of the shell (the host frame owns the OS status
23
+ * bar), logo centered, no back/close buttons (GUIDELINES.md §3).
24
+ */
25
+ export declare const PrizmaScreenNav: React.ForwardRefExoticComponent<PrizmaScreenNavProps & React.RefAttributes<HTMLElement>>;
26
+ export default PrizmaScreenNav;
@@ -0,0 +1,13 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaNavigation } from '@incodetech/prizma-core-web/navigation';
5
+ import './ScreenNav.css';
6
+ /**
7
+ * ScreenNav — the logo header of every SDK screen.
8
+ * Sits 12px below the top of the shell (the host frame owns the OS status
9
+ * bar), logo centered, no back/close buttons (GUIDELINES.md §3).
10
+ */
11
+ export const PrizmaScreenNav = forwardRef(({ logo, navLabel, reserved = false, className, ...rest }, ref) => (_jsx("header", { ref: ref, "aria-hidden": reserved || undefined, className: ['prizma-screen-nav', className ?? ''].filter(Boolean).join(' '), ...rest, children: reserved ? null : logo ? (_jsx("span", { className: "prizma-screen-nav__custom-logo", children: logo })) : (_jsx(PrizmaNavigation, { showIncodeLogo: true, "aria-label": navLabel })) })));
12
+ PrizmaScreenNav.displayName = 'PrizmaScreenNav';
13
+ export default PrizmaScreenNav;
@@ -0,0 +1,130 @@
1
+ /* ScreenShell — root of every SDK screen.
2
+ *
3
+ * Tokens only (no :root block here — the consumer imports
4
+ * @incodetech/prizma-core-tokens/css once). Design reference 390×844; the
5
+ * shell fills whatever box the host gives it and exposes a size container so
6
+ * descendants scale with `cqw` capped at reference pixels.
7
+ */
8
+
9
+ .prizma-screen-shell {
10
+ display: flex;
11
+ flex-direction: column;
12
+ position: relative;
13
+ width: 100%;
14
+ height: 100%;
15
+ overflow: hidden;
16
+ background: var(--prizma-surface-neutral-0);
17
+ font-family: var(--prizma-body-family);
18
+ color: var(--prizma-text-body-800-primary);
19
+ container-type: size;
20
+ container-name: pcs-screen;
21
+ /* The shell must be the containing block for `position: fixed` descendants —
22
+ * Core's PrizmaNavigation pins itself to the viewport (correct on a real
23
+ * device, wrong inside an embedded screen frame) — and must clip descendant
24
+ * painting (the CaptureOverlay scrim is a 2000px box-shadow). `contain:
25
+ * layout paint` does both without forcing a composited layer the way
26
+ * `transform` would. */
27
+ contain: layout paint;
28
+ }
29
+
30
+ /* Camera viewfinder screens — always a dark stage regardless of theme.
31
+ * The camera surface itself is supplied by the screen (image or live feed). */
32
+ .prizma-screen-shell--dark {
33
+ background: var(--prizma-surface-neutral-900-static);
34
+ color: var(--prizma-text-body-0-static);
35
+ }
36
+
37
+ /* -------------------------------------------------------------------------
38
+ A theme PIN is a MODE pin, not a BRAND reset.
39
+
40
+ The finding (Core Lab explorations canvas, 2026-08-31). Two cards, same
41
+ `themeSeed` #7C3AED: `face-capture-tutorial` went fully purple, but on
42
+ `face-capture-capturing-alignFace` the footer tag — the brand badge and the
43
+ Incode wordmark — stayed #0054FF. Nothing in Tag or Logo is hardcoded: Tag
44
+ binds Icon/Brand/500 Static, Logo binds Surface/Brand/500, and both DID
45
+ re-skin on the tutorial. What differs is the pin.
46
+
47
+ A scoped brand (Core Lab's per-card seed, and equally a host that scopes
48
+ `applyPrizmaTheme`'s output to a subtree instead of `:root`) is delivered as
49
+ inherited CSS custom properties on an ANCESTOR. `theme` above stamps
50
+ `data-prizma-theme` on THIS element — and `@incodetech/prizma-core-tokens/
51
+ themes/light.css` is the FULL token set, not a delta the way themes/dark.css
52
+ is, because it has to be able to out-cascade an ancestor's dark. So the pin
53
+ re-declared all 48 brand-derived vars on the exact element the seed was
54
+ inheriting through, and everything below it fell back to canonical blue.
55
+ Only the tag showed it on that screen because PrizmaSelfieCapture paints no
56
+ brand ink at all — on a pinned screen carrying a Button the CTA was blue too.
57
+
58
+ The fix: hand the brand back to the scope above, for the light pin only
59
+ (dark.css is a delta and never touches these). Custom properties accept the
60
+ CSS-wide keywords, so `inherit` reaches past the pin's own declaration, and
61
+ `.prizma-screen-shell[data-prizma-theme='light']` (0,2,0) outranks the
62
+ sheet's `[data-prizma-theme='light']` (0,1,0) regardless of import order.
63
+
64
+ ONLY the tokens whose derived value is IDENTICAL in the light and dark maps
65
+ are listed (core/theming/derive.mjs — the `*Static` family plus
66
+ textAccentBrand / borderBrand500 / iconBrand500Static, and the component
67
+ tokens that are pure aliases of those). That is what makes `inherit` safe:
68
+ the ancestor carries whichever map its own mode resolved in, and for these
69
+ the two maps agree, so a purple card inside a DARK board still lands the
70
+ right purple on a light-pinned stage. Without a seed above, they inherit the
71
+ canonical value and this block is a no-op.
72
+
73
+ ⚠️ Known gap, deliberately left: the mode-DEPENDENT brand tokens
74
+ (surfaceBrand50, textAccentOnBrand, textLink*, borderBrandOnNeutral,
75
+ iconBrandOnNeutral, and their aliases — halos, snackbar neutral, links) keep
76
+ the pin's canonical value. They are AA-gated against the mode's background
77
+ or flip ramp stop, so inheriting a dark-derived value onto a light-pinned
78
+ stage would either invert them or silently drop Core's contrast guarantee.
79
+ Fixing those properly needs the scope above to publish BOTH maps; that is a
80
+ theming-contract change, not a stylesheet one.
81
+
82
+ ⚠️ PARITY: this is the WEB half only. Android and iOS ship the same pinned-
83
+ light capture screens and the same scoped-theme story, so the same bug is
84
+ very likely there under whatever their pin mechanism is. Flagged for those
85
+ owners — not touched here (core/ is source of truth for three platforms and
86
+ the ports are Cami's lane).
87
+ ------------------------------------------------------------------------- */
88
+ .prizma-screen-shell[data-prizma-theme='light'] {
89
+ /* Semantics whose light and dark stops are the same colour. */
90
+ --prizma-surface-brand-400-static: inherit;
91
+ --prizma-surface-brand-500-static: inherit;
92
+ --prizma-surface-brand-600-static: inherit;
93
+ --prizma-surface-brand-700-static: inherit;
94
+ --prizma-text-accent-brand: inherit;
95
+ --prizma-border-brand-500: inherit;
96
+ --prizma-icon-brand-500-static: inherit;
97
+
98
+ /* Component tokens that are pure aliases of the seven above
99
+ (COMPONENT_ALIASES in core/theming/derive.mjs). */
100
+ --prizma-button-primary-border-default: inherit;
101
+ --prizma-button-primary-border-hover: inherit;
102
+ --prizma-button-primary-border-pressed: inherit;
103
+ --prizma-button-primary-surface-default: inherit;
104
+ --prizma-button-primary-surface-hover: inherit;
105
+ --prizma-button-primary-surface-pressed: inherit;
106
+ --prizma-button-secondary-border-default: inherit;
107
+ --prizma-button-secondary-border-hover: inherit;
108
+ --prizma-button-secondary-border-pressed: inherit;
109
+ --prizma-button-secondary-text-default: inherit;
110
+ --prizma-button-secondary-text-hover: inherit;
111
+ --prizma-button-secondary-text-pressed: inherit;
112
+ --prizma-button-tertiary-text-default: inherit;
113
+ --prizma-button-spinner-secondary-arc: inherit;
114
+ --prizma-checkbox-surface-selected: inherit;
115
+ --prizma-radio-button-surface-selected: inherit;
116
+ --prizma-toggle-switch-surface-primary-on: inherit;
117
+ --prizma-illustration-surface-accent: inherit;
118
+ --prizma-illustration-ring-start: inherit;
119
+
120
+ /* Mode-flipping in the canonical map, but a LIGHT pin means the LIGHT stop —
121
+ which for each of these IS ramp 500, i.e. the Static sibling re-inherited
122
+ just above. Reading it back through var() is what keeps the Logo wordmark
123
+ the seed's brand instead of the dark map's #ffffff-on-white.
124
+ surfaceBrand500 light 500 / dark #ffffff (Logo, Stepper past-active)
125
+ surfaceBrandIndicator light 500 / dark 400 (+ its two aliases) */
126
+ --prizma-surface-brand-500: var(--prizma-surface-brand-500-static);
127
+ --prizma-surface-brand-indicator: var(--prizma-surface-brand-500-static);
128
+ --prizma-spinner-surface-primary: var(--prizma-surface-brand-500-static);
129
+ --prizma-loading-bar-fill-in-flight: var(--prizma-surface-brand-500-static);
130
+ }