@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,46 @@
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 { PrizmaDisclaimer } from '@incodetech/prizma-core-web/disclaimer';
7
+ import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
8
+ import { PrizmaScreenShell } from './ScreenShell';
9
+ import { PrizmaScreenNav } from './ScreenNav';
10
+ import './ScreenLayout.css';
11
+ /**
12
+ * Archetype G — List.
13
+ *
14
+ * Nav (or reserved row) → optional glyph → title block → a Core card / option
15
+ * list filling the middle → CTA band → anchored footer tag.
16
+ *
17
+ * It exists because EIGHT screens hand-built it independently: ID Capture's
18
+ * common issues, permission, age verification and document chooser, Document
19
+ * Capture's common issues, and the document-error card lists. Each re-declared
20
+ * the title→list offset (24 on the ID screens, 32 on Document Capture's) and
21
+ * each inserted the verified tag by hand — which is how the tag ended up at 0 on
22
+ * some screens and 16 on others (DEVIATIONS #F-29, #F-31).
23
+ *
24
+ * CTA band order is the family's designed one: disclaimer → tertiary link →
25
+ * secondary → primary. The link sits ABOVE the primary here (Figma
26
+ * `tertiaryPosition="top"` on `1-5-2-id-common-issues` and `1-3-2-id`), which is
27
+ * the mirror of Archetype A, where it sits below. Stacked at the foundation's
28
+ * flat Spacing/16 (DEVIATIONS #8) — every offset comes from ScreenLayout.css and
29
+ * this file declares none of its own.
30
+ *
31
+ * Reach for `PrizmaResultScreen` instead when the middle is a centred verdict
32
+ * rather than a list.
33
+ */
34
+ export const PrizmaListScreen = forwardRef(({ progress, status = 'none', title, subtitle, glyph, children, listAlign = 'start', scrollList = false, disclaimer, ctaLabel, secondaryCtaLabel, linkLabel, verifiedLabel, 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 }), progress ? (_jsx("div", { className: "prizma-screen-layout__progress", children: progress })) : null, _jsxs("div", { className: "prizma-screen-layout__content", children: [glyph, _jsx(PrizmaTitle, { variant: overrides?.align === 'left' ? 'left' : 'centered', title: title, showSubtitle: Boolean(subtitle), subtitle: subtitle, icon: status === 'loading'
35
+ ? { type: 'spinner' }
36
+ : status === 'none'
37
+ ? { type: 'none' }
38
+ : { type: 'status', status } }), _jsx("div", { className: [
39
+ 'prizma-screen-layout__list',
40
+ listAlign === 'end' ? 'prizma-screen-layout__list--end' : '',
41
+ scrollList ? 'prizma-screen-layout__list--scroll' : '',
42
+ ]
43
+ .filter(Boolean)
44
+ .join(' '), children: children }), ctaLabel || secondaryCtaLabel || linkLabel || disclaimer ? (_jsxs("div", { className: "prizma-screen-layout__band", children: [disclaimer ? _jsx(PrizmaDisclaimer, { text: disclaimer }) : null, linkLabel ? (_jsx(PrizmaButton, { variant: "tertiary-link", size: "L", onClick: () => onAction?.({ type: 'secondary', screenId }), children: linkLabel })) : null, ctaLabel ? (_jsx(PrizmaButton, { variant: "primary", size: "L", onClick: () => onAction?.({ type: 'cta', screenId }), children: ctaLabel })) : null, secondaryCtaLabel ? (_jsx(PrizmaButton, { variant: "secondary", size: "L", onClick: () => onAction?.({ type: 'secondary', screenId }), children: secondaryCtaLabel })) : null] })) : null] }), showFooter ? (_jsx("div", { className: "prizma-screen-layout__footer", children: _jsx(PrizmaTag, { label: verifiedLabel }) })) : null] })));
45
+ PrizmaListScreen.displayName = 'PrizmaListScreen';
46
+ export default PrizmaListScreen;
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import { type PrizmaProcessingScreenProps } from './ProcessingScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { LoadersStrings, LoadersVariant } from './LoadersStrings';
5
+ import './ScreenLayout.css';
6
+ export interface LoaderScreenProps extends Omit<PrizmaProcessingScreenProps, 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'> {
7
+ /** Family copy — this screen reads the `variants` slice its `variant` names. */
8
+ strings: LoadersStrings;
9
+ /** Which copy pair to render. Default `processing`. */
10
+ variant?: LoadersVariant;
11
+ screenId?: string;
12
+ overrides?: PrizmaScreenOverrides;
13
+ onAction?: PrizmaScreenActionHandler;
14
+ }
15
+ /**
16
+ * Loaders — the generic wait screen, built on the Processing archetype
17
+ * (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
18
+ *
19
+ * Figma: `Module Generic Screens` frames `67:2388` ("Processing…") and
20
+ * `67:3593` ("Just a moment…"). ONE screen for both, and for every module
21
+ * loader after them: logo header → Core's spinner → status line → reassurance
22
+ * line → the verified tag, with no CTA. The archetype already IS this recipe;
23
+ * this component exists so the family has a name a designer can point at and a
24
+ * copy contract a host can fill, not to add layout.
25
+ *
26
+ * Reach for `PrizmaResultScreen` the moment a wait screen needs a button — a
27
+ * loader with a "Cancel" is a result screen, and the missing CTA band here is
28
+ * exactly what made three modules hand-build the skeleton (see
29
+ * `ResultScreen.tsx`).
30
+ */
31
+ export declare const LoaderScreen: React.ForwardRefExoticComponent<LoaderScreenProps & React.RefAttributes<HTMLDivElement>>;
32
+ export default LoaderScreen;
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaProcessingScreen } from './ProcessingScreen';
5
+ import './ScreenLayout.css';
6
+ /**
7
+ * Loaders — the generic wait screen, built on the Processing archetype
8
+ * (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
9
+ *
10
+ * Figma: `Module Generic Screens` frames `67:2388` ("Processing…") and
11
+ * `67:3593` ("Just a moment…"). ONE screen for both, and for every module
12
+ * loader after them: logo header → Core's spinner → status line → reassurance
13
+ * line → the verified tag, with no CTA. The archetype already IS this recipe;
14
+ * this component exists so the family has a name a designer can point at and a
15
+ * copy contract a host can fill, not to add layout.
16
+ *
17
+ * Reach for `PrizmaResultScreen` the moment a wait screen needs a button — a
18
+ * loader with a "Cancel" is a result screen, and the missing CTA band here is
19
+ * exactly what made three modules hand-build the skeleton (see
20
+ * `ResultScreen.tsx`).
21
+ */
22
+ export const LoaderScreen = forwardRef(({ strings, variant = 'processing', screenId = `loaders-${variant}`, overrides, onAction, ...shell }, ref) => {
23
+ const copy = strings.variants[variant];
24
+ return (_jsx(PrizmaProcessingScreen, { ref: ref, status: "loading", title: copy.title, subtitle: copy.subtitle, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell }));
25
+ });
26
+ LoaderScreen.displayName = 'LoaderScreen';
27
+ export default LoaderScreen;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The two frames in the generic file. They are the same screen with different
3
+ * copy — which is the point of the family: the loader is a shape, and the two
4
+ * entries here are examples of filling it, not a closed set. A module that
5
+ * waits for something else supplies its own pair of strings under a new key.
6
+ */
7
+ export type LoadersVariant = 'processing' | 'validating';
8
+ export interface LoadersCopy {
9
+ /** H2 status line ("Processing…"). */
10
+ title: string;
11
+ /** Reassurance line under it ("This won't take long."). */
12
+ subtitle?: string;
13
+ }
14
+ export interface LoadersStrings {
15
+ /** Accessible name for the logo nav region (i18n — no baked-in English). */
16
+ navLabel?: string;
17
+ /** "verified by" attribution copy for the footer tag. */
18
+ verifiedLabel: string;
19
+ variants: Record<LoadersVariant, LoadersCopy>;
20
+ }
@@ -0,0 +1,16 @@
1
+ // Loaders — copy contract for the GENERIC family.
2
+ //
3
+ // Figma: `Module Generic Screens` (qGJjfL4O0JSjz1x4tOjJn8), frames `67:2388`
4
+ // and `67:3593`.
5
+ //
6
+ // The wait screen every module shows while the server thinks. It is drawn once
7
+ // in the generic file and reused verbatim — logo header, Core's spinner, a
8
+ // status line, a reassurance line, the verified tag — because a user who sees a
9
+ // different loader between two steps reads it as a different product.
10
+ //
11
+ // The family has no flow of its own: a loader is always ENTERED from the module
12
+ // that is waiting and LEFT for that module's next screen, so there is nothing
13
+ // to draw. Core Lab lists it as a library of states.
14
+ //
15
+ // No hardcoded English anywhere in a screen: every visible string arrives here.
16
+ export {};
@@ -0,0 +1,35 @@
1
+ import React from 'react';
2
+ import { type PrizmaListScreenProps } from './ListScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { NfcDocumentType, NfcStrings } from './NfcStrings';
5
+ import './ScreenLayout.css';
6
+ export interface NfcCommonIssuesScreenProps extends Omit<PrizmaListScreenProps, 'title' | 'children' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'> {
7
+ /** Module copy — this screen reads the `commonIssues` slice. */
8
+ strings: NfcStrings;
9
+ /** Which purple section: `nfc.commonissues.id` (3 rows) or `.passport` (5). */
10
+ documentType?: NfcDocumentType;
11
+ screenId?: string;
12
+ overrides?: PrizmaScreenOverrides;
13
+ onAction?: PrizmaScreenActionHandler;
14
+ }
15
+ /**
16
+ * NFC — the "Common issues" help sheet reached from the retry screen's Help
17
+ * button. Purple sections `nfc.commonissues.id` (19976:109863, three rows) and
18
+ * `nfc.commonissues.passport` (19976:112072, five), on the List archetype
19
+ * (GUIDELINES.md §6-G).
20
+ *
21
+ * Like ID Capture's and Document Capture's help sheets, these sections draw no
22
+ * logo, so `showHeader={false}` drops the wordmark while the nav row stays
23
+ * reserved — the content starts where every other screen's does and the tag
24
+ * keeps its one fixed position (#F-34, #F-29).
25
+ *
26
+ * The rows are Core's `PrizmaList variant="icons-m"`, which IS the `List`
27
+ * instance the sections place: a 40px leading icon slot, a single-line label,
28
+ * rows stacked by the component's own rhythm. (Figma spaces its rows 16 apart
29
+ * and Core's icons-m gap is Spacing/12 — Core wins, a 4px family-level
30
+ * difference that no module re-declares.) `PrizmaCardListCommonIssues`, which
31
+ * two other modules use for their help sheets, is deliberately NOT used here:
32
+ * it is the two-line title+description row, and these rows have one line.
33
+ */
34
+ export declare const NfcCommonIssuesScreen: React.ForwardRefExoticComponent<NfcCommonIssuesScreenProps & React.RefAttributes<HTMLDivElement>>;
35
+ export default NfcCommonIssuesScreen;
@@ -0,0 +1,48 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { IconChipNotFound, IconIdTooFar, IconPassportCover, IconPassportTooFar, IconPhoneCover, IconPhoneMoved, } from '@incodetech/prizma-core-icons';
5
+ import { PrizmaList } from '@incodetech/prizma-core-web/list';
6
+ import { PrizmaListScreen } from './ListScreen';
7
+ import './ScreenLayout.css';
8
+ /**
9
+ * Issue kind → canonical bank glyph. Unlike Document Capture's and
10
+ * Geolocation's maps (#DC-23), NOTHING here is a substitution: the bank ships
11
+ * this module's five glyphs by name — the NFC sweep minted `passport-cover`,
12
+ * `passport-too-far`, `id-too-far`, `chip-not-found`, `phone-moved` and
13
+ * `phone-cover` — so every row draws the icon its Figma section draws.
14
+ */
15
+ const ISSUE_ICONS = {
16
+ passportInCover: _jsx(IconPassportCover, { size: "m" }),
17
+ passportTooFar: _jsx(IconPassportTooFar, { size: "m" }),
18
+ idTooFar: _jsx(IconIdTooFar, { size: "m" }),
19
+ chipOtherPage: _jsx(IconChipNotFound, { size: "m" }),
20
+ phoneMoved: _jsx(IconPhoneMoved, { size: "m" }),
21
+ phoneCover: _jsx(IconPhoneCover, { size: "m" }),
22
+ };
23
+ /**
24
+ * NFC — the "Common issues" help sheet reached from the retry screen's Help
25
+ * button. Purple sections `nfc.commonissues.id` (19976:109863, three rows) and
26
+ * `nfc.commonissues.passport` (19976:112072, five), on the List archetype
27
+ * (GUIDELINES.md §6-G).
28
+ *
29
+ * Like ID Capture's and Document Capture's help sheets, these sections draw no
30
+ * logo, so `showHeader={false}` drops the wordmark while the nav row stays
31
+ * reserved — the content starts where every other screen's does and the tag
32
+ * keeps its one fixed position (#F-34, #F-29).
33
+ *
34
+ * The rows are Core's `PrizmaList variant="icons-m"`, which IS the `List`
35
+ * instance the sections place: a 40px leading icon slot, a single-line label,
36
+ * rows stacked by the component's own rhythm. (Figma spaces its rows 16 apart
37
+ * and Core's icons-m gap is Spacing/12 — Core wins, a 4px family-level
38
+ * difference that no module re-declares.) `PrizmaCardListCommonIssues`, which
39
+ * two other modules use for their help sheets, is deliberately NOT used here:
40
+ * it is the two-line title+description row, and these rows have one line.
41
+ */
42
+ export const NfcCommonIssuesScreen = forwardRef(({ strings, documentType = 'passport', screenId = `nfc-common-issues-${documentType}`, showHeader = false, overrides, onAction, ...shell }, ref) => (_jsx(PrizmaListScreen, { ref: ref, showHeader: showHeader, title: strings.commonIssues.title, ctaLabel: strings.commonIssues.ctaLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: _jsx(PrizmaList, { variant: "icons-m", "aria-label": strings.commonIssues.listLabel, items: strings.commonIssues.issues[documentType].map((issue) => ({
43
+ variant: 'icon-m',
44
+ label: issue.label,
45
+ icon: ISSUE_ICONS[issue.kind],
46
+ })) }) })));
47
+ NfcCommonIssuesScreen.displayName = 'NfcCommonIssuesScreen';
48
+ export default NfcCommonIssuesScreen;
@@ -0,0 +1,41 @@
1
+ import React from 'react';
2
+ import { type PrizmaResultScreenProps } from './ResultScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { NfcStrings } from './NfcStrings';
5
+ import './ScreenLayout.css';
6
+ /**
7
+ * Which error verdict. `unable` is the pre-flight refusal (the device or the
8
+ * document cannot do NFC at all); `general` is the read failing on a chip that
9
+ * should have worked.
10
+ */
11
+ export type NfcErrorVariant = 'unable' | 'general';
12
+ export interface NfcErrorScreenProps extends Omit<PrizmaResultScreenProps, 'status' | 'title' | 'subtitle' | 'children' | 'ctaLabel' | 'secondaryCtaLabel' | 'verifiedLabel' | 'navLabel'> {
13
+ /** Module copy — this screen reads the `error` slice. */
14
+ strings: NfcStrings;
15
+ /** Which purple section to render. Default `unable`. */
16
+ variant?: NfcErrorVariant;
17
+ screenId?: string;
18
+ overrides?: PrizmaScreenOverrides;
19
+ onAction?: PrizmaScreenActionHandler;
20
+ }
21
+ /**
22
+ * NFC — the two error verdicts, on the Result archetype (GUIDELINES.md §6-F):
23
+ *
24
+ * - `unable` — `nfc.error.unable` (19975:107734): a WARNING mark over "We're
25
+ * sorry, you're unable to continue the process" + "Only passports and phones
26
+ * with NFC are allowed."
27
+ * - `general` — `nfc.error.generalerror` (19975:108644): a NEGATIVE mark over
28
+ * "Unable to authenticate document chip", no supporting line.
29
+ *
30
+ * The two are one screen because they differ only in mark and copy; the amber
31
+ * vs red distinction is real and deliberate (a device that CANNOT do NFC is not
32
+ * a failed read), so it rides Core's own status axis rather than a colour
33
+ * literal.
34
+ *
35
+ * Chrome: both sections draw the verdict alone — no logo row, no tag. Both are
36
+ * kept, which is the standing ruling for the error family (#PI-8, restated by
37
+ * the owner 2026-08-19 and applied to four modules' connectivity screens), so
38
+ * nothing shifts between the module's states (#F-29).
39
+ */
40
+ export declare const NfcErrorScreen: React.ForwardRefExoticComponent<NfcErrorScreenProps & React.RefAttributes<HTMLDivElement>>;
41
+ export default NfcErrorScreen;
@@ -0,0 +1,27 @@
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
+ * NFC — the two error verdicts, on the Result archetype (GUIDELINES.md §6-F):
8
+ *
9
+ * - `unable` — `nfc.error.unable` (19975:107734): a WARNING mark over "We're
10
+ * sorry, you're unable to continue the process" + "Only passports and phones
11
+ * with NFC are allowed."
12
+ * - `general` — `nfc.error.generalerror` (19975:108644): a NEGATIVE mark over
13
+ * "Unable to authenticate document chip", no supporting line.
14
+ *
15
+ * The two are one screen because they differ only in mark and copy; the amber
16
+ * vs red distinction is real and deliberate (a device that CANNOT do NFC is not
17
+ * a failed read), so it rides Core's own status axis rather than a colour
18
+ * literal.
19
+ *
20
+ * Chrome: both sections draw the verdict alone — no logo row, no tag. Both are
21
+ * kept, which is the standing ruling for the error family (#PI-8, restated by
22
+ * the owner 2026-08-19 and applied to four modules' connectivity screens), so
23
+ * nothing shifts between the module's states (#F-29).
24
+ */
25
+ export const NfcErrorScreen = forwardRef(({ strings, variant = 'unable', screenId = `nfc-error-${variant}`, overrides, onAction, ...shell }, ref) => (_jsx(PrizmaResultScreen, { ref: ref, status: variant === 'unable' ? 'warning' : 'error', title: strings.error[variant].title, subtitle: variant === 'unable' ? strings.error.unable.subtitle : undefined, ctaLabel: strings.error[variant].ctaLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell })));
26
+ NfcErrorScreen.displayName = 'NfcErrorScreen';
27
+ export default NfcErrorScreen;
@@ -0,0 +1,36 @@
1
+ /* NFC — module-owned layer.
2
+ *
3
+ * Only ONE thing lives here, and it is presentation, not archetype spacing: the
4
+ * scrim + centring frame that presents Core's `PrizmaModalContent` on the
5
+ * `nfc.error.nfcsettings` section. No offset, size or type value in this file
6
+ * duplicates anything the archetypes own — every screen offset in this module
7
+ * comes from `ScreenLayout.css`.
8
+ *
9
+ * Why the screen owns the presentation: Core's safe presenter (`PrizmaModal`)
10
+ * `createPortal`s to `document.body`, which escapes the 390 × 844 screen frame
11
+ * and the host's `transform: scale()` (DEVIATIONS #17), and a screen is one
12
+ * static spec state with no open/close clock. This is the same division of
13
+ * labour Document Capture's bottom sheet already uses (#DC-30) — Core owns the
14
+ * card, the surface owns the scrim.
15
+ */
16
+
17
+ .nfc-modal-scrim {
18
+ position: absolute;
19
+ inset: 0;
20
+ z-index: 1;
21
+ background: var(--prizma-surface-overlay);
22
+ }
23
+
24
+ /* Centres the dialog in the frame. `PrizmaModalContent` is `width: 100%` up to
25
+ * its own `Modal/Size/Max-width`, so the only thing added here is the gutter
26
+ * Figma draws (12 each side of the 390 frame) — a Spacing token, not a literal. */
27
+ .nfc-modal-panel {
28
+ position: absolute;
29
+ inset: 0;
30
+ z-index: 2;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ padding-inline: var(--prizma-spacing-12);
35
+ box-sizing: border-box;
36
+ }
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { type PrizmaProcessingScreenProps } from './ProcessingScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { NfcStrings } from './NfcStrings';
5
+ import './ScreenLayout.css';
6
+ export interface NfcProcessingScreenProps extends Omit<PrizmaProcessingScreenProps, 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'> {
7
+ /** Module copy — this screen reads the `loading` slice. */
8
+ strings: NfcStrings;
9
+ screenId?: string;
10
+ overrides?: PrizmaScreenOverrides;
11
+ onAction?: PrizmaScreenActionHandler;
12
+ }
13
+ /**
14
+ * NFC — "Hold on a sec.. / We're verifying your identity": the chip has been
15
+ * read and the data is being checked. Purple section `nfc.loading.default`
16
+ * (19974:82917), on the Processing archetype (GUIDELINES.md §6-C).
17
+ *
18
+ * A pure spinner + title screen with no button, which is the case §6-F reserves
19
+ * for C rather than the Result archetype — the same split Email Input's success
20
+ * screen sits on (#EI-4).
21
+ *
22
+ * Chrome: the section draws neither the logo nor the tag (its CONTENT frame
23
+ * holds only the `Loading spinner` instance). Both are kept, per the owner rule
24
+ * that non-capture screens show header AND footer and that fixed chrome never
25
+ * moves between states (#F-30, #F-29, and the #PI-8 restatement).
26
+ */
27
+ export declare const NfcProcessingScreen: React.ForwardRefExoticComponent<NfcProcessingScreenProps & React.RefAttributes<HTMLDivElement>>;
28
+ export default NfcProcessingScreen;
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaProcessingScreen, } from './ProcessingScreen';
5
+ import './ScreenLayout.css';
6
+ /**
7
+ * NFC — "Hold on a sec.. / We're verifying your identity": the chip has been
8
+ * read and the data is being checked. Purple section `nfc.loading.default`
9
+ * (19974:82917), on the Processing archetype (GUIDELINES.md §6-C).
10
+ *
11
+ * A pure spinner + title screen with no button, which is the case §6-F reserves
12
+ * for C rather than the Result archetype — the same split Email Input's success
13
+ * screen sits on (#EI-4).
14
+ *
15
+ * Chrome: the section draws neither the logo nor the tag (its CONTENT frame
16
+ * holds only the `Loading spinner` instance). Both are kept, per the owner rule
17
+ * that non-capture screens show header AND footer and that fixed chrome never
18
+ * moves between states (#F-30, #F-29, and the #PI-8 restatement).
19
+ */
20
+ export const NfcProcessingScreen = forwardRef(({ strings, screenId = 'nfc-loading', overrides, onAction, ...shell }, ref) => (_jsx(PrizmaProcessingScreen, { ref: ref, status: "loading", title: strings.loading.title, subtitle: strings.loading.subtitle, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell })));
21
+ NfcProcessingScreen.displayName = 'NfcProcessingScreen';
22
+ export default NfcProcessingScreen;
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import { type PrizmaListScreenProps } from './ListScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { NfcStrings } from './NfcStrings';
5
+ import './ScreenLayout.css';
6
+ /** Which moment of the read this is. The two moments the Prizma layer actually
7
+ * draws: the bar filling under "Scanning..", then full and green under "Done".
8
+ * There is no `error` member — the failed read never reaches this layer; see
9
+ * the note below. */
10
+ export type NfcScanningState = 'scanning' | 'done';
11
+ export interface NfcScanningScreenProps extends Omit<PrizmaListScreenProps, 'title' | 'subtitle' | 'children' | 'ctaLabel' | 'secondaryCtaLabel' | 'linkLabel' | 'verifiedLabel' | 'navLabel'> {
12
+ /** Module copy — this screen reads the `scanning` slice. */
13
+ strings: NfcStrings;
14
+ /** Which moment of the read to render. Default `scanning`. */
15
+ state?: NfcScanningState;
16
+ /** Override the bar's fill (runtime data, never copy). */
17
+ progress?: number;
18
+ screenId?: string;
19
+ overrides?: PrizmaScreenOverrides;
20
+ onAction?: PrizmaScreenActionHandler;
21
+ }
22
+ /**
23
+ * NFC — the read in flight: "Scanning.." → "Done". The Prizma layer of the
24
+ * `nfc.scanning` group (22469:32916).
25
+ *
26
+ * **What this screen is, and what it deliberately is not.** All ten of that
27
+ * group's purple sections draw the PLATFORM's own NFC dialog — iOS's "Ready to
28
+ * scan" sheet with its status glyph and Cancel row, and Android's equivalent on
29
+ * a blacked-out backdrop. Those are OS chrome, not Prizma surfaces: a screen
30
+ * composed only of Core components cannot render them, and faking them would
31
+ * ship a counterfeit system UI. Same ruling as ID Capture's OS permission
32
+ * dialogs (#IDC-26) and Document Capture's iOS action sheet / Photos picker
33
+ * (#DC-20). What IS a Prizma surface is the screen UNDER the sheet — visible
34
+ * through it in the iOS sections, and the whole screen once the sheet is
35
+ * dismissed — and that is what this file builds: nav → title block → the
36
+ * progress bar and its "Hold still.." line.
37
+ *
38
+ * Only TWO of the ten sections carry a distinct Prizma layer, and they are the
39
+ * two states above: `nfc.scanning.scanning` (22469:34999) and
40
+ * `nfc.scanning.success` (22469:36706, "Done" + the full green bar). The other
41
+ * eight have no screen of their own:
42
+ * - the four `*ready` sections sit over `NfcTutorialScreen`, unchanged;
43
+ * - `androidscanning` / `androiddone` / `androidscanningError` black the app out
44
+ * entirely behind Android's sheet — there is nothing of ours to draw;
45
+ * - `scanningerror` (23291:19865) and `androidscanningError` (22526:20450) put
46
+ * the words "We couldn't scan the chip" INSIDE the OS sheet. Re-checked frame
47
+ * by frame on 2026-08-19: behind the iOS sheet the Prizma layer is
48
+ * byte-for-byte `nfc.scanning.scanning` — same "Scanning.." title, same
49
+ * subtitle, same partly-filled bar, same "Hold still..". So this file has NO
50
+ * `error` state: hoisting the sheet's copy into the title block would invent a
51
+ * screen Figma never draws, and a `failed` bar appears nowhere in the group.
52
+ * A failed read is communicated by the OS sheet, then by `NfcTryAgainScreen`.
53
+ *
54
+ * Archetype G (`PrizmaListScreen`) carries it — the frames put the bar at
55
+ * Spacing/24 under a top-aligned title block, which is exactly G's middle slot
56
+ * (F would centre the pair and drop the title). The bar is Core's
57
+ * `PrizmaLoadingBar`, capped at Figma's 164px by the foundation's own
58
+ * `__review-loading` rule (#DC-28 / #REV-1) rather than a second copy of that
59
+ * literal in a module file.
60
+ *
61
+ * One Core-wins colour call, already settled: Figma fills the in-flight bar
62
+ * GREEN, Core fills it brand blue because "green is reserved for success"
63
+ * (owner, 2026-07-11 — DEVIATIONS #DC-28). `done` is genuinely green.
64
+ */
65
+ export declare const NfcScanningScreen: React.ForwardRefExoticComponent<NfcScanningScreenProps & React.RefAttributes<HTMLDivElement>>;
66
+ export default NfcScanningScreen;
@@ -0,0 +1,61 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { PrizmaLoadingBar } from '@incodetech/prizma-core-web/loading-bar';
5
+ import { PrizmaListScreen } from './ListScreen';
6
+ import './ScreenLayout.css';
7
+ /** State → Core `PrizmaLoadingBar` phase + the progress the section draws. */
8
+ const BAR = {
9
+ scanning: { state: 'analyzing', progress: 15 },
10
+ done: { state: 'success', progress: 100 },
11
+ };
12
+ /**
13
+ * NFC — the read in flight: "Scanning.." → "Done". The Prizma layer of the
14
+ * `nfc.scanning` group (22469:32916).
15
+ *
16
+ * **What this screen is, and what it deliberately is not.** All ten of that
17
+ * group's purple sections draw the PLATFORM's own NFC dialog — iOS's "Ready to
18
+ * scan" sheet with its status glyph and Cancel row, and Android's equivalent on
19
+ * a blacked-out backdrop. Those are OS chrome, not Prizma surfaces: a screen
20
+ * composed only of Core components cannot render them, and faking them would
21
+ * ship a counterfeit system UI. Same ruling as ID Capture's OS permission
22
+ * dialogs (#IDC-26) and Document Capture's iOS action sheet / Photos picker
23
+ * (#DC-20). What IS a Prizma surface is the screen UNDER the sheet — visible
24
+ * through it in the iOS sections, and the whole screen once the sheet is
25
+ * dismissed — and that is what this file builds: nav → title block → the
26
+ * progress bar and its "Hold still.." line.
27
+ *
28
+ * Only TWO of the ten sections carry a distinct Prizma layer, and they are the
29
+ * two states above: `nfc.scanning.scanning` (22469:34999) and
30
+ * `nfc.scanning.success` (22469:36706, "Done" + the full green bar). The other
31
+ * eight have no screen of their own:
32
+ * - the four `*ready` sections sit over `NfcTutorialScreen`, unchanged;
33
+ * - `androidscanning` / `androiddone` / `androidscanningError` black the app out
34
+ * entirely behind Android's sheet — there is nothing of ours to draw;
35
+ * - `scanningerror` (23291:19865) and `androidscanningError` (22526:20450) put
36
+ * the words "We couldn't scan the chip" INSIDE the OS sheet. Re-checked frame
37
+ * by frame on 2026-08-19: behind the iOS sheet the Prizma layer is
38
+ * byte-for-byte `nfc.scanning.scanning` — same "Scanning.." title, same
39
+ * subtitle, same partly-filled bar, same "Hold still..". So this file has NO
40
+ * `error` state: hoisting the sheet's copy into the title block would invent a
41
+ * screen Figma never draws, and a `failed` bar appears nowhere in the group.
42
+ * A failed read is communicated by the OS sheet, then by `NfcTryAgainScreen`.
43
+ *
44
+ * Archetype G (`PrizmaListScreen`) carries it — the frames put the bar at
45
+ * Spacing/24 under a top-aligned title block, which is exactly G's middle slot
46
+ * (F would centre the pair and drop the title). The bar is Core's
47
+ * `PrizmaLoadingBar`, capped at Figma's 164px by the foundation's own
48
+ * `__review-loading` rule (#DC-28 / #REV-1) rather than a second copy of that
49
+ * literal in a module file.
50
+ *
51
+ * One Core-wins colour call, already settled: Figma fills the in-flight bar
52
+ * GREEN, Core fills it brand blue because "green is reserved for success"
53
+ * (owner, 2026-07-11 — DEVIATIONS #DC-28). `done` is genuinely green.
54
+ */
55
+ export const NfcScanningScreen = forwardRef(({ strings, state = 'scanning', progress, screenId = `nfc-scanning-${state}`, overrides, onAction, ...shell }, ref) => {
56
+ const bar = BAR[state];
57
+ const slice = strings.scanning[state];
58
+ return (_jsx(PrizmaListScreen, { ref: ref, title: slice.title, subtitle: slice.subtitle, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: _jsx("div", { className: "prizma-screen-layout__review-loading", children: _jsx(PrizmaLoadingBar, { progress: progress ?? bar.progress, state: bar.state, title: strings.scanning.progressLabel }) }) }));
59
+ });
60
+ NfcScanningScreen.displayName = 'NfcScanningScreen';
61
+ export default NfcScanningScreen;
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import { type PrizmaTutorialScreenProps } from './TutorialScreen';
3
+ import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
4
+ import type { NfcStrings } from './NfcStrings';
5
+ import './ScreenLayout.css';
6
+ import './NfcLayout.css';
7
+ export interface NfcSettingsScreenProps extends Omit<PrizmaTutorialScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'linkLabel' | 'illustration' | 'overlay' | 'verifiedLabel' | 'navLabel'> {
8
+ /** Module copy — this screen reads the `settings` slice. */
9
+ strings: NfcStrings;
10
+ screenId?: string;
11
+ overrides?: PrizmaScreenOverrides;
12
+ onAction?: PrizmaScreenActionHandler;
13
+ }
14
+ /**
15
+ * NFC — "Enable NFC scanning", the dialog shown when the device has NFC but it
16
+ * is switched off. Purple section `nfc.error.nfcsettings` (23003:23652).
17
+ *
18
+ * The section is a Core `Modal` on a scrim over a backgrounded app: there is no
19
+ * Prizma surface behind it at all (its CONTENT frame holds the Modal instance
20
+ * and nothing else). Core's `PrizmaModalContent` renders the card verbatim; the
21
+ * screen supplies only the scrim and the centring frame, exactly as Document
22
+ * Capture's method sheet does (#DC-30) — the safe presenter portals to
23
+ * `document.body` and would escape the screen frame.
24
+ *
25
+ * TWO shortcomings, both reported rather than worked around:
26
+ * - **No archetype models "an overlay over nothing".** `PrizmaTutorialScreen`
27
+ * is used purely because A's `overlay` is the only shell-level slot in the
28
+ * archetype layer; its own content is emptied out (no illustration, no CTA,
29
+ * header and footer off) and its required `title` is passed the empty string
30
+ * so nothing renders behind the scrim. That is a workaround at the archetype
31
+ * BOUNDARY, not inside a module file, and it is the gap being reported.
32
+ * - **⚠️ KNOWN MISMATCH — the status mark lands below the copy.** Figma stacks
33
+ * the amber mark ABOVE the title (mark → "Enable NFC scanning" → the two-line
34
+ * body → the filled blue button). Core's only mark-shaped slot is
35
+ * `with-image`, and `Modal.tsx` renders it AFTER the content block — title
36
+ * (l. 218), subtitle (l. 220), body, THEN `prizma-modal__image` (l. 224) —
37
+ * so the rendered card is title → body → mark → button. Re-confirmed against
38
+ * Core source on 2026-08-19; `title` is typed `string`, so the mark cannot
39
+ * ride along in the heading either. Every in-module alternative (hand-rolling
40
+ * the card, or reordering Core's own BEM children from `NfcLayout.css`) is a
41
+ * local workaround around a missing archetype/Core slot, which rule 2 forbids
42
+ * — so this state SHIPS KNOWINGLY WRONG rather than being treated as matching
43
+ * the frame, and the fix is Core-side. **Core request: a status-mark slot on
44
+ * `PrizmaModalContent` rendered ABOVE the title, mirroring `PrizmaTitle`'s
45
+ * status-icon position; this screen switches to it the day it lands.**
46
+ * The mark itself is the bank's OUTLINE `IconStatusWarning`, not Figma's
47
+ * filled disc (#15), wearing Core's OWN `prizma-title__status-icon--warning`
48
+ * class so both the Title/Icon/Size (40) and the amber token come from the
49
+ * design system — the #PI-7 idiom of borrowing a Core modifier through
50
+ * `className` rather than redeclaring anything.
51
+ */
52
+ export declare const NfcSettingsScreen: React.ForwardRefExoticComponent<NfcSettingsScreenProps & React.RefAttributes<HTMLDivElement>>;
53
+ export default NfcSettingsScreen;
@@ -0,0 +1,57 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { forwardRef } from 'react';
4
+ import { IconStatusWarning } from '@incodetech/prizma-core-icons';
5
+ import { PrizmaModalContent } from '@incodetech/prizma-core-web/modal';
6
+ import { PrizmaTutorialScreen } from './TutorialScreen';
7
+ import './ScreenLayout.css';
8
+ import './NfcLayout.css';
9
+ /**
10
+ * NFC — "Enable NFC scanning", the dialog shown when the device has NFC but it
11
+ * is switched off. Purple section `nfc.error.nfcsettings` (23003:23652).
12
+ *
13
+ * The section is a Core `Modal` on a scrim over a backgrounded app: there is no
14
+ * Prizma surface behind it at all (its CONTENT frame holds the Modal instance
15
+ * and nothing else). Core's `PrizmaModalContent` renders the card verbatim; the
16
+ * screen supplies only the scrim and the centring frame, exactly as Document
17
+ * Capture's method sheet does (#DC-30) — the safe presenter portals to
18
+ * `document.body` and would escape the screen frame.
19
+ *
20
+ * TWO shortcomings, both reported rather than worked around:
21
+ * - **No archetype models "an overlay over nothing".** `PrizmaTutorialScreen`
22
+ * is used purely because A's `overlay` is the only shell-level slot in the
23
+ * archetype layer; its own content is emptied out (no illustration, no CTA,
24
+ * header and footer off) and its required `title` is passed the empty string
25
+ * so nothing renders behind the scrim. That is a workaround at the archetype
26
+ * BOUNDARY, not inside a module file, and it is the gap being reported.
27
+ * - **⚠️ KNOWN MISMATCH — the status mark lands below the copy.** Figma stacks
28
+ * the amber mark ABOVE the title (mark → "Enable NFC scanning" → the two-line
29
+ * body → the filled blue button). Core's only mark-shaped slot is
30
+ * `with-image`, and `Modal.tsx` renders it AFTER the content block — title
31
+ * (l. 218), subtitle (l. 220), body, THEN `prizma-modal__image` (l. 224) —
32
+ * so the rendered card is title → body → mark → button. Re-confirmed against
33
+ * Core source on 2026-08-19; `title` is typed `string`, so the mark cannot
34
+ * ride along in the heading either. Every in-module alternative (hand-rolling
35
+ * the card, or reordering Core's own BEM children from `NfcLayout.css`) is a
36
+ * local workaround around a missing archetype/Core slot, which rule 2 forbids
37
+ * — so this state SHIPS KNOWINGLY WRONG rather than being treated as matching
38
+ * the frame, and the fix is Core-side. **Core request: a status-mark slot on
39
+ * `PrizmaModalContent` rendered ABOVE the title, mirroring `PrizmaTitle`'s
40
+ * status-icon position; this screen switches to it the day it lands.**
41
+ * The mark itself is the bank's OUTLINE `IconStatusWarning`, not Figma's
42
+ * filled disc (#15), wearing Core's OWN `prizma-title__status-icon--warning`
43
+ * class so both the Title/Icon/Size (40) and the amber token come from the
44
+ * design system — the #PI-7 idiom of borrowing a Core modifier through
45
+ * `className` rather than redeclaring anything.
46
+ */
47
+ export const NfcSettingsScreen = forwardRef(({ strings, screenId = 'nfc-settings', showHeader = false, showFooter = false, overrides, onAction, ...shell }, ref) => (_jsx(PrizmaTutorialScreen, { ref: ref,
48
+ /* Nothing renders behind the scrim — see the note above. Not copy, so
49
+ nothing to translate. */
50
+ title: "", showHeader: showHeader, showFooter: showFooter, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, overlay: _jsxs(_Fragment, { children: [_jsx("div", { className: "nfc-modal-scrim", "aria-hidden": "true" }), _jsx("div", { className: "nfc-modal-panel", children: _jsx(PrizmaModalContent, { variant: "with-image", title: strings.settings.title, subtitle: strings.settings.subtitle, ariaLabel: strings.settings.dialogLabel, image: _jsx(IconStatusWarning, { size: "m", className: "prizma-title__status-icon prizma-title__status-icon--warning" }), showCloseIcon: false, buttonGroupProps: {
51
+ showPrimary: true,
52
+ showSecondary: false,
53
+ primaryLabel: strings.settings.ctaLabel,
54
+ onPrimaryClick: () => onAction?.({ type: 'cta', screenId }),
55
+ } }) })] }), ...shell })));
56
+ NfcSettingsScreen.displayName = 'NfcSettingsScreen';
57
+ export default NfcSettingsScreen;