@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,49 @@
|
|
|
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
|
+
export interface FaceCaptureResultSuccessScreenProps
|
|
7
|
+
extends Omit<
|
|
8
|
+
PrizmaCaptureScreenProps,
|
|
9
|
+
'state' | 'camera' | 'title' | 'feedbackText' | 'statusLabels' | 'verifiedLabel' | 'navLabel'
|
|
10
|
+
> {
|
|
11
|
+
/** Module copy — this screen reads the `success` slice (+ shared labels). */
|
|
12
|
+
strings: FaceCaptureStrings;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Face Capture — success result (Archetype B, GUIDELINES.md §6-B).
|
|
17
|
+
* Figma: purple section faceCapture.resultSuccess.default.
|
|
18
|
+
*
|
|
19
|
+
* Same reasoning as FaceCaptureLoadingScreen: the check + "Success!" sit in the
|
|
20
|
+
* ring's own 342-tall slot 40px below the nav (Figma "Middle Content" y=84),
|
|
21
|
+
* not in a §6-C full-height centered column. Core renders exactly that as the
|
|
22
|
+
* `success` state of `PrizmaSelfieCapture` — the stage dissolves into the
|
|
23
|
+
* canonical `PrizmaTitle` with the positive status icon (owner choreography
|
|
24
|
+
* 2026-07-15). DEVIATIONS.md #11.
|
|
25
|
+
*
|
|
26
|
+
* The verdict icon, its color token, and the dissolve all belong to Core; this
|
|
27
|
+
* screen only supplies copy (§7 — success reuses the capture geometry, never a
|
|
28
|
+
* new layout). The Core component owns the ring spacing (DEVIATIONS.md #12).
|
|
29
|
+
*/
|
|
30
|
+
export const FaceCaptureResultSuccessScreen = forwardRef<
|
|
31
|
+
HTMLDivElement,
|
|
32
|
+
FaceCaptureResultSuccessScreenProps
|
|
33
|
+
>(({ strings, screenId = 'face-capture-success', className, ...rest }, ref) => (
|
|
34
|
+
<PrizmaCaptureScreen
|
|
35
|
+
// success: the feed is closed — not a capture screen (owner rule 2026-08-18).
|
|
36
|
+
cameraOpen={false}
|
|
37
|
+
ref={ref}
|
|
38
|
+
className={className}
|
|
39
|
+
state="success"
|
|
40
|
+
statusLabels={{ success: strings.success.title }}
|
|
41
|
+
verifiedLabel={strings.verifiedLabel}
|
|
42
|
+
navLabel={strings.navLabel}
|
|
43
|
+
screenId={screenId}
|
|
44
|
+
{...rest}
|
|
45
|
+
/>
|
|
46
|
+
));
|
|
47
|
+
FaceCaptureResultSuccessScreen.displayName = 'FaceCaptureResultSuccessScreen';
|
|
48
|
+
|
|
49
|
+
export default FaceCaptureResultSuccessScreen;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Face Capture module — copy contract.
|
|
2
|
+
//
|
|
3
|
+
// Every Face Capture screen receives the SAME `strings: FaceCaptureStrings`
|
|
4
|
+
// object (rule: all copy via props, no hardcoded English — GUIDELINES.md §9).
|
|
5
|
+
// The object is the module's locale pack: one instance drives the whole flow,
|
|
6
|
+
// which is what the future FlowPlayer steps through. Sample copy lives only
|
|
7
|
+
// in previews / host apps.
|
|
8
|
+
//
|
|
9
|
+
// Authoritative screen list: the PURPLE "screen specs" sections of the
|
|
10
|
+
// Face Capture Figma file (wssQwsBcqYrWqVsZTFVVVA, page 18:19332) —
|
|
11
|
+
// tutorial · capturing (15 states) · manualCapture · loading (uploading /
|
|
12
|
+
// processing) · resultSuccess · resultError (+ exhausted) · genericErrors
|
|
13
|
+
// (noConnection).
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The capturing sub-states — one per purple `faceCapture.capturing.*` spec
|
|
17
|
+
* section. They are copy/ring-state variants of ONE screen
|
|
18
|
+
* (FaceCaptureCapturingScreen), not separate screens.
|
|
19
|
+
*/
|
|
20
|
+
export type FaceCaptureCapturingState =
|
|
21
|
+
| 'initiating'
|
|
22
|
+
| 'getReady'
|
|
23
|
+
| 'alignFace'
|
|
24
|
+
| 'lookAtCamera'
|
|
25
|
+
| 'tooDark'
|
|
26
|
+
| 'tooBright'
|
|
27
|
+
| 'eyesClosed'
|
|
28
|
+
| 'maskDetected'
|
|
29
|
+
| 'glassesDetected'
|
|
30
|
+
| 'hatDetected'
|
|
31
|
+
| 'moveRight'
|
|
32
|
+
| 'moveLeft'
|
|
33
|
+
| 'moveCloser'
|
|
34
|
+
| 'moveAway'
|
|
35
|
+
| 'faceOcclusion';
|
|
36
|
+
|
|
37
|
+
export interface FaceCaptureStrings {
|
|
38
|
+
/** Accessible name for the logo nav region (i18n — no baked-in English). */
|
|
39
|
+
navLabel?: string;
|
|
40
|
+
/** "verified by" attribution copy for the footer tag. */
|
|
41
|
+
verifiedLabel: string;
|
|
42
|
+
|
|
43
|
+
/** faceCapture.tutorial.* — default / loading / ageAssurance are copy +
|
|
44
|
+
* CTA-state variants of this one screen. */
|
|
45
|
+
tutorial: {
|
|
46
|
+
title: string;
|
|
47
|
+
subtitle?: string;
|
|
48
|
+
/** "Stay still, selfie will be taken automatically" */
|
|
49
|
+
disclaimer?: string;
|
|
50
|
+
ctaLabel: string;
|
|
51
|
+
/** Visible/accessible copy while the CTA is loading (tutorial.loading). */
|
|
52
|
+
ctaLoadingLabel?: string;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/** faceCapture.capturing.* — the H2 instruction under the ring, per state.
|
|
56
|
+
* `initiating` has no instruction in the design; omit it. */
|
|
57
|
+
capturing: Partial<Record<FaceCaptureCapturingState, string>>;
|
|
58
|
+
|
|
59
|
+
/** faceCapture.manualCapture.default */
|
|
60
|
+
manualCapture: {
|
|
61
|
+
/** "Align your face within the silhouette and press the button to capture" */
|
|
62
|
+
instruction: string;
|
|
63
|
+
/** Accessible name of the shutter button. */
|
|
64
|
+
captureLabel: string;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
/** faceCapture.loading.uploading */
|
|
68
|
+
uploading: { title: string };
|
|
69
|
+
/** faceCapture.loading.processing */
|
|
70
|
+
processing: { title: string };
|
|
71
|
+
/** faceCapture.resultSuccess.default */
|
|
72
|
+
success: { title: string };
|
|
73
|
+
|
|
74
|
+
/** faceCapture.resultError.* — the host passes the copy of the CURRENT
|
|
75
|
+
* error (faceNotAligned, tooDark, …); exhausted variants change icon +
|
|
76
|
+
* copy + CTA via the same slice. */
|
|
77
|
+
error: {
|
|
78
|
+
title: string;
|
|
79
|
+
description?: string;
|
|
80
|
+
/** "2 attempts remaining" — omit on exhausted variants. */
|
|
81
|
+
attemptsLabel?: string;
|
|
82
|
+
/** "Try again" / "Continue" */
|
|
83
|
+
ctaLabel: string;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/** faceCapture.genericErrors.noConnection */
|
|
87
|
+
noConnection: {
|
|
88
|
+
title: string;
|
|
89
|
+
description?: string;
|
|
90
|
+
ctaLabel: string;
|
|
91
|
+
};
|
|
92
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import { PrizmaIllustrationSelfie } from '@incodetech/prizma-core-web/illustration-selfie';
|
|
3
|
+
import { PrizmaTutorialScreen, type PrizmaTutorialScreenProps } from './TutorialScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
|
|
8
|
+
export interface FaceCaptureTutorialScreenProps
|
|
9
|
+
extends Omit<
|
|
10
|
+
PrizmaTutorialScreenProps,
|
|
11
|
+
| 'title'
|
|
12
|
+
| 'subtitle'
|
|
13
|
+
| 'disclaimer'
|
|
14
|
+
| 'ctaLabel'
|
|
15
|
+
| 'ctaLoadingLabel'
|
|
16
|
+
| 'verifiedLabel'
|
|
17
|
+
| 'navLabel'
|
|
18
|
+
> {
|
|
19
|
+
/** Module copy — this screen reads the `tutorial` slice (+ shared labels). */
|
|
20
|
+
strings: FaceCaptureStrings;
|
|
21
|
+
/** faceCapture.tutorial.loading: CTA shows the designed loading treatment. */
|
|
22
|
+
ctaLoading?: boolean;
|
|
23
|
+
/** Replace the default selfie illustration (Core PrizmaIllustrationSelfie). */
|
|
24
|
+
illustration?: ReactNode;
|
|
25
|
+
screenId?: string;
|
|
26
|
+
overrides?: PrizmaScreenOverrides;
|
|
27
|
+
onAction?: PrizmaScreenActionHandler;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Face Capture — tutorial, built on the `PrizmaTutorialScreen` archetype
|
|
32
|
+
* (GUIDELINES.md §6-A). Figma: purple sections faceCapture.tutorial.default /
|
|
33
|
+
* .loading / .ageAssurance (copy + CTA-state variants of this one screen).
|
|
34
|
+
*
|
|
35
|
+
* It previously composed the foundation shell by hand because the archetype had
|
|
36
|
+
* no CTA-loading slot and `faceCapture.tutorial.loading` needs one. The slot now
|
|
37
|
+
* exists (`ctaLoading` / `ctaLoadingLabel`, forwarded to Core's own
|
|
38
|
+
* `PrizmaButton` loading treatment — #F-32), so the screen is a single archetype
|
|
39
|
+
* call and declares no layout.
|
|
40
|
+
*/
|
|
41
|
+
export const FaceCaptureTutorialScreen = forwardRef<
|
|
42
|
+
HTMLDivElement,
|
|
43
|
+
FaceCaptureTutorialScreenProps
|
|
44
|
+
>(
|
|
45
|
+
(
|
|
46
|
+
{
|
|
47
|
+
strings,
|
|
48
|
+
ctaLoading = false,
|
|
49
|
+
illustration,
|
|
50
|
+
screenId = 'face-capture-tutorial',
|
|
51
|
+
overrides,
|
|
52
|
+
onAction,
|
|
53
|
+
...shell
|
|
54
|
+
},
|
|
55
|
+
ref,
|
|
56
|
+
) => (
|
|
57
|
+
<PrizmaTutorialScreen
|
|
58
|
+
ref={ref}
|
|
59
|
+
title={strings.tutorial.title}
|
|
60
|
+
subtitle={strings.tutorial.subtitle}
|
|
61
|
+
disclaimer={strings.tutorial.disclaimer}
|
|
62
|
+
ctaLabel={strings.tutorial.ctaLabel}
|
|
63
|
+
ctaLoading={ctaLoading}
|
|
64
|
+
ctaLoadingLabel={strings.tutorial.ctaLoadingLabel}
|
|
65
|
+
illustration={illustration ?? <PrizmaIllustrationSelfie />}
|
|
66
|
+
verifiedLabel={strings.verifiedLabel}
|
|
67
|
+
navLabel={strings.navLabel}
|
|
68
|
+
screenId={screenId}
|
|
69
|
+
overrides={overrides}
|
|
70
|
+
onAction={onAction}
|
|
71
|
+
{...shell}
|
|
72
|
+
/>
|
|
73
|
+
),
|
|
74
|
+
);
|
|
75
|
+
FaceCaptureTutorialScreen.displayName = 'FaceCaptureTutorialScreen';
|
|
76
|
+
|
|
77
|
+
export default FaceCaptureTutorialScreen;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
PrizmaProcessingScreen,
|
|
4
|
+
type PrizmaProcessingScreenProps,
|
|
5
|
+
} from './ProcessingScreen';
|
|
6
|
+
import type { FaceMatchStrings } from './FaceMatchStrings';
|
|
7
|
+
|
|
8
|
+
export interface FaceMatchComparisonCompactScreenProps
|
|
9
|
+
extends Omit<
|
|
10
|
+
PrizmaProcessingScreenProps,
|
|
11
|
+
'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
|
|
12
|
+
> {
|
|
13
|
+
/** Module copy — this screen reads the `comparisonCompact` slice. */
|
|
14
|
+
strings: FaceMatchStrings;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Face Match — compact matching state (Archetype C, GUIDELINES.md §6-C).
|
|
19
|
+
* Figma: purple section `faceMatch.comparisonCompact.matching` — the photo-less
|
|
20
|
+
* variant of the matching state, used when the captured images are not shown.
|
|
21
|
+
*
|
|
22
|
+
* This one IS the centered Processing archetype, and it is the counter-example
|
|
23
|
+
* DEVIATIONS.md #11 predicted: Face Capture's loading screens use archetype B
|
|
24
|
+
* because their Figma pins the spinner inside the 342-tall ring box, whereas
|
|
25
|
+
* this section really centers — the spinner + title + subtitle block (342×129)
|
|
26
|
+
* sits at the exact midpoint of the flexible middle frame (middle content
|
|
27
|
+
* 44→456 tall 412, block at y=141.5 = (412 − 129) / 2). So the foundation
|
|
28
|
+
* archetype is reused verbatim and this screen only supplies copy; it is NOT a
|
|
29
|
+
* copy of FaceCaptureLoadingScreen, whose layout differs. DEVIATIONS.md #FM-24.
|
|
30
|
+
*
|
|
31
|
+
* The spinner, its 48px geometry and the title typography all belong to Core's
|
|
32
|
+
* `PrizmaTitle` spinner slot inside the archetype — nothing re-implemented (§7).
|
|
33
|
+
*/
|
|
34
|
+
export const FaceMatchComparisonCompactScreen = forwardRef<
|
|
35
|
+
HTMLDivElement,
|
|
36
|
+
FaceMatchComparisonCompactScreenProps
|
|
37
|
+
>(({ strings, screenId = 'face-match-comparison-compact', ...rest }, ref) => (
|
|
38
|
+
<PrizmaProcessingScreen
|
|
39
|
+
ref={ref}
|
|
40
|
+
status="loading"
|
|
41
|
+
title={strings.comparisonCompact.title}
|
|
42
|
+
subtitle={strings.comparisonCompact.description}
|
|
43
|
+
verifiedLabel={strings.verifiedLabel}
|
|
44
|
+
navLabel={strings.navLabel}
|
|
45
|
+
screenId={screenId}
|
|
46
|
+
{...rest}
|
|
47
|
+
/>
|
|
48
|
+
));
|
|
49
|
+
FaceMatchComparisonCompactScreen.displayName = 'FaceMatchComparisonCompactScreen';
|
|
50
|
+
|
|
51
|
+
export default FaceMatchComparisonCompactScreen;
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import { PrizmaTitle } from '@incodetech/prizma-core-web/title';
|
|
3
|
+
import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
|
|
4
|
+
import { PrizmaTooltip } from '@incodetech/prizma-core-web/tooltip';
|
|
5
|
+
import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
|
|
6
|
+
import { PrizmaScreenNav } from './ScreenNav';
|
|
7
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
8
|
+
import type {
|
|
9
|
+
FaceMatchComparisonVariant,
|
|
10
|
+
FaceMatchStrings,
|
|
11
|
+
} from './FaceMatchStrings';
|
|
12
|
+
import './ScreenLayout.css';
|
|
13
|
+
import './FaceMatchLayout.css';
|
|
14
|
+
|
|
15
|
+
/** Which captured image fills a circle. The host owns the pixels (same
|
|
16
|
+
* contract as `camera` on the capture screens) — Face Match never captures. */
|
|
17
|
+
export type FaceMatchPhotoRole = 'selfie' | 'id' | 'nfc' | 'secondId';
|
|
18
|
+
|
|
19
|
+
/** Host-supplied portraits, one per role the chosen variant asks for. Any role
|
|
20
|
+
* left out renders an empty neutral disc. */
|
|
21
|
+
export type FaceMatchComparisonPhotos = Partial<Record<FaceMatchPhotoRole, ReactNode>>;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Photo layout per purple `faceMatch.comparison.*` section. `nfc` and
|
|
25
|
+
* `firstAndSecondID` are the SAME two-row layout — they differ only in which
|
|
26
|
+
* label each circle carries, so they are copy variants, not separate screens.
|
|
27
|
+
*/
|
|
28
|
+
const ROWS: Record<FaceMatchComparisonVariant, readonly (readonly FaceMatchPhotoRole[])[]> = {
|
|
29
|
+
selfieId: [['selfie', 'id']],
|
|
30
|
+
nfc: [['nfc', 'id'], ['selfie']],
|
|
31
|
+
firstAndSecondID: [['id', 'secondId'], ['selfie']],
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/** Figma swaps the `id` circle's label between "ID" and "First ID"; every other
|
|
35
|
+
* role has one label. */
|
|
36
|
+
function labelFor(
|
|
37
|
+
role: FaceMatchPhotoRole,
|
|
38
|
+
variant: FaceMatchComparisonVariant,
|
|
39
|
+
comparison: FaceMatchStrings['comparison'],
|
|
40
|
+
): string | undefined {
|
|
41
|
+
switch (role) {
|
|
42
|
+
case 'selfie':
|
|
43
|
+
return comparison.selfieLabel;
|
|
44
|
+
case 'nfc':
|
|
45
|
+
return comparison.nfcLabel;
|
|
46
|
+
case 'secondId':
|
|
47
|
+
return comparison.secondIdLabel;
|
|
48
|
+
case 'id':
|
|
49
|
+
default:
|
|
50
|
+
return variant === 'firstAndSecondID' ? comparison.firstIdLabel : comparison.idLabel;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Where the comparison is in its own choreography — the module MOVING rather
|
|
56
|
+
* than one of the frames it passes through (FaceMatchLayout.css § "The
|
|
57
|
+
* comparison, moving", which carries the timeline and where its numbers come
|
|
58
|
+
* from).
|
|
59
|
+
*
|
|
60
|
+
* arriving The module has just opened. Title only; the discs are still
|
|
61
|
+
* outside the screen.
|
|
62
|
+
* comparing The discs travel in and are then named by their callouts.
|
|
63
|
+
* converged The callouts leave, and the discs run together into one and go
|
|
64
|
+
* with them — handing the screen to the verdict.
|
|
65
|
+
*
|
|
66
|
+
* Setting it puts the screen in its moving form, and `matching` is then ignored:
|
|
67
|
+
* the rosette that prop draws is a frame partway through `converged`, not a
|
|
68
|
+
* place the module rests.
|
|
69
|
+
*/
|
|
70
|
+
export type FaceMatchComparisonPhase = 'arriving' | 'comparing' | 'converged';
|
|
71
|
+
|
|
72
|
+
export interface FaceMatchComparisonScreenProps
|
|
73
|
+
extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'> {
|
|
74
|
+
/** Module copy — this screen reads the `comparison` slice (+ shared labels). */
|
|
75
|
+
strings: FaceMatchStrings;
|
|
76
|
+
/** Which purple photo set to render. Default `'selfieId'`. */
|
|
77
|
+
variant?: FaceMatchComparisonVariant;
|
|
78
|
+
/** The converged state (`comparison.matching` / `comparison.threeFacesMatching`):
|
|
79
|
+
* the label callouts are dropped and the circles overlap into a rosette.
|
|
80
|
+
* A STILL — ignored once `phase` is set. */
|
|
81
|
+
matching?: boolean;
|
|
82
|
+
/** Play the comparison instead of drawing one frame of it. Absent = the still
|
|
83
|
+
* the Figma sections are, which is what a screen grid wants. */
|
|
84
|
+
phase?: FaceMatchComparisonPhase;
|
|
85
|
+
/** The captured portraits. Roles the variant does not use are ignored. */
|
|
86
|
+
photos?: FaceMatchComparisonPhotos;
|
|
87
|
+
screenId?: string;
|
|
88
|
+
overrides?: PrizmaScreenOverrides;
|
|
89
|
+
onAction?: PrizmaScreenActionHandler;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Face Match — identity comparison (Archetype A layout minus the CTA,
|
|
94
|
+
* GUIDELINES.md §6-A). Figma: the five purple `faceMatch.comparison.*` sections
|
|
95
|
+
* — `initialState` · `matching` · `nfc` · `firstAndSecondID` ·
|
|
96
|
+
* `threeFacesMatching` — which are photo-count / label / convergence variants of
|
|
97
|
+
* this ONE screen.
|
|
98
|
+
*
|
|
99
|
+
* This is the module's only genuinely new composition, and the reason Face Match
|
|
100
|
+
* is not a copy of Face Capture: there is no ring, no camera and no CTA. The
|
|
101
|
+
* purple sections' CONTENT frame holds exactly Navigation → Title → the photo
|
|
102
|
+
* cluster → the verified Tag (measured 390 section: nav 0→44, Title 68→96 i.e.
|
|
103
|
+
* the archetype's 24px nav→content gap, cluster in the flexible middle, Tag
|
|
104
|
+
* 616→650).
|
|
105
|
+
*
|
|
106
|
+
* Composed on the foundation shell rather than wrapping PrizmaTutorialScreen
|
|
107
|
+
* because that archetype always renders a CTA and these sections have none —
|
|
108
|
+
* foundation gap reported to the owner, no foundation file edited.
|
|
109
|
+
*
|
|
110
|
+
* TWO FORMS, one component. Without `phase` it draws a FRAME — the purple
|
|
111
|
+
* sections exactly as Figma has them, which is what a screen grid and an export
|
|
112
|
+
* still need. With `phase` it PLAYS, because Face Match has no camera and no
|
|
113
|
+
* control and the movement is therefore the whole screen rather than polish on
|
|
114
|
+
* top of it: the discs arrive from off-screen, are named, and then run together
|
|
115
|
+
* into one and go. That choreography, its three phases and the shipped-SDK
|
|
116
|
+
* numbers behind it live in FaceMatchLayout.css § "The comparison, moving".
|
|
117
|
+
*
|
|
118
|
+
* The label callouts are Core's `PrizmaTooltip` with a bottom-centred arrow. The
|
|
119
|
+
* module Figma draws a bespoke light pill instead (a hand-drawn boolean Union,
|
|
120
|
+
* not a Tooltip instance); the design system wins and these render as the
|
|
121
|
+
* canonical dark tooltip. DEVIATIONS.md #FM-21.
|
|
122
|
+
*/
|
|
123
|
+
export const FaceMatchComparisonScreen = forwardRef<
|
|
124
|
+
HTMLDivElement,
|
|
125
|
+
FaceMatchComparisonScreenProps
|
|
126
|
+
>(
|
|
127
|
+
(
|
|
128
|
+
{
|
|
129
|
+
strings,
|
|
130
|
+
variant = 'selfieId',
|
|
131
|
+
matching = false,
|
|
132
|
+
phase,
|
|
133
|
+
photos,
|
|
134
|
+
screenId = 'face-match-comparison',
|
|
135
|
+
overrides,
|
|
136
|
+
onAction,
|
|
137
|
+
...shell
|
|
138
|
+
},
|
|
139
|
+
ref,
|
|
140
|
+
) => (
|
|
141
|
+
<PrizmaScreenShell ref={ref} {...shell}>
|
|
142
|
+
<PrizmaScreenNav logo={overrides?.logo} navLabel={strings.navLabel} />
|
|
143
|
+
<div className="prizma-screen-layout__content">
|
|
144
|
+
<PrizmaTitle
|
|
145
|
+
variant={overrides?.align === 'left' ? 'left' : 'centered'}
|
|
146
|
+
title={strings.comparison.title}
|
|
147
|
+
/>
|
|
148
|
+
<div className="prizma-screen-layout__flex">
|
|
149
|
+
<div
|
|
150
|
+
className={[
|
|
151
|
+
'face-match-cluster',
|
|
152
|
+
// A phase means the screen is MOVING, and the two are exclusive:
|
|
153
|
+
// the rosette is a frame of the movement, not a state beside it.
|
|
154
|
+
phase ? 'face-match-cluster--animated' : '',
|
|
155
|
+
phase ? `face-match-cluster--${phase}` : '',
|
|
156
|
+
!phase && matching ? 'face-match-cluster--matching' : '',
|
|
157
|
+
]
|
|
158
|
+
.filter(Boolean)
|
|
159
|
+
.join(' ')}
|
|
160
|
+
>
|
|
161
|
+
{ROWS[variant].map((row, rowIndex) => (
|
|
162
|
+
<div className="face-match-cluster__row" key={rowIndex}>
|
|
163
|
+
{row.map((role) => {
|
|
164
|
+
const label = labelFor(role, variant, strings.comparison);
|
|
165
|
+
return (
|
|
166
|
+
<div className="face-match-cluster__face" key={role}>
|
|
167
|
+
{/* The converged STILL drops the callouts entirely — the
|
|
168
|
+
rosette offsets are measured from circle to circle
|
|
169
|
+
(DEVIATIONS.md #FM-20). The moving version keeps them
|
|
170
|
+
in every phase and fades them, because a callout that
|
|
171
|
+
leaves the DOM cannot leave the screen, and its box is
|
|
172
|
+
what holds the cluster's height still while it goes. */}
|
|
173
|
+
{(phase || !matching) && label ? (
|
|
174
|
+
<PrizmaTooltip
|
|
175
|
+
className="face-match-cluster__label"
|
|
176
|
+
arrow="bottom"
|
|
177
|
+
arrowAlignment="center"
|
|
178
|
+
>
|
|
179
|
+
{label}
|
|
180
|
+
</PrizmaTooltip>
|
|
181
|
+
) : null}
|
|
182
|
+
<div className="face-match-cluster__photo">
|
|
183
|
+
{photos?.[role]}
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
);
|
|
187
|
+
})}
|
|
188
|
+
</div>
|
|
189
|
+
))}
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
<div className="prizma-screen-layout__footer">
|
|
193
|
+
<PrizmaTag label={strings.verifiedLabel} />
|
|
194
|
+
</div>
|
|
195
|
+
</div>
|
|
196
|
+
</PrizmaScreenShell>
|
|
197
|
+
),
|
|
198
|
+
);
|
|
199
|
+
FaceMatchComparisonScreen.displayName = 'FaceMatchComparisonScreen';
|
|
200
|
+
|
|
201
|
+
export default FaceMatchComparisonScreen;
|