@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,149 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
5
+ import { PrizmaDateField } from '@incodetech/prizma-core-web/date-field';
6
+ import { PrizmaDropdown, } from '@incodetech/prizma-core-web/dropdown';
7
+ import { PrizmaCountryFlag } from '@incodetech/prizma-core-web/combined';
8
+ import { PrizmaFormScreen } from './FormScreen';
9
+ import './ScreenLayout.css';
10
+ import './FormsLayout.css';
11
+ /**
12
+ * The row stacks each purple section draws, in order. Structure belongs to the
13
+ * screen (the archetype and Core own everything visual); only the labels and
14
+ * placeholders come from `FormsStrings`.
15
+ */
16
+ const PRESET_ROWS = {
17
+ // `forms.name` — the three-name form.
18
+ name: [
19
+ { key: 'fullName', kind: 'text', requirement: 'required' },
20
+ { key: 'firstName', kind: 'text', requirement: 'required' },
21
+ { key: 'lastName', kind: 'text', requirement: 'none' },
22
+ ],
23
+ // `longform.customizable` — the five-row customizable form.
24
+ profile: [
25
+ { key: 'fullName', kind: 'text', requirement: 'required' },
26
+ { key: 'residence', kind: 'country', requirement: 'required' },
27
+ { key: 'occupation', kind: 'select', requirement: 'none' },
28
+ { key: 'dob', kind: 'date', requirement: 'none' },
29
+ { key: 'referral', kind: 'select', requirement: 'none' },
30
+ ],
31
+ // `🧩 Long forms - pre-defined cases` — the four-row eKYC form.
32
+ eKyc: [
33
+ { key: 'idNumber', kind: 'text', requirement: 'required' },
34
+ { key: 'email', kind: 'email', requirement: 'required' },
35
+ { key: 'residence', kind: 'country', requirement: 'required' },
36
+ { key: 'dob', kind: 'date', requirement: 'required' },
37
+ ],
38
+ };
39
+ /**
40
+ * The "Forms and data entry - Optional / Required" pair documents the SAME
41
+ * eKYC form with a different marker on each row — that is the whole point of
42
+ * the section, so the override is structure and lives here.
43
+ */
44
+ const OPTIONAL_VARIANT = {
45
+ idNumber: 'none',
46
+ email: 'required',
47
+ residence: 'optional',
48
+ dob: 'optional',
49
+ };
50
+ /**
51
+ * Forms & Data Entry — the multi-field screen, built on the Form archetype
52
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
53
+ *
54
+ * ONE screen for the module's seven multi-field purple sections: `forms.name`,
55
+ * `longform.customizable` (default + filled) and the whole
56
+ * `🧩 Long forms - pre-defined cases` group (`longform.default` / `.focused` /
57
+ * `.filled` / `.loading` plus the "Optional / Required" documentation pair).
58
+ * They share the identical skeleton — nav → Title (H2 + the "All fields marked
59
+ * with * are required." H5) → Spacing/32 → a stack of labelled Core inputs →
60
+ * primary CTA → tag — and differ in which rows the stack carries and what state
61
+ * each row is in.
62
+ *
63
+ * Four things are deliberate:
64
+ *
65
+ * 1. Rows are UNCONTROLLED (`defaultValue`). `readOnly` would paint Core's
66
+ * DISABLED grey on the six sections Figma draws white (DEVIATIONS #PI-6);
67
+ * `disabled` is set ONLY on `loading`, the one section Figma actually greys
68
+ * — and it greys every row at once, exactly as drawn.
69
+ * 2. The focused row gets Core's OWN `--focused` modifier through `className`
70
+ * (DEVIATIONS #PI-7). Its clear ✕ needs one module rule to appear, because
71
+ * Core reveals the button under a live `:focus-within` a static spec state
72
+ * can never satisfy — see `FormsLayout.css`, which only lifts Core's
73
+ * `display: none` and re-styles nothing (the #CURP-3 idiom).
74
+ * 3. The in-flight spinner rides the CTA (`ctaLoading`), never a field
75
+ * (DEVIATIONS #PI-5) — without it `loading` would render as `filled`.
76
+ * 4. The required marker rides Core's `requiredHint` so it stays localizable.
77
+ * Core has no OPTIONAL counterpart, so "(Optional)" is composed into the
78
+ * label string instead — DEVIATIONS #FDE-4.
79
+ *
80
+ * The stack SCROLLS inside the content column through the archetype's own
81
+ * `scrollFields` prop: the profile preset is five 78px rows plus gaps and does
82
+ * not fit a 390×844 frame, and screens never reflow (#17). The variant carries
83
+ * the `overflow-y: auto` AND the Spacing/16 margin below the clipped stack, so
84
+ * the sliced last row is followed by clear surface instead of running flush
85
+ * into the CTA band — the half a module stylesheet kept losing. It is a no-op
86
+ * on the short `name` preset, whose rows never overflow. DEVIATIONS #DSC-2,
87
+ * restating #CURP-1.
88
+ */
89
+ export const FormsLongFormScreen = forwardRef(({ strings, preset = 'eKyc', state = 'default', values, focusedField, options, countries, screenId = `forms-long-form-${preset}-${state}`, className, overrides, onAction, ...shell }, ref) => {
90
+ const copy = strings.longForm[preset];
91
+ const busy = state === 'loading';
92
+ const countryList = countries ?? [];
93
+ // The Optional / Required pair documents the eKYC form specifically; no
94
+ // other preset draws it, so the override never leaks to a preset whose
95
+ // Figma has no such section.
96
+ const applyOptional = state === 'optional' && preset === 'eKyc';
97
+ const rows = PRESET_ROWS[preset].map((row) => applyOptional && OPTIONAL_VARIANT[row.key]
98
+ ? { ...row, requirement: OPTIONAL_VARIANT[row.key] }
99
+ : row);
100
+ /** Core appends `requiredHint` itself; "(Optional)" has no Core slot. */
101
+ const labelFor = (row) => {
102
+ const base = copy.fields[row.key]?.label ?? '';
103
+ return row.requirement === 'optional' ? `${base} ${strings.optionalHint}` : base;
104
+ };
105
+ const renderRow = (row) => {
106
+ const fieldCopy = copy.fields[row.key];
107
+ const label = labelFor(row);
108
+ const required = row.requirement === 'required';
109
+ const value = values?.[row.key] ?? '';
110
+ const focused = !busy && focusedField === row.key;
111
+ switch (row.kind) {
112
+ case 'country':
113
+ return (_jsx(PrizmaDropdown, { label: label, required: required, requiredHint: strings.requiredHint, placeholder: fieldCopy?.placeholder, options: countryList.map((c) => ({ value: c.code, label: c.name })), value: value || null, searchable: true, searchPlaceholder: copy.searchPlaceholder, disabled: busy, forceState: focused ? 'focused' : undefined, renderLeading: (option) => {
114
+ const match = countryList.find((c) => c.code === option.value);
115
+ return match ? _jsx(PrizmaCountryFlag, { country: match }) : null;
116
+ } }, row.key));
117
+ case 'select':
118
+ return (_jsx(PrizmaDropdown, { label: label, required: required, requiredHint: strings.requiredHint, placeholder: fieldCopy?.placeholder, options: options?.[row.key] ?? [], value: value || null, disabled: busy, forceState: focused ? 'focused' : undefined }, row.key));
119
+ case 'date':
120
+ return (_jsx(PrizmaDateField, { className: focused ? 'prizma-input-datefield--focused' : undefined, label: label, required: required, requiredHint: strings.requiredHint, placeholder: fieldCopy?.placeholder, defaultValue: value, disabled: busy, calendarLabel: copy.calendarLabel }, row.key));
121
+ default:
122
+ return (_jsx(PrizmaTextField, { className: focused ? 'prizma-input-textfield--focused' : undefined, label: label, required: required, requiredHint: strings.requiredHint, placeholder: fieldCopy?.placeholder, defaultValue: value, type: row.kind === 'email' ? 'email' : 'text', inputMode: row.kind === 'email' ? 'email' : undefined, autoComplete: row.kind === 'email' ? 'email' : 'off', autoCapitalize: row.kind === 'email' ? 'none' : undefined, spellCheck: false, disabled: busy,
123
+ /* Figma draws the clear ✕ only on the focused row of
124
+ `longform.focused`; every other row draws none. */
125
+ clearable: focused, clearLabel: copy.clearLabel }, row.key));
126
+ }
127
+ };
128
+ return (_jsx(PrizmaFormScreen, { ref: ref, className: [
129
+ 'forms-long-form',
130
+ /* Scopes the ONE rule that lets Core's own clear ✕ paint on the
131
+ statically-focused row. See FormsLayout.css. */
132
+ state === 'focused' ? 'forms-long-form--focused' : '',
133
+ className,
134
+ ]
135
+ .filter(Boolean)
136
+ .join(' '), title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel,
137
+ /* `longform.default` and `longform.customizable`'s default section grey
138
+ the CTA until something is entered; `forms.name` draws it ENABLED on
139
+ the same empty form. Figma contradicts its own "optimistic rule"
140
+ sticky here, so each section is followed literally — DEVIATIONS
141
+ #FDE-3. */
142
+ ctaDisabled: state === 'default' && preset !== 'name', ctaLoading: busy, ctaLoadingLabel: copy.ctaLoadingLabel,
143
+ /* The four- and five-row stacks are taller than the 844 frame; the
144
+ archetype's variant pans them and keeps Spacing/16 of clear surface
145
+ above the CTA. No module CSS re-declares this. */
146
+ scrollFields: true, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: rows.map(renderRow) }));
147
+ });
148
+ FormsLongFormScreen.displayName = 'FormsLongFormScreen';
149
+ export default FormsLongFormScreen;
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Which single-field section `FormsFieldScreen` renders. Each key names one
3
+ * purple section and picks the Core input the section draws:
4
+ * - `idNumber` · `cpf` — `PrizmaTextField`
5
+ * - `email` — `PrizmaTextField` with e-mail semantics
6
+ * - `dob` — `PrizmaDateField`
7
+ * - `phone` — `PrizmaCombined` (country dial code + number)
8
+ * - `text` — `PrizmaMultiline`
9
+ */
10
+ export type FormsFieldKey = 'idNumber' | 'cpf' | 'email' | 'dob' | 'phone' | 'text';
11
+ /**
12
+ * The field treatments the single-field sections draw.
13
+ *
14
+ * `forms.DOB.iconButton` (2:12185) has NO state here, deliberately. That frame
15
+ * draws the date field focused with an OPEN date-picker panel over it — the
16
+ * "March 2024" month grid instanced beside the frame as `Date Picker`
17
+ * (2:5458). Core ships no calendar: `PrizmaDateField`'s contract is that "the
18
+ * date PICKER is the consumer's — the OS picker by contract; the field never
19
+ * renders one", and it exposes no `forceCalendarOpen` hook. Composing a month
20
+ * grid here would be inventing a primitive, and shipping the state without one
21
+ * left a card that was `focused` with a different name. The state returns the
22
+ * day Core gains the panel — DEVIATIONS #FDE-5.
23
+ *
24
+ * - `default` — resting field, placeholder visible, CTA enabled
25
+ * - `focused` — `forms.DOB.typing`: blue focus ring with a partial value
26
+ * - `filled` — a complete value on the resting surface
27
+ * - `emptyError` — `forms.IDnumber.error` (2443:68470): empty NEGATIVE field,
28
+ * "Enter a valid ID number.", CTA greyed. This is the
29
+ * canvas sticky's "optimistic rule": the CTA starts enabled
30
+ * and only greys after a submit with nothing entered.
31
+ * - `invalidError` — `forms.IDnumber.error` (2443:69116): a typed value that
32
+ * failed validation, "Invalid ID number", CTA greyed
33
+ */
34
+ export type FormsFieldState = 'default' | 'focused' | 'filled' | 'emptyError' | 'invalidError';
35
+ /**
36
+ * Which choice section `FormsChoiceScreen` renders — the label above the
37
+ * dropdown is what separates them:
38
+ * - `residence` — `forms.country` / `forms.Residence` ("Country of residence")
39
+ * - `nationality` — `Forms.nationality` ("Nationality")
40
+ * - `question` — `forms.select` / `forms.yesNo` / `forms.country` question
41
+ * variant ("Enter your question")
42
+ */
43
+ export type FormsChoiceKey = 'residence' | 'nationality' | 'question';
44
+ /**
45
+ * Which option list the open menu carries. The three question sections draw an
46
+ * IDENTICAL closed field and differ only here, so the option set is its own
47
+ * axis rather than three screens:
48
+ * - `countries` — flag + country name, searchable (`forms.country`)
49
+ * - `generic` — "Option 1…5", no search (`forms.select`)
50
+ * - `yesNo` — two rows, no search (`forms.yesNo`)
51
+ */
52
+ export type FormsChoiceOptionSet = 'countries' | 'generic' | 'yesNo';
53
+ /**
54
+ * - `closed` — resting trigger with the placeholder
55
+ * - `open` — the menu drawn over the form, nothing selected
56
+ *
57
+ * `forms.residencetyping` (68:31241) has NO state here, deliberately. It is the
58
+ * TYPING frame: the same open menu as `forms.Residenceopen`, distinguished by
59
+ * the search bar holding "Por" with a live caret and an ✕ replacing the
60
+ * magnifier. `PrizmaDropdown` ships documentation-only `forceState` and
61
+ * `forceOpen` but nothing that seeds the query, so the state rendered with an
62
+ * EMPTY search bar — `open` under another name. Faking it would mean
63
+ * hand-rolling a search bar the component already owns. The state returns the
64
+ * day Core gains a `searchValue` — DEVIATIONS #FDE-6.
65
+ */
66
+ export type FormsChoiceState = 'closed' | 'open';
67
+ /**
68
+ * The multi-field sections `FormsLongFormScreen` renders:
69
+ * - `name` — `forms.name`: full / first / last name
70
+ * - `profile` — `longform.customizable`: the five-field customizable form
71
+ * - `eKyc` — the `🧩 Long forms - pre-defined cases` section: ID number,
72
+ * e-mail, country of residence, date of birth
73
+ */
74
+ export type FormsLongFormPreset = 'name' | 'profile' | 'eKyc';
75
+ /**
76
+ * - `default` — every field empty
77
+ * - `focused` — `longform.focused`: one field carries the focus ring, an
78
+ * earlier one is already filled
79
+ * - `filled` — every field carries a value
80
+ * - `loading` — `longform.loading`: the whole form greyed, spinner in the CTA
81
+ * - `optional` — the "Optional / Required" documentation pair: the same form
82
+ * with mixed required and optional markers
83
+ */
84
+ export type FormsLongFormState = 'default' | 'focused' | 'filled' | 'loading' | 'optional';
85
+ /** Copy for one single-field section. */
86
+ export interface FormsFieldCopy {
87
+ /** H2 ("Enter your title", "Enter your email", "Enter your phone number"). */
88
+ title: string;
89
+ /** H5 below the title, where the section draws one. */
90
+ subtitle?: string;
91
+ /** The VISIBLE label row above the field. Unlike Phone Input and CURP
92
+ * (DEVIATIONS #PI-4, #EI-2), every section in this module draws one. */
93
+ label: string;
94
+ /** Field placeholder. The date field takes Core's own DD/MM/YYYY mask. */
95
+ placeholder?: string;
96
+ /** Primary CTA ("Continue"). */
97
+ ctaLabel: string;
98
+ /** Accessible busy copy, for hosts that put the field behind a request. */
99
+ ctaLoadingLabel?: string;
100
+ /** Accessible name for the clear (✕) affordance. */
101
+ clearLabel?: string;
102
+ /** Accessible name for the date field's calendar button (`dob` only). */
103
+ calendarLabel?: string;
104
+ /** Accessible name for the dial-code listbox (`phone` only). */
105
+ countryListLabel?: string;
106
+ /** Error row on `emptyError` ("Enter a valid ID number."). */
107
+ emptyErrorText?: string;
108
+ /** Error row on `invalidError` ("Invalid ID number"). */
109
+ invalidErrorText?: string;
110
+ }
111
+ /** Copy for one choice section. */
112
+ export interface FormsChoiceCopy {
113
+ title: string;
114
+ subtitle?: string;
115
+ /** The visible label above the dropdown. */
116
+ label: string;
117
+ /** Trigger placeholder ("Select an option"). */
118
+ placeholder: string;
119
+ /** Search-bar placeholder inside the menu ("Search for country"). */
120
+ searchPlaceholder?: string;
121
+ /** Accessible name for the search-clear button. */
122
+ clearSearchLabel?: string;
123
+ ctaLabel: string;
124
+ }
125
+ /** Copy for one field row of a multi-field form. Which rows a preset carries
126
+ * is STRUCTURE and lives in `FormsLongFormScreen`; only the words are here. */
127
+ export interface FormsLongFormFieldCopy {
128
+ label: string;
129
+ placeholder?: string;
130
+ }
131
+ /** Copy for one multi-field section. */
132
+ export interface FormsLongFormCopy {
133
+ title: string;
134
+ /** "All fields marked with * are required." */
135
+ subtitle?: string;
136
+ ctaLabel: string;
137
+ ctaLoadingLabel?: string;
138
+ /** One entry per row the preset draws — see `FormsLongFormScreen`. */
139
+ fields: Record<string, FormsLongFormFieldCopy>;
140
+ /** Accessible name for the clear (✕) affordance on the focused row. */
141
+ clearLabel?: string;
142
+ /** Accessible name for the calendar button on the date row. */
143
+ calendarLabel?: string;
144
+ /** Search-bar placeholder for the country row's menu. */
145
+ searchPlaceholder?: string;
146
+ }
147
+ export interface FormsStrings {
148
+ /** "verified by" attribution in the footer tag. */
149
+ verifiedLabel: string;
150
+ /** Accessible name for the logo nav row. */
151
+ navLabel?: string;
152
+ /**
153
+ * The required marker appended to a label ("*"). It rides Core's
154
+ * `requiredHint` prop so it stays localizable and so no module paints its
155
+ * own asterisk — the CURP-4 idiom.
156
+ */
157
+ requiredHint: string;
158
+ /**
159
+ * The optional marker appended to a label ("(Optional)"). Core has a
160
+ * `requiredHint` but NO optional counterpart, so the marker is composed into
161
+ * the label string by the screen. See DEVIATIONS #FDE-4.
162
+ */
163
+ optionalHint: string;
164
+ /** The single-field sections. */
165
+ fields: Record<FormsFieldKey, FormsFieldCopy>;
166
+ /** The choice sections. */
167
+ choice: Record<FormsChoiceKey, FormsChoiceCopy>;
168
+ /** The multi-field sections. */
169
+ longForm: Record<FormsLongFormPreset, FormsLongFormCopy>;
170
+ /** `forms.success` — a bare status mark over an H2, no CTA. */
171
+ success: {
172
+ title: string;
173
+ subtitle?: string;
174
+ };
175
+ /** `forms.error` — status mark, H2 and a "Try again" CTA. */
176
+ error: {
177
+ title: string;
178
+ subtitle?: string;
179
+ ctaLabel: string;
180
+ };
181
+ }
@@ -0,0 +1,36 @@
1
+ // Forms & Data Entry — copy contract.
2
+ //
3
+ // Figma: `🧩 Forms and Data entry (Input type) - Screens specs + Localization`
4
+ // (N6otHMuY2Hha5eBqRz0uC3, page 1:222). Two top-level groups of purple parent
5
+ // sections:
6
+ //
7
+ // 🧩 Forms and Data entry (Input type)
8
+ // forms.idnumber · forms.cpf · forms.email · forms.phone · forms.text
9
+ // forms.dob (default / typing / iconButton†)
10
+ // forms.country (Residence: default / open / typing†) · Forms.nationality
11
+ // forms.select · forms.yesNo · forms.country (question)
12
+ // forms.name · longform.customizable
13
+ // forms.success · forms.error · forms.inputerror (empty / invalid)
14
+ //
15
+ // 🧩 Long forms - pre-defined cases
16
+ // forms.longform.default / longform.focused / longform.filled /
17
+ // longform.loading / "Forms and data entry - Optional / Required"
18
+ //
19
+ // This is the archetype-E showcase: every section is nav → title block →
20
+ // labelled field stack → CTA → verified tag (GUIDELINES §6-E), and the sections
21
+ // differ only in WHICH Core input sits in the stack and in what state. The
22
+ // module therefore ships four screen families rather than nineteen screens:
23
+ // one for a single field, one for a choice field, one for a multi-field form,
24
+ // plus the two verdicts.
25
+ //
26
+ // † Two sections have no state of their own, because the ONE thing that makes
27
+ // each of them a distinct frame is a piece of Core that does not exist yet: the
28
+ // open date-picker panel (`forms.DOB.iconButton`) and a search bar carrying a
29
+ // typed query (`forms.residencetyping`). Both are logged as Core requests —
30
+ // DEVIATIONS #FDE-5 and #FDE-6 — and neither is faked here: a card that repeats
31
+ // its neighbour is the defect, not the coverage. See the state unions below.
32
+ //
33
+ // No hardcoded English anywhere in a screen: every visible string arrives here,
34
+ // so the host's locale pack drives the module (the Figma file ships ES + PT
35
+ // columns beside the EN one).
36
+ export {};
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import { type PrizmaProcessingScreenProps } from './ProcessingScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { FormsStrings } from './FormsStrings';
5
+ import './ScreenLayout.css';
6
+ export interface FormsSuccessScreenProps extends Omit<PrizmaProcessingScreenProps, 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'> {
7
+ /** Module copy — this screen reads the `success` slice. */
8
+ strings: FormsStrings;
9
+ screenId?: string;
10
+ overrides?: PrizmaScreenOverrides;
11
+ onAction?: PrizmaScreenActionHandler;
12
+ }
13
+ /**
14
+ * Forms & Data Entry — the success verdict, built on the Processing archetype
15
+ * (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
16
+ *
17
+ * Figma: the purple `forms.success` section (3:18734). A centred status mark
18
+ * over a bare H2 ("Success!") and then NOTHING — the CTA slot is empty all the
19
+ * way down to the anchored tag, while the sibling `forms.error` section
20
+ * (2014:21506) draws "Try again" in that same slot.
21
+ *
22
+ * §6-F reserves the Result archetype for "every verdict screen that needs a
23
+ * button" and keeps C as the pure no-button case, so the module's two verdicts
24
+ * legitimately sit on two different archetypes — the #EI-4 split, applied
25
+ * unchanged.
26
+ *
27
+ * The mark is Core's outline status icon via `PrizmaTitle`'s icon slot; the
28
+ * module Figma still draws the two-tone filled disc, one icon sweep behind
29
+ * (DEVIATIONS #15, unchanged here).
30
+ */
31
+ export declare const FormsSuccessScreen: React.ForwardRefExoticComponent<FormsSuccessScreenProps & React.RefAttributes<HTMLDivElement>>;
32
+ export default FormsSuccessScreen;
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaProcessingScreen, } from './ProcessingScreen';
5
+ import './ScreenLayout.css';
6
+ /**
7
+ * Forms & Data Entry — the success verdict, built on the Processing archetype
8
+ * (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
9
+ *
10
+ * Figma: the purple `forms.success` section (3:18734). A centred status mark
11
+ * over a bare H2 ("Success!") and then NOTHING — the CTA slot is empty all the
12
+ * way down to the anchored tag, while the sibling `forms.error` section
13
+ * (2014:21506) draws "Try again" in that same slot.
14
+ *
15
+ * §6-F reserves the Result archetype for "every verdict screen that needs a
16
+ * button" and keeps C as the pure no-button case, so the module's two verdicts
17
+ * legitimately sit on two different archetypes — the #EI-4 split, applied
18
+ * unchanged.
19
+ *
20
+ * The mark is Core's outline status icon via `PrizmaTitle`'s icon slot; the
21
+ * module Figma still draws the two-tone filled disc, one icon sweep behind
22
+ * (DEVIATIONS #15, unchanged here).
23
+ */
24
+ export const FormsSuccessScreen = forwardRef(({ strings, screenId = 'forms-success', overrides, onAction, ...shell }, ref) => (_jsx(PrizmaProcessingScreen, { ref: ref, status: "success", title: strings.success.title, subtitle: strings.success.subtitle, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell })));
25
+ FormsSuccessScreen.displayName = 'FormsSuccessScreen';
26
+ export default FormsSuccessScreen;
@@ -0,0 +1,56 @@
1
+ import React from 'react';
2
+ import { type PrizmaListScreenProps } from './ListScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { GeolocationBrowser, GeolocationStrings } from './GeolocationStrings';
5
+ import './ScreenLayout.css';
6
+ export interface GeolocationBrowserStepsScreenProps extends Omit<PrizmaListScreenProps, 'status' | 'title' | 'subtitle' | 'children' | 'ctaLabel' | 'secondaryCtaLabel' | 'linkLabel' | 'verifiedLabel' | 'navLabel'> {
7
+ /** Module copy — this screen reads the `browserSteps` slice. */
8
+ strings: GeolocationStrings;
9
+ /** Which browser's steps to show. Default `safariIos`. */
10
+ browser?: GeolocationBrowser;
11
+ /**
12
+ * Offer the second action. Default `true`. Figma's Samsung Internet section
13
+ * draws the primary alone, because that flow cannot skip the step.
14
+ */
15
+ showSkip?: boolean;
16
+ screenId?: string;
17
+ overrides?: PrizmaScreenOverrides;
18
+ onAction?: PrizmaScreenActionHandler;
19
+ }
20
+ /**
21
+ * Geolocation — "Follow the next steps to allow Incode to access your
22
+ * location", built on the List archetype (GUIDELINES.md §6-G,
23
+ * `PrizmaListScreen`).
24
+ *
25
+ * ONE screen for all NINE purple sections of the Web group. They draw the
26
+ * identical skeleton — title block → a step list filling the middle → the
27
+ * refresh CTA — and differ only in the rows, because re-enabling location is a
28
+ * different journey in Safari, Chrome, Firefox, Opera and Samsung Internet, on
29
+ * iOS and on Android. Nine files would have been nine chances to drift.
30
+ *
31
+ * The rows are Core's `PrizmaCardListCommonIssues` verbatim; only the leading
32
+ * glyph is chosen here, from the canonical bank (see `STEP_ICONS`).
33
+ *
34
+ * The title block is LEFT-aligned for this whole family. Every
35
+ * `Geolocation.allowLocation.<browser>` section starts the two-line headline —
36
+ * and the browser label under it — flush at the gutter, over left-led step
37
+ * rows; a centred headline above a left-aligned list reads as a mistake. The
38
+ * screen therefore DEFAULTS the archetype's own `align` override to `left`
39
+ * rather than declaring any alignment of its own, and a host that passes
40
+ * `overrides.align` still wins.
41
+ *
42
+ * Two things Figma draws that this screen does not, both reported rather than
43
+ * worked around:
44
+ * - **Mixed weight inside a row.** Figma bolds the actionable fragment ("Tap
45
+ * **Three dots** in the top right"); Core's row `title` is a plain `string`,
46
+ * so the sentence renders in one weight. Core request: a `ReactNode` title.
47
+ * - **Primary above secondary.** Figma stacks "Refresh page" over "Skip this
48
+ * step" on all nine sections; archetype G's band renders the secondary first
49
+ * (`ListScreen.tsx`), so these screens ship inverted against their frames.
50
+ * The archetype owns the order and no module re-declares it — archetype G
51
+ * needs a `ctaOrder` slot the way archetype F already has `ctaOrientation`.
52
+ * ESCALATED, NOT RESOLVED: DEVIATIONS.md still has no Geolocation section, so
53
+ * there is no ruling to cite yet.
54
+ */
55
+ export declare const GeolocationBrowserStepsScreen: React.ForwardRefExoticComponent<GeolocationBrowserStepsScreenProps & React.RefAttributes<HTMLDivElement>>;
56
+ export default GeolocationBrowserStepsScreen;
@@ -0,0 +1,95 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { IconArrowLeft, IconFolderFileOpen, IconGeoPin, IconLock, IconLockCheck, IconMobilePhone, IconNumberedList, IconTextAi, } from '@incodetech/prizma-core-icons';
5
+ import { PrizmaCardListCommonIssues } from '@incodetech/prizma-core-web/card-list';
6
+ import { PrizmaListScreen } from './ListScreen';
7
+ import './ScreenLayout.css';
8
+ /**
9
+ * Step kind → canonical bank glyph. ONE map, in one place, for the same reason
10
+ * Document Capture's common-issues map exists (DEVIATIONS #DC-23): Figma leads
11
+ * every row with OS/browser chrome the Prizma bank does not ship — a ⋮ overflow
12
+ * menu, a gear, a permission toggle, Safari's "AA" control and each browser's
13
+ * own logo. Shipping those would mean inventing primitives and bundling brand
14
+ * rasters, both forbidden (rule 1, GUIDELINES §10), so each row takes the
15
+ * nearest canonical glyph:
16
+ *
17
+ * addressBar → IconTextAi Safari's "AA" is the address-bar text control
18
+ * menu → IconNumberedList the ⋮ overflow opens a menu list
19
+ * settings → IconLock site settings sit behind the address-bar lock
20
+ * permissions → IconLockCheck a granted permission
21
+ * location → IconGeoPin near-exact
22
+ * device → IconMobilePhone the device's Settings app
23
+ * apps → IconFolderFileOpen the app list / app drawer
24
+ * return → IconArrowLeft "return here and refresh" (Figma draws the
25
+ * browser's logo — a brand raster, never bundled)
26
+ *
27
+ * Owner decision needed: mint the eight glyphs, or bless these substitutions.
28
+ * NOT YET RECORDED: DEVIATIONS.md has no Geolocation section, so this is an
29
+ * open escalation rather than a settled ruling. Verified against the frames on
30
+ * 2026-08-19 — every section leads its rows with OS/browser chrome, and the
31
+ * last row of each browser section draws that browser's own logo (Chrome disc,
32
+ * Firefox flame, Opera O, Samsung Internet mark).
33
+ */
34
+ const STEP_ICONS = {
35
+ addressBar: _jsx(IconTextAi, { size: "m" }),
36
+ menu: _jsx(IconNumberedList, { size: "m" }),
37
+ settings: _jsx(IconLock, { size: "m" }),
38
+ permissions: _jsx(IconLockCheck, { size: "m" }),
39
+ location: _jsx(IconGeoPin, { size: "m" }),
40
+ device: _jsx(IconMobilePhone, { size: "m" }),
41
+ apps: _jsx(IconFolderFileOpen, { size: "m" }),
42
+ return: _jsx(IconArrowLeft, { size: "m" }),
43
+ };
44
+ /**
45
+ * Geolocation — "Follow the next steps to allow Incode to access your
46
+ * location", built on the List archetype (GUIDELINES.md §6-G,
47
+ * `PrizmaListScreen`).
48
+ *
49
+ * ONE screen for all NINE purple sections of the Web group. They draw the
50
+ * identical skeleton — title block → a step list filling the middle → the
51
+ * refresh CTA — and differ only in the rows, because re-enabling location is a
52
+ * different journey in Safari, Chrome, Firefox, Opera and Samsung Internet, on
53
+ * iOS and on Android. Nine files would have been nine chances to drift.
54
+ *
55
+ * The rows are Core's `PrizmaCardListCommonIssues` verbatim; only the leading
56
+ * glyph is chosen here, from the canonical bank (see `STEP_ICONS`).
57
+ *
58
+ * The title block is LEFT-aligned for this whole family. Every
59
+ * `Geolocation.allowLocation.<browser>` section starts the two-line headline —
60
+ * and the browser label under it — flush at the gutter, over left-led step
61
+ * rows; a centred headline above a left-aligned list reads as a mistake. The
62
+ * screen therefore DEFAULTS the archetype's own `align` override to `left`
63
+ * rather than declaring any alignment of its own, and a host that passes
64
+ * `overrides.align` still wins.
65
+ *
66
+ * Two things Figma draws that this screen does not, both reported rather than
67
+ * worked around:
68
+ * - **Mixed weight inside a row.** Figma bolds the actionable fragment ("Tap
69
+ * **Three dots** in the top right"); Core's row `title` is a plain `string`,
70
+ * so the sentence renders in one weight. Core request: a `ReactNode` title.
71
+ * - **Primary above secondary.** Figma stacks "Refresh page" over "Skip this
72
+ * step" on all nine sections; archetype G's band renders the secondary first
73
+ * (`ListScreen.tsx`), so these screens ship inverted against their frames.
74
+ * The archetype owns the order and no module re-declares it — archetype G
75
+ * needs a `ctaOrder` slot the way archetype F already has `ctaOrientation`.
76
+ * ESCALATED, NOT RESOLVED: DEVIATIONS.md still has no Geolocation section, so
77
+ * there is no ruling to cite yet.
78
+ */
79
+ export const GeolocationBrowserStepsScreen = forwardRef(({ strings, browser = 'safariIos', showSkip = true, screenId = `geolocation-allow-location-${browser}`, overrides, onAction, ...shell }, ref) => {
80
+ const slice = strings.browserSteps.browsers[browser];
81
+ /* Family default, not a local re-declaration: the archetype already owns a
82
+ left variant, so the screen only picks which of ITS variants this family
83
+ uses. An explicit `overrides.align` from the host still wins. */
84
+ const alignedOverrides = {
85
+ ...overrides,
86
+ align: overrides?.align ?? 'left',
87
+ };
88
+ return (_jsx(PrizmaListScreen, { ref: ref, title: strings.browserSteps.title, subtitle: slice?.label, ctaLabel: strings.browserSteps.ctaLabel, secondaryCtaLabel: showSkip ? strings.browserSteps.skipLabel : undefined, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: alignedOverrides, onAction: onAction, ...shell, children: _jsx(PrizmaCardListCommonIssues, { items: (slice?.steps ?? []).map((step) => ({
89
+ icon: STEP_ICONS[step.kind],
90
+ title: step.label,
91
+ showSubtitle: false,
92
+ })) }) }));
93
+ });
94
+ GeolocationBrowserStepsScreen.displayName = 'GeolocationBrowserStepsScreen';
95
+ export default GeolocationBrowserStepsScreen;
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import { type PrizmaResultScreenProps } from './ResultScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { GeolocationErrorVariant, GeolocationStrings } from './GeolocationStrings';
5
+ import './ScreenLayout.css';
6
+ export interface GeolocationErrorScreenProps extends Omit<PrizmaResultScreenProps, 'status' | 'title' | 'subtitle' | 'glyph' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'> {
7
+ /** Module copy — this screen reads the `error` slice its `variant` names. */
8
+ strings: GeolocationStrings;
9
+ /** Which purple `Geolocation.error.*` section to render. Default `locationUnavailable`. */
10
+ variant?: GeolocationErrorVariant;
11
+ screenId?: string;
12
+ overrides?: PrizmaScreenOverrides;
13
+ onAction?: PrizmaScreenActionHandler;
14
+ }
15
+ /**
16
+ * Geolocation — the error verdicts, built on the Result archetype
17
+ * (GUIDELINES.md §6-F, `PrizmaResultScreen`).
18
+ *
19
+ * ONE screen for the four purple `Geolocation.error.*` sections. All four draw
20
+ * the identical skeleton — a centred mark + title + supporting line over a
21
+ * single CTA — and differ only in copy and in which mark leads:
22
+ *
23
+ * - `locationUnavailable` — weak/inaccurate signal, "Try again"
24
+ * - `quit` — attempts exhausted, the step is required
25
+ * - `skip` — attempts exhausted, the step is optional
26
+ * - `noNetwork` — the connectivity family every module carries
27
+ *
28
+ * Figma draws the first three with a filled amber disc; Core renders the
29
+ * canonical OUTLINE warning mark (icon-outline sweep, DEVIATIONS #15). The
30
+ * module Figma is one sweep behind, exactly as Face Capture's and ID Capture's
31
+ * result screens were.
32
+ *
33
+ * `noNetwork` KEEPS the logo header and the verified tag even though its purple
34
+ * section draws neither: the owner rule of 2026-08-18 (#F-30, #F-34) makes the
35
+ * chrome constant across every screen so nothing shifts between states, and all
36
+ * modules' connectivity screens must read identically (#PI-8).
37
+ *
38
+ * The Wi-Fi mark is Figma's `Icon / Wi-Fi`; Core's `PrizmaTitle` icon allowlist
39
+ * is `status | spinner | none`, so it rides the archetype's `glyph` slot with
40
+ * the foundation's `__glyph` class, drawn from the canonical icon bank (#10).
41
+ */
42
+ export declare const GeolocationErrorScreen: React.ForwardRefExoticComponent<GeolocationErrorScreenProps & React.RefAttributes<HTMLDivElement>>;
43
+ export default GeolocationErrorScreen;