@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,149 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { IconWifiOff } from '@incodetech/prizma-core-icons';
|
|
3
|
+
import { PrizmaSnackbar } from '@incodetech/prizma-core-web/snackbar';
|
|
4
|
+
import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
|
|
5
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
6
|
+
import type { ErrorScreensStrings, ErrorScreensVariant } from './ErrorScreensStrings';
|
|
7
|
+
import './ScreenLayout.css';
|
|
8
|
+
|
|
9
|
+
export interface ErrorScreensScreenProps
|
|
10
|
+
extends Omit<
|
|
11
|
+
PrizmaResultScreenProps,
|
|
12
|
+
| 'status'
|
|
13
|
+
| 'title'
|
|
14
|
+
| 'subtitle'
|
|
15
|
+
| 'glyph'
|
|
16
|
+
| 'ctaLabel'
|
|
17
|
+
| 'linkLabel'
|
|
18
|
+
| 'disclaimer'
|
|
19
|
+
| 'progress'
|
|
20
|
+
| 'verifiedLabel'
|
|
21
|
+
| 'navLabel'
|
|
22
|
+
> {
|
|
23
|
+
/** Family copy — this screen reads the slice its `variant` names. */
|
|
24
|
+
strings: ErrorScreensStrings;
|
|
25
|
+
/** Which section to render. Default `sessionExpired`. */
|
|
26
|
+
variant?: ErrorScreensVariant;
|
|
27
|
+
/** `unsupportedBrowser` only — the real session URL to show above the CTA. */
|
|
28
|
+
sessionUrl?: string;
|
|
29
|
+
/** `unsupportedBrowser` only — draw the "link copied" Snackbar (the frame's
|
|
30
|
+
* second state). Default `false`. */
|
|
31
|
+
copied?: boolean;
|
|
32
|
+
screenId?: string;
|
|
33
|
+
overrides?: PrizmaScreenOverrides;
|
|
34
|
+
onAction?: PrizmaScreenActionHandler;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Error screens — the session-level failures, built on the Result archetype
|
|
39
|
+
* (GUIDELINES.md §6-F, `PrizmaResultScreen`).
|
|
40
|
+
*
|
|
41
|
+
* ONE screen for all three generic sections. They draw the identical skeleton —
|
|
42
|
+
* a centred mark + title + supporting line over a CTA band — and differ only in
|
|
43
|
+
* copy, in which mark leads, and in what the band carries:
|
|
44
|
+
*
|
|
45
|
+
* - `sessionExpired` — canonical negative mark, NO CTA (a dead end)
|
|
46
|
+
* - `noConnection` — Wi-Fi glyph, "Refresh"
|
|
47
|
+
* - `unsupportedBrowser` — canonical negative mark, the session URL above
|
|
48
|
+
* "Copy link", with "Continue anyways" under it
|
|
49
|
+
*
|
|
50
|
+
* Chrome is CONSTANT. All three frames are drawn without the logo header and
|
|
51
|
+
* without the verified tag; both are kept here, because the owner rule of
|
|
52
|
+
* 2026-08-18 (#F-30, #F-34) makes the chrome the same on every screen so
|
|
53
|
+
* nothing shifts between states, and every module's connectivity screen must
|
|
54
|
+
* read identically (#PI-8). Same call `GeolocationErrorScreen` already makes
|
|
55
|
+
* for its own `noNetwork`.
|
|
56
|
+
*
|
|
57
|
+
* Three things Figma draws that this screen does not, all reported rather than
|
|
58
|
+
* worked around:
|
|
59
|
+
* - **The browser-window mark.** `unsupportedBrowser` leads with a red browser
|
|
60
|
+
* window carrying an ✕. The canonical bank has no such glyph, so the screen
|
|
61
|
+
* uses Core's negative status mark — the nearest thing that means the same
|
|
62
|
+
* (rule 1, GUIDELINES §10; the same substitution logic as #10 / #DC-23).
|
|
63
|
+
* Mint the glyph or bless the substitution.
|
|
64
|
+
* - **Links inside the supporting line.** Figma renders "Safari" and "Chrome"
|
|
65
|
+
* as blue in-sentence links; Core's `PrizmaTitle` subtitle is a plain
|
|
66
|
+
* `string`, so the sentence renders in one colour. Same open Core request as
|
|
67
|
+
* the step rows: a `ReactNode` subtitle.
|
|
68
|
+
* - **"Continue anyways" above the CTA.** Archetype F renders its tertiary link
|
|
69
|
+
* BELOW the button stack, so this screen ships inverted against its frame.
|
|
70
|
+
* The archetype owns the order (see `PermissionsAllowScreen` for the same
|
|
71
|
+
* escalation).
|
|
72
|
+
*
|
|
73
|
+
* The "link copied" Snackbar rides the archetype's `progress` slot — the only
|
|
74
|
+
* block that renders BETWEEN the nav and the content, which is exactly where
|
|
75
|
+
* the frame draws it. `bandContent` would have put it above the buttons instead
|
|
76
|
+
* (the workaround #VS-17 rejected).
|
|
77
|
+
*/
|
|
78
|
+
export const ErrorScreensScreen = forwardRef<HTMLDivElement, ErrorScreensScreenProps>(
|
|
79
|
+
(
|
|
80
|
+
{
|
|
81
|
+
strings,
|
|
82
|
+
variant = 'sessionExpired',
|
|
83
|
+
sessionUrl,
|
|
84
|
+
copied = false,
|
|
85
|
+
screenId = `error-screens-${variant}`,
|
|
86
|
+
overrides,
|
|
87
|
+
onAction,
|
|
88
|
+
...shell
|
|
89
|
+
},
|
|
90
|
+
ref,
|
|
91
|
+
) => {
|
|
92
|
+
const unsupported = variant === 'unsupportedBrowser';
|
|
93
|
+
const noConnection = variant === 'noConnection';
|
|
94
|
+
const copy = unsupported
|
|
95
|
+
? strings.unsupportedBrowser
|
|
96
|
+
: noConnection
|
|
97
|
+
? strings.noConnection
|
|
98
|
+
: strings.sessionExpired;
|
|
99
|
+
|
|
100
|
+
return (
|
|
101
|
+
<PrizmaResultScreen
|
|
102
|
+
ref={ref}
|
|
103
|
+
/* The connectivity screen leads with the Wi-Fi glyph instead of a
|
|
104
|
+
status mark; the other two carry the canonical negative mark. */
|
|
105
|
+
status={noConnection ? 'none' : 'error'}
|
|
106
|
+
glyph={
|
|
107
|
+
noConnection ? (
|
|
108
|
+
<span
|
|
109
|
+
className={[
|
|
110
|
+
'prizma-screen-layout__glyph',
|
|
111
|
+
'prizma-screen-layout__glyph--negative',
|
|
112
|
+
overrides?.align === 'left' ? 'prizma-screen-layout__glyph--left' : '',
|
|
113
|
+
]
|
|
114
|
+
.filter(Boolean)
|
|
115
|
+
.join(' ')}
|
|
116
|
+
>
|
|
117
|
+
<IconWifiOff size="l" />
|
|
118
|
+
</span>
|
|
119
|
+
) : undefined
|
|
120
|
+
}
|
|
121
|
+
progress={
|
|
122
|
+
unsupported && copied ? (
|
|
123
|
+
<PrizmaSnackbar state="success" contentResizing="fill">
|
|
124
|
+
{strings.unsupportedBrowser.copiedLabel}
|
|
125
|
+
</PrizmaSnackbar>
|
|
126
|
+
) : undefined
|
|
127
|
+
}
|
|
128
|
+
title={copy.title}
|
|
129
|
+
subtitle={copy.subtitle}
|
|
130
|
+
disclaimer={
|
|
131
|
+
unsupported
|
|
132
|
+
? sessionUrl ?? strings.unsupportedBrowser.urlPlaceholder
|
|
133
|
+
: undefined
|
|
134
|
+
}
|
|
135
|
+
ctaLabel={copy.ctaLabel}
|
|
136
|
+
linkLabel={unsupported ? strings.unsupportedBrowser.continueLabel : undefined}
|
|
137
|
+
verifiedLabel={strings.verifiedLabel}
|
|
138
|
+
navLabel={strings.navLabel}
|
|
139
|
+
screenId={screenId}
|
|
140
|
+
overrides={overrides}
|
|
141
|
+
onAction={onAction}
|
|
142
|
+
{...shell}
|
|
143
|
+
/>
|
|
144
|
+
);
|
|
145
|
+
},
|
|
146
|
+
);
|
|
147
|
+
ErrorScreensScreen.displayName = 'ErrorScreensScreen';
|
|
148
|
+
|
|
149
|
+
export default ErrorScreensScreen;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Error screens — copy contract for the GENERIC family.
|
|
2
|
+
//
|
|
3
|
+
// Figma: `Module Generic Screens` (qGJjfL4O0JSjz1x4tOjJn8):
|
|
4
|
+
//
|
|
5
|
+
// 79:360 ErrorSessionReopen → `sessionExpired`
|
|
6
|
+
// 214:3357 Geolocation.error.noNetwork → `noConnection`
|
|
7
|
+
// 240:154 Error screen - Unsupported browser → `unsupportedBrowser`
|
|
8
|
+
//
|
|
9
|
+
// The three failures that belong to the SESSION rather than to any module: the
|
|
10
|
+
// link has expired, the network went away, the browser cannot run the SDK.
|
|
11
|
+
// Every module can hit all three, which is why they are drawn once in the
|
|
12
|
+
// generic file — a user who sees three different "no internet" screens in one
|
|
13
|
+
// journey reads them as three different products.
|
|
14
|
+
//
|
|
15
|
+
// `noConnection` is deliberately the same screen every module already ships
|
|
16
|
+
// (`FaceCaptureNoConnectionScreen`, `IdCaptureNoConnectionScreen`,
|
|
17
|
+
// `DocumentCaptureNoConnectionScreen`, `GeolocationErrorScreen`'s `noNetwork`).
|
|
18
|
+
// The generic entry is where the shape is DOCUMENTED; the module copies stay
|
|
19
|
+
// put until someone retires them deliberately, because deleting four exported
|
|
20
|
+
// components to save one screen is a breaking change for every host that
|
|
21
|
+
// imports them. Flagged for the owner.
|
|
22
|
+
//
|
|
23
|
+
// The family has no flow of its own: each of these is entered from wherever the
|
|
24
|
+
// session broke and exits to a retry or to nothing. Core Lab lists it as a
|
|
25
|
+
// library of states.
|
|
26
|
+
//
|
|
27
|
+
// No hardcoded English anywhere in a screen: every visible string arrives here.
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The three sections.
|
|
31
|
+
* - `sessionExpired` — the link is dead; the user must go back to the provider
|
|
32
|
+
* - `noConnection` — the network went away; retry when it returns
|
|
33
|
+
* - `unsupportedBrowser` — the SDK cannot run here; copy the link and move
|
|
34
|
+
*/
|
|
35
|
+
export type ErrorScreensVariant =
|
|
36
|
+
| 'sessionExpired'
|
|
37
|
+
| 'noConnection'
|
|
38
|
+
| 'unsupportedBrowser';
|
|
39
|
+
|
|
40
|
+
export interface ErrorScreensCopy {
|
|
41
|
+
title: string;
|
|
42
|
+
subtitle?: string;
|
|
43
|
+
/** Primary CTA. Omit — as `sessionExpired` does — for a dead end. */
|
|
44
|
+
ctaLabel?: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface ErrorScreensStrings {
|
|
48
|
+
/** Accessible name for the logo nav region (i18n — no baked-in English). */
|
|
49
|
+
navLabel?: string;
|
|
50
|
+
/** "verified by" attribution copy for the footer tag. */
|
|
51
|
+
verifiedLabel: string;
|
|
52
|
+
|
|
53
|
+
sessionExpired: ErrorScreensCopy;
|
|
54
|
+
noConnection: ErrorScreensCopy;
|
|
55
|
+
|
|
56
|
+
unsupportedBrowser: ErrorScreensCopy & {
|
|
57
|
+
/** The session URL shown above the CTA, for pasting into a supported
|
|
58
|
+
* browser. A host passes the real one through `sessionUrl`; this is the
|
|
59
|
+
* fallback the gallery draws. */
|
|
60
|
+
urlPlaceholder?: string;
|
|
61
|
+
/** Tertiary link — "Continue anyways". */
|
|
62
|
+
continueLabel: string;
|
|
63
|
+
/** Snackbar copy after the link is copied — the frame's second state. */
|
|
64
|
+
copiedLabel: string;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import type { PrizmaSelfieCaptureState } from '@incodetech/prizma-core-web/selfie-capture';
|
|
3
|
+
import { PrizmaCaptureScreen, type PrizmaCaptureScreenProps } from './CaptureScreen';
|
|
4
|
+
import type {
|
|
5
|
+
FaceCaptureCapturingState,
|
|
6
|
+
FaceCaptureStrings,
|
|
7
|
+
} from './FaceCaptureStrings';
|
|
8
|
+
import './FaceCaptureLayout.css';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Purple `faceCapture.capturing.*` state → Core PrizmaSelfieCapture ring state.
|
|
12
|
+
* - `initiating` — grey ring, blank disc, camera not yet revealed (`enabled`).
|
|
13
|
+
* - `getReady` — face detected, blue glow arc while the capture happens
|
|
14
|
+
* (`ready`). NOTE: the module Figma cell still shows the silhouette during
|
|
15
|
+
* this state; Core hides it per the owner's choreography (2026-07-14) —
|
|
16
|
+
* DEVIATIONS.md #13. The design system wins.
|
|
17
|
+
* - every feedback state — camera + silhouette guide (`empty`) with the
|
|
18
|
+
* instruction line below the ring.
|
|
19
|
+
*/
|
|
20
|
+
const SELFIE_STATE: Record<FaceCaptureCapturingState, PrizmaSelfieCaptureState> = {
|
|
21
|
+
initiating: 'enabled',
|
|
22
|
+
getReady: 'ready',
|
|
23
|
+
alignFace: 'empty',
|
|
24
|
+
lookAtCamera: 'empty',
|
|
25
|
+
tooDark: 'empty',
|
|
26
|
+
tooBright: 'empty',
|
|
27
|
+
eyesClosed: 'empty',
|
|
28
|
+
maskDetected: 'empty',
|
|
29
|
+
glassesDetected: 'empty',
|
|
30
|
+
hatDetected: 'empty',
|
|
31
|
+
moveRight: 'empty',
|
|
32
|
+
moveLeft: 'empty',
|
|
33
|
+
moveCloser: 'empty',
|
|
34
|
+
moveAway: 'empty',
|
|
35
|
+
faceOcclusion: 'empty',
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export interface FaceCaptureCapturingScreenProps
|
|
39
|
+
extends Omit<
|
|
40
|
+
PrizmaCaptureScreenProps,
|
|
41
|
+
'state' | 'title' | 'feedbackText' | 'statusLabels' | 'verifiedLabel' | 'navLabel'
|
|
42
|
+
> {
|
|
43
|
+
/** Module copy — this screen reads the `capturing` slice (+ shared labels). */
|
|
44
|
+
strings: FaceCaptureStrings;
|
|
45
|
+
/** Which purple `faceCapture.capturing.*` spec section to render. */
|
|
46
|
+
state?: FaceCaptureCapturingState;
|
|
47
|
+
/** Live camera feed (<video>) or sample still (<img>) for the ring window. */
|
|
48
|
+
camera?: ReactNode;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Face Capture — auto-capture stage (Archetype B, GUIDELINES.md §6-B).
|
|
53
|
+
* Figma: the 15 purple `faceCapture.capturing.*` sections — ring-state and
|
|
54
|
+
* instruction-copy variants of this ONE screen. Ring, silhouette, glow, and the
|
|
55
|
+
* instruction line all come from Core's PrizmaSelfieCapture via the
|
|
56
|
+
* CaptureScreen archetype — never re-implemented (§7).
|
|
57
|
+
*
|
|
58
|
+
* The instruction goes to the component's own `feedbackText` slot, NOT to the
|
|
59
|
+
* archetype's H2-below-the-ring slot: in Figma the line lives INSIDE the
|
|
60
|
+
* `Capture / Selfie` instance at Spacing/32 under the ring (measured y=407 vs
|
|
61
|
+
* ring bottom 375), which is exactly where the component puts it. Routing it
|
|
62
|
+
* through the archetype's `__below-capture` H2 instead would add the
|
|
63
|
+
* component's own 40px bottom padding on top of that 32px and change the type
|
|
64
|
+
* role — DEVIATIONS.md #12.
|
|
65
|
+
*
|
|
66
|
+
* The archetype adds no offsets of its own — the component owns that spacing
|
|
67
|
+
* (same deviation row).
|
|
68
|
+
*/
|
|
69
|
+
export const FaceCaptureCapturingScreen = forwardRef<
|
|
70
|
+
HTMLDivElement,
|
|
71
|
+
FaceCaptureCapturingScreenProps
|
|
72
|
+
>(
|
|
73
|
+
(
|
|
74
|
+
{
|
|
75
|
+
strings,
|
|
76
|
+
state = 'initiating',
|
|
77
|
+
camera,
|
|
78
|
+
screenId = 'face-capture-capturing',
|
|
79
|
+
className,
|
|
80
|
+
...rest
|
|
81
|
+
},
|
|
82
|
+
ref,
|
|
83
|
+
) => (
|
|
84
|
+
<PrizmaCaptureScreen
|
|
85
|
+
ref={ref}
|
|
86
|
+
className={className}
|
|
87
|
+
state={SELFIE_STATE[state]}
|
|
88
|
+
camera={camera}
|
|
89
|
+
feedbackText={strings.capturing[state]}
|
|
90
|
+
verifiedLabel={strings.verifiedLabel}
|
|
91
|
+
navLabel={strings.navLabel}
|
|
92
|
+
screenId={screenId}
|
|
93
|
+
{...rest}
|
|
94
|
+
/>
|
|
95
|
+
),
|
|
96
|
+
);
|
|
97
|
+
FaceCaptureCapturingScreen.displayName = 'FaceCaptureCapturingScreen';
|
|
98
|
+
|
|
99
|
+
export default FaceCaptureCapturingScreen;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* Face Capture — module layout additions.
|
|
2
|
+
*
|
|
3
|
+
* ONLY what the foundation archetypes do not already own. Every value is a
|
|
4
|
+
* token; each departure from GUIDELINES.md carries a numbered row in
|
|
5
|
+
* DEVIATIONS.md.
|
|
6
|
+
*
|
|
7
|
+
* The pilot's other three additions were promoted INTO the foundation
|
|
8
|
+
* (`ScreenLayout.css`) once they proved to be recurring patterns rather than
|
|
9
|
+
* module quirks: the CTA band recipe (`__band`, DEVIATIONS #8), the no-nav
|
|
10
|
+
* content offset for generic errors (`__content--no-nav`, #9), and the capture
|
|
11
|
+
* stage offset fix (`__content--capture` now adds nothing, #12). Wave agents
|
|
12
|
+
* inherit all three as correct defaults.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/* Nothing module-specific is left: the non-status glyph slot this file used to
|
|
16
|
+
* own (`.face-capture-glyph`) was the third byte-identical copy of one pattern,
|
|
17
|
+
* so it moved to `ScreenLayout.css` as `__glyph` — DEVIATIONS #DC-29, closed.
|
|
18
|
+
* The file is kept as the module's landing place for future additions. */
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaCaptureScreen, type PrizmaCaptureScreenProps } from './CaptureScreen';
|
|
3
|
+
import type { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
4
|
+
import './FaceCaptureLayout.css';
|
|
5
|
+
|
|
6
|
+
/** The two purple `faceCapture.loading.*` spec sections. Identical layout and
|
|
7
|
+
* identical spinner — only the status copy differs, so they are copy variants
|
|
8
|
+
* of ONE screen (same pattern as the 15 capturing states). */
|
|
9
|
+
export type FaceCaptureLoadingStage = 'uploading' | 'processing';
|
|
10
|
+
|
|
11
|
+
export interface FaceCaptureLoadingScreenProps
|
|
12
|
+
extends Omit<
|
|
13
|
+
PrizmaCaptureScreenProps,
|
|
14
|
+
'state' | 'camera' | 'title' | 'feedbackText' | 'statusLabels' | 'verifiedLabel' | 'navLabel'
|
|
15
|
+
> {
|
|
16
|
+
/** Module copy — this screen reads the `uploading` / `processing` slices. */
|
|
17
|
+
strings: FaceCaptureStrings;
|
|
18
|
+
/** Which purple `faceCapture.loading.*` spec section to render. */
|
|
19
|
+
stage?: FaceCaptureLoadingStage;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Face Capture — upload / processing (Archetype B, GUIDELINES.md §6-B).
|
|
24
|
+
* Figma: purple sections faceCapture.loading.uploading / .processing.
|
|
25
|
+
*
|
|
26
|
+
* NOT the Processing archetype (§6-C). Both purple sections put the spinner +
|
|
27
|
+
* status line inside the SAME 342-tall "Middle Content" box the capture ring
|
|
28
|
+
* occupies — 40px below the nav, measured at y=84 of the 390 CONTENT frame —
|
|
29
|
+
* whereas §6-C centers in all remaining space (51px lower). Core models this
|
|
30
|
+
* as the `uploading` state of `PrizmaSelfieCapture`, where the stage dissolves
|
|
31
|
+
* into the canonical `PrizmaLoadingSpinner` in the ring's own slot (owner
|
|
32
|
+
* choreography 2026-07-15). Design system wins — DEVIATIONS.md #11.
|
|
33
|
+
*
|
|
34
|
+
* So the ring stage stays, un-re-implemented, and only its state changes.
|
|
35
|
+
* The Core component owns the ring spacing; the archetype adds none
|
|
36
|
+
* (DEVIATIONS.md #12).
|
|
37
|
+
*/
|
|
38
|
+
export const FaceCaptureLoadingScreen = forwardRef<
|
|
39
|
+
HTMLDivElement,
|
|
40
|
+
FaceCaptureLoadingScreenProps
|
|
41
|
+
>(
|
|
42
|
+
(
|
|
43
|
+
{ strings, stage = 'uploading', screenId = `face-capture-${stage}`, className, ...rest },
|
|
44
|
+
ref,
|
|
45
|
+
) => (
|
|
46
|
+
<PrizmaCaptureScreen
|
|
47
|
+
// uploading / processing: the feed is closed — not a capture screen (owner rule 2026-08-18).
|
|
48
|
+
cameraOpen={false}
|
|
49
|
+
ref={ref}
|
|
50
|
+
className={className}
|
|
51
|
+
state="uploading"
|
|
52
|
+
statusLabels={{
|
|
53
|
+
uploading:
|
|
54
|
+
stage === 'processing' ? strings.processing.title : strings.uploading.title,
|
|
55
|
+
}}
|
|
56
|
+
verifiedLabel={strings.verifiedLabel}
|
|
57
|
+
navLabel={strings.navLabel}
|
|
58
|
+
screenId={screenId}
|
|
59
|
+
{...rest}
|
|
60
|
+
/>
|
|
61
|
+
),
|
|
62
|
+
);
|
|
63
|
+
FaceCaptureLoadingScreen.displayName = 'FaceCaptureLoadingScreen';
|
|
64
|
+
|
|
65
|
+
export default FaceCaptureLoadingScreen;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import { PrizmaSelfieCapture } from '@incodetech/prizma-core-web/selfie-capture';
|
|
3
|
+
import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
|
|
4
|
+
import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
|
|
5
|
+
import { PrizmaScreenNav } from './ScreenNav';
|
|
6
|
+
import type {
|
|
7
|
+
PrizmaScreenActionHandler,
|
|
8
|
+
PrizmaScreenChromeProps,
|
|
9
|
+
PrizmaScreenOverrides,
|
|
10
|
+
} from './types';
|
|
11
|
+
import type { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
12
|
+
import './ScreenLayout.css';
|
|
13
|
+
import './FaceCaptureLayout.css';
|
|
14
|
+
|
|
15
|
+
export interface FaceCaptureManualCaptureScreenProps
|
|
16
|
+
extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'> ,
|
|
17
|
+
PrizmaScreenChromeProps {
|
|
18
|
+
/** Module copy — this screen reads the `manualCapture` slice (+ shared labels). */
|
|
19
|
+
strings: FaceCaptureStrings;
|
|
20
|
+
/** Live camera feed (<video>) or sample still (<img>) for the ring window. */
|
|
21
|
+
camera?: ReactNode;
|
|
22
|
+
screenId?: string;
|
|
23
|
+
overrides?: PrizmaScreenOverrides;
|
|
24
|
+
onAction?: PrizmaScreenActionHandler;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Face Capture — manual capture (Archetype B layout, GUIDELINES.md §6-B).
|
|
29
|
+
* Figma: purple section faceCapture.manualCapture.default.
|
|
30
|
+
*
|
|
31
|
+
* Goes through Core's PrizmaSelfieCapture in manual mode (§7): the component
|
|
32
|
+
* owns ring, silhouette guide, instruction line, and shutter. Composed on the
|
|
33
|
+
* foundation shell directly because the CaptureScreen archetype does not
|
|
34
|
+
* forward `isManual` / `onCapture` — foundation gap reported to the owner, no
|
|
35
|
+
* foundation file edited. Layout classes are the archetype's own.
|
|
36
|
+
*
|
|
37
|
+
* Verified pixel-exact against Figma 3.1.0: the `Capture / Selfie` instance sits
|
|
38
|
+
* at nav-bottom + 0 with the ring at +40, the manual instruction at +32 below
|
|
39
|
+
* the ring and the 64px shutter at +32 below that — all of it the component's
|
|
40
|
+
* own padding/gap; the archetype adds none of its own (DEVIATIONS.md #12).
|
|
41
|
+
*/
|
|
42
|
+
export const FaceCaptureManualCaptureScreen = forwardRef<
|
|
43
|
+
HTMLDivElement,
|
|
44
|
+
FaceCaptureManualCaptureScreenProps
|
|
45
|
+
>(
|
|
46
|
+
(
|
|
47
|
+
{
|
|
48
|
+
strings,
|
|
49
|
+
camera,
|
|
50
|
+
screenId = 'face-capture-manual-capture',
|
|
51
|
+
showHeader,
|
|
52
|
+
showFooter = true,
|
|
53
|
+
overrides,
|
|
54
|
+
onAction,
|
|
55
|
+
className,
|
|
56
|
+
...shell
|
|
57
|
+
},
|
|
58
|
+
ref,
|
|
59
|
+
) => (
|
|
60
|
+
<PrizmaScreenShell
|
|
61
|
+
ref={ref}
|
|
62
|
+
theme="light"
|
|
63
|
+
className={className}
|
|
64
|
+
{...shell}
|
|
65
|
+
>
|
|
66
|
+
{/* Capture screen: footer-only by default, the logo is the client's
|
|
67
|
+
opt-in. The row stays RESERVED so nothing shifts up when the logo is
|
|
68
|
+
absent (owner rule 2026-08-18). */}
|
|
69
|
+
<PrizmaScreenNav
|
|
70
|
+
reserved={!(showHeader ?? Boolean(overrides?.logo))}
|
|
71
|
+
logo={overrides?.logo}
|
|
72
|
+
navLabel={strings.navLabel}
|
|
73
|
+
/>
|
|
74
|
+
<div className="prizma-screen-layout__content prizma-screen-layout__content--capture">
|
|
75
|
+
<PrizmaSelfieCapture
|
|
76
|
+
state="empty"
|
|
77
|
+
camera={camera}
|
|
78
|
+
isManual
|
|
79
|
+
manualFeedbackText={strings.manualCapture.instruction}
|
|
80
|
+
captureLabel={strings.manualCapture.captureLabel}
|
|
81
|
+
onCapture={() => onAction?.({ type: 'cta', screenId })}
|
|
82
|
+
/>
|
|
83
|
+
{showFooter ? (
|
|
84
|
+
<div className="prizma-screen-layout__footer prizma-screen-layout__footer--pinned">
|
|
85
|
+
<PrizmaTag label={strings.verifiedLabel} />
|
|
86
|
+
</div>
|
|
87
|
+
) : null}
|
|
88
|
+
</div>
|
|
89
|
+
</PrizmaScreenShell>
|
|
90
|
+
),
|
|
91
|
+
);
|
|
92
|
+
FaceCaptureManualCaptureScreen.displayName = 'FaceCaptureManualCaptureScreen';
|
|
93
|
+
|
|
94
|
+
export default FaceCaptureManualCaptureScreen;
|
|
@@ -0,0 +1,73 @@
|
|
|
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 { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
|
|
8
|
+
export interface FaceCaptureNoConnectionScreenProps
|
|
9
|
+
extends Omit<
|
|
10
|
+
PrizmaResultScreenProps,
|
|
11
|
+
'status' | 'title' | 'subtitle' | 'glyph' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
|
|
12
|
+
> {
|
|
13
|
+
/** Module copy — this screen reads the `noConnection` slice. */
|
|
14
|
+
strings: FaceCaptureStrings;
|
|
15
|
+
screenId?: string;
|
|
16
|
+
overrides?: PrizmaScreenOverrides;
|
|
17
|
+
onAction?: PrizmaScreenActionHandler;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Face Capture — no internet connection (purple section
|
|
22
|
+
* `7.faceCapture.genericErrors.noConnection`), built on the
|
|
23
|
+
* `PrizmaResultScreen` archetype (GUIDELINES.md §6-F).
|
|
24
|
+
*
|
|
25
|
+
* Figma's CONTENT frame holds only a Title and a single CTA (measured 390
|
|
26
|
+
* section: Title 24→574, CTAs 574→630). The header and the verified tag are back
|
|
27
|
+
* on by the owner's rule that non-capture screens show both (DEVIATIONS #F-30);
|
|
28
|
+
* the layout is otherwise the archetype's own.
|
|
29
|
+
*
|
|
30
|
+
* The glyph is Figma's `Icon / Wi-Fi` swapped into the Title's icon slot. Core's
|
|
31
|
+
* `PrizmaTitle` allowlist is status | spinner | none, so it rides in the
|
|
32
|
+
* archetype's `glyph` slot with the foundation's `__glyph` class — icon from the
|
|
33
|
+
* canonical bank, no primitive invented, and no module CSS: the class was
|
|
34
|
+
* promoted out of three byte-identical module copies (DEVIATIONS #10, #DC-29).
|
|
35
|
+
*/
|
|
36
|
+
export const FaceCaptureNoConnectionScreen = forwardRef<
|
|
37
|
+
HTMLDivElement,
|
|
38
|
+
FaceCaptureNoConnectionScreenProps
|
|
39
|
+
>(
|
|
40
|
+
(
|
|
41
|
+
{ strings, screenId = 'face-capture-no-connection', overrides, onAction, ...shell },
|
|
42
|
+
ref,
|
|
43
|
+
) => (
|
|
44
|
+
<PrizmaResultScreen
|
|
45
|
+
ref={ref}
|
|
46
|
+
glyph={
|
|
47
|
+
<span
|
|
48
|
+
className={[
|
|
49
|
+
'prizma-screen-layout__glyph',
|
|
50
|
+
'prizma-screen-layout__glyph--negative',
|
|
51
|
+
overrides?.align === 'left' ? 'prizma-screen-layout__glyph--left' : '',
|
|
52
|
+
]
|
|
53
|
+
.filter(Boolean)
|
|
54
|
+
.join(' ')}
|
|
55
|
+
>
|
|
56
|
+
<IconWifiOff size="l" />
|
|
57
|
+
</span>
|
|
58
|
+
}
|
|
59
|
+
title={strings.noConnection.title}
|
|
60
|
+
subtitle={strings.noConnection.description}
|
|
61
|
+
ctaLabel={strings.noConnection.ctaLabel}
|
|
62
|
+
verifiedLabel={strings.verifiedLabel}
|
|
63
|
+
navLabel={strings.navLabel}
|
|
64
|
+
screenId={screenId}
|
|
65
|
+
overrides={overrides}
|
|
66
|
+
onAction={onAction}
|
|
67
|
+
{...shell}
|
|
68
|
+
/>
|
|
69
|
+
),
|
|
70
|
+
);
|
|
71
|
+
FaceCaptureNoConnectionScreen.displayName = 'FaceCaptureNoConnectionScreen';
|
|
72
|
+
|
|
73
|
+
export default FaceCaptureNoConnectionScreen;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
import './FaceCaptureLayout.css';
|
|
7
|
+
|
|
8
|
+
export interface FaceCaptureResultErrorScreenProps
|
|
9
|
+
extends Omit<
|
|
10
|
+
PrizmaResultScreenProps,
|
|
11
|
+
'status' | 'title' | 'subtitle' | 'disclaimer' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
|
|
12
|
+
> {
|
|
13
|
+
/** Module copy — this screen reads the `error` slice (+ shared labels). The
|
|
14
|
+
* host passes the copy of the CURRENT error (faceNotAligned, tooDark, …);
|
|
15
|
+
* all 10 purple base sections share this one layout. */
|
|
16
|
+
strings: FaceCaptureStrings;
|
|
17
|
+
/**
|
|
18
|
+
* The `*Exhausted` half of the purple `faceCapture.resultError.*` pairs
|
|
19
|
+
* (9 of them — `eyesClosed` has no exhausted variant in Figma). Retries are
|
|
20
|
+
* used up: the status icon goes from warning to negative, the attempts line
|
|
21
|
+
* is dropped, and the CTA becomes the forward action instead of "Try again".
|
|
22
|
+
*/
|
|
23
|
+
exhausted?: boolean;
|
|
24
|
+
screenId?: string;
|
|
25
|
+
overrides?: PrizmaScreenOverrides;
|
|
26
|
+
onAction?: PrizmaScreenActionHandler;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Face Capture — error result (Archetype C-with-CTA, GUIDELINES.md §6-C + §6-A
|
|
31
|
+
* CTA band). Figma: the 19 purple `faceCapture.resultError.*` sections — copy,
|
|
32
|
+
* status-icon, and CTA variants of this ONE screen.
|
|
33
|
+
*
|
|
34
|
+
* Layout measured off the purple 390 sections (CONTENT frame, 654 tall):
|
|
35
|
+
* nav 8→52 · Title stretched 52→479 with its icon/heading/subtitle block
|
|
36
|
+
* vertically centered · CTA band 479→646. The centered block is exactly Core's
|
|
37
|
+
* `PrizmaTitle` (icon slot → Spacing/16 → H2 → Spacing/12 → H5), so nothing is
|
|
38
|
+
* re-implemented here; the screen only chooses the status and supplies copy.
|
|
39
|
+
*
|
|
40
|
+
* Now built on the `PrizmaResultScreen` archetype (consolidation 2026-08-18).
|
|
41
|
+
* It previously composed the shell by hand because no template offered a
|
|
42
|
+
* centered status block WITH a CTA band — the gap that made three modules
|
|
43
|
+
* rebuild the same skeleton.
|
|
44
|
+
*/
|
|
45
|
+
export const FaceCaptureResultErrorScreen = forwardRef<
|
|
46
|
+
HTMLDivElement,
|
|
47
|
+
FaceCaptureResultErrorScreenProps
|
|
48
|
+
>(
|
|
49
|
+
(
|
|
50
|
+
{
|
|
51
|
+
strings,
|
|
52
|
+
exhausted = false,
|
|
53
|
+
screenId = exhausted ? 'face-capture-error-exhausted' : 'face-capture-error',
|
|
54
|
+
overrides,
|
|
55
|
+
onAction,
|
|
56
|
+
...shell
|
|
57
|
+
},
|
|
58
|
+
ref,
|
|
59
|
+
) => {
|
|
60
|
+
// Figma: the base sections carry "N attempts remaining"; every `*Exhausted`
|
|
61
|
+
// section drops it (the subtitle says the limit is reached instead). Gated
|
|
62
|
+
// here too so a host that keeps the label in its locale pack still renders
|
|
63
|
+
// the designed exhausted screen.
|
|
64
|
+
const attemptsLabel = exhausted ? undefined : strings.error.attemptsLabel;
|
|
65
|
+
|
|
66
|
+
return (
|
|
67
|
+
<PrizmaResultScreen
|
|
68
|
+
ref={ref}
|
|
69
|
+
status={exhausted ? 'error' : 'warning'}
|
|
70
|
+
title={strings.error.title}
|
|
71
|
+
subtitle={strings.error.description}
|
|
72
|
+
disclaimer={attemptsLabel}
|
|
73
|
+
ctaLabel={strings.error.ctaLabel}
|
|
74
|
+
verifiedLabel={strings.verifiedLabel}
|
|
75
|
+
navLabel={strings.navLabel}
|
|
76
|
+
screenId={screenId}
|
|
77
|
+
overrides={overrides}
|
|
78
|
+
onAction={onAction}
|
|
79
|
+
{...shell}
|
|
80
|
+
/>
|
|
81
|
+
);
|
|
82
|
+
},
|
|
83
|
+
);
|
|
84
|
+
FaceCaptureResultErrorScreen.displayName = 'FaceCaptureResultErrorScreen';
|
|
85
|
+
|
|
86
|
+
export default FaceCaptureResultErrorScreen;
|