@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,130 @@
|
|
|
1
|
+
/* ScreenShell — root of every SDK screen.
|
|
2
|
+
*
|
|
3
|
+
* Tokens only (no :root block here — the consumer imports
|
|
4
|
+
* @incodetech/prizma-core-tokens/css once). Design reference 390×844; the
|
|
5
|
+
* shell fills whatever box the host gives it and exposes a size container so
|
|
6
|
+
* descendants scale with `cqw` capped at reference pixels.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
.prizma-screen-shell {
|
|
10
|
+
display: flex;
|
|
11
|
+
flex-direction: column;
|
|
12
|
+
position: relative;
|
|
13
|
+
width: 100%;
|
|
14
|
+
height: 100%;
|
|
15
|
+
overflow: hidden;
|
|
16
|
+
background: var(--prizma-surface-neutral-0);
|
|
17
|
+
font-family: var(--prizma-body-family);
|
|
18
|
+
color: var(--prizma-text-body-800-primary);
|
|
19
|
+
container-type: size;
|
|
20
|
+
container-name: pcs-screen;
|
|
21
|
+
/* The shell must be the containing block for `position: fixed` descendants —
|
|
22
|
+
* Core's PrizmaNavigation pins itself to the viewport (correct on a real
|
|
23
|
+
* device, wrong inside an embedded screen frame) — and must clip descendant
|
|
24
|
+
* painting (the CaptureOverlay scrim is a 2000px box-shadow). `contain:
|
|
25
|
+
* layout paint` does both without forcing a composited layer the way
|
|
26
|
+
* `transform` would. */
|
|
27
|
+
contain: layout paint;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* Camera viewfinder screens — always a dark stage regardless of theme.
|
|
31
|
+
* The camera surface itself is supplied by the screen (image or live feed). */
|
|
32
|
+
.prizma-screen-shell--dark {
|
|
33
|
+
background: var(--prizma-surface-neutral-900-static);
|
|
34
|
+
color: var(--prizma-text-body-0-static);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/* -------------------------------------------------------------------------
|
|
38
|
+
A theme PIN is a MODE pin, not a BRAND reset.
|
|
39
|
+
|
|
40
|
+
The finding (Core Lab explorations canvas, 2026-08-31). Two cards, same
|
|
41
|
+
`themeSeed` #7C3AED: `face-capture-tutorial` went fully purple, but on
|
|
42
|
+
`face-capture-capturing-alignFace` the footer tag — the brand badge and the
|
|
43
|
+
Incode wordmark — stayed #0054FF. Nothing in Tag or Logo is hardcoded: Tag
|
|
44
|
+
binds Icon/Brand/500 Static, Logo binds Surface/Brand/500, and both DID
|
|
45
|
+
re-skin on the tutorial. What differs is the pin.
|
|
46
|
+
|
|
47
|
+
A scoped brand (Core Lab's per-card seed, and equally a host that scopes
|
|
48
|
+
`applyPrizmaTheme`'s output to a subtree instead of `:root`) is delivered as
|
|
49
|
+
inherited CSS custom properties on an ANCESTOR. `theme` above stamps
|
|
50
|
+
`data-prizma-theme` on THIS element — and `@incodetech/prizma-core-tokens/
|
|
51
|
+
themes/light.css` is the FULL token set, not a delta the way themes/dark.css
|
|
52
|
+
is, because it has to be able to out-cascade an ancestor's dark. So the pin
|
|
53
|
+
re-declared all 48 brand-derived vars on the exact element the seed was
|
|
54
|
+
inheriting through, and everything below it fell back to canonical blue.
|
|
55
|
+
Only the tag showed it on that screen because PrizmaSelfieCapture paints no
|
|
56
|
+
brand ink at all — on a pinned screen carrying a Button the CTA was blue too.
|
|
57
|
+
|
|
58
|
+
The fix: hand the brand back to the scope above, for the light pin only
|
|
59
|
+
(dark.css is a delta and never touches these). Custom properties accept the
|
|
60
|
+
CSS-wide keywords, so `inherit` reaches past the pin's own declaration, and
|
|
61
|
+
`.prizma-screen-shell[data-prizma-theme='light']` (0,2,0) outranks the
|
|
62
|
+
sheet's `[data-prizma-theme='light']` (0,1,0) regardless of import order.
|
|
63
|
+
|
|
64
|
+
ONLY the tokens whose derived value is IDENTICAL in the light and dark maps
|
|
65
|
+
are listed (core/theming/derive.mjs — the `*Static` family plus
|
|
66
|
+
textAccentBrand / borderBrand500 / iconBrand500Static, and the component
|
|
67
|
+
tokens that are pure aliases of those). That is what makes `inherit` safe:
|
|
68
|
+
the ancestor carries whichever map its own mode resolved in, and for these
|
|
69
|
+
the two maps agree, so a purple card inside a DARK board still lands the
|
|
70
|
+
right purple on a light-pinned stage. Without a seed above, they inherit the
|
|
71
|
+
canonical value and this block is a no-op.
|
|
72
|
+
|
|
73
|
+
⚠️ Known gap, deliberately left: the mode-DEPENDENT brand tokens
|
|
74
|
+
(surfaceBrand50, textAccentOnBrand, textLink*, borderBrandOnNeutral,
|
|
75
|
+
iconBrandOnNeutral, and their aliases — halos, snackbar neutral, links) keep
|
|
76
|
+
the pin's canonical value. They are AA-gated against the mode's background
|
|
77
|
+
or flip ramp stop, so inheriting a dark-derived value onto a light-pinned
|
|
78
|
+
stage would either invert them or silently drop Core's contrast guarantee.
|
|
79
|
+
Fixing those properly needs the scope above to publish BOTH maps; that is a
|
|
80
|
+
theming-contract change, not a stylesheet one.
|
|
81
|
+
|
|
82
|
+
⚠️ PARITY: this is the WEB half only. Android and iOS ship the same pinned-
|
|
83
|
+
light capture screens and the same scoped-theme story, so the same bug is
|
|
84
|
+
very likely there under whatever their pin mechanism is. Flagged for those
|
|
85
|
+
owners — not touched here (core/ is source of truth for three platforms and
|
|
86
|
+
the ports are Cami's lane).
|
|
87
|
+
------------------------------------------------------------------------- */
|
|
88
|
+
.prizma-screen-shell[data-prizma-theme='light'] {
|
|
89
|
+
/* Semantics whose light and dark stops are the same colour. */
|
|
90
|
+
--prizma-surface-brand-400-static: inherit;
|
|
91
|
+
--prizma-surface-brand-500-static: inherit;
|
|
92
|
+
--prizma-surface-brand-600-static: inherit;
|
|
93
|
+
--prizma-surface-brand-700-static: inherit;
|
|
94
|
+
--prizma-text-accent-brand: inherit;
|
|
95
|
+
--prizma-border-brand-500: inherit;
|
|
96
|
+
--prizma-icon-brand-500-static: inherit;
|
|
97
|
+
|
|
98
|
+
/* Component tokens that are pure aliases of the seven above
|
|
99
|
+
(COMPONENT_ALIASES in core/theming/derive.mjs). */
|
|
100
|
+
--prizma-button-primary-border-default: inherit;
|
|
101
|
+
--prizma-button-primary-border-hover: inherit;
|
|
102
|
+
--prizma-button-primary-border-pressed: inherit;
|
|
103
|
+
--prizma-button-primary-surface-default: inherit;
|
|
104
|
+
--prizma-button-primary-surface-hover: inherit;
|
|
105
|
+
--prizma-button-primary-surface-pressed: inherit;
|
|
106
|
+
--prizma-button-secondary-border-default: inherit;
|
|
107
|
+
--prizma-button-secondary-border-hover: inherit;
|
|
108
|
+
--prizma-button-secondary-border-pressed: inherit;
|
|
109
|
+
--prizma-button-secondary-text-default: inherit;
|
|
110
|
+
--prizma-button-secondary-text-hover: inherit;
|
|
111
|
+
--prizma-button-secondary-text-pressed: inherit;
|
|
112
|
+
--prizma-button-tertiary-text-default: inherit;
|
|
113
|
+
--prizma-button-spinner-secondary-arc: inherit;
|
|
114
|
+
--prizma-checkbox-surface-selected: inherit;
|
|
115
|
+
--prizma-radio-button-surface-selected: inherit;
|
|
116
|
+
--prizma-toggle-switch-surface-primary-on: inherit;
|
|
117
|
+
--prizma-illustration-surface-accent: inherit;
|
|
118
|
+
--prizma-illustration-ring-start: inherit;
|
|
119
|
+
|
|
120
|
+
/* Mode-flipping in the canonical map, but a LIGHT pin means the LIGHT stop —
|
|
121
|
+
which for each of these IS ramp 500, i.e. the Static sibling re-inherited
|
|
122
|
+
just above. Reading it back through var() is what keeps the Logo wordmark
|
|
123
|
+
the seed's brand instead of the dark map's #ffffff-on-white.
|
|
124
|
+
surfaceBrand500 light 500 / dark #ffffff (Logo, Stepper past-active)
|
|
125
|
+
surfaceBrandIndicator light 500 / dark 400 (+ its two aliases) */
|
|
126
|
+
--prizma-surface-brand-500: var(--prizma-surface-brand-500-static);
|
|
127
|
+
--prizma-surface-brand-indicator: var(--prizma-surface-brand-500-static);
|
|
128
|
+
--prizma-spinner-surface-primary: var(--prizma-surface-brand-500-static);
|
|
129
|
+
--prizma-loading-bar-fill-in-flight: var(--prizma-surface-brand-500-static);
|
|
130
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React, { forwardRef, type ComponentPropsWithoutRef } from 'react';
|
|
2
|
+
import './ScreenShell.css';
|
|
3
|
+
|
|
4
|
+
export interface PrizmaScreenShellProps extends ComponentPropsWithoutRef<'div'> {
|
|
5
|
+
/** Camera-viewfinder screens render a full-bleed dark stage instead of the
|
|
6
|
+
* neutral surface. Default `false`. Implies `theme="dark"`. */
|
|
7
|
+
dark?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* PIN the token theme for this screen's subtree, regardless of the app's
|
|
10
|
+
* theme. Stamps `data-prizma-theme`, which the generated theme sheets select
|
|
11
|
+
* on ANY element (`[data-prizma-theme='dark']`, not `:root[...]`), so the pin
|
|
12
|
+
* scopes cleanly to one screen.
|
|
13
|
+
*
|
|
14
|
+
* Why screens need this: Core's capture components paint every ink with
|
|
15
|
+
* **Static** tokens because "the capture screen stays WHITE in both modes —
|
|
16
|
+
* light is needed for the shot" (owner decision 2026-07-14, documented in
|
|
17
|
+
* `SelfieCapture.css`). If the surrounding shell were allowed to flip, the
|
|
18
|
+
* app's dark mode would put a light-oriented stage — dark shutter, secondary
|
|
19
|
+
* feedback text — on a black background. Camera viewfinders are the mirror
|
|
20
|
+
* case: their inks are white-on-dark Static, so they pin dark.
|
|
21
|
+
*
|
|
22
|
+
* Leave undefined on ordinary screens: they should follow the app.
|
|
23
|
+
*
|
|
24
|
+
* ⚠️ A pin is a MODE pin, not a BRAND reset — and it used to be both, because
|
|
25
|
+
* `themes/light.css` is the full token set. A host that scopes a brand to a
|
|
26
|
+
* subtree (Core Lab's per-card `themeSeed`; equally `applyPrizmaTheme`'s
|
|
27
|
+
* output scoped to something narrower than `:root`) saw its brand die on
|
|
28
|
+
* every pinned screen: the "verified by incode" tag stayed Incode blue on the
|
|
29
|
+
* face-capture capturing screen while the unpinned tutorial beside it went
|
|
30
|
+
* fully purple. `ScreenShell.css` hands the brand back — read the block at
|
|
31
|
+
* the bottom of that file before changing this prop, including the known gap
|
|
32
|
+
* and the Android / iOS parity flag.
|
|
33
|
+
*/
|
|
34
|
+
theme?: 'light' | 'dark';
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* ScreenShell — the root wrapper of every SDK screen.
|
|
39
|
+
*
|
|
40
|
+
* Responsive contract: the 390×844 Figma frame is the DESIGN REFERENCE, not a
|
|
41
|
+
* hardcoded size. The shell fills its container (host owns the outer size /
|
|
42
|
+
* aspect) and declares itself a CSS container (`pcs-screen`), so descendant
|
|
43
|
+
* geometry scales in `cqw` units capped at the reference pixel value —
|
|
44
|
+
* see GUIDELINES.md §1 and the archetype CSS.
|
|
45
|
+
*/
|
|
46
|
+
export const PrizmaScreenShell = forwardRef<HTMLDivElement, PrizmaScreenShellProps>(
|
|
47
|
+
({ dark = false, theme, className, children, ...rest }, ref) => (
|
|
48
|
+
<div
|
|
49
|
+
ref={ref}
|
|
50
|
+
data-prizma-theme={theme ?? (dark ? 'dark' : undefined)}
|
|
51
|
+
className={[
|
|
52
|
+
'prizma-screen-shell',
|
|
53
|
+
dark ? 'prizma-screen-shell--dark' : '',
|
|
54
|
+
className ?? '',
|
|
55
|
+
]
|
|
56
|
+
.filter(Boolean)
|
|
57
|
+
.join(' ')}
|
|
58
|
+
{...rest}
|
|
59
|
+
>
|
|
60
|
+
{children}
|
|
61
|
+
</div>
|
|
62
|
+
),
|
|
63
|
+
);
|
|
64
|
+
PrizmaScreenShell.displayName = 'PrizmaScreenShell';
|
|
65
|
+
|
|
66
|
+
export default PrizmaScreenShell;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import { PrizmaTitle } from '@incodetech/prizma-core-web/title';
|
|
3
|
+
import { PrizmaDisclaimer } from '@incodetech/prizma-core-web/disclaimer';
|
|
4
|
+
import { PrizmaButton } from '@incodetech/prizma-core-web/button';
|
|
5
|
+
import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
|
|
6
|
+
import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
|
|
7
|
+
import { PrizmaScreenNav } from './ScreenNav';
|
|
8
|
+
import type {
|
|
9
|
+
PrizmaScreenActionHandler,
|
|
10
|
+
PrizmaScreenChromeProps,
|
|
11
|
+
PrizmaScreenOverrides,
|
|
12
|
+
} from './types';
|
|
13
|
+
import './ScreenLayout.css';
|
|
14
|
+
|
|
15
|
+
export interface PrizmaTutorialScreenProps
|
|
16
|
+
extends Omit<PrizmaScreenShellProps, 'dark' | 'title'> ,
|
|
17
|
+
PrizmaScreenChromeProps {
|
|
18
|
+
/**
|
|
19
|
+
* An optional block between the logo nav and the content — a journey stepper.
|
|
20
|
+
* Video Selfie draws Core's `PrizmaStepper` on EVERY screen of the flow, not
|
|
21
|
+
* just its camera stages, and it is the only chrome that tells the steps
|
|
22
|
+
* apart; the archetypes had a slot on E alone, so the rest of the module shed
|
|
23
|
+
* it (owner-reported 2026-08-19). Takes a `ReactNode` so the module supplies
|
|
24
|
+
* Core's own component — no primitive invented, and both offsets live once in
|
|
25
|
+
* `ScreenLayout.css` (`.prizma-screen-layout__progress`). Omit it and nothing
|
|
26
|
+
* renders, so every existing consumer is byte-identical. DEVIATIONS #VS-4.
|
|
27
|
+
*/
|
|
28
|
+
progress?: ReactNode;
|
|
29
|
+
/** Screen title (H2). */
|
|
30
|
+
title: string;
|
|
31
|
+
/** Description below the title (H5). */
|
|
32
|
+
subtitle?: string;
|
|
33
|
+
/** Hint copy 28px above the CTA ("Stay still…"). */
|
|
34
|
+
disclaimer?: string;
|
|
35
|
+
/** Primary CTA label. Optional: some tutorial-shaped screens (Face Match's
|
|
36
|
+
* comparison views) carry no CTA at all. */
|
|
37
|
+
ctaLabel?: string;
|
|
38
|
+
/** The primary CTA shows Core's designed loading treatment — the `*.loading`
|
|
39
|
+
* half of Face Capture's and ID Capture's tutorial sections. */
|
|
40
|
+
ctaLoading?: boolean;
|
|
41
|
+
/** Accessible/visible loading copy for the primary CTA (`PrizmaButton`'s own
|
|
42
|
+
* `loadingLabel`; no hardcoded English anywhere). */
|
|
43
|
+
ctaLoadingLabel?: string;
|
|
44
|
+
/** Secondary CTA rendered ABOVE the primary — a second filled action. */
|
|
45
|
+
secondaryCtaLabel?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Tertiary underlined LINK below the primary — Document Capture's "Skip this
|
|
48
|
+
* step" (tutorial / method selection) and "All pages captured" (next page).
|
|
49
|
+
* A link, not a button: Figma draws Core's `tertiary-link` composite there.
|
|
50
|
+
*/
|
|
51
|
+
linkLabel?: string;
|
|
52
|
+
/** "verified by" attribution copy for the footer tag. */
|
|
53
|
+
verifiedLabel: string;
|
|
54
|
+
/** Centerpiece illustration (inline SVG component / Core Illustration*). */
|
|
55
|
+
illustration?: ReactNode;
|
|
56
|
+
/**
|
|
57
|
+
* A shell-level layer painted OVER the whole screen — Document Capture's
|
|
58
|
+
* method-selection sheet (scrim + `PrizmaBottomSheetContent`), which Figma
|
|
59
|
+
* presents on top of the dimmed tutorial. It cannot ride in the content
|
|
60
|
+
* column: it is absolutely positioned against the shell (DEVIATIONS #DC-30).
|
|
61
|
+
*/
|
|
62
|
+
overlay?: ReactNode;
|
|
63
|
+
/** Accessible name for the nav region. */
|
|
64
|
+
navLabel?: string;
|
|
65
|
+
/** Stable id reported in actions, e.g. `face-capture-tutorial`. */
|
|
66
|
+
screenId?: string;
|
|
67
|
+
overrides?: PrizmaScreenOverrides;
|
|
68
|
+
onAction?: PrizmaScreenActionHandler;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Archetype A — Tutorial / Instruction (GUIDELINES.md §6-A).
|
|
73
|
+
* Nav → title block → illustration (flex-1) → disclaimer → CTA → verified tag.
|
|
74
|
+
*
|
|
75
|
+
* CTA band order is the family's designed one: disclaimer → secondary → primary
|
|
76
|
+
* → tertiary link (the link sits BELOW the primary on every tutorial-shaped
|
|
77
|
+
* section — Document Capture's "Skip this step" / "All pages captured"). The
|
|
78
|
+
* stack is the foundation's flat Spacing/16 (DEVIATIONS #8); Core's own
|
|
79
|
+
* `PrizmaButtonGroup` would put 12 between the slots but cannot forward
|
|
80
|
+
* `loadingLabel`, which the loading tutorials need — DEVIATIONS #F-32.
|
|
81
|
+
*/
|
|
82
|
+
export const PrizmaTutorialScreen = forwardRef<HTMLDivElement, PrizmaTutorialScreenProps>(
|
|
83
|
+
(
|
|
84
|
+
{
|
|
85
|
+
progress,
|
|
86
|
+
title,
|
|
87
|
+
subtitle,
|
|
88
|
+
disclaimer,
|
|
89
|
+
ctaLabel,
|
|
90
|
+
ctaLoading = false,
|
|
91
|
+
ctaLoadingLabel,
|
|
92
|
+
secondaryCtaLabel,
|
|
93
|
+
linkLabel,
|
|
94
|
+
verifiedLabel,
|
|
95
|
+
illustration,
|
|
96
|
+
overlay,
|
|
97
|
+
navLabel,
|
|
98
|
+
screenId,
|
|
99
|
+
showHeader = true,
|
|
100
|
+
showFooter = true,
|
|
101
|
+
overrides,
|
|
102
|
+
onAction,
|
|
103
|
+
...shell
|
|
104
|
+
},
|
|
105
|
+
ref,
|
|
106
|
+
) => (
|
|
107
|
+
<PrizmaScreenShell ref={ref} {...shell}>
|
|
108
|
+
<PrizmaScreenNav reserved={!showHeader} logo={overrides?.logo} navLabel={navLabel} />
|
|
109
|
+
{progress ? (
|
|
110
|
+
<div className="prizma-screen-layout__progress">{progress}</div>
|
|
111
|
+
) : null}
|
|
112
|
+
<div className="prizma-screen-layout__content">
|
|
113
|
+
<PrizmaTitle
|
|
114
|
+
variant={overrides?.align === 'left' ? 'left' : 'centered'}
|
|
115
|
+
title={title}
|
|
116
|
+
showSubtitle={Boolean(subtitle)}
|
|
117
|
+
subtitle={subtitle}
|
|
118
|
+
/>
|
|
119
|
+
<div className="prizma-screen-layout__flex">{illustration}</div>
|
|
120
|
+
{/* CTA band — Core's flat Spacing/16 recipe; the disclaimer's own
|
|
121
|
+
padding supplies the designed 28px text→CTA gap (DEVIATIONS #8). */}
|
|
122
|
+
<div className="prizma-screen-layout__band">
|
|
123
|
+
{disclaimer ? <PrizmaDisclaimer text={disclaimer} /> : null}
|
|
124
|
+
{secondaryCtaLabel ? (
|
|
125
|
+
<PrizmaButton
|
|
126
|
+
variant="secondary"
|
|
127
|
+
size="L"
|
|
128
|
+
onClick={() => onAction?.({ type: 'secondary', screenId })}
|
|
129
|
+
>
|
|
130
|
+
{secondaryCtaLabel}
|
|
131
|
+
</PrizmaButton>
|
|
132
|
+
) : null}
|
|
133
|
+
{ctaLabel ? (
|
|
134
|
+
<PrizmaButton
|
|
135
|
+
variant="primary"
|
|
136
|
+
size="L"
|
|
137
|
+
loading={ctaLoading}
|
|
138
|
+
loadingLabel={ctaLoadingLabel}
|
|
139
|
+
onClick={() => onAction?.({ type: 'cta', screenId })}
|
|
140
|
+
>
|
|
141
|
+
{ctaLabel}
|
|
142
|
+
</PrizmaButton>
|
|
143
|
+
) : null}
|
|
144
|
+
{linkLabel ? (
|
|
145
|
+
<PrizmaButton
|
|
146
|
+
variant="tertiary-link"
|
|
147
|
+
size="L"
|
|
148
|
+
onClick={() => onAction?.({ type: 'secondary', screenId })}
|
|
149
|
+
>
|
|
150
|
+
{linkLabel}
|
|
151
|
+
</PrizmaButton>
|
|
152
|
+
) : null}
|
|
153
|
+
{showFooter ? (
|
|
154
|
+
<div className="prizma-screen-layout__band__tag">
|
|
155
|
+
<PrizmaTag label={verifiedLabel} />
|
|
156
|
+
</div>
|
|
157
|
+
) : null}
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
{overlay}
|
|
161
|
+
</PrizmaScreenShell>
|
|
162
|
+
),
|
|
163
|
+
);
|
|
164
|
+
PrizmaTutorialScreen.displayName = 'PrizmaTutorialScreen';
|
|
165
|
+
|
|
166
|
+
export default PrizmaTutorialScreen;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaListItem } from '@incodetech/prizma-core-web/list';
|
|
3
|
+
import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { VideoSelfieStepsOs, VideoSelfieStrings } from './VideoSelfieStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
import './VideoSelfieLayout.css';
|
|
8
|
+
|
|
9
|
+
export interface VideoSelfieCameraStepsScreenProps
|
|
10
|
+
extends Omit<
|
|
11
|
+
PrizmaListScreenProps,
|
|
12
|
+
| 'status'
|
|
13
|
+
| 'title'
|
|
14
|
+
| 'subtitle'
|
|
15
|
+
| 'children'
|
|
16
|
+
| 'ctaLabel'
|
|
17
|
+
| 'secondaryCtaLabel'
|
|
18
|
+
| 'linkLabel'
|
|
19
|
+
| 'verifiedLabel'
|
|
20
|
+
| 'navLabel'
|
|
21
|
+
> {
|
|
22
|
+
/** Module copy — this screen reads the `permission.steps` slice. */
|
|
23
|
+
strings: VideoSelfieStrings;
|
|
24
|
+
/** Which device variant of the section to render: `2.5 - ios` (default) or
|
|
25
|
+
* `2.6 - android`. They are different screens, not translations. */
|
|
26
|
+
os?: VideoSelfieStepsOs;
|
|
27
|
+
screenId?: string;
|
|
28
|
+
overrides?: PrizmaScreenOverrides;
|
|
29
|
+
onAction?: PrizmaScreenActionHandler;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Video Selfie — the OS settings walk-through, built on the List archetype
|
|
34
|
+
* (GUIDELINES.md §6-G). Figma: purple section `video selfie - permissions
|
|
35
|
+
* 2.5 - camera access instructions`, which holds TWO Incode-drawn symbols:
|
|
36
|
+
* `2.5 - ios camera access instructions` and
|
|
37
|
+
* `2.6 - android camera access instructions`. Both are built here, selected by
|
|
38
|
+
* `os` — unlike `2.1` and `2.4` of the same group, which are OS chrome and are
|
|
39
|
+
* deliberately not built.
|
|
40
|
+
*
|
|
41
|
+
* Same family as `GeolocationBrowserStepsScreen`: a title block over a step
|
|
42
|
+
* list and a "Retry" CTA, LEFT-aligned throughout — a centred headline above a
|
|
43
|
+
* left-led numbered list reads as a mistake. The screen only picks which of the
|
|
44
|
+
* archetype's OWN alignment variants this family uses; a host that passes
|
|
45
|
+
* `overrides.align` still wins.
|
|
46
|
+
*
|
|
47
|
+
* What Figma draws that no single Core list models: TWO labelled sections in
|
|
48
|
+
* the middle. On iOS the second is a plain remark with no steps at all; on
|
|
49
|
+
* Android it is a SECOND five-step numbered list followed by a closing note
|
|
50
|
+
* ("Remember, the specific steps might vary…"). Both numbered lists are Core's
|
|
51
|
+
* Core `PrizmaListItem` (`number`) rows verbatim; the section labels and the two
|
|
52
|
+
* kinds of note are plain content typography in `VideoSelfieLayout.css`. The
|
|
53
|
+
* offset above the whole block is the archetype's `__list` Spacing/24 —
|
|
54
|
+
* nothing about it is re-declared.
|
|
55
|
+
*
|
|
56
|
+
* Neither device frame draws the verified tag (both end at the CTA), so
|
|
57
|
+
* `showFooter` defaults to `true` (owner rule #PI-8/#F-34 — the chrome is
|
|
58
|
+
* constant), as on the other two permission
|
|
59
|
+
* sections.
|
|
60
|
+
*/
|
|
61
|
+
export const VideoSelfieCameraStepsScreen = forwardRef<
|
|
62
|
+
HTMLDivElement,
|
|
63
|
+
VideoSelfieCameraStepsScreenProps
|
|
64
|
+
>(
|
|
65
|
+
(
|
|
66
|
+
{
|
|
67
|
+
strings,
|
|
68
|
+
os = 'ios',
|
|
69
|
+
screenId = `video-selfie-permission-steps-${os}`,
|
|
70
|
+
showHeader = true,
|
|
71
|
+
showFooter = true,
|
|
72
|
+
overrides,
|
|
73
|
+
onAction,
|
|
74
|
+
...shell
|
|
75
|
+
},
|
|
76
|
+
ref,
|
|
77
|
+
) => {
|
|
78
|
+
const slice = strings.permission.steps[os];
|
|
79
|
+
/* Family default, not a local re-declaration: the archetype already owns a
|
|
80
|
+
left variant, so the screen only picks which of ITS variants applies. */
|
|
81
|
+
const alignedOverrides: PrizmaScreenOverrides = {
|
|
82
|
+
...overrides,
|
|
83
|
+
align: overrides?.align ?? 'left',
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<PrizmaListScreen
|
|
88
|
+
/* Two five-step lists + a closing note exceed the 844 frame — Figma's
|
|
89
|
+
own frame is 1041 tall. Pan the middle instead of overlapping the
|
|
90
|
+
CTA and the tag (#VS-12). */
|
|
91
|
+
scrollList
|
|
92
|
+
ref={ref}
|
|
93
|
+
showHeader={showHeader}
|
|
94
|
+
showFooter={showFooter}
|
|
95
|
+
title={slice.title}
|
|
96
|
+
subtitle={slice.subtitle}
|
|
97
|
+
ctaLabel={slice.ctaLabel}
|
|
98
|
+
verifiedLabel={strings.verifiedLabel}
|
|
99
|
+
navLabel={strings.navLabel}
|
|
100
|
+
screenId={screenId}
|
|
101
|
+
overrides={alignedOverrides}
|
|
102
|
+
onAction={onAction}
|
|
103
|
+
{...shell}
|
|
104
|
+
>
|
|
105
|
+
<div className="video-selfie-steps">
|
|
106
|
+
{/* Core's `number` item is the 40×40 SQUIRCLE Figma draws (List.css:
|
|
107
|
+
"40×40 squircle with stroke 2 INSIDE"). `PrizmaList variant="circles"`
|
|
108
|
+
maps to `number-circled`, a full round, and the wrapper offers no
|
|
109
|
+
variant reaching the squircle — so the rows are composed directly,
|
|
110
|
+
the way the tutorial composes `icon-m` (#VS-8). CORE REQUEST: a
|
|
111
|
+
`numbers` wrapper variant mapping to the plain `number` item.
|
|
112
|
+
DEVIATIONS #VS-16. */}
|
|
113
|
+
<h3 className="video-selfie-steps__heading">{slice.microphoneTitle}</h3>
|
|
114
|
+
<ol className="video-selfie-steps__rows">
|
|
115
|
+
{slice.microphoneSteps.map((step, i) => (
|
|
116
|
+
<li key={i}>
|
|
117
|
+
<PrizmaListItem variant="number" number={i + 1} label={step} />
|
|
118
|
+
</li>
|
|
119
|
+
))}
|
|
120
|
+
</ol>
|
|
121
|
+
<h3 className="video-selfie-steps__heading">{slice.recordingTitle}</h3>
|
|
122
|
+
{/* Android (`2.6`) draws a second numbered list where iOS (`2.5`)
|
|
123
|
+
draws a one-line remark — the states must not render alike. */}
|
|
124
|
+
{slice.recordingSteps ? (
|
|
125
|
+
<ol className="video-selfie-steps__rows">
|
|
126
|
+
{slice.recordingSteps.map((step, i) => (
|
|
127
|
+
<li key={i}>
|
|
128
|
+
<PrizmaListItem variant="number" number={i + 1} label={step} />
|
|
129
|
+
</li>
|
|
130
|
+
))}
|
|
131
|
+
</ol>
|
|
132
|
+
) : slice.recordingNote ? (
|
|
133
|
+
<p className="video-selfie-steps__note">{slice.recordingNote}</p>
|
|
134
|
+
) : null}
|
|
135
|
+
{slice.closingNote ? (
|
|
136
|
+
<p className="video-selfie-steps__note">{slice.closingNote}</p>
|
|
137
|
+
) : null}
|
|
138
|
+
</div>
|
|
139
|
+
</PrizmaListScreen>
|
|
140
|
+
);
|
|
141
|
+
},
|
|
142
|
+
);
|
|
143
|
+
VideoSelfieCameraStepsScreen.displayName = 'VideoSelfieCameraStepsScreen';
|
|
144
|
+
|
|
145
|
+
export default VideoSelfieCameraStepsScreen;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { IconWifiOff } from '@incodetech/prizma-core-icons';
|
|
3
|
+
import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { VideoSelfieStrings } from './VideoSelfieStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
|
|
8
|
+
/** Which purple section of group 14 to render (the retry list is its own
|
|
9
|
+
* screen — it is a List, not a Result). */
|
|
10
|
+
export type VideoSelfieErrorVariant =
|
|
11
|
+
| 'processingFailed'
|
|
12
|
+
| 'stepError'
|
|
13
|
+
| 'moduleError'
|
|
14
|
+
| 'noConnection';
|
|
15
|
+
|
|
16
|
+
export interface VideoSelfieErrorScreenProps
|
|
17
|
+
extends Omit<
|
|
18
|
+
PrizmaResultScreenProps,
|
|
19
|
+
| 'status'
|
|
20
|
+
| 'title'
|
|
21
|
+
| 'subtitle'
|
|
22
|
+
| 'glyph'
|
|
23
|
+
| 'children'
|
|
24
|
+
| 'bandContent'
|
|
25
|
+
| 'ctaLabel'
|
|
26
|
+
| 'secondaryCtaLabel'
|
|
27
|
+
| 'verifiedLabel'
|
|
28
|
+
| 'navLabel'
|
|
29
|
+
> {
|
|
30
|
+
/** Module copy — this screen reads the `errors` slice. */
|
|
31
|
+
strings: VideoSelfieStrings;
|
|
32
|
+
/** Which purple section to render. Default `processingFailed`. */
|
|
33
|
+
variant?: VideoSelfieErrorVariant;
|
|
34
|
+
screenId?: string;
|
|
35
|
+
overrides?: PrizmaScreenOverrides;
|
|
36
|
+
onAction?: PrizmaScreenActionHandler;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Video Selfie — the generic errors, built on the Result archetype
|
|
41
|
+
* (GUIDELINES.md §6-F). Figma: purple sections `general errors 14.0 -
|
|
42
|
+
* processing failed`, `14.2 - step error`, `14.3 - module error` and
|
|
43
|
+
* `14.4 - no connection`.
|
|
44
|
+
*
|
|
45
|
+
* Four verdicts, one skeleton: a centred mark over the title, a Retry CTA, and
|
|
46
|
+
* — on the two that offer a way out — a "Quit process" link. Every state
|
|
47
|
+
* renders differently: `processingFailed` alone carries the supporting line,
|
|
48
|
+
* `stepError` is the only one drawn on the dark camera surface, `moduleError`
|
|
49
|
+
* adds the quit link, and `noConnection` swaps the status mark for the Wi-Fi
|
|
50
|
+
* glyph.
|
|
51
|
+
*
|
|
52
|
+
* **Chrome (owner rule, restated 2026-08-19).** All four keep the logo header
|
|
53
|
+
* and the verified tag even though Figma draws them bare — the same call
|
|
54
|
+
* `#PI-8` / `#F-34` made, so the module's connectivity and error screens read
|
|
55
|
+
* identically to every other module's and nothing shifts between states.
|
|
56
|
+
*
|
|
57
|
+
* **Theme.** `stepError` is the one section the camera is still open behind, and
|
|
58
|
+
* Figma draws it white-on-black; it pins `theme="dark"` through Core's own
|
|
59
|
+
* theme switch, so every token-bound child flips THROUGH the design system
|
|
60
|
+
* (DEVIATIONS #DC-32) rather than around it. `noConnection` deliberately does
|
|
61
|
+
* NOT pin: `#F-34`'s whole point is that a module's connectivity screen looks
|
|
62
|
+
* like every other module's.
|
|
63
|
+
*
|
|
64
|
+
* **Reported gap — CONFIRMED DEFECT, blocked on the archetype.** Archetype F
|
|
65
|
+
* has no tertiary-link slot: G has `linkLabel` and pins it above the pair, A and
|
|
66
|
+
* E pin theirs below, F has none. The quit link therefore rides in F's
|
|
67
|
+
* `bandContent` slot (Core's `tertiary-link` button, never a hand-rolled
|
|
68
|
+
* anchor), which `PrizmaResultScreen` renders ABOVE the CTA row — and `14.3` and
|
|
69
|
+
* `14.4` both draw "Retry" first with "Quit process" underlined BELOW it. QA
|
|
70
|
+
* re-confirmed the inversion against both frames on 2026-08-19.
|
|
71
|
+
*
|
|
72
|
+
* It is NOT worked around here. The fix is one slot in the archetype — F needs
|
|
73
|
+
* A's `linkLabel`, rendered AFTER the button stack (mirroring
|
|
74
|
+
* `TutorialScreen.tsx:129`), with `bandContent` left to its intended Snackbar
|
|
75
|
+
* use. `ResultScreen.*` is owned by the foundation, so this module reports it
|
|
76
|
+
* (`archetypeGaps`) instead of editing it (GUIDELINES rule 2). The moment the
|
|
77
|
+
* slot lands, both variants move to `linkLabel={copy.quitLabel}` and the
|
|
78
|
+
* `bandContent` block below is deleted.
|
|
79
|
+
*
|
|
80
|
+
* Figma also draws the journey stepper on `14.1`, `14.2` and `14.4`. Archetype
|
|
81
|
+
* F has no slot for it and this module does not hand-roll one — reported.
|
|
82
|
+
*/
|
|
83
|
+
export const VideoSelfieErrorScreen = forwardRef<
|
|
84
|
+
HTMLDivElement,
|
|
85
|
+
VideoSelfieErrorScreenProps
|
|
86
|
+
>(
|
|
87
|
+
(
|
|
88
|
+
{
|
|
89
|
+
strings,
|
|
90
|
+
variant = 'processingFailed',
|
|
91
|
+
screenId = `video-selfie-error-${variant}`,
|
|
92
|
+
overrides,
|
|
93
|
+
onAction,
|
|
94
|
+
...shell
|
|
95
|
+
},
|
|
96
|
+
ref,
|
|
97
|
+
) => {
|
|
98
|
+
const slice = strings.errors;
|
|
99
|
+
const copy =
|
|
100
|
+
variant === 'processingFailed'
|
|
101
|
+
? {
|
|
102
|
+
title: slice.processingFailed.title,
|
|
103
|
+
subtitle: slice.processingFailed.subtitle,
|
|
104
|
+
ctaLabel: slice.processingFailed.ctaLabel,
|
|
105
|
+
quitLabel: undefined as string | undefined,
|
|
106
|
+
}
|
|
107
|
+
: variant === 'stepError'
|
|
108
|
+
? {
|
|
109
|
+
title: slice.stepError.title,
|
|
110
|
+
subtitle: undefined,
|
|
111
|
+
ctaLabel: slice.stepError.ctaLabel,
|
|
112
|
+
quitLabel: undefined as string | undefined,
|
|
113
|
+
}
|
|
114
|
+
: variant === 'moduleError'
|
|
115
|
+
? {
|
|
116
|
+
title: slice.moduleError.title,
|
|
117
|
+
subtitle: undefined,
|
|
118
|
+
ctaLabel: slice.moduleError.ctaLabel,
|
|
119
|
+
quitLabel: slice.moduleError.quitLabel,
|
|
120
|
+
}
|
|
121
|
+
: {
|
|
122
|
+
title: slice.noConnection.title,
|
|
123
|
+
subtitle: undefined,
|
|
124
|
+
ctaLabel: slice.noConnection.ctaLabel,
|
|
125
|
+
quitLabel: slice.noConnection.quitLabel,
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
return (
|
|
129
|
+
<PrizmaResultScreen
|
|
130
|
+
ref={ref}
|
|
131
|
+
theme={variant === 'stepError' ? 'dark' : undefined}
|
|
132
|
+
status={variant === 'noConnection' ? 'none' : 'error'}
|
|
133
|
+
glyph={
|
|
134
|
+
variant === 'noConnection' ? (
|
|
135
|
+
<span
|
|
136
|
+
className={[
|
|
137
|
+
'prizma-screen-layout__glyph',
|
|
138
|
+
'prizma-screen-layout__glyph--negative',
|
|
139
|
+
overrides?.align === 'left' ? 'prizma-screen-layout__glyph--left' : '',
|
|
140
|
+
]
|
|
141
|
+
.filter(Boolean)
|
|
142
|
+
.join(' ')}
|
|
143
|
+
>
|
|
144
|
+
<IconWifiOff size="l" />
|
|
145
|
+
</span>
|
|
146
|
+
) : undefined
|
|
147
|
+
}
|
|
148
|
+
title={copy.title}
|
|
149
|
+
subtitle={copy.subtitle}
|
|
150
|
+
/* The archetype's own tertiary slot, which renders BELOW the button
|
|
151
|
+
stack — `14.3`/`14.4` draw "Retry" first with "Quit process"
|
|
152
|
+
underneath. This used to borrow `bandContent`, which paints ABOVE
|
|
153
|
+
the buttons and put the link on the wrong side (#VS-17). */
|
|
154
|
+
linkLabel={copy.quitLabel}
|
|
155
|
+
ctaLabel={copy.ctaLabel}
|
|
156
|
+
verifiedLabel={strings.verifiedLabel}
|
|
157
|
+
navLabel={strings.navLabel}
|
|
158
|
+
screenId={screenId}
|
|
159
|
+
overrides={overrides}
|
|
160
|
+
onAction={onAction}
|
|
161
|
+
{...shell}
|
|
162
|
+
/>
|
|
163
|
+
);
|
|
164
|
+
},
|
|
165
|
+
);
|
|
166
|
+
VideoSelfieErrorScreen.displayName = 'VideoSelfieErrorScreen';
|
|
167
|
+
|
|
168
|
+
export default VideoSelfieErrorScreen;
|