@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,101 @@
1
+ import React, { type ReactNode } from 'react';
2
+ import { type PrizmaScreenShellProps } from './ScreenShell';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenChromeProps, PrizmaScreenOverrides } from './types';
4
+ import './ScreenLayout.css';
5
+ import './FormScreen.css';
6
+ /**
7
+ * A step of the Prizma spacing scale, named rather than valued. The archetype's
8
+ * two field-stack offsets are SELECTED from this scale by the module — it can
9
+ * never introduce a number of its own, so "no module re-declares spacing" still
10
+ * holds while a section that genuinely draws a different rhythm can be matched.
11
+ */
12
+ export type PrizmaFormFieldsSpacing = '4' | '8' | '12' | '16' | '20' | '24' | '32' | '40';
13
+ export interface PrizmaFormScreenProps extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'>, PrizmaScreenChromeProps {
14
+ /**
15
+ * An optional block between the logo nav and the title block — the archetype
16
+ * had no slot there at all. eKYC's Figma draws a two-segment Core
17
+ * `PrizmaStepper` across the full content width on all SIX of its form frames
18
+ * (page 1 blue + grey, page 2 pale + blue, page 2 loading both green), and it
19
+ * is the only chrome that tells the two pages apart. The slot takes a
20
+ * `ReactNode` so the module supplies Core's own component: the archetype
21
+ * invents no primitive and declares no spacing of its own — both offsets live
22
+ * once in `ScreenLayout.css` (`.prizma-screen-layout__progress`). Omit it and
23
+ * nothing renders, so every existing consumer is byte-identical.
24
+ * DEVIATIONS #EK-1.
25
+ */
26
+ progress?: ReactNode;
27
+ /** Screen title (H2). */
28
+ title: string;
29
+ /** Description below the title (H5). */
30
+ subtitle?: string;
31
+ /** CTA label. Omit for keyboard-driven states with no visible CTA. */
32
+ ctaLabel?: string;
33
+ /** Disable the CTA (empty/invalid form states). */
34
+ ctaDisabled?: boolean;
35
+ /**
36
+ * Request in flight: Core's `PrizmaButton` swaps the label for its designed
37
+ * spinner. Every form module draws this — Phone Input's `verify.loading` and
38
+ * `OTP.processing` both put the spinner IN THE CTA, not in the field — so the
39
+ * slot belongs to the archetype rather than to each module (#F-32 precedent,
40
+ * DEVIATIONS #PI-5).
41
+ */
42
+ ctaLoading?: boolean;
43
+ /** Accessible / visible loading copy. No hardcoded English default. */
44
+ ctaLoadingLabel?: string;
45
+ /**
46
+ * A single standalone link below the primary, rendered as Core's
47
+ * `tertiary-link` button (full width, the same idiom as archetype A).
48
+ * For a SENTENCE carrying links inline, use `linkContent` instead — an L
49
+ * button is `width: 100%; min-height: 56px` and cannot sit inside a line of
50
+ * body text.
51
+ */
52
+ linkLabel?: string;
53
+ /**
54
+ * A composed line below the primary: body copy with inline links, e.g. Phone
55
+ * Input's "Didn't receive the code? **Resend code** or **Change phone
56
+ * number**" — plain text plus TWO separately-actionable links. Core ships no
57
+ * inline-link primitive, so the foundation provides the recipe
58
+ * (`__inline-prompt` / `__inline-link` in ScreenLayout.css) and the module
59
+ * supplies the sentence. DEVIATIONS #PI-10.
60
+ */
61
+ linkContent?: ReactNode;
62
+ /** "verified by" attribution copy for the footer tag. */
63
+ verifiedLabel: string;
64
+ /** The field stack — Core inputs (PrizmaTextField, PrizmaOtp, PrizmaDropdown…). */
65
+ children?: ReactNode;
66
+ /**
67
+ * Title block → field stack offset. Defaults to Spacing/32, the value Phone
68
+ * Input's sections draw (DEVIATIONS #PI-2), so every existing consumer is
69
+ * untouched. Data Sharing Consent's `User Consent` sections draw Spacing/24
70
+ * (27151:321: title ends 28, the disclosure starts at 52) — DEVIATIONS #DSC-1.
71
+ */
72
+ fieldsOffset?: PrizmaFormFieldsSpacing;
73
+ /**
74
+ * Gap BETWEEN rows of the field stack. Defaults to Spacing/16. Data Sharing
75
+ * Consent draws Spacing/24 between the disclosure and the first consent card
76
+ * (304 → 328) and between every card (459 → 557 → 655, each 74 tall,
77
+ * 29645:5306) — DEVIATIONS #DSC-1.
78
+ */
79
+ fieldsGap?: PrizmaFormFieldsSpacing;
80
+ /**
81
+ * Let the field stack PAN inside the column when the section draws a middle
82
+ * taller than the 844 frame: the title, the CTA and the anchored tag hold
83
+ * still while the fields scroll, and the clipped content stops Spacing/16
84
+ * above the CTA rather than running under it. Five Wave-3 modules hand-rolled
85
+ * this in their own stylesheets (CURP #CURP-1, Forms, Qualified Signature,
86
+ * eKYB, Data Sharing Consent); it is the archetype's now. DEVIATIONS #DSC-2.
87
+ */
88
+ scrollFields?: boolean;
89
+ navLabel?: string;
90
+ screenId?: string;
91
+ overrides?: PrizmaScreenOverrides;
92
+ onAction?: PrizmaScreenActionHandler;
93
+ }
94
+ /**
95
+ * Archetype E — Form / Input (GUIDELINES.md §6-E).
96
+ * Nav → title block → field stack → CTA → verified tag. Module states
97
+ * (typing / filled / loading) are separate screens sharing this identical
98
+ * layout, changing only field content.
99
+ */
100
+ export declare const PrizmaFormScreen: React.ForwardRefExoticComponent<PrizmaFormScreenProps & React.RefAttributes<HTMLDivElement>>;
101
+ export default PrizmaFormScreen;
@@ -0,0 +1,36 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaTitle } from '@incodetech/prizma-core-web/title';
5
+ import { PrizmaButton } from '@incodetech/prizma-core-web/button';
6
+ import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
7
+ import { PrizmaScreenShell } from './ScreenShell';
8
+ import { PrizmaScreenNav } from './ScreenNav';
9
+ import './ScreenLayout.css';
10
+ import './FormScreen.css';
11
+ /**
12
+ * Archetype E — Form / Input (GUIDELINES.md §6-E).
13
+ * Nav → title block → field stack → CTA → verified tag. Module states
14
+ * (typing / filled / loading) are separate screens sharing this identical
15
+ * layout, changing only field content.
16
+ */
17
+ export const PrizmaFormScreen = forwardRef(({ progress, title, subtitle, ctaLabel, ctaDisabled, ctaLoading = false, ctaLoadingLabel, linkLabel, linkContent, verifiedLabel, children, fieldsOffset, fieldsGap, scrollFields = false, navLabel, screenId, showHeader = true, showFooter = true, overrides, onAction, ...shell }, ref) => (_jsxs(PrizmaScreenShell, { ref: ref, ...shell, children: [_jsx(PrizmaScreenNav, { reserved: !showHeader, logo: overrides?.logo, navLabel: navLabel }), _jsxs("div", { className: "prizma-screen-layout__content", children: [progress ? (_jsx("div", { className: "prizma-screen-layout__progress", children: progress })) : null, _jsx(PrizmaTitle, { variant: overrides?.align === 'left' ? 'left' : 'centered', title: title, showSubtitle: Boolean(subtitle), subtitle: subtitle }), _jsx("div", { className: [
18
+ 'prizma-form-screen__fields',
19
+ scrollFields ? 'prizma-form-screen__fields--scroll' : null,
20
+ ]
21
+ .filter(Boolean)
22
+ .join(' '),
23
+ /* Custom properties only — the VALUES stay in FormScreen.css, keyed
24
+ off the Prizma spacing scale. Nothing here is a literal. */
25
+ style: fieldsOffset || fieldsGap
26
+ ? {
27
+ ...(fieldsOffset
28
+ ? { '--pfs-fields-offset': `var(--prizma-spacing-${fieldsOffset})` }
29
+ : null),
30
+ ...(fieldsGap
31
+ ? { '--pfs-fields-gap': `var(--prizma-spacing-${fieldsGap})` }
32
+ : null),
33
+ }
34
+ : undefined, children: children }), ctaLabel || linkLabel || linkContent ? (_jsxs("div", { className: "prizma-screen-layout__cta prizma-form-screen__cta", children: [ctaLabel ? (_jsx(PrizmaButton, { variant: "primary", size: "L", disabled: ctaDisabled, loading: ctaLoading, loadingLabel: ctaLoadingLabel, onClick: () => onAction?.({ type: 'cta', screenId }), children: ctaLabel })) : null, linkLabel ? (_jsx(PrizmaButton, { variant: "tertiary-link", size: "L", onClick: () => onAction?.({ type: 'secondary', screenId }), children: linkLabel })) : null, linkContent] })) : null, showFooter ? (_jsx("div", { className: "prizma-screen-layout__footer prizma-screen-layout__footer--pinned", children: _jsx(PrizmaTag, { label: verifiedLabel }) })) : null] })] })));
35
+ PrizmaFormScreen.displayName = 'PrizmaFormScreen';
36
+ export default PrizmaFormScreen;
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import { type PrizmaDropdownOption } from '@incodetech/prizma-core-web/dropdown';
3
+ import { type PrizmaCountry } from '@incodetech/prizma-core-web/combined';
4
+ import { type PrizmaFormScreenProps } from './FormScreen';
5
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
6
+ import type { FormsChoiceKey, FormsChoiceOptionSet, FormsChoiceState, FormsStrings } from './FormsStrings';
7
+ import './ScreenLayout.css';
8
+ export interface FormsChoiceScreenProps extends Omit<PrizmaFormScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'> {
9
+ /** Module copy — this screen reads one `choice.*` slice. */
10
+ strings: FormsStrings;
11
+ /** Which choice purple section to render. Default `residence`. */
12
+ field?: FormsChoiceKey;
13
+ /** Which option list the menu carries. Default `countries`. */
14
+ optionSet?: FormsChoiceOptionSet;
15
+ /** Which treatment of that section. Default `closed`. */
16
+ state?: FormsChoiceState;
17
+ /**
18
+ * The option rows. Runtime data, never copy — the host supplies its own
19
+ * localized list, the same contract Phone Input's `countries` prop carries.
20
+ * Ignored when `optionSet` is `countries`, which is driven by `countries`.
21
+ */
22
+ options?: PrizmaDropdownOption[];
23
+ /**
24
+ * The selectable countries for the `countries` option set. Each row draws
25
+ * Core's canonical flag raster through `PrizmaDropdown.renderLeading` — the
26
+ * very use case that component's docstring names.
27
+ */
28
+ countries?: PrizmaCountry[];
29
+ /** The selected option value, where the section draws one. */
30
+ value?: string;
31
+ screenId?: string;
32
+ overrides?: PrizmaScreenOverrides;
33
+ onAction?: PrizmaScreenActionHandler;
34
+ }
35
+ /**
36
+ * Forms & Data Entry — the choice screen, built on the Form archetype
37
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
38
+ *
39
+ * ONE screen for eight purple sections across four parent groups —
40
+ * `forms.country` (Residence: `default` / `open`; the third frame,
41
+ * `forms.residencetyping`, needs a search query Core cannot seed — DEVIATIONS
42
+ * #FDE-6), `Forms.nationality`, `forms.select` (×2), `forms.yesNo` (×2) and the
43
+ * `forms.country` question variant (×2). Measured against the 390 frames the
44
+ * three groups draw a BYTE-IDENTICAL closed field: same title block, same
45
+ * labelled `PrizmaDropdown`, same "Select an option" trigger, same CTA. What
46
+ * separates them is (a) the label above the field and (b) what the OPEN menu
47
+ * lists — so the module carries a `field` axis and an `optionSet` axis instead
48
+ * of eight screens, and the demo enumerates the closed state ONCE per distinct
49
+ * label rather than three times identically.
50
+ *
51
+ * Three notes:
52
+ *
53
+ * 1. The section draws a VISIBLE label row, so the copy uses Core's `label`
54
+ * slot. Phone Input and Email Input ride `aria-label` because their Figma
55
+ * draws no label (DEVIATIONS #PI-4, #EI-2) — this module's does.
56
+ * 2. The open sections draw the trigger with the bold blue border. Core paints
57
+ * that on `:focus-visible` only, which a static spec state never reaches, so
58
+ * the screen uses the documentation-only `forceState="focused"` the
59
+ * component already exposes for exactly this. Nothing is re-styled.
60
+ * 3. `forceOpen` IS the open-menu spec state — a screen is one static frame,
61
+ * never a live interaction. Its missing sibling is a `searchValue`: without
62
+ * one the TYPING frame renders as `open` with an empty search bar, so that
63
+ * section is not enumerated rather than shipped as a duplicate (#FDE-6).
64
+ */
65
+ export declare const FormsChoiceScreen: React.ForwardRefExoticComponent<FormsChoiceScreenProps & React.RefAttributes<HTMLDivElement>>;
66
+ export default FormsChoiceScreen;
@@ -0,0 +1,63 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaDropdown, } from '@incodetech/prizma-core-web/dropdown';
5
+ import { PrizmaCountryFlag } from '@incodetech/prizma-core-web/combined';
6
+ import { PrizmaFormScreen } from './FormScreen';
7
+ import './ScreenLayout.css';
8
+ /**
9
+ * Forms & Data Entry — the choice screen, built on the Form archetype
10
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
11
+ *
12
+ * ONE screen for eight purple sections across four parent groups —
13
+ * `forms.country` (Residence: `default` / `open`; the third frame,
14
+ * `forms.residencetyping`, needs a search query Core cannot seed — DEVIATIONS
15
+ * #FDE-6), `Forms.nationality`, `forms.select` (×2), `forms.yesNo` (×2) and the
16
+ * `forms.country` question variant (×2). Measured against the 390 frames the
17
+ * three groups draw a BYTE-IDENTICAL closed field: same title block, same
18
+ * labelled `PrizmaDropdown`, same "Select an option" trigger, same CTA. What
19
+ * separates them is (a) the label above the field and (b) what the OPEN menu
20
+ * lists — so the module carries a `field` axis and an `optionSet` axis instead
21
+ * of eight screens, and the demo enumerates the closed state ONCE per distinct
22
+ * label rather than three times identically.
23
+ *
24
+ * Three notes:
25
+ *
26
+ * 1. The section draws a VISIBLE label row, so the copy uses Core's `label`
27
+ * slot. Phone Input and Email Input ride `aria-label` because their Figma
28
+ * draws no label (DEVIATIONS #PI-4, #EI-2) — this module's does.
29
+ * 2. The open sections draw the trigger with the bold blue border. Core paints
30
+ * that on `:focus-visible` only, which a static spec state never reaches, so
31
+ * the screen uses the documentation-only `forceState="focused"` the
32
+ * component already exposes for exactly this. Nothing is re-styled.
33
+ * 3. `forceOpen` IS the open-menu spec state — a screen is one static frame,
34
+ * never a live interaction. Its missing sibling is a `searchValue`: without
35
+ * one the TYPING frame renders as `open` with an empty search bar, so that
36
+ * section is not enumerated rather than shipped as a duplicate (#FDE-6).
37
+ */
38
+ export const FormsChoiceScreen = forwardRef(({ strings, field = 'residence', optionSet = 'countries', state = 'closed', options, countries, value, screenId = `forms-choice-${field}-${optionSet}-${state}`, overrides, onAction, ...shell }, ref) => {
39
+ const copy = strings.choice[field];
40
+ const open = state === 'open';
41
+ // The `countries` set is the one Figma draws with a search bar and a flag
42
+ // per row; `generic` and `yesNo` draw a bare list.
43
+ const isCountries = optionSet === 'countries';
44
+ const countryList = countries ?? [];
45
+ const rows = isCountries
46
+ ? countryList.map((c) => ({ value: c.code, label: c.name }))
47
+ : (options ?? []);
48
+ return (_jsx(PrizmaFormScreen, { ref: ref, title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: _jsx(PrizmaDropdown, { label: copy.label, placeholder: copy.placeholder, options: rows, value: value ?? null,
49
+ /* The open sections draw the focused border; Core's own
50
+ documentation-only modifier supplies it (see note 2). */
51
+ forceState: open ? 'focused' : undefined, forceOpen: open, searchable: isCountries, searchPlaceholder: copy.searchPlaceholder, clearSearchLabel: copy.clearSearchLabel,
52
+ /* Core's canonical flag raster in the option's leading slot — the
53
+ primitive Phone Input had to do without (DEVIATIONS #PI-3) and
54
+ `PrizmaDropdown.renderLeading`'s own docstring asks for. */
55
+ renderLeading: isCountries
56
+ ? (option) => {
57
+ const match = countryList.find((c) => c.code === option.value);
58
+ return match ? _jsx(PrizmaCountryFlag, { country: match }) : null;
59
+ }
60
+ : undefined }) }));
61
+ });
62
+ FormsChoiceScreen.displayName = 'FormsChoiceScreen';
63
+ export default FormsChoiceScreen;
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { type PrizmaResultScreenProps } from './ResultScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { FormsStrings } from './FormsStrings';
5
+ import './ScreenLayout.css';
6
+ export interface FormsErrorScreenProps extends Omit<PrizmaResultScreenProps, 'status' | 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'> {
7
+ /** Module copy — this screen reads the `error` slice. */
8
+ strings: FormsStrings;
9
+ screenId?: string;
10
+ overrides?: PrizmaScreenOverrides;
11
+ onAction?: PrizmaScreenActionHandler;
12
+ }
13
+ /**
14
+ * Forms & Data Entry — the error verdict, built on the Result archetype
15
+ * (GUIDELINES.md §6-F, `PrizmaResultScreen`).
16
+ *
17
+ * Figma: the purple `forms.error` section (2014:21506) — the negative status
18
+ * mark over "Something went wrong" with a single "Try again" CTA and the
19
+ * anchored tag. One button, so archetype F rather than C (its sibling
20
+ * `forms.success` draws none and stays on C — see `FormsSuccessScreen`).
21
+ *
22
+ * The module has no connectivity family: unlike Phone Input, the Forms sections
23
+ * carry ONE generic error screen and no `noConnection` variant, so there is no
24
+ * `variant` axis and no Wi-Fi glyph here. Logged so the asymmetry is not read
25
+ * as an omission (the #EI-5 precedent).
26
+ */
27
+ export declare const FormsErrorScreen: React.ForwardRefExoticComponent<FormsErrorScreenProps & React.RefAttributes<HTMLDivElement>>;
28
+ export default FormsErrorScreen;
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaResultScreen } from './ResultScreen';
5
+ import './ScreenLayout.css';
6
+ /**
7
+ * Forms & Data Entry — the error verdict, built on the Result archetype
8
+ * (GUIDELINES.md §6-F, `PrizmaResultScreen`).
9
+ *
10
+ * Figma: the purple `forms.error` section (2014:21506) — the negative status
11
+ * mark over "Something went wrong" with a single "Try again" CTA and the
12
+ * anchored tag. One button, so archetype F rather than C (its sibling
13
+ * `forms.success` draws none and stays on C — see `FormsSuccessScreen`).
14
+ *
15
+ * The module has no connectivity family: unlike Phone Input, the Forms sections
16
+ * carry ONE generic error screen and no `noConnection` variant, so there is no
17
+ * `variant` axis and no Wi-Fi glyph here. Logged so the asymmetry is not read
18
+ * as an omission (the #EI-5 precedent).
19
+ */
20
+ export const FormsErrorScreen = forwardRef(({ strings, screenId = 'forms-error', overrides, onAction, ...shell }, ref) => (_jsx(PrizmaResultScreen, { ref: ref, status: "error", title: strings.error.title, subtitle: strings.error.subtitle, ctaLabel: strings.error.ctaLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell })));
21
+ FormsErrorScreen.displayName = 'FormsErrorScreen';
22
+ export default FormsErrorScreen;
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import { type PrizmaCountry } from '@incodetech/prizma-core-web/combined';
3
+ import { type PrizmaFormScreenProps } from './FormScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { FormsFieldKey, FormsFieldState, FormsStrings } from './FormsStrings';
6
+ import './ScreenLayout.css';
7
+ export interface FormsFieldScreenProps extends Omit<PrizmaFormScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'> {
8
+ /** Module copy — this screen reads one `fields.*` slice. */
9
+ strings: FormsStrings;
10
+ /** Which single-field purple section to render. */
11
+ field: FormsFieldKey;
12
+ /** Which treatment of that section. Default `default`. */
13
+ state?: FormsFieldState;
14
+ /** The value as typed. Empty renders the placeholder. */
15
+ value?: string;
16
+ /**
17
+ * `phone` only — the dial code the combined field opens on. Runtime data,
18
+ * not copy; Core's `PrizmaCombined` ships its own list and defaults to
19
+ * Serbia, which is exactly what `forms.phoneNumber` draws.
20
+ */
21
+ country?: PrizmaCountry;
22
+ /** `phone` only — the selectable dial codes. */
23
+ countries?: PrizmaCountry[];
24
+ screenId?: string;
25
+ overrides?: PrizmaScreenOverrides;
26
+ onAction?: PrizmaScreenActionHandler;
27
+ }
28
+ /**
29
+ * Forms & Data Entry — the single-field screen, built on the Form archetype
30
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
31
+ *
32
+ * ONE screen for eight purple sections — `forms.idnumber`, `forms.cpf`,
33
+ * `forms.email`, `forms.phone`, `forms.text`, two of the three `forms.dob`
34
+ * sections (`forms.DOB.iconButton` draws an open month grid Core does not ship
35
+ * — DEVIATIONS #FDE-5) and the two `forms.inputerror` sections. Measured
36
+ * against the 390 frames they
37
+ * share an identical skeleton: nav → Title → Spacing/32 → ONE labelled field →
38
+ * primary CTA → tag. What changes is which Core input sits in the stack and
39
+ * what state it is in, which is exactly what GUIDELINES §6-E means by "states
40
+ * are separate screens sharing the identical layout".
41
+ *
42
+ * Four rules carried over from the Wave-3 modules that paid for them:
43
+ *
44
+ * 1. Every field is UNCONTROLLED (`defaultValue`). A screen is one static spec
45
+ * state, so no `onChange` is needed — and Core's `readOnly`, the other way
46
+ * to make a field inert, paints the DISABLED grey surface on states Figma
47
+ * draws white (DEVIATIONS #PI-6). Nothing here greys, so nothing is
48
+ * disabled either.
49
+ * 2. `focused` gets Core's OWN `--focused` modifier through
50
+ * `className` — the class its CSS already implements beside `:focus-within`.
51
+ * The input family has no `forceState` prop yet, unlike `PrizmaDropdown`
52
+ * (DEVIATIONS #PI-7); nothing is re-styled here.
53
+ * 3. `clearable` is left OFF on every state. Figma draws no clear ✕ on any of
54
+ * these sections, and on the two error sections Core could not reveal one
55
+ * anyway — its `:focus-within:not(--error)` guard makes the prop a silent
56
+ * no-op there (DEVIATIONS #CURP-3). Setting a prop that cannot paint is the
57
+ * defect that shipped on CURP.
58
+ * 4. The in-flight spinner, when a host wires one, rides the CTA
59
+ * (`ctaLoading`), never the field (DEVIATIONS #PI-5).
60
+ *
61
+ * Unlike Phone Input and Email Input, EVERY section here draws a visible label
62
+ * row above the field, so the copy uses Core's `label` slot rather than
63
+ * `aria-label` (#PI-4 / #EI-2 do not apply — see DEVIATIONS #FDE-1).
64
+ */
65
+ export declare const FormsFieldScreen: React.ForwardRefExoticComponent<FormsFieldScreenProps & React.RefAttributes<HTMLDivElement>>;
66
+ export default FormsFieldScreen;
@@ -0,0 +1,85 @@
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 { PrizmaMultiline } from '@incodetech/prizma-core-web/multiline';
7
+ import { PrizmaCombined } from '@incodetech/prizma-core-web/combined';
8
+ import { PrizmaFormScreen } from './FormScreen';
9
+ import './ScreenLayout.css';
10
+ /**
11
+ * Forms & Data Entry — the single-field screen, built on the Form archetype
12
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
13
+ *
14
+ * ONE screen for eight purple sections — `forms.idnumber`, `forms.cpf`,
15
+ * `forms.email`, `forms.phone`, `forms.text`, two of the three `forms.dob`
16
+ * sections (`forms.DOB.iconButton` draws an open month grid Core does not ship
17
+ * — DEVIATIONS #FDE-5) and the two `forms.inputerror` sections. Measured
18
+ * against the 390 frames they
19
+ * share an identical skeleton: nav → Title → Spacing/32 → ONE labelled field →
20
+ * primary CTA → tag. What changes is which Core input sits in the stack and
21
+ * what state it is in, which is exactly what GUIDELINES §6-E means by "states
22
+ * are separate screens sharing the identical layout".
23
+ *
24
+ * Four rules carried over from the Wave-3 modules that paid for them:
25
+ *
26
+ * 1. Every field is UNCONTROLLED (`defaultValue`). A screen is one static spec
27
+ * state, so no `onChange` is needed — and Core's `readOnly`, the other way
28
+ * to make a field inert, paints the DISABLED grey surface on states Figma
29
+ * draws white (DEVIATIONS #PI-6). Nothing here greys, so nothing is
30
+ * disabled either.
31
+ * 2. `focused` gets Core's OWN `--focused` modifier through
32
+ * `className` — the class its CSS already implements beside `:focus-within`.
33
+ * The input family has no `forceState` prop yet, unlike `PrizmaDropdown`
34
+ * (DEVIATIONS #PI-7); nothing is re-styled here.
35
+ * 3. `clearable` is left OFF on every state. Figma draws no clear ✕ on any of
36
+ * these sections, and on the two error sections Core could not reveal one
37
+ * anyway — its `:focus-within:not(--error)` guard makes the prop a silent
38
+ * no-op there (DEVIATIONS #CURP-3). Setting a prop that cannot paint is the
39
+ * defect that shipped on CURP.
40
+ * 4. The in-flight spinner, when a host wires one, rides the CTA
41
+ * (`ctaLoading`), never the field (DEVIATIONS #PI-5).
42
+ *
43
+ * Unlike Phone Input and Email Input, EVERY section here draws a visible label
44
+ * row above the field, so the copy uses Core's `label` slot rather than
45
+ * `aria-label` (#PI-4 / #EI-2 do not apply — see DEVIATIONS #FDE-1).
46
+ */
47
+ export const FormsFieldScreen = forwardRef(({ strings, field, state = 'default', value, country, countries, screenId = `forms-field-${field}-${state}`, overrides, onAction, ...shell }, ref) => {
48
+ const copy = strings.fields[field];
49
+ // The two `forms.inputerror` sections are the only ones that paint the
50
+ // negative surface, and they are also the only ones that grey the CTA —
51
+ // the canvas sticky's "optimistic rule" (the button starts enabled and
52
+ // greys only after a submit that failed validation).
53
+ const emptyError = state === 'emptyError';
54
+ const invalidError = state === 'invalidError';
55
+ const invalid = emptyError || invalidError;
56
+ const errorText = emptyError ? copy.emptyErrorText : copy.invalidErrorText;
57
+ // `forms.DOB.typing` draws the blue focus ring. Its neighbour
58
+ // `forms.DOB.iconButton` draws the same ring UNDER an open month grid, and
59
+ // Core owns no picker to open — so that section has no state here rather
60
+ // than a second focus ring wearing its name. See FormsStrings.
61
+ const focused = state === 'focused';
62
+ const focusClass = (modifier) => (focused ? modifier : undefined);
63
+ // The `emptyError` section draws the field with NOTHING in it — not even
64
+ // the grey placeholder every resting section shows. Passing no placeholder
65
+ // is the screen choosing content, not overriding a Core treatment.
66
+ const placeholder = emptyError ? undefined : copy.placeholder;
67
+ const renderField = () => {
68
+ switch (field) {
69
+ case 'dob':
70
+ return (_jsx(PrizmaDateField, { className: focusClass('prizma-input-datefield--focused'), label: copy.label, placeholder: placeholder, defaultValue: value ?? '', error: invalid, errorText: invalid ? errorText : undefined, calendarLabel: copy.calendarLabel }));
71
+ case 'phone':
72
+ return (_jsx(PrizmaCombined, { label: copy.label, placeholder: placeholder, defaultValue: value ?? '', defaultCountry: country, countries: countries, countryListLabel: copy.countryListLabel, error: invalid, errorText: invalid ? errorText : undefined }));
73
+ case 'text':
74
+ return (_jsx(PrizmaMultiline, { className: focusClass('prizma-input-multiline--focused'), label: copy.label, placeholder: placeholder, defaultValue: value ?? '', error: invalid, errorText: invalid ? errorText : undefined, clearable: false, clearLabel: copy.clearLabel }));
75
+ default:
76
+ return (_jsx(PrizmaTextField, { className: focusClass('prizma-input-textfield--focused'), label: copy.label, placeholder: placeholder, defaultValue: value ?? '',
77
+ /* `forms.email` is the one section with e-mail semantics; the
78
+ rest are plain text keys. */
79
+ type: field === 'email' ? 'email' : 'text', inputMode: field === 'email' ? 'email' : undefined, autoComplete: field === 'email' ? 'email' : 'off', autoCapitalize: field === 'email' ? 'none' : undefined, spellCheck: false, error: invalid, errorText: invalid ? errorText : undefined, clearable: false, clearLabel: copy.clearLabel }));
80
+ }
81
+ };
82
+ return (_jsx(PrizmaFormScreen, { ref: ref, title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel, ctaDisabled: invalid, ctaLoadingLabel: copy.ctaLoadingLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: renderField() }));
83
+ });
84
+ FormsFieldScreen.displayName = 'FormsFieldScreen';
85
+ export default FormsFieldScreen;
@@ -0,0 +1,45 @@
1
+ /* Forms & Data Entry — module layout additions.
2
+ *
3
+ * ONE rule, and it declares no spacing. The content column, the 24px gutters,
4
+ * the title → fields Spacing/32, the field gaps, the CTA column and the
5
+ * anchored footer all stay the foundation's (`ScreenLayout.css`,
6
+ * `FormScreen.css`). The rule RELEASES a constraint that a purple section
7
+ * contradicts — the same idiom as Phone Input's `width: auto` on Core's
8
+ * fill-width Dropdown (#PI-1). No primitive is invented, no Core value
9
+ * repainted, no `!important`.
10
+ *
11
+ * The module's other layout need — the multi-field stacks that are taller than
12
+ * the 844 frame — is NOT here: it is the archetype's `scrollFields` prop
13
+ * (`PrizmaFormScreen`, `.prizma-form-screen__fields--scroll`), which carries
14
+ * both the `overflow-y: auto` and the Spacing/16 margin that makes the cut read
15
+ * as a cut. `FormsLongFormScreen` passes it. DEVIATIONS #DSC-2 / #CURP-1.
16
+ */
17
+
18
+ /* ── The focused row keeps its clear ✕ ───────────────────────────────────────
19
+ * `longform.focused` (9:24653) draws the e-mail row with the blue focus ring,
20
+ * the partial value AND the grey clear ✕ at the field's right edge.
21
+ *
22
+ * Core renders that button (`PrizmaTextField clearable`) but reveals it only
23
+ * under `:focus-within` (TextField.css:121) — a LIVE focus a static spec state
24
+ * can never hold. Its sibling `--focused` modifier, the documentation hook the
25
+ * screen already uses for the border, is not part of that selector, so the
26
+ * prop was a silent no-op: exactly the defect QA caught on CURP (#CURP-3).
27
+ *
28
+ * This mirrors Core's own reveal verbatim — same element, same `--show` state
29
+ * (which Core still owns: the button appears only when the field has a value),
30
+ * same disabled/error guards — swapping only the live `:focus-within` for the
31
+ * static modifier. Nothing is hand-rolled: no ✕ glyph, no box, no colour is
32
+ * declared here; only Core's `display: none` is lifted, and only on the one
33
+ * section that draws the affordance.
34
+ *
35
+ * CORE REQUEST (extends #PI-7): give the input family the `forceState` prop
36
+ * `PrizmaDropdown` already has, and let it drive the clear affordance as well
37
+ * as the border — then this rule disappears.
38
+ */
39
+ .forms-long-form--focused
40
+ .prizma-input-textfield--focused:not(.prizma-input-textfield--disabled):not(
41
+ .prizma-input-textfield--error
42
+ )
43
+ .prizma-input-textfield__clear.prizma-input-textfield__clear--show {
44
+ display: inline-flex;
45
+ }
@@ -0,0 +1,70 @@
1
+ import React from 'react';
2
+ import { type PrizmaDropdownOption } from '@incodetech/prizma-core-web/dropdown';
3
+ import { type PrizmaCountry } from '@incodetech/prizma-core-web/combined';
4
+ import { type PrizmaFormScreenProps } from './FormScreen';
5
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
6
+ import type { FormsLongFormPreset, FormsLongFormState, FormsStrings } from './FormsStrings';
7
+ import './ScreenLayout.css';
8
+ import './FormsLayout.css';
9
+ export interface FormsLongFormScreenProps extends Omit<PrizmaFormScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'> {
10
+ /** Module copy — this screen reads one `longForm.*` slice. */
11
+ strings: FormsStrings;
12
+ /** Which multi-field purple section to render. Default `eKyc`. */
13
+ preset?: FormsLongFormPreset;
14
+ /** Which treatment of that section. Default `default`. */
15
+ state?: FormsLongFormState;
16
+ /** Value per row key. Text/date rows take the literal value; `country` rows
17
+ * take an ISO code; `select` rows take an option value. */
18
+ values?: Record<string, string>;
19
+ /** Which row carries the focus ring on the `focused` section. */
20
+ focusedField?: string;
21
+ /** Option rows for the `select` kinds. Runtime data, never copy — the host
22
+ * supplies its own localized list. */
23
+ options?: Record<string, PrizmaDropdownOption[]>;
24
+ /** The selectable countries for `country` rows. */
25
+ countries?: PrizmaCountry[];
26
+ screenId?: string;
27
+ overrides?: PrizmaScreenOverrides;
28
+ onAction?: PrizmaScreenActionHandler;
29
+ }
30
+ /**
31
+ * Forms & Data Entry — the multi-field screen, built on the Form archetype
32
+ * (GUIDELINES.md §6-E, `PrizmaFormScreen`).
33
+ *
34
+ * ONE screen for the module's seven multi-field purple sections: `forms.name`,
35
+ * `longform.customizable` (default + filled) and the whole
36
+ * `🧩 Long forms - pre-defined cases` group (`longform.default` / `.focused` /
37
+ * `.filled` / `.loading` plus the "Optional / Required" documentation pair).
38
+ * They share the identical skeleton — nav → Title (H2 + the "All fields marked
39
+ * with * are required." H5) → Spacing/32 → a stack of labelled Core inputs →
40
+ * primary CTA → tag — and differ in which rows the stack carries and what state
41
+ * each row is in.
42
+ *
43
+ * Four things are deliberate:
44
+ *
45
+ * 1. Rows are UNCONTROLLED (`defaultValue`). `readOnly` would paint Core's
46
+ * DISABLED grey on the six sections Figma draws white (DEVIATIONS #PI-6);
47
+ * `disabled` is set ONLY on `loading`, the one section Figma actually greys
48
+ * — and it greys every row at once, exactly as drawn.
49
+ * 2. The focused row gets Core's OWN `--focused` modifier through `className`
50
+ * (DEVIATIONS #PI-7). Its clear ✕ needs one module rule to appear, because
51
+ * Core reveals the button under a live `:focus-within` a static spec state
52
+ * can never satisfy — see `FormsLayout.css`, which only lifts Core's
53
+ * `display: none` and re-styles nothing (the #CURP-3 idiom).
54
+ * 3. The in-flight spinner rides the CTA (`ctaLoading`), never a field
55
+ * (DEVIATIONS #PI-5) — without it `loading` would render as `filled`.
56
+ * 4. The required marker rides Core's `requiredHint` so it stays localizable.
57
+ * Core has no OPTIONAL counterpart, so "(Optional)" is composed into the
58
+ * label string instead — DEVIATIONS #FDE-4.
59
+ *
60
+ * The stack SCROLLS inside the content column through the archetype's own
61
+ * `scrollFields` prop: the profile preset is five 78px rows plus gaps and does
62
+ * not fit a 390×844 frame, and screens never reflow (#17). The variant carries
63
+ * the `overflow-y: auto` AND the Spacing/16 margin below the clipped stack, so
64
+ * the sliced last row is followed by clear surface instead of running flush
65
+ * into the CTA band — the half a module stylesheet kept losing. It is a no-op
66
+ * on the short `name` preset, whose rows never overflow. DEVIATIONS #DSC-2,
67
+ * restating #CURP-1.
68
+ */
69
+ export declare const FormsLongFormScreen: React.ForwardRefExoticComponent<FormsLongFormScreenProps & React.RefAttributes<HTMLDivElement>>;
70
+ export default FormsLongFormScreen;