@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
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,55 @@
1
+ /* CaptureOverlay — the one shared capture vignette (GUIDELINES.md §6-D, §7).
2
+ *
3
+ * The transparent window carries the scrim as an oversized box-shadow, so the
4
+ * dimmed surround always hugs the window's rounded geometry. Hardcoded values
5
+ * below are geometry fixed by design (verified absent from the token set):
6
+ * the 2000px scrim spread, the rgba(0,0,0,.8) scrim, the 35%-white default
7
+ * border, and the ID-1 card aspect ratio.
8
+ */
9
+
10
+ .prizma-capture-overlay {
11
+ position: relative;
12
+ overflow: hidden;
13
+ flex-shrink: 0;
14
+ border-radius: var(--prizma-border-radius-medium);
15
+ border: 4px solid rgba(255, 255, 255, 0.35); /* hardcoded — Figma overlay frame, no token */
16
+ box-shadow: 0 0 0 2000px rgba(0, 0, 0, 0.8); /* hardcoded — the vignette scrim, no token */
17
+ }
18
+
19
+ /* Ring (face): 342×342 at the 390 reference → 87.7cqw, capped at design size. */
20
+ .prizma-capture-overlay--ring {
21
+ width: min(87.7cqw, 342px);
22
+ aspect-ratio: 1;
23
+ border-radius: var(--prizma-border-radius-full);
24
+ margin-inline: auto;
25
+ }
26
+
27
+ /* Landscape (ID card): full content width, ID-1 card ratio. */
28
+ .prizma-capture-overlay--landscape {
29
+ width: 100%;
30
+ aspect-ratio: 1.586; /* hardcoded — ISO/IEC 7810 ID-1 card ratio */
31
+ }
32
+
33
+ /* Portrait (document / proof of address): full content width, letter-ish ratio. */
34
+ .prizma-capture-overlay--portrait {
35
+ width: 100%;
36
+ aspect-ratio: 0.72; /* hardcoded — Studio portrait document frame ratio */
37
+ }
38
+
39
+ .prizma-capture-overlay--focused {
40
+ border-color: var(--prizma-border-status-focus);
41
+ }
42
+
43
+ .prizma-capture-overlay--success {
44
+ border-color: var(--prizma-border-status-positive-static);
45
+ }
46
+
47
+ /* Window content (camera feed / captured still) fills the window. */
48
+ .prizma-capture-overlay > img,
49
+ .prizma-capture-overlay > video {
50
+ position: absolute;
51
+ inset: 0;
52
+ width: 100%;
53
+ height: 100%;
54
+ object-fit: cover;
55
+ }
@@ -0,0 +1,56 @@
1
+ import React, { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ import './CaptureOverlay.css';
3
+
4
+ export type PrizmaCaptureOverlayShape = 'ring' | 'portrait' | 'landscape';
5
+ export type PrizmaCaptureOverlayState = 'default' | 'focused' | 'success';
6
+
7
+ export interface PrizmaCaptureOverlayProps extends ComponentPropsWithoutRef<'div'> {
8
+ /** Window geometry: `ring` (face, circular), `landscape` (ID card),
9
+ * `portrait` (document / proof of address). */
10
+ shape: PrizmaCaptureOverlayShape;
11
+ /** Border treatment: `default` (35% white), `focused` (focus token),
12
+ * `success` (positive token). */
13
+ state?: PrizmaCaptureOverlayState;
14
+ /** Content inside the transparent window (camera feed / captured still). */
15
+ children?: ReactNode;
16
+ }
17
+
18
+ /**
19
+ * @deprecated DO NOT USE — scheduled for removal. Use Core instead:
20
+ * `PrizmaIdCapture` (`type="id" | "passport" | "poa"`, `mode="overlay"`,
21
+ * `scrim`) or `PrizmaSelfieCapture`.
22
+ *
23
+ * This component was written from the Studio-era guidelines' description of the
24
+ * capture vignette without first checking that the design system already ships
25
+ * it. It does, and better: Core's scrim is
26
+ * `box-shadow: 0 0 0 200vmax var(--prizma-surface-neutral-900-80-static)`
27
+ * (tokenized, viewport-relative) and it carries the real id-h / id-v /
28
+ * passport-h / passport-v / glare geometry, while this file hardcodes
29
+ * `rgba(0,0,0,.8)` at a fixed 2000px spread over three generic shapes.
30
+ *
31
+ * Keeping a local re-implementation of a Core primitive is exactly the drift
32
+ * this package exists to end. Zero modules use it (face-capture and face-match
33
+ * use `PrizmaSelfieCapture`; document-capture uses `PrizmaIdCapture`).
34
+ * DEVIATIONS.md #F-26.
35
+ */
36
+ export const PrizmaCaptureOverlay = forwardRef<HTMLDivElement, PrizmaCaptureOverlayProps>(
37
+ ({ shape, state = 'default', className, children, ...rest }, ref) => (
38
+ <div
39
+ ref={ref}
40
+ className={[
41
+ 'prizma-capture-overlay',
42
+ `prizma-capture-overlay--${shape}`,
43
+ `prizma-capture-overlay--${state}`,
44
+ className ?? '',
45
+ ]
46
+ .filter(Boolean)
47
+ .join(' ')}
48
+ {...rest}
49
+ >
50
+ {children}
51
+ </div>
52
+ ),
53
+ );
54
+ PrizmaCaptureOverlay.displayName = 'PrizmaCaptureOverlay';
55
+
56
+ export default PrizmaCaptureOverlay;
@@ -0,0 +1,121 @@
1
+ import React, { forwardRef, type ReactNode } from 'react';
2
+ import {
3
+ PrizmaSelfieCapture,
4
+ type PrizmaSelfieCaptureState,
5
+ } from '@incodetech/prizma-core-web/selfie-capture';
6
+ import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
7
+ import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
8
+ import { PrizmaScreenNav } from './ScreenNav';
9
+ import type {
10
+ PrizmaScreenActionHandler,
11
+ PrizmaScreenChromeProps,
12
+ PrizmaScreenOverrides,
13
+ } from './types';
14
+ import './ScreenLayout.css';
15
+
16
+ export interface PrizmaCaptureScreenProps
17
+ extends Omit<PrizmaScreenShellProps, 'dark' | 'title'>,
18
+ PrizmaScreenChromeProps {
19
+ /** Where the selfie flow is — forwarded to PrizmaSelfieCapture. */
20
+ state?: PrizmaSelfieCaptureState;
21
+ /**
22
+ * Is the LIVE CAMERA FEED open? Default `true`.
23
+ *
24
+ * Only feed-open screens count as "capture screens" (owner rule 2026-08-18):
25
+ * `uploading` / `processing` / `success` reuse this archetype's geometry —
26
+ * Core dissolves the stage into a spinner or status mark (DEVIATIONS #11) —
27
+ * but the camera is closed, so they are ordinary screens: header shown, and
28
+ * they follow the app theme instead of pinning light.
29
+ */
30
+ cameraOpen?: boolean;
31
+ /** Live camera feed (<video>) or captured still (<img>). */
32
+ camera?: ReactNode;
33
+ /** Instruction line under the ring (e.g. "Look at the camera"). Rendered by
34
+ * PrizmaSelfieCapture as Headline/H4 at the designed offset — this is the
35
+ * ONLY place a capture instruction belongs (DEVIATIONS #12, #14). */
36
+ feedbackText?: string;
37
+ /** Manual capture mode — shutter button + manual instruction copy. */
38
+ isManual?: boolean;
39
+ manualFeedbackText?: string;
40
+ /** Per-state status copy (uploading / success / error / warning). */
41
+ statusLabels?: Partial<Record<PrizmaSelfieCaptureState, string>>;
42
+ /** "verified by" attribution copy for the footer tag. */
43
+ verifiedLabel: string;
44
+ navLabel?: string;
45
+ screenId?: string;
46
+ overrides?: PrizmaScreenOverrides;
47
+ onAction?: PrizmaScreenActionHandler;
48
+ }
49
+
50
+ /**
51
+ * Archetype B — Capture / Liveness ring (GUIDELINES.md §6-B).
52
+ * Nav → capture stage → tag pinned to the bottom. The ring offset (40), the
53
+ * instruction gap (32), the instruction typography (H4), the silhouette,
54
+ * and every verdict state live INSIDE Core's PrizmaSelfieCapture — this
55
+ * archetype adds no offsets of its own (DEVIATIONS #12, #14) and never
56
+ * re-implements any of it (§7).
57
+ *
58
+ * Core also models `uploading` / `success` as capture STATES (the stage
59
+ * dissolves into the spinner / status title in the ring's own slot), so
60
+ * loading and result screens of a capture module use this archetype too —
61
+ * not the centered Processing archetype (DEVIATIONS #11).
62
+ */
63
+ export const PrizmaCaptureScreen = forwardRef<HTMLDivElement, PrizmaCaptureScreenProps>(
64
+ (
65
+ {
66
+ showHeader,
67
+ showFooter = true,
68
+ cameraOpen = true,
69
+ state,
70
+ camera,
71
+ feedbackText,
72
+ isManual,
73
+ manualFeedbackText,
74
+ statusLabels,
75
+ verifiedLabel,
76
+ navLabel,
77
+ screenId,
78
+ overrides,
79
+ onAction,
80
+ ...shell
81
+ },
82
+ ref,
83
+ ) => (
84
+ // Pin light ONLY while the camera feed is open: Core paints the live
85
+ // capture area with Static inks because "the capture screen stays WHITE in
86
+ // both modes — light is needed for the shot" (SelfieCapture.css, owner
87
+ // 2026-07-14). Feed-closed screens are ordinary screens and follow the app.
88
+ // DEVIATIONS #F-27.
89
+ <PrizmaScreenShell ref={ref} theme={cameraOpen ? 'light' : undefined} {...shell}>
90
+ {/* Feed-open capture screens are footer-only by default: dense screens,
91
+ and the space is reserved for flashlight / hologram / accepted
92
+ documents. Supplying `overrides.logo` IS the client opt-in. Once the
93
+ feed closes (uploading / processing / success) the screen is ordinary
94
+ and the header returns. Owner rule 2026-08-18. */}
95
+ <PrizmaScreenNav
96
+ reserved={!(showHeader ?? (cameraOpen ? Boolean(overrides?.logo) : true))}
97
+ logo={overrides?.logo}
98
+ navLabel={navLabel}
99
+ />
100
+ <div className="prizma-screen-layout__content prizma-screen-layout__content--capture">
101
+ <PrizmaSelfieCapture
102
+ state={state}
103
+ camera={camera}
104
+ showFeedback={Boolean(feedbackText ?? manualFeedbackText)}
105
+ feedbackText={feedbackText}
106
+ isManual={isManual}
107
+ manualFeedbackText={manualFeedbackText}
108
+ statusLabels={statusLabels}
109
+ />
110
+ {showFooter ? (
111
+ <div className="prizma-screen-layout__footer prizma-screen-layout__footer--pinned">
112
+ <PrizmaTag label={verifiedLabel} />
113
+ </div>
114
+ ) : null}
115
+ </div>
116
+ </PrizmaScreenShell>
117
+ ),
118
+ );
119
+ PrizmaCaptureScreen.displayName = 'PrizmaCaptureScreen';
120
+
121
+ export default PrizmaCaptureScreen;
@@ -0,0 +1,75 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
3
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { CurpStrings } from './CurpStrings';
6
+ import './ScreenLayout.css';
7
+
8
+ export interface CurpConfirmScreenProps
9
+ extends Omit<
10
+ PrizmaFormScreenProps,
11
+ 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
12
+ > {
13
+ /** Module copy — this screen reads the `confirm` slice. */
14
+ strings: CurpStrings;
15
+ /** The CURP the generator produced, read back for confirmation. */
16
+ value?: string;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+
22
+ /**
23
+ * CURP — the generated-CURP confirmation, built on the Form archetype
24
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
25
+ *
26
+ * Figma: the purple `CURP.Gene.confirm` section. Structurally it is
27
+ * `CurpEnterScreen` with one field and one CTA — nav → Title → Spacing/32 →
28
+ * field → CTA → tag — but the field is a READ-BACK of what the generator
29
+ * produced rather than an input, and there is no secondary action, so it stays
30
+ * its own screen rather than a sixth state of the entry form.
31
+ *
32
+ * The field is the one place in this module where Core's disabled surface is
33
+ * correct: Figma paints it `input/surface/disabled` grey with the value in full
34
+ * ink, which is exactly what `disabled` renders. (`readOnly` would paint the
35
+ * same grey and is the semantically better match, but it is the prop the pilot
36
+ * was told not to reach for by reflex — DEVIATIONS #PI-6 — and on a static spec
37
+ * screen the two are visually identical, so the plainer one is used.)
38
+ */
39
+ export const CurpConfirmScreen = forwardRef<HTMLDivElement, CurpConfirmScreenProps>(
40
+ (
41
+ {
42
+ strings,
43
+ value,
44
+ screenId = 'curp-confirm',
45
+ overrides,
46
+ onAction,
47
+ ...shell
48
+ },
49
+ ref,
50
+ ) => (
51
+ <PrizmaFormScreen
52
+ ref={ref}
53
+ title={strings.confirm.title}
54
+ subtitle={strings.confirm.subtitle}
55
+ ctaLabel={strings.confirm.ctaLabel}
56
+ verifiedLabel={strings.verifiedLabel}
57
+ navLabel={strings.navLabel}
58
+ screenId={screenId}
59
+ overrides={overrides}
60
+ onAction={onAction}
61
+ {...shell}
62
+ >
63
+ <PrizmaTextField
64
+ /* No visible label row in the section — the title carries the meaning
65
+ (DEVIATIONS #PI-4). */
66
+ aria-label={strings.confirm.fieldLabel}
67
+ defaultValue={value ?? ''}
68
+ disabled
69
+ />
70
+ </PrizmaFormScreen>
71
+ ),
72
+ );
73
+ CurpConfirmScreen.displayName = 'CurpConfirmScreen';
74
+
75
+ export default CurpConfirmScreen;
@@ -0,0 +1,149 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
3
+ import { PrizmaButton } from '@incodetech/prizma-core-web/button';
4
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
5
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
6
+ import type { CurpEnterState, CurpStrings } from './CurpStrings';
7
+ import './ScreenLayout.css';
8
+ import './CurpLayout.css';
9
+
10
+ export interface CurpEnterScreenProps
11
+ extends Omit<
12
+ PrizmaFormScreenProps,
13
+ 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel' | 'linkContent'
14
+ > {
15
+ /** Module copy — this screen reads the `enter` slice. */
16
+ strings: CurpStrings;
17
+ /** Which purple `CURP.EnterCURP.*` section to render. Default `default`. */
18
+ state?: CurpEnterState;
19
+ /** The CURP as typed. Empty renders the placeholder. */
20
+ value?: string;
21
+ screenId?: string;
22
+ overrides?: PrizmaScreenOverrides;
23
+ onAction?: PrizmaScreenActionHandler;
24
+ }
25
+
26
+ /**
27
+ * CURP — the CURP-entry screen, built on the Form archetype
28
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
29
+ *
30
+ * ONE screen for all five purple `CURP.EnterCURP.*` input sections
31
+ * (`default` / `focused` / `filled` / `error` / `loading`): measured against the
32
+ * 390 frames they share an identical skeleton — nav → Title (H2, no subtitle)
33
+ * → Spacing/32 → a single text field → primary CTA → secondary CTA → tag — and
34
+ * differ ONLY in field content, field treatment and CTA state.
35
+ *
36
+ * Three things are deliberate, each a lesson the Phone Input pilot paid for:
37
+ *
38
+ * 1. The field is UNCONTROLLED (`defaultValue`). A screen is one static spec
39
+ * state, so no `onChange` is needed — and Core's `readOnly`, the other way
40
+ * to make a field inert, paints the DISABLED grey surface on states Figma
41
+ * draws white (DEVIATIONS #PI-6). `disabled` is set ONLY on `loading`, the
42
+ * one section Figma actually greys.
43
+ * 2. `focused` and `filled` get Core's OWN `--focused` modifier through
44
+ * `className` — the class its CSS already implements beside `:focus-within`.
45
+ * `PrizmaTextField` has no `forceState` prop yet, unlike `PrizmaDropdown`
46
+ * (DEVIATIONS #PI-7); nothing is re-styled here.
47
+ * 3. The in-flight spinner rides the CTA (`ctaLoading`), never the field
48
+ * (DEVIATIONS #PI-5).
49
+ *
50
+ * The secondary action, "I don't have a CURP", is drawn by every section as a
51
+ * full-width OUTLINED button — Core's `PrizmaButton variant="secondary"` — sat
52
+ * Spacing/16 under the primary. Archetype E has no `secondaryCtaLabel` slot
53
+ * (archetype F does), so the button is composed into the archetype's
54
+ * `linkContent` slot: no primitive is invented, no layout is declared, and the
55
+ * two actions stay distinguishable (`cta` vs `secondary`, the #PI-10 rule).
56
+ * The gap is reported for promotion — see the module's DEVIATIONS rows.
57
+ */
58
+ export const CurpEnterScreen = forwardRef<HTMLDivElement, CurpEnterScreenProps>(
59
+ (
60
+ {
61
+ strings,
62
+ state = 'default',
63
+ value,
64
+ screenId = `curp-enter-${state}`,
65
+ className,
66
+ overrides,
67
+ onAction,
68
+ ...shell
69
+ },
70
+ ref,
71
+ ) => {
72
+ // Figma treats the five sections as four distinct field treatments:
73
+ // `loading` greys the field and both actions (the lookup is in flight and
74
+ // the form is inert); `error` paints the negative surface with the clear ✕
75
+ // and the "Invalid CURP" row; `focused` / `filled` draw the blue focus ring
76
+ // with the caret; `default` is the plain resting field on the white
77
+ // surface.
78
+ const busy = state === 'loading';
79
+ const invalid = state === 'error';
80
+ const focused = state === 'focused' || state === 'filled';
81
+
82
+ return (
83
+ <PrizmaFormScreen
84
+ ref={ref}
85
+ /* Scopes the one module rule that lets the `error` section keep the
86
+ clear ✕ Figma draws inside the invalid field — Core renders the
87
+ button but hides it behind a `:focus-within:not(--error)` guard a
88
+ static spec state can never satisfy. See CurpLayout.css and the Core
89
+ request recorded there. Nothing is hand-rolled: the rule only lifts
90
+ Core's `display: none`. */
91
+ className={[
92
+ 'curp-enter',
93
+ invalid ? 'curp-enter--error' : '',
94
+ className,
95
+ ]
96
+ .filter(Boolean)
97
+ .join(' ')}
98
+ title={strings.enter.title}
99
+ subtitle={strings.enter.subtitle}
100
+ ctaLabel={strings.enter.ctaLabel}
101
+ /* The `loading` section swaps the CTA label for Core's spinner. */
102
+ ctaLoading={busy}
103
+ ctaLoadingLabel={strings.enter.ctaLoadingLabel}
104
+ linkContent={
105
+ <PrizmaButton
106
+ variant="secondary"
107
+ size="L"
108
+ /* Figma greys this action too while the lookup runs. */
109
+ disabled={busy}
110
+ onClick={() => onAction?.({ type: 'secondary', screenId })}
111
+ >
112
+ {strings.enter.noCurpLabel}
113
+ </PrizmaButton>
114
+ }
115
+ verifiedLabel={strings.verifiedLabel}
116
+ navLabel={strings.navLabel}
117
+ screenId={screenId}
118
+ overrides={overrides}
119
+ onAction={onAction}
120
+ {...shell}
121
+ >
122
+ <PrizmaTextField
123
+ className={focused ? 'prizma-input-textfield--focused' : undefined}
124
+ /* Figma draws no visible label row — the title and the placeholder
125
+ carry the meaning — so the copy rides `aria-label` rather than
126
+ Core's visible `label` slot (DEVIATIONS #PI-4). */
127
+ aria-label={strings.enter.fieldLabel}
128
+ placeholder={strings.enter.placeholder}
129
+ defaultValue={value ?? ''}
130
+ /* A CURP is an 18-character uppercase key. */
131
+ autoCapitalize="characters"
132
+ autoComplete="off"
133
+ spellCheck={false}
134
+ disabled={busy}
135
+ error={invalid}
136
+ errorText={invalid ? strings.enter.errorText : undefined}
137
+ /* The clear ✕ is drawn only on the error section (76:36434); the
138
+ `filled` section (79:1553) draws none. Core still owns WHEN it
139
+ shows — its `--show` state needs a value in the field. */
140
+ clearable={invalid}
141
+ clearLabel={strings.enter.clearLabel}
142
+ />
143
+ </PrizmaFormScreen>
144
+ );
145
+ },
146
+ );
147
+ CurpEnterScreen.displayName = 'CurpEnterScreen';
148
+
149
+ export default CurpEnterScreen;
@@ -0,0 +1,172 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
3
+ import { PrizmaDateField } from '@incodetech/prizma-core-web/date-field';
4
+ import { PrizmaDropdown } from '@incodetech/prizma-core-web/dropdown';
5
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
6
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
7
+ import type {
8
+ CurpGenerateState,
9
+ CurpGenerateValues,
10
+ CurpOption,
11
+ CurpStrings,
12
+ } from './CurpStrings';
13
+ import './ScreenLayout.css';
14
+ import './CurpLayout.css';
15
+
16
+ export interface CurpGenerateScreenProps
17
+ extends Omit<
18
+ PrizmaFormScreenProps,
19
+ 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
20
+ > {
21
+ /** Module copy — this screen reads the `generate` slice. */
22
+ strings: CurpStrings;
23
+ /** Which purple `CURP.Gene.*` section to render. Default `default`. */
24
+ state?: CurpGenerateState;
25
+ /** The six field values. Empty fields fall back to their placeholders. */
26
+ values?: CurpGenerateValues;
27
+ /** Selectable genders. Runtime data, not copy — the host owns the set. */
28
+ genders?: CurpOption[];
29
+ /** Selectable birth states (the 32 Mexican entities plus "born abroad").
30
+ * Runtime data — a catalogue, never a string table. */
31
+ states?: CurpOption[];
32
+ screenId?: string;
33
+ overrides?: PrizmaScreenOverrides;
34
+ onAction?: PrizmaScreenActionHandler;
35
+ }
36
+
37
+ /**
38
+ * CURP — the generator form, built on the Form archetype
39
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
40
+ *
41
+ * ONE screen for the three purple `CURP.Gene.*` form sections
42
+ * (`default` / `dropdown` / `filled`): identical layout — nav → Title (H2 +
43
+ * H5) → Spacing/32 → six labelled fields at Spacing/16 → CTA → tag — differing
44
+ * only in field content and whether the Gender menu is open.
45
+ *
46
+ * Unlike `CurpEnterScreen`, these fields DO carry visible labels: Figma draws
47
+ * "First name *", "Gender *" and so on above every field, which is Core's
48
+ * `label` slot exactly. The required `*` is Core's `requiredHint` suffix rather
49
+ * than part of the label string, so a locale can move or replace the marker.
50
+ *
51
+ * The date field is Core's `PrizmaDateField` (the `Input / Date` kind, with its
52
+ * DD/MM/YYYY mask and trailing calendar affordance) — the picker itself belongs
53
+ * to the OS by Core's contract, so no `onCalendarClick` is wired on a static
54
+ * spec screen and the icon stays decorative.
55
+ *
56
+ * The `dropdown` section IS the open-menu spec state, which Core exposes as the
57
+ * documentation-only `forceOpen` (a screen is one static state, never a live
58
+ * interaction) — the same mechanism Phone Input's `countryCode` section uses.
59
+ */
60
+ export const CurpGenerateScreen = forwardRef<HTMLDivElement, CurpGenerateScreenProps>(
61
+ (
62
+ {
63
+ strings,
64
+ state = 'default',
65
+ values,
66
+ genders = [],
67
+ states = [],
68
+ screenId = `curp-generate-${state}`,
69
+ className,
70
+ overrides,
71
+ onAction,
72
+ ...shell
73
+ },
74
+ ref,
75
+ ) => {
76
+ const copy = strings.generate;
77
+
78
+ return (
79
+ <PrizmaFormScreen
80
+ ref={ref}
81
+ /* Scopes the two module rules in CurpLayout.css (see the foundation and
82
+ Core requests recorded there):
83
+ - `--scroll` lets the six-field stack scroll inside the 844 frame
84
+ instead of overflowing its box and painting over the CTA. EVERY
85
+ section gets it, `dropdown` included — Figma draws "Generate"
86
+ clear and unobstructed under the open menu.
87
+ - `--menu-open` flips Core's absolutely-positioned menu above its
88
+ trigger on the one section that forces it open, so the three
89
+ gender rows stay inside the scrolling column. */
90
+ className={[
91
+ 'curp-generate',
92
+ 'curp-generate--scroll',
93
+ state === 'dropdown' ? 'curp-generate--menu-open' : '',
94
+ className,
95
+ ]
96
+ .filter(Boolean)
97
+ .join(' ')}
98
+ title={copy.title}
99
+ subtitle={copy.subtitle}
100
+ ctaLabel={copy.ctaLabel}
101
+ ctaLoadingLabel={copy.ctaLoadingLabel}
102
+ verifiedLabel={strings.verifiedLabel}
103
+ navLabel={strings.navLabel}
104
+ screenId={screenId}
105
+ overrides={overrides}
106
+ onAction={onAction}
107
+ {...shell}
108
+ >
109
+ {/* Every field is UNCONTROLLED: a screen is one static spec state, so
110
+ no `onChange` is needed — and Core's `readOnly` would paint the
111
+ DISABLED grey surface on states Figma draws white
112
+ (DEVIATIONS #PI-6). */}
113
+ <PrizmaTextField
114
+ label={copy.firstName.label}
115
+ placeholder={copy.firstName.placeholder}
116
+ required
117
+ requiredHint={strings.requiredHint}
118
+ autoComplete="off"
119
+ defaultValue={values?.firstName ?? ''}
120
+ />
121
+ <PrizmaTextField
122
+ label={copy.firstLastName.label}
123
+ placeholder={copy.firstLastName.placeholder}
124
+ required
125
+ requiredHint={strings.requiredHint}
126
+ autoComplete="off"
127
+ defaultValue={values?.firstLastName ?? ''}
128
+ />
129
+ <PrizmaTextField
130
+ label={copy.secondLastName.label}
131
+ placeholder={copy.secondLastName.placeholder}
132
+ required
133
+ requiredHint={strings.requiredHint}
134
+ autoComplete="off"
135
+ defaultValue={values?.secondLastName ?? ''}
136
+ />
137
+ <PrizmaDropdown
138
+ label={copy.gender.label}
139
+ placeholder={copy.gender.placeholder}
140
+ required
141
+ requiredHint={strings.requiredHint}
142
+ options={genders}
143
+ defaultValue={values?.gender ?? null}
144
+ searchPlaceholder={copy.gender.searchPlaceholder}
145
+ /* The `dropdown` section is the open Gender menu. */
146
+ forceOpen={state === 'dropdown'}
147
+ />
148
+ <PrizmaDateField
149
+ label={copy.dateOfBirth.label}
150
+ placeholder={copy.dateOfBirth.placeholder}
151
+ required
152
+ requiredHint={strings.requiredHint}
153
+ calendarLabel={copy.dateOfBirth.calendarLabel}
154
+ defaultValue={values?.dateOfBirth ?? ''}
155
+ />
156
+ <PrizmaDropdown
157
+ label={copy.birthState.label}
158
+ placeholder={copy.birthState.placeholder}
159
+ required
160
+ requiredHint={strings.requiredHint}
161
+ options={states}
162
+ defaultValue={values?.birthState ?? null}
163
+ searchable
164
+ searchPlaceholder={copy.birthState.searchPlaceholder}
165
+ />
166
+ </PrizmaFormScreen>
167
+ );
168
+ },
169
+ );
170
+ CurpGenerateScreen.displayName = 'CurpGenerateScreen';
171
+
172
+ export default CurpGenerateScreen;