@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.
- package/README.md +74 -0
- package/dist/CaptureOverlay.css +55 -0
- package/dist/CaptureOverlay.d.ts +34 -0
- package/dist/CaptureOverlay.js +32 -0
- package/dist/CaptureScreen.d.ts +51 -0
- package/dist/CaptureScreen.js +30 -0
- package/dist/CurpConfirmScreen.d.ts +33 -0
- package/dist/CurpConfirmScreen.js +29 -0
- package/dist/CurpEnterScreen.d.ts +51 -0
- package/dist/CurpEnterScreen.js +77 -0
- package/dist/CurpGenerateScreen.d.ts +47 -0
- package/dist/CurpGenerateScreen.js +57 -0
- package/dist/CurpLayout.css +92 -0
- package/dist/CurpProcessingScreen.d.ts +32 -0
- package/dist/CurpProcessingScreen.js +29 -0
- package/dist/CurpResultScreen.d.ts +37 -0
- package/dist/CurpResultScreen.js +36 -0
- package/dist/CurpStrings.d.ts +170 -0
- package/dist/CurpStrings.js +16 -0
- package/dist/DataSharingConsentConsentScreen.d.ts +73 -0
- package/dist/DataSharingConsentConsentScreen.js +120 -0
- package/dist/DataSharingConsentLayout.css +78 -0
- package/dist/DataSharingConsentStrings.d.ts +96 -0
- package/dist/DataSharingConsentStrings.js +38 -0
- package/dist/DemoScreensEndScreen.d.ts +33 -0
- package/dist/DemoScreensEndScreen.js +27 -0
- package/dist/DemoScreensStrings.d.ts +11 -0
- package/dist/DemoScreensStrings.js +19 -0
- package/dist/DocumentCaptureCaptureScreen.d.ts +53 -0
- package/dist/DocumentCaptureCaptureScreen.js +51 -0
- package/dist/DocumentCaptureCommonIssuesScreen.d.ts +32 -0
- package/dist/DocumentCaptureCommonIssuesScreen.js +45 -0
- package/dist/DocumentCaptureConfirmImageScreen.d.ts +38 -0
- package/dist/DocumentCaptureConfirmImageScreen.js +34 -0
- package/dist/DocumentCaptureConfirmUploadScreen.d.ts +43 -0
- package/dist/DocumentCaptureConfirmUploadScreen.js +29 -0
- package/dist/DocumentCaptureGenericErrorScreen.d.ts +36 -0
- package/dist/DocumentCaptureGenericErrorScreen.js +30 -0
- package/dist/DocumentCaptureIllustration.d.ts +45 -0
- package/dist/DocumentCaptureIllustration.js +7 -0
- package/dist/DocumentCaptureLayout.css +226 -0
- package/dist/DocumentCaptureMethodSelectionScreen.d.ts +45 -0
- package/dist/DocumentCaptureMethodSelectionScreen.js +70 -0
- package/dist/DocumentCaptureNextPageScreen.d.ts +33 -0
- package/dist/DocumentCaptureNextPageScreen.js +28 -0
- package/dist/DocumentCaptureNoConnectionScreen.d.ts +28 -0
- package/dist/DocumentCaptureNoConnectionScreen.js +29 -0
- package/dist/DocumentCaptureStrings.d.ts +158 -0
- package/dist/DocumentCaptureStrings.js +21 -0
- package/dist/DocumentCaptureTutorialScreen.d.ts +36 -0
- package/dist/DocumentCaptureTutorialScreen.js +27 -0
- package/dist/EkybAddressDetailsScreen.d.ts +61 -0
- package/dist/EkybAddressDetailsScreen.js +63 -0
- package/dist/EkybBusinessDetailsScreen.d.ts +55 -0
- package/dist/EkybBusinessDetailsScreen.js +57 -0
- package/dist/EkybCountryScreen.d.ts +52 -0
- package/dist/EkybCountryScreen.js +58 -0
- package/dist/EkybErrorScreen.d.ts +30 -0
- package/dist/EkybErrorScreen.js +24 -0
- package/dist/EkybOwnersScreen.d.ts +73 -0
- package/dist/EkybOwnersScreen.js +87 -0
- package/dist/EkybProcessingScreen.d.ts +28 -0
- package/dist/EkybProcessingScreen.js +22 -0
- package/dist/EkybStrings.d.ts +200 -0
- package/dist/EkybStrings.js +27 -0
- package/dist/EkybSuccessScreen.d.ts +28 -0
- package/dist/EkybSuccessScreen.js +22 -0
- package/dist/EkycDetailsScreen.d.ts +65 -0
- package/dist/EkycDetailsScreen.js +81 -0
- package/dist/EkycErrorScreen.d.ts +32 -0
- package/dist/EkycErrorScreen.js +26 -0
- package/dist/EkycLayout.css +39 -0
- package/dist/EkycLicenseScreen.d.ts +21 -0
- package/dist/EkycLicenseScreen.js +68 -0
- package/dist/EkycProcessingScreen.d.ts +26 -0
- package/dist/EkycProcessingScreen.js +20 -0
- package/dist/EkycStrings.d.ts +112 -0
- package/dist/EkycStrings.js +34 -0
- package/dist/EkycSuccessScreen.d.ts +29 -0
- package/dist/EkycSuccessScreen.js +23 -0
- package/dist/ElectronicSignatureDrawScreen.d.ts +57 -0
- package/dist/ElectronicSignatureDrawScreen.js +53 -0
- package/dist/ElectronicSignatureErrorScreen.d.ts +31 -0
- package/dist/ElectronicSignatureErrorScreen.js +25 -0
- package/dist/ElectronicSignatureLayout.css +80 -0
- package/dist/ElectronicSignatureReviewScreen.d.ts +51 -0
- package/dist/ElectronicSignatureReviewScreen.js +36 -0
- package/dist/ElectronicSignatureStrings.d.ts +50 -0
- package/dist/ElectronicSignatureStrings.js +12 -0
- package/dist/ElectronicSignatureSuccessScreen.d.ts +30 -0
- package/dist/ElectronicSignatureSuccessScreen.js +24 -0
- package/dist/EmailInputErrorScreen.d.ts +34 -0
- package/dist/EmailInputErrorScreen.js +28 -0
- package/dist/EmailInputOtpScreen.d.ts +56 -0
- package/dist/EmailInputOtpScreen.js +82 -0
- package/dist/EmailInputProcessingScreen.d.ts +29 -0
- package/dist/EmailInputProcessingScreen.js +23 -0
- package/dist/EmailInputStrings.d.ts +130 -0
- package/dist/EmailInputStrings.js +19 -0
- package/dist/EmailInputSuccessScreen.d.ts +37 -0
- package/dist/EmailInputSuccessScreen.js +31 -0
- package/dist/EmailInputVerifyScreen.d.ts +46 -0
- package/dist/EmailInputVerifyScreen.js +55 -0
- package/dist/ErrorScreensScreen.d.ts +62 -0
- package/dist/ErrorScreensScreen.js +71 -0
- package/dist/ErrorScreensStrings.d.ts +31 -0
- package/dist/ErrorScreensStrings.js +28 -0
- package/dist/FaceCaptureCapturingScreen.d.ts +32 -0
- package/dist/FaceCaptureCapturingScreen.js +53 -0
- package/dist/FaceCaptureLayout.css +18 -0
- package/dist/FaceCaptureLoadingScreen.d.ts +32 -0
- package/dist/FaceCaptureLoadingScreen.js +30 -0
- package/dist/FaceCaptureManualCaptureScreen.d.ts +32 -0
- package/dist/FaceCaptureManualCaptureScreen.js +27 -0
- package/dist/FaceCaptureNoConnectionScreen.d.ts +30 -0
- package/dist/FaceCaptureNoConnectionScreen.js +31 -0
- package/dist/FaceCaptureResultErrorScreen.d.ts +40 -0
- package/dist/FaceCaptureResultErrorScreen.js +32 -0
- package/dist/FaceCaptureResultSuccessScreen.d.ts +25 -0
- package/dist/FaceCaptureResultSuccessScreen.js +27 -0
- package/dist/FaceCaptureStrings.d.ts +62 -0
- package/dist/FaceCaptureStrings.js +14 -0
- package/dist/FaceCaptureTutorialScreen.d.ts +29 -0
- package/dist/FaceCaptureTutorialScreen.js +20 -0
- package/dist/FaceMatchComparisonCompactScreen.d.ts +26 -0
- package/dist/FaceMatchComparisonCompactScreen.js +24 -0
- package/dist/FaceMatchComparisonScreen.d.ts +80 -0
- package/dist/FaceMatchComparisonScreen.js +81 -0
- package/dist/FaceMatchLayout.css +264 -0
- package/dist/FaceMatchResultScreen.d.ts +50 -0
- package/dist/FaceMatchResultScreen.js +52 -0
- package/dist/FaceMatchStrings.d.ts +66 -0
- package/dist/FaceMatchStrings.js +21 -0
- package/dist/FormScreen.css +78 -0
- package/dist/FormScreen.d.ts +101 -0
- package/dist/FormScreen.js +36 -0
- package/dist/FormsChoiceScreen.d.ts +66 -0
- package/dist/FormsChoiceScreen.js +63 -0
- package/dist/FormsErrorScreen.d.ts +28 -0
- package/dist/FormsErrorScreen.js +22 -0
- package/dist/FormsFieldScreen.d.ts +66 -0
- package/dist/FormsFieldScreen.js +85 -0
- package/dist/FormsLayout.css +45 -0
- package/dist/FormsLongFormScreen.d.ts +70 -0
- package/dist/FormsLongFormScreen.js +149 -0
- package/dist/FormsStrings.d.ts +181 -0
- package/dist/FormsStrings.js +36 -0
- package/dist/FormsSuccessScreen.d.ts +32 -0
- package/dist/FormsSuccessScreen.js +26 -0
- package/dist/GeolocationBrowserStepsScreen.d.ts +56 -0
- package/dist/GeolocationBrowserStepsScreen.js +95 -0
- package/dist/GeolocationErrorScreen.d.ts +43 -0
- package/dist/GeolocationErrorScreen.js +56 -0
- package/dist/GeolocationIntroScreen.d.ts +49 -0
- package/dist/GeolocationIntroScreen.js +38 -0
- package/dist/GeolocationPermissionScreen.d.ts +38 -0
- package/dist/GeolocationPermissionScreen.js +30 -0
- package/dist/GeolocationStrings.d.ts +157 -0
- package/dist/GeolocationStrings.js +28 -0
- package/dist/IdCaptureAgeVerificationScreen.d.ts +25 -0
- package/dist/IdCaptureAgeVerificationScreen.js +38 -0
- package/dist/IdCaptureAnalyzingScreen.d.ts +41 -0
- package/dist/IdCaptureAnalyzingScreen.js +30 -0
- package/dist/IdCaptureCommonIssuesScreen.d.ts +31 -0
- package/dist/IdCaptureCommonIssuesScreen.js +49 -0
- package/dist/IdCaptureDocumentErrorScreen.d.ts +37 -0
- package/dist/IdCaptureDocumentErrorScreen.js +30 -0
- package/dist/IdCaptureDocumentSelectionScreen.d.ts +41 -0
- package/dist/IdCaptureDocumentSelectionScreen.js +49 -0
- package/dist/IdCaptureFlipScreen.d.ts +31 -0
- package/dist/IdCaptureFlipScreen.js +26 -0
- package/dist/IdCaptureHoldOnScreen.d.ts +28 -0
- package/dist/IdCaptureHoldOnScreen.js +22 -0
- package/dist/IdCaptureLayout.css +111 -0
- package/dist/IdCaptureNoConnectionScreen.d.ts +28 -0
- package/dist/IdCaptureNoConnectionScreen.js +29 -0
- package/dist/IdCapturePermissionScreen.d.ts +34 -0
- package/dist/IdCapturePermissionScreen.js +45 -0
- package/dist/IdCaptureResultScreen.d.ts +59 -0
- package/dist/IdCaptureResultScreen.js +89 -0
- package/dist/IdCaptureStageScreen.d.ts +69 -0
- package/dist/IdCaptureStageScreen.js +88 -0
- package/dist/IdCaptureStrings.d.ts +199 -0
- package/dist/IdCaptureStrings.js +15 -0
- package/dist/IdCaptureTutorialScreen.d.ts +36 -0
- package/dist/IdCaptureTutorialScreen.js +30 -0
- package/dist/ListScreen.d.ts +95 -0
- package/dist/ListScreen.js +46 -0
- package/dist/LoaderScreen.d.ts +32 -0
- package/dist/LoaderScreen.js +27 -0
- package/dist/LoadersStrings.d.ts +20 -0
- package/dist/LoadersStrings.js +16 -0
- package/dist/NfcCommonIssuesScreen.d.ts +35 -0
- package/dist/NfcCommonIssuesScreen.js +48 -0
- package/dist/NfcErrorScreen.d.ts +41 -0
- package/dist/NfcErrorScreen.js +27 -0
- package/dist/NfcLayout.css +36 -0
- package/dist/NfcProcessingScreen.d.ts +28 -0
- package/dist/NfcProcessingScreen.js +22 -0
- package/dist/NfcScanningScreen.d.ts +66 -0
- package/dist/NfcScanningScreen.js +61 -0
- package/dist/NfcSettingsScreen.d.ts +53 -0
- package/dist/NfcSettingsScreen.js +57 -0
- package/dist/NfcStrings.d.ts +112 -0
- package/dist/NfcStrings.js +7 -0
- package/dist/NfcSuccessScreen.d.ts +28 -0
- package/dist/NfcSuccessScreen.js +22 -0
- package/dist/NfcSymbolScreen.d.ts +39 -0
- package/dist/NfcSymbolScreen.js +32 -0
- package/dist/NfcTryAgainScreen.d.ts +53 -0
- package/dist/NfcTryAgainScreen.js +45 -0
- package/dist/NfcTutorialScreen.d.ts +33 -0
- package/dist/NfcTutorialScreen.js +24 -0
- package/dist/PermissionsAllowScreen.d.ts +44 -0
- package/dist/PermissionsAllowScreen.js +38 -0
- package/dist/PermissionsBrowserStepsScreen.d.ts +42 -0
- package/dist/PermissionsBrowserStepsScreen.js +86 -0
- package/dist/PermissionsRequiredScreen.d.ts +37 -0
- package/dist/PermissionsRequiredScreen.js +51 -0
- package/dist/PermissionsStrings.d.ts +70 -0
- package/dist/PermissionsStrings.js +36 -0
- package/dist/PhoneInputErrorScreen.d.ts +37 -0
- package/dist/PhoneInputErrorScreen.js +47 -0
- package/dist/PhoneInputLayout.css +61 -0
- package/dist/PhoneInputOtpScreen.d.ts +37 -0
- package/dist/PhoneInputOtpScreen.js +44 -0
- package/dist/PhoneInputSnaLoadingScreen.d.ts +23 -0
- package/dist/PhoneInputSnaLoadingScreen.js +17 -0
- package/dist/PhoneInputStrings.d.ts +121 -0
- package/dist/PhoneInputStrings.js +13 -0
- package/dist/PhoneInputSuccessScreen.d.ts +23 -0
- package/dist/PhoneInputSuccessScreen.js +17 -0
- package/dist/PhoneInputVerifyScreen.d.ts +41 -0
- package/dist/PhoneInputVerifyScreen.js +71 -0
- package/dist/ProcessingScreen.d.ts +42 -0
- package/dist/ProcessingScreen.js +21 -0
- package/dist/QualifiedSignatureAcceptScreen.d.ts +71 -0
- package/dist/QualifiedSignatureAcceptScreen.js +86 -0
- package/dist/QualifiedSignatureDocumentScreen.d.ts +62 -0
- package/dist/QualifiedSignatureDocumentScreen.js +56 -0
- package/dist/QualifiedSignatureLayout.css +206 -0
- package/dist/QualifiedSignatureProcessingScreen.d.ts +46 -0
- package/dist/QualifiedSignatureProcessingScreen.js +48 -0
- package/dist/QualifiedSignatureResultScreen.d.ts +65 -0
- package/dist/QualifiedSignatureResultScreen.js +76 -0
- package/dist/QualifiedSignatureReviewScreen.d.ts +49 -0
- package/dist/QualifiedSignatureReviewScreen.js +40 -0
- package/dist/QualifiedSignatureStrings.d.ts +222 -0
- package/dist/QualifiedSignatureStrings.js +25 -0
- package/dist/QualifiedSignatureUploadScreen.d.ts +42 -0
- package/dist/QualifiedSignatureUploadScreen.js +35 -0
- package/dist/ResultScreen.d.ts +93 -0
- package/dist/ResultScreen.js +37 -0
- package/dist/ReviewScreen.d.ts +81 -0
- package/dist/ReviewScreen.js +56 -0
- package/dist/ScreenLayout.css +469 -0
- package/dist/ScreenNav.css +43 -0
- package/dist/ScreenNav.d.ts +26 -0
- package/dist/ScreenNav.js +13 -0
- package/dist/ScreenShell.css +130 -0
- package/dist/ScreenShell.d.ts +45 -0
- package/dist/ScreenShell.js +22 -0
- package/dist/TutorialScreen.d.ts +70 -0
- package/dist/TutorialScreen.js +24 -0
- package/dist/VideoSelfieCameraStepsScreen.d.ts +47 -0
- package/dist/VideoSelfieCameraStepsScreen.js +56 -0
- package/dist/VideoSelfieErrorScreen.d.ts +63 -0
- package/dist/VideoSelfieErrorScreen.js +94 -0
- package/dist/VideoSelfieFlipCameraScreen.d.ts +34 -0
- package/dist/VideoSelfieFlipCameraScreen.js +38 -0
- package/dist/VideoSelfieFlipIdScreen.d.ts +34 -0
- package/dist/VideoSelfieFlipIdScreen.js +29 -0
- package/dist/VideoSelfieIdCaptureScreen.d.ts +75 -0
- package/dist/VideoSelfieIdCaptureScreen.js +86 -0
- package/dist/VideoSelfieLayout.css +259 -0
- package/dist/VideoSelfiePermissionRequiredScreen.d.ts +35 -0
- package/dist/VideoSelfiePermissionRequiredScreen.js +45 -0
- package/dist/VideoSelfiePermissionScreen.d.ts +51 -0
- package/dist/VideoSelfiePermissionScreen.js +44 -0
- package/dist/VideoSelfieProcessingScreen.d.ts +28 -0
- package/dist/VideoSelfieProcessingScreen.js +22 -0
- package/dist/VideoSelfieRetryScreen.d.ts +31 -0
- package/dist/VideoSelfieRetryScreen.js +32 -0
- package/dist/VideoSelfieSelfieCaptureScreen.d.ts +52 -0
- package/dist/VideoSelfieSelfieCaptureScreen.js +58 -0
- package/dist/VideoSelfieSpeakScreen.d.ts +64 -0
- package/dist/VideoSelfieSpeakScreen.js +95 -0
- package/dist/VideoSelfieStrings.d.ts +196 -0
- package/dist/VideoSelfieStrings.js +14 -0
- package/dist/VideoSelfieSuccessScreen.d.ts +25 -0
- package/dist/VideoSelfieSuccessScreen.js +19 -0
- package/dist/VideoSelfieTutorialScreen.d.ts +33 -0
- package/dist/VideoSelfieTutorialScreen.js +41 -0
- package/dist/ViewfinderScreen.css +107 -0
- package/dist/ViewfinderScreen.d.ts +40 -0
- package/dist/ViewfinderScreen.js +26 -0
- package/dist/WatchlistBusinessFormScreen.d.ts +61 -0
- package/dist/WatchlistBusinessFormScreen.js +85 -0
- package/dist/WatchlistBusinessProcessingScreen.d.ts +25 -0
- package/dist/WatchlistBusinessProcessingScreen.js +19 -0
- package/dist/WatchlistBusinessStrings.d.ts +95 -0
- package/dist/WatchlistBusinessStrings.js +19 -0
- package/dist/WatchlistBusinessSuccessScreen.d.ts +29 -0
- package/dist/WatchlistBusinessSuccessScreen.js +23 -0
- package/dist/flows.d.ts +216 -0
- package/dist/flows.js +516 -0
- package/dist/index.d.ts +145 -0
- package/dist/index.js +130 -0
- package/dist/styles.css +33 -0
- package/dist/types.d.ts +56 -0
- package/dist/types.js +8 -0
- package/package.json +689 -0
- package/samples/camera-surface.png +0 -0
- package/samples/document-still.png +0 -0
- package/samples/document-thumbnail.png +0 -0
- package/samples/face-match-bottom.png +0 -0
- package/samples/face-match-left.png +0 -0
- package/samples/face-match-right.png +0 -0
- package/samples/id-back-blur.png +0 -0
- package/samples/id-back-dark.png +0 -0
- package/samples/id-back-glare.png +0 -0
- package/samples/id-back.png +0 -0
- package/samples/id-front-blur.png +0 -0
- package/samples/id-front-dark.png +0 -0
- package/samples/id-front-glare.png +0 -0
- package/samples/id-front.png +0 -0
- package/samples/id-passport.png +0 -0
- package/samples/selfie-glasses.png +0 -0
- package/samples/selfie-hat.png +0 -0
- package/samples/selfie-mask.png +0 -0
- package/samples/selfie.png +0 -0
- package/samples/video-selfie-camera.png +0 -0
- package/src/CaptureOverlay.css +55 -0
- package/src/CaptureOverlay.tsx +56 -0
- package/src/CaptureScreen.tsx +121 -0
- package/src/CurpConfirmScreen.tsx +75 -0
- package/src/CurpEnterScreen.tsx +149 -0
- package/src/CurpGenerateScreen.tsx +172 -0
- package/src/CurpLayout.css +92 -0
- package/src/CurpProcessingScreen.tsx +75 -0
- package/src/CurpResultScreen.tsx +80 -0
- package/src/CurpStrings.ts +178 -0
- package/src/DataSharingConsentConsentScreen.tsx +223 -0
- package/src/DataSharingConsentLayout.css +78 -0
- package/src/DataSharingConsentStrings.ts +144 -0
- package/src/DemoScreensEndScreen.tsx +56 -0
- package/src/DemoScreensStrings.ts +31 -0
- package/src/DocumentCaptureCaptureScreen.tsx +135 -0
- package/src/DocumentCaptureCommonIssuesScreen.tsx +97 -0
- package/src/DocumentCaptureConfirmImageScreen.tsx +112 -0
- package/src/DocumentCaptureConfirmUploadScreen.tsx +113 -0
- package/src/DocumentCaptureGenericErrorScreen.tsx +82 -0
- package/src/DocumentCaptureIllustration.tsx +153 -0
- package/src/DocumentCaptureLayout.css +226 -0
- package/src/DocumentCaptureMethodSelectionScreen.tsx +151 -0
- package/src/DocumentCaptureNextPageScreen.tsx +82 -0
- package/src/DocumentCaptureNoConnectionScreen.tsx +77 -0
- package/src/DocumentCaptureStrings.ts +192 -0
- package/src/DocumentCaptureTutorialScreen.tsx +79 -0
- package/src/EkybAddressDetailsScreen.tsx +200 -0
- package/src/EkybBusinessDetailsScreen.tsx +147 -0
- package/src/EkybCountryScreen.tsx +124 -0
- package/src/EkybErrorScreen.tsx +61 -0
- package/src/EkybOwnersScreen.tsx +230 -0
- package/src/EkybProcessingScreen.tsx +57 -0
- package/src/EkybStrings.ts +239 -0
- package/src/EkybSuccessScreen.tsx +54 -0
- package/src/EkycDetailsScreen.tsx +178 -0
- package/src/EkycErrorScreen.tsx +64 -0
- package/src/EkycLayout.css +39 -0
- package/src/EkycLicenseScreen.tsx +164 -0
- package/src/EkycProcessingScreen.tsx +60 -0
- package/src/EkycStrings.ts +157 -0
- package/src/EkycSuccessScreen.tsx +63 -0
- package/src/ElectronicSignatureDrawScreen.tsx +127 -0
- package/src/ElectronicSignatureErrorScreen.tsx +74 -0
- package/src/ElectronicSignatureLayout.css +80 -0
- package/src/ElectronicSignatureReviewScreen.tsx +106 -0
- package/src/ElectronicSignatureStrings.ts +67 -0
- package/src/ElectronicSignatureSuccessScreen.tsx +67 -0
- package/src/EmailInputErrorScreen.tsx +67 -0
- package/src/EmailInputOtpScreen.tsx +169 -0
- package/src/EmailInputProcessingScreen.tsx +67 -0
- package/src/EmailInputStrings.ts +166 -0
- package/src/EmailInputSuccessScreen.tsx +72 -0
- package/src/EmailInputVerifyScreen.tsx +117 -0
- package/src/ErrorScreensScreen.tsx +149 -0
- package/src/ErrorScreensStrings.ts +66 -0
- package/src/FaceCaptureCapturingScreen.tsx +99 -0
- package/src/FaceCaptureLayout.css +18 -0
- package/src/FaceCaptureLoadingScreen.tsx +65 -0
- package/src/FaceCaptureManualCaptureScreen.tsx +94 -0
- package/src/FaceCaptureNoConnectionScreen.tsx +73 -0
- package/src/FaceCaptureResultErrorScreen.tsx +86 -0
- package/src/FaceCaptureResultSuccessScreen.tsx +49 -0
- package/src/FaceCaptureStrings.ts +92 -0
- package/src/FaceCaptureTutorialScreen.tsx +77 -0
- package/src/FaceMatchComparisonCompactScreen.tsx +51 -0
- package/src/FaceMatchComparisonScreen.tsx +201 -0
- package/src/FaceMatchLayout.css +264 -0
- package/src/FaceMatchResultScreen.tsx +117 -0
- package/src/FaceMatchStrings.ts +95 -0
- package/src/FormScreen.css +78 -0
- package/src/FormScreen.tsx +213 -0
- package/src/FormsChoiceScreen.tsx +150 -0
- package/src/FormsErrorScreen.tsx +61 -0
- package/src/FormsFieldScreen.tsx +198 -0
- package/src/FormsLayout.css +45 -0
- package/src/FormsLongFormScreen.tsx +295 -0
- package/src/FormsStrings.ts +243 -0
- package/src/FormsSuccessScreen.tsx +67 -0
- package/src/GeolocationBrowserStepsScreen.tsx +173 -0
- package/src/GeolocationErrorScreen.tsx +113 -0
- package/src/GeolocationIntroScreen.tsx +100 -0
- package/src/GeolocationPermissionScreen.tsx +88 -0
- package/src/GeolocationStrings.ts +193 -0
- package/src/IdCaptureAgeVerificationScreen.tsx +84 -0
- package/src/IdCaptureAnalyzingScreen.tsx +94 -0
- package/src/IdCaptureCommonIssuesScreen.tsx +109 -0
- package/src/IdCaptureDocumentErrorScreen.tsx +92 -0
- package/src/IdCaptureDocumentSelectionScreen.tsx +100 -0
- package/src/IdCaptureFlipScreen.tsx +66 -0
- package/src/IdCaptureHoldOnScreen.tsx +51 -0
- package/src/IdCaptureLayout.css +111 -0
- package/src/IdCaptureNoConnectionScreen.tsx +68 -0
- package/src/IdCapturePermissionScreen.tsx +102 -0
- package/src/IdCaptureResultScreen.tsx +197 -0
- package/src/IdCaptureStageScreen.tsx +241 -0
- package/src/IdCaptureStrings.ts +228 -0
- package/src/IdCaptureTutorialScreen.tsx +99 -0
- package/src/ListScreen.tsx +213 -0
- package/src/LoaderScreen.tsx +69 -0
- package/src/LoadersStrings.ts +38 -0
- package/src/NfcCommonIssuesScreen.tsx +104 -0
- package/src/NfcErrorScreen.tsx +83 -0
- package/src/NfcLayout.css +36 -0
- package/src/NfcProcessingScreen.tsx +57 -0
- package/src/NfcScanningScreen.tsx +127 -0
- package/src/NfcSettingsScreen.tsx +124 -0
- package/src/NfcStrings.ts +127 -0
- package/src/NfcSuccessScreen.tsx +56 -0
- package/src/NfcSymbolScreen.tsx +85 -0
- package/src/NfcTryAgainScreen.tsx +114 -0
- package/src/NfcTutorialScreen.tsx +76 -0
- package/src/PermissionsAllowScreen.tsx +90 -0
- package/src/PermissionsBrowserStepsScreen.tsx +158 -0
- package/src/PermissionsRequiredScreen.tsx +118 -0
- package/src/PermissionsStrings.ts +129 -0
- package/src/PhoneInputErrorScreen.tsx +104 -0
- package/src/PhoneInputLayout.css +61 -0
- package/src/PhoneInputOtpScreen.tsx +126 -0
- package/src/PhoneInputSnaLoadingScreen.tsx +61 -0
- package/src/PhoneInputStrings.ts +136 -0
- package/src/PhoneInputSuccessScreen.tsx +56 -0
- package/src/PhoneInputVerifyScreen.tsx +153 -0
- package/src/ProcessingScreen.tsx +97 -0
- package/src/QualifiedSignatureAcceptScreen.tsx +198 -0
- package/src/QualifiedSignatureDocumentScreen.tsx +124 -0
- package/src/QualifiedSignatureLayout.css +206 -0
- package/src/QualifiedSignatureProcessingScreen.tsx +112 -0
- package/src/QualifiedSignatureResultScreen.tsx +146 -0
- package/src/QualifiedSignatureReviewScreen.tsx +113 -0
- package/src/QualifiedSignatureStrings.ts +256 -0
- package/src/QualifiedSignatureUploadScreen.tsx +81 -0
- package/src/ResultScreen.tsx +211 -0
- package/src/ReviewScreen.tsx +196 -0
- package/src/ScreenLayout.css +469 -0
- package/src/ScreenNav.css +43 -0
- package/src/ScreenNav.tsx +46 -0
- package/src/ScreenShell.css +130 -0
- package/src/ScreenShell.tsx +66 -0
- package/src/TutorialScreen.tsx +166 -0
- package/src/VideoSelfieCameraStepsScreen.tsx +145 -0
- package/src/VideoSelfieErrorScreen.tsx +168 -0
- package/src/VideoSelfieFlipCameraScreen.tsx +88 -0
- package/src/VideoSelfieFlipIdScreen.tsx +74 -0
- package/src/VideoSelfieIdCaptureScreen.tsx +213 -0
- package/src/VideoSelfieLayout.css +259 -0
- package/src/VideoSelfiePermissionRequiredScreen.tsx +104 -0
- package/src/VideoSelfiePermissionScreen.tsx +102 -0
- package/src/VideoSelfieProcessingScreen.tsx +68 -0
- package/src/VideoSelfieRetryScreen.tsx +92 -0
- package/src/VideoSelfieSelfieCaptureScreen.tsx +122 -0
- package/src/VideoSelfieSpeakScreen.tsx +237 -0
- package/src/VideoSelfieStrings.ts +222 -0
- package/src/VideoSelfieSuccessScreen.tsx +64 -0
- package/src/VideoSelfieTutorialScreen.tsx +129 -0
- package/src/ViewfinderScreen.css +107 -0
- package/src/ViewfinderScreen.tsx +113 -0
- package/src/WatchlistBusinessFormScreen.tsx +176 -0
- package/src/WatchlistBusinessProcessingScreen.tsx +63 -0
- package/src/WatchlistBusinessStrings.ts +121 -0
- package/src/WatchlistBusinessSuccessScreen.tsx +67 -0
- package/src/flows.ts +711 -0
- package/src/index.ts +591 -0
- package/src/styles.css +33 -0
- 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;
|