@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,241 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import { PrizmaNavigation } from '@incodetech/prizma-core-web/navigation';
|
|
3
|
+
import {
|
|
4
|
+
PrizmaIdCapture,
|
|
5
|
+
type PrizmaIdCaptureState,
|
|
6
|
+
} from '@incodetech/prizma-core-web/id-capture';
|
|
7
|
+
import { PrizmaCaptureManual } from '@incodetech/prizma-core-web/capture-manual';
|
|
8
|
+
import { PrizmaCaptureFeedback } from '@incodetech/prizma-core-web/capture-feedback';
|
|
9
|
+
import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
|
|
10
|
+
import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
|
|
11
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
12
|
+
import type {
|
|
13
|
+
IdCaptureDocumentType,
|
|
14
|
+
IdCaptureFeedbackKind,
|
|
15
|
+
IdCaptureSide,
|
|
16
|
+
IdCaptureStageState,
|
|
17
|
+
IdCaptureStrings,
|
|
18
|
+
} from './IdCaptureStrings';
|
|
19
|
+
import './ScreenLayout.css';
|
|
20
|
+
import './ViewfinderScreen.css';
|
|
21
|
+
import './IdCaptureLayout.css';
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Purple stage state → Core `PrizmaIdCapture` state. The mapping is 1:1 except
|
|
25
|
+
* `flash`, which Figma spells "flash" and Core spells `photo-flash`.
|
|
26
|
+
*/
|
|
27
|
+
const CAPTURE_STATE: Record<IdCaptureStageState, PrizmaIdCaptureState> = {
|
|
28
|
+
empty: 'empty',
|
|
29
|
+
hint: 'hint',
|
|
30
|
+
filled: 'filled',
|
|
31
|
+
focused: 'focused',
|
|
32
|
+
countdown: 'countdown',
|
|
33
|
+
flash: 'photo-flash',
|
|
34
|
+
'error-wrong-side': 'error-wrong-side',
|
|
35
|
+
'error-not-aligned': 'error-not-aligned',
|
|
36
|
+
'error-blurry': 'error',
|
|
37
|
+
'error-glare': 'error-glare',
|
|
38
|
+
'error-too-dark': 'error-too-dark',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Which feedback pill each error stage carries by default (Figma
|
|
43
|
+
* `1-5-5 … 1-5-9-id-errors`, left to right). `blurry` has no frame overlay in
|
|
44
|
+
* Core — the message IS the pill (PrizmaIdCapture's `error` state is the plain
|
|
45
|
+
* red border precisely for this case, see its `error` doc comment).
|
|
46
|
+
*/
|
|
47
|
+
const STAGE_FEEDBACK: Partial<Record<IdCaptureStageState, IdCaptureFeedbackKind>> = {
|
|
48
|
+
'error-wrong-side': 'show-front',
|
|
49
|
+
'error-not-aligned': 'not-aligned',
|
|
50
|
+
'error-blurry': 'blurry',
|
|
51
|
+
'error-glare': 'glare',
|
|
52
|
+
'error-too-dark': 'too-dark',
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export interface IdCaptureStageScreenProps
|
|
56
|
+
extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'> {
|
|
57
|
+
/** Module copy — this screen reads the `stage` / `feedback` slices. */
|
|
58
|
+
strings: IdCaptureStrings;
|
|
59
|
+
/** Which document is being captured — Core `PrizmaIdCapture.type`. */
|
|
60
|
+
documentType?: IdCaptureDocumentType;
|
|
61
|
+
/** Which face of a two-sided document (drives the title copy only; the frame
|
|
62
|
+
* geometry is identical). Passports are single-sided. */
|
|
63
|
+
side?: IdCaptureSide;
|
|
64
|
+
/** Portrait document orientation — Core `PrizmaIdCapture.isVertical`. The
|
|
65
|
+
* `ID capture ↕️ vertical` / `Passport capture ↕️ vertical` groups. */
|
|
66
|
+
vertical?: boolean;
|
|
67
|
+
/** Which purple stage section to render. */
|
|
68
|
+
state?: IdCaptureStageState;
|
|
69
|
+
/** Manual mode (`*-manual`): the shutter + the numbered tooltip appear. */
|
|
70
|
+
manual?: boolean;
|
|
71
|
+
/** Show the close control in the stage nav (Figma: present on every stage
|
|
72
|
+
* except `*-empty`). */
|
|
73
|
+
showClose?: boolean;
|
|
74
|
+
/** Override the feedback pill the state carries by default; `null` suppresses
|
|
75
|
+
* it (a host whose pipeline reports an error with no designed pill). */
|
|
76
|
+
feedback?: IdCaptureFeedbackKind | null;
|
|
77
|
+
/** Live camera feed (<video>) or sample still (<img>) behind the frame. */
|
|
78
|
+
camera?: ReactNode;
|
|
79
|
+
/** The captured document still (<img>) — `filled` / `flash` / error stages. */
|
|
80
|
+
still?: ReactNode;
|
|
81
|
+
/** Digit shown by the countdown Timer (`*-countdown` sections 1..3). */
|
|
82
|
+
countdownValue?: 1 | 2 | 3;
|
|
83
|
+
screenId?: string;
|
|
84
|
+
overrides?: PrizmaScreenOverrides;
|
|
85
|
+
onAction?: PrizmaScreenActionHandler;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* ID Capture — the camera stage (Archetype D, GUIDELINES.md §6-D; always dark).
|
|
90
|
+
*
|
|
91
|
+
* ONE screen for ~45 purple sections: every `*-empty`, `*-hint`, `*-manual`,
|
|
92
|
+
* `*-filled`, `*-countdown`, `*-flash` and `*-errors` section of all five
|
|
93
|
+
* capture groups (`ID capture - front side`, `ID capture - back side`,
|
|
94
|
+
* `Passport capture`, `ID capture ↕️ vertical`, `Passport capture ↕️ vertical`).
|
|
95
|
+
* They are `type` × `isVertical` × `state` variants of Core's
|
|
96
|
+
* `PrizmaIdCapture`, which is exactly how the component is axed — so the frame
|
|
97
|
+
* geometry, the four border treatments, the hand-hint artwork, the Timer, the
|
|
98
|
+
* flash bloom, the glare/darkener/not-aligned overlays and the "All data is
|
|
99
|
+
* encrypted" row are ALL Core's, never re-implemented (§7).
|
|
100
|
+
*
|
|
101
|
+
* NOT built on the `PrizmaViewfinderScreen` archetype: that archetype hardcodes
|
|
102
|
+
* `CaptureOverlay` (the face/document vignette) plus its own lock-and-encrypted
|
|
103
|
+
* row, and ID Capture's stage is `PrizmaIdCapture` — which carries the document
|
|
104
|
+
* geometry AND the encrypted row itself. Wrapping the archetype would have
|
|
105
|
+
* double-drawn the reassurance line. Foundation gap reported to the owner (a
|
|
106
|
+
* `stage` slot on ViewfinderScreen); no foundation file edited. The archetype's
|
|
107
|
+
* camera-surface and HUD-typography classes ARE reused as-is
|
|
108
|
+
* (`.prizma-viewfinder__surface` / `__content` / `__title` / `__instruction`),
|
|
109
|
+
* so nothing about the dark stage is re-declared here.
|
|
110
|
+
*
|
|
111
|
+
* Spacing comes from the measured three-band recipe in `IdCaptureLayout.css`
|
|
112
|
+
* (title block bottom-anchored Spacing/40 above the frame, manual strip flush
|
|
113
|
+
* to the column's bottom padding) — no offsets are invented here, and
|
|
114
|
+
* PrizmaIdCapture's own frame→encrypted-row adjacency is left untouched
|
|
115
|
+
* (DEVIATIONS.md #12's lesson: never stack an offset a Core component carries).
|
|
116
|
+
*/
|
|
117
|
+
export const IdCaptureStageScreen = forwardRef<HTMLDivElement, IdCaptureStageScreenProps>(
|
|
118
|
+
(
|
|
119
|
+
{
|
|
120
|
+
strings,
|
|
121
|
+
documentType = 'id',
|
|
122
|
+
side = 'front',
|
|
123
|
+
vertical = false,
|
|
124
|
+
state = 'empty',
|
|
125
|
+
manual = false,
|
|
126
|
+
showClose = state !== 'empty',
|
|
127
|
+
feedback,
|
|
128
|
+
camera,
|
|
129
|
+
still,
|
|
130
|
+
countdownValue = 3,
|
|
131
|
+
screenId = `id-capture-${documentType}-${side}-${state}`,
|
|
132
|
+
overrides,
|
|
133
|
+
onAction,
|
|
134
|
+
className,
|
|
135
|
+
...shell
|
|
136
|
+
},
|
|
137
|
+
ref,
|
|
138
|
+
) => {
|
|
139
|
+
const slice =
|
|
140
|
+
documentType === 'passport'
|
|
141
|
+
? strings.stage.passport
|
|
142
|
+
: side === 'back'
|
|
143
|
+
? strings.stage.back
|
|
144
|
+
: strings.stage.front;
|
|
145
|
+
|
|
146
|
+
const pillKind = feedback === undefined ? STAGE_FEEDBACK[state] : feedback;
|
|
147
|
+
const pillCopy = pillKind ? strings.feedback[pillKind] : undefined;
|
|
148
|
+
|
|
149
|
+
return (
|
|
150
|
+
<PrizmaScreenShell
|
|
151
|
+
ref={ref}
|
|
152
|
+
dark
|
|
153
|
+
className={className}
|
|
154
|
+
{...shell}
|
|
155
|
+
>
|
|
156
|
+
<div className="prizma-viewfinder__surface">{camera}</div>
|
|
157
|
+
<header className="prizma-screen-nav id-capture-stage__nav">
|
|
158
|
+
<PrizmaNavigation
|
|
159
|
+
showIncodeLogo={false}
|
|
160
|
+
showRightIcon={showClose}
|
|
161
|
+
closeLabel={strings.closeLabel}
|
|
162
|
+
aria-label={strings.navLabel}
|
|
163
|
+
onRightIconClick={() => onAction?.({ type: 'secondary', screenId })}
|
|
164
|
+
/>
|
|
165
|
+
</header>
|
|
166
|
+
<div
|
|
167
|
+
className={[
|
|
168
|
+
'prizma-viewfinder__content',
|
|
169
|
+
overrides?.align === 'left' ? 'prizma-viewfinder__content--left' : '',
|
|
170
|
+
]
|
|
171
|
+
.filter(Boolean)
|
|
172
|
+
.join(' ')}
|
|
173
|
+
>
|
|
174
|
+
<div className="id-capture-band id-capture-band--top">
|
|
175
|
+
{pillKind && pillCopy ? (
|
|
176
|
+
<div className="id-capture-stage__feedback">
|
|
177
|
+
<PrizmaCaptureFeedback
|
|
178
|
+
feedback={pillKind}
|
|
179
|
+
title={pillCopy.title}
|
|
180
|
+
subtitle={pillCopy.subtitle}
|
|
181
|
+
/>
|
|
182
|
+
</div>
|
|
183
|
+
) : (
|
|
184
|
+
<>
|
|
185
|
+
<h2 className="prizma-viewfinder__title">{slice.title}</h2>
|
|
186
|
+
{/* Manual mode drops the auto-capture instruction — the numbered
|
|
187
|
+
tooltip above the shutter says what to do instead. Measured:
|
|
188
|
+
`1-5-1-id-empty`'s Title instance is 342×59 (H2 + line) while
|
|
189
|
+
`1-5-3-id-manual`'s is 342×28 (H2 only), both still holding
|
|
190
|
+
the same Spacing/40 above the frame. */}
|
|
191
|
+
{slice.instruction && !manual ? (
|
|
192
|
+
<p className="prizma-viewfinder__instruction">{slice.instruction}</p>
|
|
193
|
+
) : null}
|
|
194
|
+
</>
|
|
195
|
+
)}
|
|
196
|
+
</div>
|
|
197
|
+
{/* `mode="overlay"` + `scrim` is Core's own recipe for exactly this
|
|
198
|
+
stage (IdCapture.tsx, integration review 0.5 finding 2): the feed
|
|
199
|
+
runs full-bleed UNDER the UI on `.prizma-viewfinder__surface` and
|
|
200
|
+
the frame is drawn on top with a TRANSPARENT window, so the
|
|
201
|
+
surround is veiled and the window shows the undimmed camera —
|
|
202
|
+
which is what the purple sections render. The `camera` slot is
|
|
203
|
+
deliberately not used in this mode. */}
|
|
204
|
+
<PrizmaIdCapture
|
|
205
|
+
type={documentType}
|
|
206
|
+
state={CAPTURE_STATE[state]}
|
|
207
|
+
isVertical={vertical}
|
|
208
|
+
mode="overlay"
|
|
209
|
+
scrim
|
|
210
|
+
countdownValue={countdownValue}
|
|
211
|
+
encryptedLabel={strings.encryptedLabel}
|
|
212
|
+
announcement={strings.stage.stateLabels?.[state]}
|
|
213
|
+
still={still}
|
|
214
|
+
/>
|
|
215
|
+
<div className="id-capture-band">
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
<div className="prizma-screen-layout__capture-strip">
|
|
219
|
+
<PrizmaCaptureManual
|
|
220
|
+
className="id-capture-stage__manual"
|
|
221
|
+
variant="id-capture"
|
|
222
|
+
showButton={manual}
|
|
223
|
+
showTooltip={manual}
|
|
224
|
+
showHelpIcon
|
|
225
|
+
tooltipText={manual ? strings.stage.manualTooltip : undefined}
|
|
226
|
+
ariaLabel={strings.stage.captureLabel}
|
|
227
|
+
helpLabel={strings.stage.helpLabel}
|
|
228
|
+
onCapture={() => onAction?.({ type: 'cta', screenId })}
|
|
229
|
+
onHelp={() => onAction?.({ type: 'help', screenId })}
|
|
230
|
+
/>
|
|
231
|
+
</div>
|
|
232
|
+
<div className="prizma-screen-layout__footer">
|
|
233
|
+
<PrizmaTag label={strings.verifiedLabel} />
|
|
234
|
+
</div>
|
|
235
|
+
</PrizmaScreenShell>
|
|
236
|
+
);
|
|
237
|
+
},
|
|
238
|
+
);
|
|
239
|
+
IdCaptureStageScreen.displayName = 'IdCaptureStageScreen';
|
|
240
|
+
|
|
241
|
+
export default IdCaptureStageScreen;
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// ID Capture module — copy contract.
|
|
2
|
+
//
|
|
3
|
+
// Every ID Capture screen receives the SAME `strings: IdCaptureStrings` object
|
|
4
|
+
// (rule: all copy via props, no hardcoded English — GUIDELINES.md §9). The
|
|
5
|
+
// object is the module's locale pack: one instance drives the whole flow, which
|
|
6
|
+
// is what the FlowPlayer steps through. Sample copy lives only in previews /
|
|
7
|
+
// host apps.
|
|
8
|
+
//
|
|
9
|
+
// Authoritative screen list: the PURPLE "screen specs" sections of the ID
|
|
10
|
+
// Capture Figma file (U1EOfl9RQ1rOlOIuQw3rhL, page 16285:41282) — 13 parent
|
|
11
|
+
// groups, 100 purple sections. They collapse onto 12 screens because the four
|
|
12
|
+
// capture families (ID horizontal / ID vertical / passport horizontal /
|
|
13
|
+
// passport vertical, front and back) are the SAME screens parameterized by
|
|
14
|
+
// `PrizmaIdCapture`'s own `type` × `isVertical` × `state` axes.
|
|
15
|
+
|
|
16
|
+
/** Which document the flow is capturing — Core `PrizmaIdCapture.type` minus
|
|
17
|
+
* `poa` (that belongs to the Document Capture module, not this one). */
|
|
18
|
+
export type IdCaptureDocumentType = 'id' | 'passport';
|
|
19
|
+
|
|
20
|
+
/** Which face of a two-sided document. Passports are single-sided, so `back`
|
|
21
|
+
* is only reachable for `id` (Figma: the `Passport capture` groups have no
|
|
22
|
+
* back-side sections). */
|
|
23
|
+
export type IdCaptureSide = 'front' | 'back';
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The camera-stage sub-states — one per purple `*-empty` / `*-hint` /
|
|
27
|
+
* `*-manual` / `*-filled` / `*-countdown` / `*-flash` / `*-errors` spec
|
|
28
|
+
* section. They are state/copy variants of ONE screen
|
|
29
|
+
* (IdCaptureStageScreen), not separate screens; each maps to a
|
|
30
|
+
* `PrizmaIdCaptureState`.
|
|
31
|
+
*/
|
|
32
|
+
export type IdCaptureStageState =
|
|
33
|
+
| 'empty' // Figma: *-empty — live camera, plain frame
|
|
34
|
+
| 'hint' // Figma: *-hint — hand-holding-document ghost
|
|
35
|
+
| 'filled' // Figma: 1-6-1-id — document inside the frame
|
|
36
|
+
| 'focused' // Figma: focused frame — detection locked
|
|
37
|
+
| 'countdown' // Figma: *-countdown — Timer digit inside the frame
|
|
38
|
+
| 'flash' // Figma: *-flash — photo-flash bloom
|
|
39
|
+
| 'error-wrong-side'
|
|
40
|
+
| 'error-not-aligned'
|
|
41
|
+
| 'error-blurry'
|
|
42
|
+
| 'error-glare'
|
|
43
|
+
| 'error-too-dark';
|
|
44
|
+
|
|
45
|
+
/** The on-camera feedback pill variants the error stages carry — Core
|
|
46
|
+
* `PrizmaCaptureFeedbackType` (Figma: `Capture feedback / ID`, and the
|
|
47
|
+
* `Dynamic feedback messages` copy table in the front-side group). */
|
|
48
|
+
export type IdCaptureFeedbackKind =
|
|
49
|
+
| 'show-front'
|
|
50
|
+
| 'show-back'
|
|
51
|
+
| 'not-aligned'
|
|
52
|
+
| 'blurry'
|
|
53
|
+
| 'glare'
|
|
54
|
+
| 'too-dark';
|
|
55
|
+
|
|
56
|
+
/** One feedback pill's copy. */
|
|
57
|
+
export interface IdCaptureFeedbackCopy {
|
|
58
|
+
title: string;
|
|
59
|
+
subtitle?: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** A single row of an informational list (permission reasons, common issues,
|
|
63
|
+
* age-verification steps) — Core `PrizmaCardListCommonIssues` rows. */
|
|
64
|
+
export interface IdCaptureListRow {
|
|
65
|
+
title: string;
|
|
66
|
+
description?: string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface IdCaptureStrings {
|
|
70
|
+
/** Accessible name for the logo nav region (i18n — no baked-in English). */
|
|
71
|
+
navLabel?: string;
|
|
72
|
+
/** Accessible name for the close control on the camera stages. */
|
|
73
|
+
closeLabel?: string;
|
|
74
|
+
/** "verified by" attribution copy for the footer tag. */
|
|
75
|
+
verifiedLabel: string;
|
|
76
|
+
/** "All data is encrypted" reassurance row — rendered by PrizmaIdCapture
|
|
77
|
+
* itself on every stage and every screen that shows the captured still. */
|
|
78
|
+
encryptedLabel?: string;
|
|
79
|
+
|
|
80
|
+
/** Document selection — `1-1-1-id` / `1-1-1-Document Chooser V2`. */
|
|
81
|
+
documentSelection: {
|
|
82
|
+
title: string;
|
|
83
|
+
subtitle?: string;
|
|
84
|
+
/** Row label for the identity-card option. */
|
|
85
|
+
idLabel: string;
|
|
86
|
+
/** Row label for the passport option. */
|
|
87
|
+
passportLabel: string;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
/** Age verification — `1-1-2-id`. */
|
|
91
|
+
ageVerification: {
|
|
92
|
+
title: string;
|
|
93
|
+
subtitle?: string;
|
|
94
|
+
/** The three reassurance rows, in order. */
|
|
95
|
+
rows: IdCaptureListRow[];
|
|
96
|
+
ctaLabel: string;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/** Tutorial — `1-2-1-id` (front) · `4-2-1-back-id` (back) · `3-2-1-id`
|
|
100
|
+
* (passport). Copy variants of one screen; the host picks the slice. */
|
|
101
|
+
tutorial: {
|
|
102
|
+
front: { title: string; subtitle?: string };
|
|
103
|
+
back: { title: string; subtitle?: string };
|
|
104
|
+
passport: { title: string; subtitle?: string };
|
|
105
|
+
/** "The photo will be taken automatically" */
|
|
106
|
+
disclaimer?: string;
|
|
107
|
+
ctaLabel: string;
|
|
108
|
+
/** Visible/accessible copy while the CTA is loading. */
|
|
109
|
+
ctaLoadingLabel?: string;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/** Camera stage — `*-empty` / `*-hint` / `*-filled` / `*-countdown` /
|
|
113
|
+
* `*-flash` / `*-manual` / `*-errors`. The white H2 above the frame plus
|
|
114
|
+
* its muted instruction line, per side/document. */
|
|
115
|
+
stage: {
|
|
116
|
+
front: { title: string; instruction?: string };
|
|
117
|
+
back: { title: string; instruction?: string };
|
|
118
|
+
passport: { title: string; instruction?: string };
|
|
119
|
+
/** Manual mode — the tooltip bubble above the shutter
|
|
120
|
+
* ("1. Fill the frame with your ID / 2. Press the button"). */
|
|
121
|
+
manualTooltip?: string;
|
|
122
|
+
/** Accessible name of the shutter button (manual mode). */
|
|
123
|
+
captureLabel?: string;
|
|
124
|
+
/** Accessible name of the "?" help control. */
|
|
125
|
+
helpLabel?: string;
|
|
126
|
+
/** Visually-hidden state announcements, per stage state — forwarded to
|
|
127
|
+
* `PrizmaIdCapture.stateLabels`. */
|
|
128
|
+
stateLabels?: Partial<Record<IdCaptureStageState, string>>;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
/** The on-camera feedback pills the error stages carry. */
|
|
132
|
+
feedback: Partial<Record<IdCaptureFeedbackKind, IdCaptureFeedbackCopy>>;
|
|
133
|
+
|
|
134
|
+
/** Analyzing / processing the captured still — `*-analyzing`. */
|
|
135
|
+
analyzing: { title: string };
|
|
136
|
+
|
|
137
|
+
/** Review the captured still — `*-review`. Two actions, no status icon. */
|
|
138
|
+
review: {
|
|
139
|
+
title: string;
|
|
140
|
+
description?: string;
|
|
141
|
+
/** Secondary action — "Retake". */
|
|
142
|
+
retakeLabel: string;
|
|
143
|
+
/** Primary action — "Continue". */
|
|
144
|
+
ctaLabel: string;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
/** Capture succeeded — `*-success` / `1-10-2-id-success-capture-only`. */
|
|
148
|
+
success: {
|
|
149
|
+
title: string;
|
|
150
|
+
description?: string;
|
|
151
|
+
ctaLabel: string;
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/** Capture failed with retries left / exhausted — `*-attempt`,
|
|
155
|
+
* `*-failed-attempt`, `*-no-attempts`. The host passes the copy of the
|
|
156
|
+
* CURRENT verdict (wrong side, glare, blur, …). */
|
|
157
|
+
error: {
|
|
158
|
+
title: string;
|
|
159
|
+
description?: string;
|
|
160
|
+
/** "1 attempt remaining" — omit on the exhausted variant. */
|
|
161
|
+
attemptsLabel?: string;
|
|
162
|
+
ctaLabel: string;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
/** Classification could not decide the document — Classification Errors /
|
|
166
|
+
* "Scan the back of your ID". Warning verdict with two actions. */
|
|
167
|
+
classification: {
|
|
168
|
+
title: string;
|
|
169
|
+
description?: string;
|
|
170
|
+
/** Primary — "Scan back of ID". */
|
|
171
|
+
ctaLabel: string;
|
|
172
|
+
/** Secondary — "ID has no back side". */
|
|
173
|
+
secondaryLabel: string;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/** Document not accepted — `1-9-12` / `1-9-13-id-documenterror` and the
|
|
177
|
+
* `-empty` variant. */
|
|
178
|
+
documentError: {
|
|
179
|
+
title: string;
|
|
180
|
+
description?: string;
|
|
181
|
+
/** ISO country code for the bundled flag raster (e.g. "US"). */
|
|
182
|
+
countryCode?: string;
|
|
183
|
+
/** Emoji fallback for countries outside the bundled flag bank. */
|
|
184
|
+
flag?: string;
|
|
185
|
+
/** Country name shown in the accepted-documents card. */
|
|
186
|
+
country?: string;
|
|
187
|
+
/** Accepted document names, in order. */
|
|
188
|
+
documents?: string[];
|
|
189
|
+
/** Placeholder copy for the `-empty` variant (no list available). */
|
|
190
|
+
emptyMessage?: string;
|
|
191
|
+
attemptsLabel?: string;
|
|
192
|
+
ctaLabel: string;
|
|
193
|
+
};
|
|
194
|
+
|
|
195
|
+
/** Flip interstitial — `1-11-1-id-flip`. Title only, no CTA. */
|
|
196
|
+
flip: { title: string };
|
|
197
|
+
|
|
198
|
+
/** Common issues help sheet — `1-5-2-id-common-issues`. */
|
|
199
|
+
commonIssues: {
|
|
200
|
+
title: string;
|
|
201
|
+
rows: IdCaptureListRow[];
|
|
202
|
+
/** Tertiary link — "Take the photo manually". */
|
|
203
|
+
manualLabel: string;
|
|
204
|
+
ctaLabel: string;
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
/** Camera permission — `1-3-2-id` and its `allow-camera` /
|
|
208
|
+
* `quit-process` copy variants. */
|
|
209
|
+
permission: {
|
|
210
|
+
title: string;
|
|
211
|
+
description?: string;
|
|
212
|
+
rows: IdCaptureListRow[];
|
|
213
|
+
/** Tertiary link — "Quit process". */
|
|
214
|
+
quitLabel: string;
|
|
215
|
+
ctaLabel: string;
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
/** Server-side verification wait — `1-18-1-id-hold-on`,
|
|
219
|
+
* `1-4.1-1-id-hold-on`. */
|
|
220
|
+
holdOn: { title: string; description?: string };
|
|
221
|
+
|
|
222
|
+
/** No internet — `1-9-10-id-no-internet`. */
|
|
223
|
+
noConnection: {
|
|
224
|
+
title: string;
|
|
225
|
+
description?: string;
|
|
226
|
+
ctaLabel: string;
|
|
227
|
+
};
|
|
228
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import { PrizmaIllustrationIdTutorial } from '@incodetech/prizma-core-web/illustration-id-tutorial';
|
|
3
|
+
import { PrizmaTutorialScreen, type PrizmaTutorialScreenProps } from './TutorialScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { IdCaptureStrings } from './IdCaptureStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
|
|
8
|
+
/** Which purple tutorial section to render. Each is a copy + illustration
|
|
9
|
+
* variant of this ONE screen: `1-2-1-id` (front) · `4-2-1-back-id` (back) ·
|
|
10
|
+
* `3-2-1-id` (passport). */
|
|
11
|
+
export type IdCaptureTutorialVariant = 'front' | 'back' | 'passport';
|
|
12
|
+
|
|
13
|
+
/** Tutorial variant → Core `PrizmaIllustrationIdTutorial` type. */
|
|
14
|
+
const ILLUSTRATION_TYPE = {
|
|
15
|
+
front: 'id-front',
|
|
16
|
+
back: 'id-back',
|
|
17
|
+
passport: 'passport',
|
|
18
|
+
} as const;
|
|
19
|
+
|
|
20
|
+
export interface IdCaptureTutorialScreenProps
|
|
21
|
+
extends Omit<
|
|
22
|
+
PrizmaTutorialScreenProps,
|
|
23
|
+
| 'title'
|
|
24
|
+
| 'subtitle'
|
|
25
|
+
| 'disclaimer'
|
|
26
|
+
| 'ctaLabel'
|
|
27
|
+
| 'ctaLoadingLabel'
|
|
28
|
+
| 'verifiedLabel'
|
|
29
|
+
| 'navLabel'
|
|
30
|
+
> {
|
|
31
|
+
/** Module copy — this screen reads the `tutorial` slice (+ shared labels). */
|
|
32
|
+
strings: IdCaptureStrings;
|
|
33
|
+
/** Which purple tutorial section to render. Default `front`. */
|
|
34
|
+
variant?: IdCaptureTutorialVariant;
|
|
35
|
+
/** CTA shows the designed loading treatment (the tutorial's loading state). */
|
|
36
|
+
ctaLoading?: boolean;
|
|
37
|
+
/** Replace the default Core ID-tutorial illustration. */
|
|
38
|
+
illustration?: ReactNode;
|
|
39
|
+
screenId?: string;
|
|
40
|
+
overrides?: PrizmaScreenOverrides;
|
|
41
|
+
onAction?: PrizmaScreenActionHandler;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* ID Capture — tutorial, built on the `PrizmaTutorialScreen` archetype
|
|
46
|
+
* (GUIDELINES.md §6-A). Figma: purple sections `1-2-1-id` / `4-2-1-back-id` /
|
|
47
|
+
* `3-2-1-id` of the `Tutorial` group.
|
|
48
|
+
*
|
|
49
|
+
* Composed from the foundation pieces until the archetype grew a CTA-loading
|
|
50
|
+
* slot (#F-32) — the one thing that had forced this module, like the Face Capture
|
|
51
|
+
* pilot, to rebuild the tutorial skeleton by hand.
|
|
52
|
+
*
|
|
53
|
+
* The three illustrations are Core's `PrizmaIllustrationIdTutorial` variants,
|
|
54
|
+
* including the composed `id-back` face — never redrawn here (§7, §10).
|
|
55
|
+
*/
|
|
56
|
+
export const IdCaptureTutorialScreen = forwardRef<
|
|
57
|
+
HTMLDivElement,
|
|
58
|
+
IdCaptureTutorialScreenProps
|
|
59
|
+
>(
|
|
60
|
+
(
|
|
61
|
+
{
|
|
62
|
+
strings,
|
|
63
|
+
variant = 'front',
|
|
64
|
+
ctaLoading = false,
|
|
65
|
+
illustration,
|
|
66
|
+
screenId = `id-capture-tutorial-${variant}`,
|
|
67
|
+
overrides,
|
|
68
|
+
onAction,
|
|
69
|
+
...shell
|
|
70
|
+
},
|
|
71
|
+
ref,
|
|
72
|
+
) => {
|
|
73
|
+
const slice = strings.tutorial[variant];
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<PrizmaTutorialScreen
|
|
77
|
+
ref={ref}
|
|
78
|
+
title={slice.title}
|
|
79
|
+
subtitle={slice.subtitle}
|
|
80
|
+
disclaimer={strings.tutorial.disclaimer}
|
|
81
|
+
ctaLabel={strings.tutorial.ctaLabel}
|
|
82
|
+
ctaLoading={ctaLoading}
|
|
83
|
+
ctaLoadingLabel={strings.tutorial.ctaLoadingLabel}
|
|
84
|
+
illustration={
|
|
85
|
+
illustration ?? <PrizmaIllustrationIdTutorial type={ILLUSTRATION_TYPE[variant]} />
|
|
86
|
+
}
|
|
87
|
+
verifiedLabel={strings.verifiedLabel}
|
|
88
|
+
navLabel={strings.navLabel}
|
|
89
|
+
screenId={screenId}
|
|
90
|
+
overrides={overrides}
|
|
91
|
+
onAction={onAction}
|
|
92
|
+
{...shell}
|
|
93
|
+
/>
|
|
94
|
+
);
|
|
95
|
+
},
|
|
96
|
+
);
|
|
97
|
+
IdCaptureTutorialScreen.displayName = 'IdCaptureTutorialScreen';
|
|
98
|
+
|
|
99
|
+
export default IdCaptureTutorialScreen;
|