@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,61 @@
1
+ /* Phone Input โ€” module layout additions.
2
+ *
3
+ * ONLY what the foundation archetypes and Prizma Core do not already own.
4
+ * Every value is a token. Nothing here re-declares an archetype spacing rule:
5
+ * the content column, the 24px gutters, the title โ†’ fields offset and the
6
+ * anchored footer all stay the foundation's (`ScreenLayout.css`,
7
+ * `FormScreen.css`).
8
+ */
9
+
10
+ /* โ”€โ”€ Combined country + phone row โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
11
+ * Figma `Input / Combined` (3939:41889): "a combined form element that allows
12
+ * users to input phone number" โ€” a dropdown + text field pair at Spacing/8,
13
+ * the dropdown hugging its content, the field filling the rest.
14
+ *
15
+ * Core ships both primitives; what it has no component for is the PAIRING, so
16
+ * the row lives here. `align-items: start` keeps the two fields top-aligned
17
+ * when the text field grows an error/helper row that the dropdown does not.
18
+ */
19
+ .phone-input-combined {
20
+ display: flex;
21
+ align-items: flex-start;
22
+ gap: var(--prizma-spacing-8);
23
+ width: 100%;
24
+ }
25
+
26
+ /* The dial-code dropdown hugs its content ("๐Ÿ‡ท๐Ÿ‡ธ +381"), as Figma draws it.
27
+ *
28
+ * Core's `.prizma-dropdown` is `width: 100%` (Dropdown.css) โ€” it is built to
29
+ * FILL its container and ships no hug/auto-width variant, so inside this row it
30
+ * consumed the whole column and pushed the number field out. Constrained here
31
+ * from the module layer (no Core file touched, no !important): `width: auto`
32
+ * releases the fill and `flex: 0 0 auto` keeps the row from stretching it back.
33
+ * The inner `__anchor` inherits the same rule for the same reason.
34
+ * A `width`/`fit` prop on `PrizmaDropdown` would remove this โ€” DEVIATIONS #PI-1.
35
+ */
36
+ .phone-input-combined__country,
37
+ .phone-input-combined__country .prizma-dropdown__anchor,
38
+ .phone-input-combined__country .prizma-dropdown__label-container {
39
+ flex: 0 0 auto;
40
+ width: auto;
41
+ }
42
+
43
+ /* โ€ฆand the number field takes the remaining width. `min-width: 0` is what lets
44
+ * it actually shrink inside the flex row instead of overflowing the column. */
45
+ .phone-input-combined__number {
46
+ flex: 1 1 auto;
47
+ min-width: 0;
48
+ }
49
+
50
+ /* The open menu must NOT inherit the hugged anchor's width: Core anchors the
51
+ * menu to the trigger, so once the trigger hugs "๐Ÿ‡ท๐Ÿ‡ธ +381" the option rows
52
+ * truncate ("+โ€ฆ"). The menu keeps its own readable width โ€” it lists country
53
+ * names and dial codes, which the closed field never shows. Sized to the
54
+ * content and capped at the 342 column so it never escapes the screen.
55
+ * DEVIATIONS #PI-1 (same root cause as the hug).
56
+ */
57
+ .phone-input-combined__country .prizma-dropdown__menu {
58
+ width: max-content;
59
+ min-width: 100%;
60
+ max-width: 342px;
61
+ }
@@ -0,0 +1,126 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaOtp } from '@incodetech/prizma-core-web/otp';
3
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
4
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
5
+ import type { PhoneInputOtpState, PhoneInputStrings } from './PhoneInputStrings';
6
+ import './ScreenLayout.css';
7
+ import './PhoneInputLayout.css';
8
+
9
+ export interface PhoneInputOtpScreenProps
10
+ extends Omit<
11
+ PrizmaFormScreenProps,
12
+ 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
13
+ > {
14
+ /** Module copy โ€” this screen reads the `otp` slice. */
15
+ strings: PhoneInputStrings;
16
+ /** Which purple `phoneNumber.OTP.*` section to render. Default `typing`. */
17
+ state?: PhoneInputOtpState;
18
+ /** The code as typed. `typing` draws a partial value, `filled` a complete one. */
19
+ value?: string;
20
+ /** How many digits the code carries. Default 6. */
21
+ length?: number;
22
+ screenId?: string;
23
+ overrides?: PrizmaScreenOverrides;
24
+ onAction?: PrizmaScreenActionHandler;
25
+ }
26
+
27
+ /**
28
+ * Phone Input โ€” the one-time-code screen, built on the Form archetype
29
+ * (GUIDELINES.md ยง6-E, `PrizmaFormScreen`).
30
+ *
31
+ * ONE screen for all four purple `phoneNumber.OTP.*` sections
32
+ * (`typing` / `filled` / `processing` / `error`) โ€” identical layout, differing
33
+ * only in the state of the code field and the CTA.
34
+ *
35
+ * `processing` deliberately does NOT use Core's `PrizmaOtp.loading`. That prop
36
+ * centres the spinner INSIDE the code field (owner definition 2026-07-12), but
37
+ * the purple `OTP.processing` section draws the field simply DISABLED with the
38
+ * code still legible and puts the spinner in the CTA โ€” the same treatment as
39
+ * `verify.loading`, which is what makes the module read consistently. Figma
40
+ * wins; `PrizmaOtp.loading` stays correct for hosts that want the in-field
41
+ * spinner. DEVIATIONS #PI-5.
42
+ */
43
+ export const PhoneInputOtpScreen = forwardRef<HTMLDivElement, PhoneInputOtpScreenProps>(
44
+ (
45
+ {
46
+ strings,
47
+ state = 'typing',
48
+ value,
49
+ length = 6,
50
+ screenId = `phone-input-otp-${state}`,
51
+ overrides,
52
+ onAction,
53
+ ...shell
54
+ },
55
+ ref,
56
+ ) => (
57
+ <PrizmaFormScreen
58
+ ref={ref}
59
+ title={strings.otp.title}
60
+ subtitle={strings.otp.subtitle}
61
+ ctaLabel={strings.otp.ctaLabel}
62
+ /* Figma greys the CTA until the code is complete. */
63
+ ctaDisabled={state === 'typing'}
64
+ /* The spinner rides the CTA, not the field (see the note above). */
65
+ ctaLoading={state === 'processing'}
66
+ ctaLoadingLabel={strings.otp.ctaLoadingLabel}
67
+ /* "Didn't receive the code? Resend code or Change phone number" โ€” drawn
68
+ under the CTA on every OTP section. ONE sentence, TWO independently
69
+ actionable links, so it uses the archetype's composed-line slot rather
70
+ than `linkLabel` (a full-width 56px button cannot sit inside a line of
71
+ body text, and one button could not tell the two actions apart โ€”
72
+ DEVIATIONS #PI-10). */
73
+ linkContent={
74
+ strings.otp.resendPrompt ? (
75
+ <p className="prizma-screen-layout__inline-prompt">
76
+ {strings.otp.resendPrompt}{' '}
77
+ {strings.otp.resendLabel ? (
78
+ <button
79
+ type="button"
80
+ className="prizma-screen-layout__inline-link"
81
+ onClick={() => onAction?.({ type: 'secondary', screenId })}
82
+ >
83
+ {strings.otp.resendLabel}
84
+ </button>
85
+ ) : null}
86
+ {strings.otp.changeNumberLabel ? (
87
+ <>
88
+ {' '}
89
+ {strings.otp.resendSeparator}{' '}
90
+ <button
91
+ type="button"
92
+ className="prizma-screen-layout__inline-link"
93
+ onClick={() => onAction?.({ type: 'tertiary', screenId })}
94
+ >
95
+ {strings.otp.changeNumberLabel}
96
+ </button>
97
+ </>
98
+ ) : null}
99
+ </p>
100
+ ) : undefined
101
+ }
102
+ verifiedLabel={strings.verifiedLabel}
103
+ navLabel={strings.navLabel}
104
+ screenId={screenId}
105
+ overrides={overrides}
106
+ onAction={onAction}
107
+ {...shell}
108
+ >
109
+ <PrizmaOtp
110
+ length={length}
111
+ /* Uncontrolled, for the same reason as the phone field: `readOnly`
112
+ would paint Core's DISABLED surface on the resting states, which is
113
+ grey Figma does not draw there (DEVIATIONS #PI-6). */
114
+ defaultValue={value ?? ''}
115
+ /* `processing` is the one section Figma greys โ€” the code stays legible
116
+ while the check runs. */
117
+ disabled={state === 'processing'}
118
+ error={state === 'error'}
119
+ errorText={state === 'error' ? strings.otp.errorText : undefined}
120
+ />
121
+ </PrizmaFormScreen>
122
+ ),
123
+ );
124
+ PhoneInputOtpScreen.displayName = 'PhoneInputOtpScreen';
125
+
126
+ export default PhoneInputOtpScreen;
@@ -0,0 +1,61 @@
1
+ import React, { forwardRef } from 'react';
2
+ import {
3
+ PrizmaProcessingScreen,
4
+ type PrizmaProcessingScreenProps,
5
+ } from './ProcessingScreen';
6
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
7
+ import type { PhoneInputStrings } from './PhoneInputStrings';
8
+ import './ScreenLayout.css';
9
+
10
+ export interface PhoneInputSnaLoadingScreenProps
11
+ extends Omit<
12
+ PrizmaProcessingScreenProps,
13
+ 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
14
+ > {
15
+ /** Module copy โ€” this screen reads the `sna` slice. */
16
+ strings: PhoneInputStrings;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+
22
+ /**
23
+ * Phone Input โ€” Silent Network Auth in flight, built on the Processing
24
+ * archetype (GUIDELINES.md ยง6-C, `PrizmaProcessingScreen`).
25
+ *
26
+ * Figma: the purple `phoneNumber.loading` section (`phoneNumber.SNA.loading`).
27
+ * A pure spinner + H2 screen with no button, which is exactly the case ยง6-F
28
+ * reserves for C rather than the Result archetype โ€” nothing here needs a CTA
29
+ * band, so the centred column stays.
30
+ */
31
+ export const PhoneInputSnaLoadingScreen = forwardRef<
32
+ HTMLDivElement,
33
+ PhoneInputSnaLoadingScreenProps
34
+ >(
35
+ (
36
+ {
37
+ strings,
38
+ screenId = 'phone-input-sna-loading',
39
+ overrides,
40
+ onAction,
41
+ ...shell
42
+ },
43
+ ref,
44
+ ) => (
45
+ <PrizmaProcessingScreen
46
+ ref={ref}
47
+ status="loading"
48
+ title={strings.sna.title}
49
+ subtitle={strings.sna.subtitle}
50
+ verifiedLabel={strings.verifiedLabel}
51
+ navLabel={strings.navLabel}
52
+ screenId={screenId}
53
+ overrides={overrides}
54
+ onAction={onAction}
55
+ {...shell}
56
+ />
57
+ ),
58
+ );
59
+ PhoneInputSnaLoadingScreen.displayName = 'PhoneInputSnaLoadingScreen';
60
+
61
+ export default PhoneInputSnaLoadingScreen;
@@ -0,0 +1,136 @@
1
+ // Phone Input โ€” copy contract.
2
+ //
3
+ // Figma: `๐Ÿ“ž Phone - Screens specs + Localization` (nIj8kklozEOMs2e5sLzGFi,
4
+ // page 5:13191). Five purple parent sections:
5
+ // phoneNumber.verify โ€” default / countryCode / phonetyping / phoneFilled / loading
6
+ // phoneNumber.OTP โ€” typing / filled / processing / error
7
+ // phoneNumber.loading โ€” SNA.loading (Silent Network Auth)
8
+ // phoneNumber.success โ€” success
9
+ // phoneNumber.error โ€” tryAgain / unknown / noNetwork
10
+ //
11
+ // No hardcoded English anywhere in a screen: every visible string arrives here,
12
+ // so the host's locale pack drives the module (the file ships ES + PT columns).
13
+
14
+ /**
15
+ * The `phoneNumber.verify.*` sections. All five draw the SAME layout โ€” the
16
+ * country dropdown + phone field pair โ€” and differ only in field content and
17
+ * CTA state, so they are states of one screen rather than five screens:
18
+ * - `default` โ€” placeholder phone, CTA enabled (Figma draws it enabled)
19
+ * - `countryCode` โ€” the country dropdown open over the form
20
+ * - `typing` โ€” partial value, focused field
21
+ * - `filled` โ€” complete value
22
+ * - `loading` โ€” CTA in its loading treatment while the code is requested
23
+ */
24
+ export type PhoneInputVerifyState =
25
+ | 'default'
26
+ | 'countryCode'
27
+ | 'typing'
28
+ | 'filled'
29
+ | 'loading';
30
+
31
+ /**
32
+ * The `phoneNumber.OTP.*` sections โ€” same layout, different field state:
33
+ * - `typing` โ€” partial code
34
+ * - `filled` โ€” complete code
35
+ * - `processing` โ€” code submitted, `PrizmaOtp` in its loading treatment
36
+ * - `error` โ€” wrong code, negative field + error row
37
+ */
38
+ export type PhoneInputOtpState = 'typing' | 'filled' | 'processing' | 'error';
39
+
40
+ /**
41
+ * The `phoneNumber.error.*` sections. `tryAgain` and `unknown` keep the module
42
+ * chrome; `noNetwork` is the connectivity family every module carries โ€” no nav,
43
+ * no tag, a Wi-Fi glyph above the title (DEVIATIONS #9, #10).
44
+ */
45
+ export type PhoneInputErrorVariant = 'tryAgain' | 'unknown' | 'noNetwork';
46
+
47
+ /** One selectable country in the dial-code dropdown. Runtime data, not copy โ€”
48
+ * the host supplies its own list; `flag` is the emoji Figma draws (Core has no
49
+ * country-flag primitive โ€” DEVIATIONS #PI-3). */
50
+ export interface PhoneInputCountry {
51
+ /** Stable value, e.g. an ISO 3166-1 alpha-2 code. */
52
+ value: string;
53
+ /** Dial code as drawn, e.g. `+381`. */
54
+ dialCode: string;
55
+ /** Country name for the open menu row. */
56
+ label: string;
57
+ /** Emoji flag, e.g. `๐Ÿ‡ท๐Ÿ‡ธ`. */
58
+ flag?: string;
59
+ }
60
+
61
+ export interface PhoneInputStrings {
62
+ /** "verified by" attribution in the footer tag. */
63
+ verifiedLabel: string;
64
+ /** Accessible name for the logo nav row. */
65
+ navLabel?: string;
66
+
67
+ /** phoneNumber.verify.* */
68
+ verify: {
69
+ /** H2 ("Verify your phone number"). */
70
+ title: string;
71
+ /** H5 ("We'll send you a code to ensure it's yours"). */
72
+ subtitle: string;
73
+ /** Phone field placeholder ("(123) 123-45-67"). */
74
+ placeholder: string;
75
+ /** Accessible label for the phone field. */
76
+ fieldLabel?: string;
77
+ /** Accessible label for the country dial-code dropdown. */
78
+ countryLabel?: string;
79
+ /** Search placeholder inside the open country menu. */
80
+ countrySearchPlaceholder?: string;
81
+ /** Primary CTA ("Continue"). */
82
+ ctaLabel: string;
83
+ /** Accessible busy label while the code is requested (`loading`). */
84
+ ctaLoadingLabel?: string;
85
+ };
86
+
87
+ /** phoneNumber.OTP.* */
88
+ otp: {
89
+ /** H2 ("Enter the code we've sent via SMS"). */
90
+ title: string;
91
+ /** H5 โ€” carries the masked destination number, when the section shows one. */
92
+ subtitle?: string;
93
+ /** Error row on the `error` state ("Incorrect code, try again"). */
94
+ errorText: string;
95
+ /**
96
+ * The line under the CTA is ONE sentence carrying TWO separate links:
97
+ * "Didn't receive the code? [Resend code] or [Change phone number]".
98
+ * It is split into four strings because the links are independently
99
+ * actionable โ€” the host must be able to tell a re-send from a return to
100
+ * phone entry โ€” and because a locale needs to order the fragments itself.
101
+ * Omit `resendPrompt` to render no line at all.
102
+ */
103
+ resendPrompt?: string;
104
+ /** First link โ€” re-sends the code. Emits `secondary`. */
105
+ resendLabel?: string;
106
+ /** The conjunction between the two links ("or"). */
107
+ resendSeparator?: string;
108
+ /** Second link โ€” returns to phone entry. Emits `tertiary`. */
109
+ changeNumberLabel?: string;
110
+ /** Primary CTA. */
111
+ ctaLabel: string;
112
+ /** Accessible / visible busy copy while the code is checked (`processing`). */
113
+ ctaLoadingLabel?: string;
114
+ };
115
+
116
+ /** phoneNumber.loading โ€” Silent Network Auth, a pure processing screen. */
117
+ sna: {
118
+ /** H2 shown under the spinner. */
119
+ title: string;
120
+ subtitle?: string;
121
+ };
122
+
123
+ /** phoneNumber.success */
124
+ success: {
125
+ title: string;
126
+ subtitle?: string;
127
+ ctaLabel?: string;
128
+ };
129
+
130
+ /** phoneNumber.error.* โ€” one slice per variant. */
131
+ error: {
132
+ tryAgain: { title: string; subtitle?: string; ctaLabel: string };
133
+ unknown: { title: string; subtitle?: string; ctaLabel: string };
134
+ noConnection: { title: string; subtitle?: string; ctaLabel: string };
135
+ };
136
+ }
@@ -0,0 +1,56 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { PhoneInputStrings } from './PhoneInputStrings';
5
+ import './ScreenLayout.css';
6
+
7
+ export interface PhoneInputSuccessScreenProps
8
+ extends Omit<
9
+ PrizmaResultScreenProps,
10
+ 'status' | 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
11
+ > {
12
+ /** Module copy โ€” this screen reads the `success` slice. */
13
+ strings: PhoneInputStrings;
14
+ screenId?: string;
15
+ overrides?: PrizmaScreenOverrides;
16
+ onAction?: PrizmaScreenActionHandler;
17
+ }
18
+
19
+ /**
20
+ * Phone Input โ€” the verified verdict, built on the Result archetype
21
+ * (GUIDELINES.md ยง6-F, `PrizmaResultScreen`).
22
+ *
23
+ * Figma: the purple `phoneNumber.success` section. Centred status mark + title
24
+ * over the CTA band. The mark is Core's outline status icon via
25
+ * `PrizmaTitle`'s icon slot โ€” the module Figma still draws the two-tone filled
26
+ * disc, one icon sweep behind (DEVIATIONS #15, unchanged here).
27
+ */
28
+ export const PhoneInputSuccessScreen = forwardRef<HTMLDivElement, PhoneInputSuccessScreenProps>(
29
+ (
30
+ {
31
+ strings,
32
+ screenId = 'phone-input-success',
33
+ overrides,
34
+ onAction,
35
+ ...shell
36
+ },
37
+ ref,
38
+ ) => (
39
+ <PrizmaResultScreen
40
+ ref={ref}
41
+ status="success"
42
+ title={strings.success.title}
43
+ subtitle={strings.success.subtitle}
44
+ ctaLabel={strings.success.ctaLabel}
45
+ verifiedLabel={strings.verifiedLabel}
46
+ navLabel={strings.navLabel}
47
+ screenId={screenId}
48
+ overrides={overrides}
49
+ onAction={onAction}
50
+ {...shell}
51
+ />
52
+ ),
53
+ );
54
+ PhoneInputSuccessScreen.displayName = 'PhoneInputSuccessScreen';
55
+
56
+ export default PhoneInputSuccessScreen;
@@ -0,0 +1,153 @@
1
+ import React, { forwardRef } from 'react';
2
+ import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
3
+ import { PrizmaDropdown } from '@incodetech/prizma-core-web/dropdown';
4
+ import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
5
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
6
+ import type {
7
+ PhoneInputCountry,
8
+ PhoneInputStrings,
9
+ PhoneInputVerifyState,
10
+ } from './PhoneInputStrings';
11
+ import './ScreenLayout.css';
12
+ import './PhoneInputLayout.css';
13
+
14
+ export interface PhoneInputVerifyScreenProps
15
+ extends Omit<
16
+ PrizmaFormScreenProps,
17
+ 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
18
+ > {
19
+ /** Module copy โ€” this screen reads the `verify` slice. */
20
+ strings: PhoneInputStrings;
21
+ /** Which purple `phoneNumber.verify.*` section to render. Default `default`. */
22
+ state?: PhoneInputVerifyState;
23
+ /** The selectable dial codes. Runtime data, not copy. */
24
+ countries?: PhoneInputCountry[];
25
+ /** Selected country `value`. Defaults to the first entry. */
26
+ country?: string;
27
+ /** The phone number as typed. Empty renders the placeholder (`default`). */
28
+ value?: string;
29
+ screenId?: string;
30
+ overrides?: PrizmaScreenOverrides;
31
+ onAction?: PrizmaScreenActionHandler;
32
+ }
33
+
34
+ /** Figma's `countryCode` section draws the dropdown menu open over the form;
35
+ * Core exposes that as the documentation-only `forceOpen` (a screen is one
36
+ * static spec state, never a live interaction). */
37
+ const DEFAULT_COUNTRIES: PhoneInputCountry[] = [
38
+ { value: 'RS', dialCode: '+381', label: 'Serbia', flag: '๐Ÿ‡ท๐Ÿ‡ธ' },
39
+ ];
40
+
41
+ /**
42
+ * Phone Input โ€” the phone-entry screen, built on the Form archetype
43
+ * (GUIDELINES.md ยง6-E, `PrizmaFormScreen`).
44
+ *
45
+ * ONE screen for all five purple `phoneNumber.verify.*` sections
46
+ * (`default` / `countryCode` / `phonetyping` / `phoneFilled` / `loading`):
47
+ * measured against the 390 frames, they share an identical layout โ€” nav โ†’ Title
48
+ * (H2 + H5) โ†’ Spacing/32 โ†’ the combined country-dropdown + phone-field row โ†’
49
+ * CTA โ†’ tag โ€” and differ ONLY in field content and CTA state, which is exactly
50
+ * what GUIDELINES ยง6-E means by "states are separate screens sharing the
51
+ * identical layout".
52
+ *
53
+ * Figma's `Input / Combined` is a dropdown + text field pair at Spacing/8, the
54
+ * dropdown hugging its content and the field filling the rest. Core ships both
55
+ * primitives (`PrizmaDropdown`, `PrizmaTextField`) at the designed 56px min
56
+ * height and `Border/Radius/small`, so the module layer contributes only the
57
+ * row that pairs them (`PhoneInputLayout.css`) โ€” no primitive is re-implemented.
58
+ */
59
+ export const PhoneInputVerifyScreen = forwardRef<HTMLDivElement, PhoneInputVerifyScreenProps>(
60
+ (
61
+ {
62
+ strings,
63
+ state = 'default',
64
+ countries = DEFAULT_COUNTRIES,
65
+ country,
66
+ value,
67
+ screenId = `phone-input-verify-${state}`,
68
+ overrides,
69
+ onAction,
70
+ ...shell
71
+ },
72
+ ref,
73
+ ) => {
74
+ const selected = country ?? countries[0]?.value;
75
+ const options = countries.map((c) => ({
76
+ value: c.value,
77
+ // The closed field shows flag + dial code exactly as Figma draws it
78
+ // ("๐Ÿ‡ท๐Ÿ‡ธ +381"); the open menu row adds the country name.
79
+ label: [c.flag, c.dialCode].filter(Boolean).join(' '),
80
+ }));
81
+
82
+ // Figma treats the states as three distinct field treatments, not one:
83
+ // `loading` greys BOTH fields (the request is in flight and the form is
84
+ // inert) and puts the spinner in the CTA; `typing` draws the focused blue
85
+ // border with the caret and the clear affordance; everything else is a
86
+ // plain editable field on the default white surface. Core's read-only
87
+ // paints the DISABLED surface (owner definition 2026-07-12), so it is used
88
+ // for none of them โ€” it would grey the resting states too (DEVIATIONS #PI-6).
89
+ const busy = state === 'loading';
90
+ const focused = state === 'typing';
91
+
92
+ return (
93
+ <PrizmaFormScreen
94
+ ref={ref}
95
+ title={strings.verify.title}
96
+ subtitle={strings.verify.subtitle}
97
+ ctaLabel={strings.verify.ctaLabel}
98
+ /* Figma's `loading` section swaps the CTA label for Core's spinner. */
99
+ ctaLoading={busy}
100
+ ctaLoadingLabel={strings.verify.ctaLoadingLabel}
101
+ verifiedLabel={strings.verifiedLabel}
102
+ navLabel={strings.navLabel}
103
+ screenId={screenId}
104
+ overrides={overrides}
105
+ onAction={onAction}
106
+ {...shell}
107
+ >
108
+ <div className="phone-input-combined">
109
+ <PrizmaDropdown
110
+ className="phone-input-combined__country"
111
+ /* Figma's combined row draws NO visible labels โ€” the flag + dial
112
+ code and the placeholder carry the meaning โ€” so the module copy
113
+ rides `aria-label` instead of Core's visible `label` slot, which
114
+ would add a row the design does not have. */
115
+ aria-label={strings.verify.countryLabel}
116
+ options={options}
117
+ value={selected}
118
+ searchable
119
+ searchPlaceholder={strings.verify.countrySearchPlaceholder}
120
+ /* The `countryCode` section IS the open-menu spec state. */
121
+ forceOpen={state === 'countryCode'}
122
+ disabled={busy}
123
+ />
124
+ <PrizmaTextField
125
+ className={[
126
+ 'phone-input-combined__number',
127
+ /* Core's own static-focus modifier โ€” the same mechanism the
128
+ Dropdown exposes as `forceState`, which `PrizmaTextField` has
129
+ no prop for yet (DEVIATIONS #PI-7). No styling is redeclared. */
130
+ focused ? 'prizma-input-textfield--focused' : '',
131
+ ]
132
+ .filter(Boolean)
133
+ .join(' ')}
134
+ type="tel"
135
+ inputMode="tel"
136
+ aria-label={strings.verify.fieldLabel}
137
+ placeholder={strings.verify.placeholder}
138
+ /* Uncontrolled: a screen is one static spec state, and `value`
139
+ without `onChange` would either warn or force `readOnly`, whose
140
+ disabled surface is exactly the grey Figma does NOT draw here. */
141
+ defaultValue={value ?? ''}
142
+ disabled={busy}
143
+ /* Figma draws the clear โœ• only while the field is focused. */
144
+ clearable={focused}
145
+ />
146
+ </div>
147
+ </PrizmaFormScreen>
148
+ );
149
+ },
150
+ );
151
+ PhoneInputVerifyScreen.displayName = 'PhoneInputVerifyScreen';
152
+
153
+ export default PhoneInputVerifyScreen;