@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,92 @@
1
+ /* CURP โ€” module layout additions.
2
+ *
3
+ * THREE rules, and none of them declares spacing: the content column, the 24px
4
+ * gutters, the title โ†’ fields Spacing/32, the field gaps, the CTA column and
5
+ * the anchored footer all stay the foundation's (`ScreenLayout.css`,
6
+ * `FormScreen.css`). Nothing here re-declares an archetype value, invents a
7
+ * primitive or repaints one โ€” every rule RELEASES a Core/foundation constraint
8
+ * that a purple CURP section contradicts, the same idiom as Phone Input's
9
+ * `width: auto` on Core's fill-width Dropdown (DEVIATIONS #PI-1).
10
+ */
11
+
12
+ /* โ”€โ”€ The generator's field stack is taller than the screen โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
13
+ * `CURP.Gene.default` is a 1051-tall frame: its `input-list` alone is 548 tall
14
+ * (six 78px labelled fields at Spacing/16) and the CONTENT frame grows to 861
15
+ * instead of the usual 654. At the 390ร—844 reference the column has ~470 for
16
+ * it, so the last dropdown and the CTA fall past the fold.
17
+ *
18
+ * Archetype E's `.prizma-form-screen__fields` is `flex: 1; min-height: 0` with
19
+ * no overflow behaviour โ€” it was measured against Phone Input, whose forms are
20
+ * one or two fields โ€” so the surplus is silently clipped by `ScreenShell`'s
21
+ * `overflow: hidden`, and (because the fields cannot shrink below
22
+ * `--prizma-input-size-field-height`) it first PAINTS OVER the sibling CTA.
23
+ * Screens are authored at 390ร—844 and never reflow (README / DEVIATIONS #17),
24
+ * so growing the frame is not an option either.
25
+ *
26
+ * The stack is therefore allowed to scroll INSIDE the column: the title, the
27
+ * CTA and the anchored tag stay put and the six fields pan, which is the
28
+ * closest a fixed 844 frame gets to Figma's taller page. It adds NO padding, NO
29
+ * gap and NO size of its own.
30
+ *
31
+ * Applied to EVERY `CURP.Gene.*` section including `dropdown`. The earlier
32
+ * build withheld it from `dropdown` to keep Core's absolutely-positioned menu
33
+ * from being clipped, and that traded one clipped element for a worse one: with
34
+ * `overflow: visible` the 548-tall stack overflowed its box and painted the
35
+ * open menu straight across the "Generate" button, which Figma (2058:16373)
36
+ * draws clear and unobstructed under the menu. The CTA is never allowed to be
37
+ * overlapped; the menu is handled by the next rule instead.
38
+ *
39
+ * FOUNDATION REQUEST: promote this to `FormScreen.css` as a
40
+ * `.prizma-form-screen__fields--scroll` variant (or make overflow the default),
41
+ * driven by a `scrollFields` prop on `PrizmaFormScreen`. Every long-form module
42
+ * still to come in Wave 3 โ€” eKYC, eKYB, address entry โ€” will hit the same wall.
43
+ */
44
+ .curp-generate--scroll .prizma-form-screen__fields {
45
+ overflow-y: auto;
46
+ }
47
+
48
+ /* โ”€โ”€ The open Gender menu must stay inside the scrolling column โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
49
+ * `CURP.Gene.dropdown` exists to show the three gender rows, so they may not be
50
+ * clipped. Core's menu is `position: absolute; top: calc(100% + 8px)` on the
51
+ * field anchor with no portal (Dropdown.css:186-192) and no collision
52
+ * detection, so opening DOWNWARD from the 4th of six fields runs past the
53
+ * bottom of the scrolling box.
54
+ *
55
+ * The one section that forces the menu open therefore anchors it ABOVE its
56
+ * trigger โ€” the flip a positioned menu normally performs for itself. Only the
57
+ * anchor edge changes: Core's own overlay, own menu, own Spacing/8 offset, own
58
+ * shadow, own rows. The stacking Figma draws (menu over the fields BELOW it)
59
+ * becomes menu over the fields above it, which is the concession a 390ร—844
60
+ * frame owes an 1111-tall Figma page.
61
+ *
62
+ * CORE REQUEST: `PrizmaDropdown` needs a portalled (or `position: fixed`) menu
63
+ * with flip/shift collision handling โ€” today the menu cannot escape any
64
+ * scrolling or clipping ancestor. Every module that puts a dropdown in a long
65
+ * form inherits this.
66
+ */
67
+ .curp-generate--menu-open .prizma-dropdown__overlay {
68
+ top: auto;
69
+ bottom: calc(100% + var(--prizma-spacing-8));
70
+ }
71
+
72
+ /* โ”€โ”€ The invalid CURP field keeps its clear โœ• โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
73
+ * `CURP.EnterCURP.error` (76:36434) draws three things at once: the red field,
74
+ * the "โ— Invalid CURP" row AND the grey clear โœ• at the field's right edge.
75
+ * Core renders that button (`PrizmaTextField clearable`) but reveals it only
76
+ * under `:focus-within:not(--error)` (TextField.css:119-121) โ€” two guards a
77
+ * static error spec state can never satisfy, so the โœ• never appeared.
78
+ *
79
+ * This releases the guard for that ONE section. It is Core's own button, icon,
80
+ * box and color token โ€” nothing is hand-rolled (ยง9/ยง10) and no โœ• glyph is
81
+ * declared here; only Core's `display: none` is lifted, and only where the
82
+ * button already carries Core's own `--show` state (i.e. the field has a
83
+ * value, exactly as Core decides). Every other CURP section keeps Core's
84
+ * behaviour: `filled` (79:1553) draws NO โœ• and gets none.
85
+ *
86
+ * CORE REQUEST: `PrizmaTextField` needs the `forceState` prop `PrizmaDropdown`
87
+ * already has (the open ask in DEVIATIONS #PI-7) plus a relaxed guard so the
88
+ * clear affordance can coexist with the error treatment, as Figma draws it.
89
+ */
90
+ .curp-enter--error .prizma-input-textfield--error .prizma-input-textfield__clear--show {
91
+ display: inline-flex;
92
+ }
@@ -0,0 +1,75 @@
1
+ import React, { forwardRef } from 'react';
2
+ import {
3
+ PrizmaProcessingScreen,
4
+ type PrizmaProcessingScreenProps,
5
+ } from './ProcessingScreen';
6
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
7
+ import type { CurpProcessingVariant, CurpStrings } from './CurpStrings';
8
+ import './ScreenLayout.css';
9
+
10
+ export interface CurpProcessingScreenProps
11
+ extends Omit<
12
+ PrizmaProcessingScreenProps,
13
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
14
+ > {
15
+ /** Module copy โ€” this screen reads the `processing` slice. */
16
+ strings: CurpStrings;
17
+ /** Which spinner section to render. Default `verifying`. */
18
+ variant?: CurpProcessingVariant;
19
+ screenId?: string;
20
+ overrides?: PrizmaScreenOverrides;
21
+ onAction?: PrizmaScreenActionHandler;
22
+ }
23
+
24
+ /**
25
+ * CURP โ€” the two in-flight screens, built on the Processing archetype
26
+ * (GUIDELINES.md ยง6-C, `PrizmaProcessingScreen`).
27
+ *
28
+ * ONE screen for both purple spinner sections, which are the same frame with
29
+ * different copy:
30
+ * - `verifying` โ€” `CURP.EnterCURP.veryfing` (the Figma layer name carries the
31
+ * typo), the typed CURP being checked
32
+ * - `generating` โ€” `CURP.Gene.generating`, the key being derived from the form
33
+ *
34
+ * Both are the pure spinner + H2 case with no button, which is exactly what
35
+ * ยง6-F reserves for C rather than the Result archetype. Measured: the Figma
36
+ * `middle container` centres the 108-tall spinner block in its 570 box
37
+ * ((570 โˆ’ 108) / 2 = 231, the frame's own y), so the archetype's centred column
38
+ * is the right template โ€” the counter-case DEVIATIONS #11 anticipated.
39
+ */
40
+ export const CurpProcessingScreen = forwardRef<HTMLDivElement, CurpProcessingScreenProps>(
41
+ (
42
+ {
43
+ strings,
44
+ variant = 'verifying',
45
+ screenId = `curp-${variant}`,
46
+ overrides,
47
+ onAction,
48
+ ...shell
49
+ },
50
+ ref,
51
+ ) => {
52
+ const copy =
53
+ variant === 'generating'
54
+ ? strings.processing.generating
55
+ : strings.processing.verifying;
56
+
57
+ return (
58
+ <PrizmaProcessingScreen
59
+ ref={ref}
60
+ status="loading"
61
+ title={copy.title}
62
+ subtitle={copy.subtitle}
63
+ verifiedLabel={strings.verifiedLabel}
64
+ navLabel={strings.navLabel}
65
+ screenId={screenId}
66
+ overrides={overrides}
67
+ onAction={onAction}
68
+ {...shell}
69
+ />
70
+ );
71
+ },
72
+ );
73
+ CurpProcessingScreen.displayName = 'CurpProcessingScreen';
74
+
75
+ export default CurpProcessingScreen;
@@ -0,0 +1,80 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { CurpResultVariant, CurpStrings } from './CurpStrings';
5
+ import './ScreenLayout.css';
6
+
7
+ export interface CurpResultScreenProps
8
+ extends Omit<
9
+ PrizmaResultScreenProps,
10
+ 'status' | 'title' | 'subtitle' | 'glyph' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
11
+ > {
12
+ /** Module copy โ€” this screen reads the `result` slice its `variant` names. */
13
+ strings: CurpStrings;
14
+ /** Which verdict section to render. Default `verified`. */
15
+ variant?: CurpResultVariant;
16
+ screenId?: string;
17
+ overrides?: PrizmaScreenOverrides;
18
+ onAction?: PrizmaScreenActionHandler;
19
+ }
20
+
21
+ /**
22
+ * CURP โ€” the three verdicts, built on the Result archetype
23
+ * (GUIDELINES.md ยง6-F, `PrizmaResultScreen`).
24
+ *
25
+ * ONE screen for the module's three purple verdict sections, which share the
26
+ * archetype's skeleton โ€” nav โ†’ centred status mark + title block โ†’ CTA band โ†’
27
+ * anchored tag โ€” and differ only in status, copy and whether a button exists:
28
+ * - `verified` โ€” `CURP.EnterCURP.verify`, the positive mark. Figma draws
29
+ * NO button here: the flow advances on its own once the key checks out, so
30
+ * `ctaLabel` is optional in the copy contract and the band disappears.
31
+ * - `notVerified` โ€” `CURP.EnterCURP.notVerify`, the negative mark + "Try
32
+ * again". Its sibling section `CURP.EnterCURP.notVerifyID` is an
33
+ * override-free INSTANCE of the same frame โ€” same mark, same copy, same
34
+ * button โ€” so it is this screen, not a second one.
35
+ * - `generateError` โ€” `CURP.Gene.error`, the generator failing: negative mark,
36
+ * a supporting line, and "Edit information" back to the form.
37
+ *
38
+ * Core's outline status marks are used, not Figma's two-tone filled discs โ€” the
39
+ * icon-outline sweep of 2026-07-28 settled that for every module (DEVIATIONS
40
+ * #15, #DC-34), and this file's Figma is one sweep behind on all three frames.
41
+ */
42
+ export const CurpResultScreen = forwardRef<HTMLDivElement, CurpResultScreenProps>(
43
+ (
44
+ {
45
+ strings,
46
+ variant = 'verified',
47
+ screenId = `curp-result-${variant}`,
48
+ overrides,
49
+ onAction,
50
+ ...shell
51
+ },
52
+ ref,
53
+ ) => {
54
+ const copy =
55
+ variant === 'notVerified'
56
+ ? strings.result.notVerified
57
+ : variant === 'generateError'
58
+ ? strings.result.generateError
59
+ : strings.result.verified;
60
+
61
+ return (
62
+ <PrizmaResultScreen
63
+ ref={ref}
64
+ status={variant === 'verified' ? 'success' : 'error'}
65
+ title={copy.title}
66
+ subtitle={copy.subtitle}
67
+ ctaLabel={copy.ctaLabel}
68
+ verifiedLabel={strings.verifiedLabel}
69
+ navLabel={strings.navLabel}
70
+ screenId={screenId}
71
+ overrides={overrides}
72
+ onAction={onAction}
73
+ {...shell}
74
+ />
75
+ );
76
+ },
77
+ );
78
+ CurpResultScreen.displayName = 'CurpResultScreen';
79
+
80
+ export default CurpResultScreen;
@@ -0,0 +1,178 @@
1
+ // CURP โ€” copy contract.
2
+ //
3
+ // Figma: `๐Ÿ›๏ธ CURP - Screens specs + Localization` (YFYCUUSIxLV6I8jnwWgWDW,
4
+ // page 5:13191). TWO purple parent sections:
5
+ // CURP.EnterCURP โ€” default / focused / filled / error / loading /
6
+ // veryfing / verify / notVerify (+ notVerifyID)
7
+ // CURP.Gene โ€” default / dropdown / filled / generating / error / confirm
8
+ //
9
+ // The module is Mexico's national-ID (Clave รšnica de Registro de Poblaciรณn)
10
+ // lookup: the user either TYPES a CURP and it is verified, or โ€” when they do
11
+ // not know it โ€” GENERATES one from six identity fields and confirms the result.
12
+ //
13
+ // No hardcoded English anywhere in a screen: every visible string arrives here,
14
+ // so the host's locale pack drives the module (the Figma file ships ES + PT
15
+ // columns beside the EN one).
16
+
17
+ /**
18
+ * The `CURP.EnterCURP.*` input sections. All five draw the SAME layout โ€”
19
+ * nav โ†’ Title โ†’ Spacing/32 โ†’ one text field โ†’ primary + secondary CTA โ†’ tag โ€”
20
+ * and differ only in field content and CTA state, which is exactly what
21
+ * GUIDELINES ยง6-E means by "states are separate screens sharing the identical
22
+ * layout":
23
+ * - `default` โ€” empty field showing the placeholder, CTA enabled (Figma draws
24
+ * it enabled even with nothing typed)
25
+ * - `focused` โ€” empty field with the focus ring and the caret (keyboard up)
26
+ * - `filled` โ€” focus ring with a complete CURP typed
27
+ * - `error` โ€” negative field + clear โœ• + the "Invalid CURP" row
28
+ * - `loading` โ€” both actions inert while the lookup runs; the spinner rides the
29
+ * CTA, never the field (the Phone Input lesson, DEVIATIONS #PI-5)
30
+ */
31
+ export type CurpEnterState = 'default' | 'focused' | 'filled' | 'error' | 'loading';
32
+
33
+ /**
34
+ * The `CURP.Gene.*` form sections โ€” the six-field generator:
35
+ * - `default` โ€” every field empty on its placeholder
36
+ * - `dropdown` โ€” the Gender menu open over the form (Core's `forceOpen`)
37
+ * - `filled` โ€” every field carrying a value
38
+ */
39
+ export type CurpGenerateState = 'default' | 'dropdown' | 'filled';
40
+
41
+ /**
42
+ * The two spinner sections. `verifying` is `CURP.EnterCURP.veryfing` (the
43
+ * Figma layer name carries the typo); `generating` is `CURP.Gene.generating`.
44
+ */
45
+ export type CurpProcessingVariant = 'verifying' | 'generating';
46
+
47
+ /**
48
+ * The three verdict sections:
49
+ * - `verified` โ€” `CURP.EnterCURP.verify`, the positive mark, no CTA
50
+ * - `notVerified` โ€” `CURP.EnterCURP.notVerify`, the negative mark + retry
51
+ * - `generateError` โ€” `CURP.Gene.error`, generation failed + "Edit information"
52
+ */
53
+ export type CurpResultVariant = 'verified' | 'notVerified' | 'generateError';
54
+
55
+ /** One selectable row in the Gender / Birth-state menus. Runtime data, not
56
+ * copy โ€” the host supplies its own list (the state catalogue is 32 entries and
57
+ * the gender set is a product decision), exactly as Phone Input takes its dial
58
+ * codes as data rather than strings. */
59
+ export interface CurpOption {
60
+ /** Stable value, e.g. `F` / `M` / `X`, or a 2-letter state code. */
61
+ value: string;
62
+ /** The row label as drawn. */
63
+ label: string;
64
+ }
65
+
66
+ /** The values the generator form carries. Runtime data, never copy. */
67
+ export interface CurpGenerateValues {
68
+ firstName?: string;
69
+ firstLastName?: string;
70
+ secondLastName?: string;
71
+ /** A `CurpOption.value` from `genders`. */
72
+ gender?: string;
73
+ /** As typed into the date field, e.g. `07/10/1990`. */
74
+ dateOfBirth?: string;
75
+ /** A `CurpOption.value` from `states`. */
76
+ birthState?: string;
77
+ }
78
+
79
+ /** Copy for one labelled field of the generator form. */
80
+ export interface CurpFieldStrings {
81
+ /** Visible label ("First name"). The required `*` is appended by Core from
82
+ * `CurpStrings.requiredHint`, never baked into this string. */
83
+ label: string;
84
+ /** Placeholder inside the field ("Your first name *"). */
85
+ placeholder?: string;
86
+ }
87
+
88
+ export interface CurpStrings {
89
+ /** "verified by" attribution in the footer tag. */
90
+ verifiedLabel: string;
91
+ /** Accessible name for the logo nav row. */
92
+ navLabel?: string;
93
+ /**
94
+ * Suffix Core appends to a required field's label โ€” the `*` every
95
+ * `CURP.Gene.*` label carries. Passed to Core's own `requiredHint` prop so
96
+ * the marker is localizable and never hardcoded in a screen.
97
+ */
98
+ requiredHint?: string;
99
+
100
+ /** CURP.EnterCURP.{default,focused,filled,error,loading} */
101
+ enter: {
102
+ /** H2 ("Enter your CURP"). */
103
+ title: string;
104
+ /** H5 โ€” the purple sections draw none, kept for hosts that want one. */
105
+ subtitle?: string;
106
+ /** Field placeholder ("Your CURP"). */
107
+ placeholder: string;
108
+ /** Accessible label for the field โ€” Figma draws no visible label row, so
109
+ * the copy rides `aria-label` (the #PI-4 precedent). */
110
+ fieldLabel?: string;
111
+ /** Accessible name for the clear โœ• shown on the `error` section. */
112
+ clearLabel?: string;
113
+ /** Error row on the `error` state ("Invalid CURP"). */
114
+ errorText: string;
115
+ /** Primary CTA ("Continue"). */
116
+ ctaLabel: string;
117
+ /** Accessible busy label while the lookup runs (`loading`). */
118
+ ctaLoadingLabel?: string;
119
+ /** Secondary CTA below the primary ("I don't have a CURP") โ€” it branches
120
+ * into the generator. Emits `secondary`. */
121
+ noCurpLabel: string;
122
+ };
123
+
124
+ /** CURP.Gene.{default,dropdown,filled} */
125
+ generate: {
126
+ /** H2 ("Generate your CURP"). */
127
+ title: string;
128
+ /** H5 ("All fields marked with * are required."). */
129
+ subtitle?: string;
130
+ firstName: CurpFieldStrings;
131
+ firstLastName: CurpFieldStrings;
132
+ secondLastName: CurpFieldStrings;
133
+ gender: CurpFieldStrings & {
134
+ /** Search placeholder inside the open menu, when the host makes it
135
+ * searchable. */
136
+ searchPlaceholder?: string;
137
+ };
138
+ dateOfBirth: CurpFieldStrings & {
139
+ /** Accessible name for Core's trailing calendar affordance. */
140
+ calendarLabel?: string;
141
+ };
142
+ birthState: CurpFieldStrings & { searchPlaceholder?: string };
143
+ /** Primary CTA ("Generate"). */
144
+ ctaLabel: string;
145
+ /** Accessible busy label, for hosts that keep the user on the form while
146
+ * the generator runs instead of moving to the spinner screen. */
147
+ ctaLoadingLabel?: string;
148
+ };
149
+
150
+ /** CURP.Gene.confirm โ€” the generated CURP shown back for confirmation. */
151
+ confirm: {
152
+ /** H2 ("Confirm your CURP"). */
153
+ title: string;
154
+ subtitle?: string;
155
+ /** Accessible label for the read-back field (no visible label row). */
156
+ fieldLabel?: string;
157
+ /** Primary CTA ("Continue"). */
158
+ ctaLabel: string;
159
+ };
160
+
161
+ /** The two spinner screens. */
162
+ processing: {
163
+ /** CURP.EnterCURP.veryfing ("Verifying your CURPโ€ฆ"). */
164
+ verifying: { title: string; subtitle?: string };
165
+ /** CURP.Gene.generating ("Generating CURPโ€ฆ"). */
166
+ generating: { title: string; subtitle?: string };
167
+ };
168
+
169
+ /** The three verdict screens. */
170
+ result: {
171
+ /** CURP.EnterCURP.verify ("CURP verified!") โ€” Figma draws no CTA. */
172
+ verified: { title: string; subtitle?: string; ctaLabel?: string };
173
+ /** CURP.EnterCURP.notVerify ("CURP not verified" / "Try again"). */
174
+ notVerified: { title: string; subtitle?: string; ctaLabel: string };
175
+ /** CURP.Gene.error ("Couldn't generate CURP" / "Edit information"). */
176
+ generateError: { title: string; subtitle?: string; ctaLabel: string };
177
+ };
178
+ }
@@ -0,0 +1,223 @@
1
+ import React, { forwardRef, Fragment, type ReactNode } from 'react';
2
+ import {
3
+ PrizmaCheckbox,
4
+ type PrizmaConsentSegment,
5
+ } from '@incodetech/prizma-core-web/checkbox';
6
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
7
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
8
+ import type {
9
+ DataSharingConsentState,
10
+ DataSharingConsentStrings,
11
+ } from './DataSharingConsentStrings';
12
+ import './ScreenLayout.css';
13
+ import './DataSharingConsentLayout.css';
14
+
15
+ export interface DataSharingConsentConsentScreenProps
16
+ extends Omit<
17
+ PrizmaFormScreenProps,
18
+ | 'title'
19
+ | 'subtitle'
20
+ | 'ctaLabel'
21
+ | 'ctaDisabled'
22
+ | 'verifiedLabel'
23
+ | 'children'
24
+ | 'navLabel'
25
+ | 'linkLabel'
26
+ | 'linkContent'
27
+ // The column rhythm and the panning stack are the section's, not a host's.
28
+ | 'fieldsOffset'
29
+ | 'fieldsGap'
30
+ | 'scrollFields'
31
+ > {
32
+ /** Module copy โ€” this screen reads the `consent` slice. */
33
+ strings: DataSharingConsentStrings;
34
+ /** Which purple `User Consent` treatment to render. Default `default`. */
35
+ state?: DataSharingConsentState;
36
+ screenId?: string;
37
+ overrides?: PrizmaScreenOverrides;
38
+ onAction?: PrizmaScreenActionHandler;
39
+ }
40
+
41
+ /**
42
+ * Renders an ordered segment list as a line of copy carrying inline links โ€”
43
+ * the same contract Core's `PrizmaCheckbox size="L"` uses for its own body, so
44
+ * one shape of copy serves both the disclosure paragraph and the consent cards.
45
+ * A link is a real `<a href>` (it opens a legal document, it does not advance
46
+ * the flow) and it additionally emits `tertiary` so a host can intercept it โ€”
47
+ * distinct from `cta`, per the rule that a sentence carrying links is not one
48
+ * button (DEVIATIONS #PI-10).
49
+ */
50
+ function renderSegments(
51
+ segments: PrizmaConsentSegment[],
52
+ onLink?: () => void,
53
+ ): ReactNode {
54
+ return segments.map((seg, i) =>
55
+ typeof seg === 'string' ? (
56
+ <Fragment key={i}>{seg}</Fragment>
57
+ ) : (
58
+ <a
59
+ key={i}
60
+ className="data-sharing-consent__body-link"
61
+ href={seg.href}
62
+ target={seg.target}
63
+ rel={seg.rel}
64
+ onClick={(e) => {
65
+ seg.onClick?.(e);
66
+ onLink?.();
67
+ }}
68
+ >
69
+ {seg.text}
70
+ </a>
71
+ ),
72
+ );
73
+ }
74
+
75
+ /**
76
+ * Data Sharing Consent โ€” the biometric-disclosure consent screen, built on the
77
+ * Form archetype (GUIDELINES.md ยง6-E, `PrizmaFormScreen`).
78
+ *
79
+ * ONE screen for the whole purple `User Consent` section (27151:441): the
80
+ * master component (27151:321), the taller every-consent variant (29645:5306)
81
+ * and the `๐Ÿ”ง Behavior` frame (27198:2661) share an identical skeleton โ€” nav โ†’
82
+ * Title (H2, no subtitle) โ†’ the legal disclosure โ†’ one or more consent cards โ†’
83
+ * primary CTA โ†’ tag โ€” and differ ONLY in how many cards are listed, whether
84
+ * they are ticked, and whether the CTA is released.
85
+ *
86
+ * ONE screen for TWO MODULES, too โ€” `data-sharing-consent` and `user-consent`
87
+ * are separate SDK modules drawing this same screen, so a host passes its own
88
+ * `screenId` prefix and nothing else changes. See `DataSharingConsentStrings`.
89
+ *
90
+ * WHY ARCHETYPE E AND NOT G. ยง6-G names "consent" among its consumers and its
91
+ * title โ†’ list offset is the Spacing/24 this section draws, so G was the
92
+ * obvious first read. It cannot serve this module: `PrizmaListScreen` has **no
93
+ * `ctaDisabled` slot**, and the gated CTA is the whole point of a consent
94
+ * screen โ€” Figma greys "Continue" on two of the four sections and releases it
95
+ * on the other two. Archetype E is also the truthful reading of the middle: a
96
+ * `PrizmaCheckbox` is a real `<input type="checkbox">` that joins the form, so
97
+ * this is a form whose validity gates its CTA, not a static card list.
98
+ *
99
+ * THE COLUMN RHYTHM IS Spacing/24, NOT E'S DEFAULT 32/16. The master component
100
+ * (27151:321) draws a flat 24 down the whole middle โ€” title 0โ†’28, the
101
+ * disclosure at y=52, the disclosure ending 304 and the first consent card at
102
+ * 328 โ€” and the tall variant (29645:5306) repeats it between every card (459 โ†’
103
+ * 557 โ†’ 655, each 74 tall). E's own 32/16 is Phone Input's measured value
104
+ * (#PI-2) and stays the archetype default; this screen SELECTS 24 for both
105
+ * through the archetype's `fieldsOffset` / `fieldsGap` slots. Nothing is
106
+ * re-declared in `DataSharingConsentLayout.css` โ€” the values live once, in
107
+ * `FormScreen.css`, keyed off the Prizma spacing scale. DEVIATIONS #DSC-1.
108
+ *
109
+ * Three things are deliberate:
110
+ *
111
+ * 1. The consent card is Core's `PrizmaCheckbox size="L"` โ€” the component IS
112
+ * the tinted container Figma draws (Spacing/20/16 padding, the container
113
+ * radius, `Surface/Brand/50`, the 28ร—28 box, the Size-S body). Nothing about
114
+ * the card is composed here.
115
+ * 2. The boxes are STATIC, like every other spec state in this package: Core's
116
+ * `checked` is a required controlled prop and the component always wires its
117
+ * own `onChange`, so a screen carries one tick state and raises no React
118
+ * warning. `disabled` is NOT used โ€” Figma draws these cards on the live
119
+ * surface in every section, and `disabled` would repaint them
120
+ * `Surface/Neutral/50` (the #PI-6 lesson: never borrow a semantic state to
121
+ * make something inert).
122
+ * 3. The CTA is gated by `ctaDisabled`, which is Core's own
123
+ * `button/primary/surface|text/disabled` treatment โ€” the grey "Continue" the
124
+ * master frame draws.
125
+ * 4. The refusal states pass Core's `error` + `errorText` STRAIGHT THROUGH to
126
+ * the checkbox and paint nothing themselves. The card keeps its fill, takes
127
+ * no border, and the box keeps its default border; the message row below the
128
+ * card is the whole visible error (#1925). A screen that added a wash or an
129
+ * outline here would be re-deciding a call the component already made.
130
+ */
131
+ export const DataSharingConsentConsentScreen = forwardRef<
132
+ HTMLDivElement,
133
+ DataSharingConsentConsentScreenProps
134
+ >(
135
+ (
136
+ {
137
+ strings,
138
+ state = 'default',
139
+ screenId = `data-sharing-consent-${state}`,
140
+ className,
141
+ overrides,
142
+ onAction,
143
+ ...shell
144
+ },
145
+ ref,
146
+ ) => {
147
+ // The master frame lists the mandatory consent alone; the tall variant and
148
+ // the Behavior frame list every consent the flow asks for.
149
+ const listsEveryConsent =
150
+ state === 'multiple' ||
151
+ state === 'multipleAccepted' ||
152
+ state === 'multipleRejected';
153
+ // Ticked on the two sections Figma draws with the blue box and the released
154
+ // CTA; unticked โ€” and therefore CTA-greyed โ€” everywhere else.
155
+ const accepted = state === 'accepted' || state === 'multipleAccepted';
156
+ // Continue was pressed and refused. Never true at the same time as
157
+ // `accepted`: there is nothing to refuse once the consents are ticked.
158
+ const rejected = state === 'rejected' || state === 'multipleRejected';
159
+
160
+ const items = listsEveryConsent
161
+ ? strings.consent.items
162
+ : strings.consent.items.slice(0, 1);
163
+
164
+ return (
165
+ <PrizmaFormScreen
166
+ ref={ref}
167
+ /* Scopes the module's one text style (the legal disclosure paragraph
168
+ and its inline document link). It declares no spacing. */
169
+ className={['data-sharing-consent', className].filter(Boolean).join(' ')}
170
+ title={strings.consent.title}
171
+ subtitle={strings.consent.subtitle}
172
+ /* The section's flat Spacing/24 column rhythm โ€” selected from the
173
+ spacing scale, not declared. See the docstring above. */
174
+ fieldsOffset="24"
175
+ fieldsGap="24"
176
+ /* The disclosure is host-supplied legal copy: it can outgrow the 844
177
+ frame on ANY of the four states, so the stack pans on all of them โ€”
178
+ the archetype clips it Spacing/16 above the CTA, as 29645:5306 draws
179
+ the sliced second card. */
180
+ scrollFields
181
+ ctaLabel={strings.consent.ctaLabel}
182
+ /* "Continue" stays inert until the consents are ticked โ€” Core's own
183
+ disabled primary, the grey button the master frame draws. */
184
+ ctaDisabled={!accepted}
185
+ verifiedLabel={strings.verifiedLabel}
186
+ navLabel={strings.navLabel}
187
+ screenId={screenId}
188
+ overrides={overrides}
189
+ onAction={onAction}
190
+ {...shell}
191
+ >
192
+ <p className="data-sharing-consent__body">
193
+ {renderSegments(strings.consent.body, () =>
194
+ onAction?.({ type: 'tertiary', screenId }),
195
+ )}
196
+ </p>
197
+ {items.map((item, i) => (
198
+ <PrizmaCheckbox
199
+ key={i}
200
+ size="L"
201
+ checked={accepted}
202
+ aria-label={item.ariaLabel}
203
+ /* A refusal is about the MANDATORY consents only โ€” an optional one
204
+ left unticked is a choice, not a mistake โ€” and it cannot survive
205
+ the box being ticked. */
206
+ error={rejected && !!item.required && !accepted}
207
+ errorText={strings.consent.errorText}
208
+ /* The `*` on a mandatory consent rides `requiredHint` so it stays
209
+ localizable rather than being baked into the copy (#CURP-4). */
210
+ segments={
211
+ item.required && strings.requiredHint
212
+ ? [...item.segments, strings.requiredHint]
213
+ : item.segments
214
+ }
215
+ />
216
+ ))}
217
+ </PrizmaFormScreen>
218
+ );
219
+ },
220
+ );
221
+ DataSharingConsentConsentScreen.displayName = 'DataSharingConsentConsentScreen';
222
+
223
+ export default DataSharingConsentConsentScreen;