@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,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaCaptureScreenProps } from './CaptureScreen';
|
|
3
|
+
import type { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
4
|
+
import './FaceCaptureLayout.css';
|
|
5
|
+
/** The two purple `faceCapture.loading.*` spec sections. Identical layout and
|
|
6
|
+
* identical spinner — only the status copy differs, so they are copy variants
|
|
7
|
+
* of ONE screen (same pattern as the 15 capturing states). */
|
|
8
|
+
export type FaceCaptureLoadingStage = 'uploading' | 'processing';
|
|
9
|
+
export interface FaceCaptureLoadingScreenProps extends Omit<PrizmaCaptureScreenProps, 'state' | 'camera' | 'title' | 'feedbackText' | 'statusLabels' | 'verifiedLabel' | 'navLabel'> {
|
|
10
|
+
/** Module copy — this screen reads the `uploading` / `processing` slices. */
|
|
11
|
+
strings: FaceCaptureStrings;
|
|
12
|
+
/** Which purple `faceCapture.loading.*` spec section to render. */
|
|
13
|
+
stage?: FaceCaptureLoadingStage;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Face Capture — upload / processing (Archetype B, GUIDELINES.md §6-B).
|
|
17
|
+
* Figma: purple sections faceCapture.loading.uploading / .processing.
|
|
18
|
+
*
|
|
19
|
+
* NOT the Processing archetype (§6-C). Both purple sections put the spinner +
|
|
20
|
+
* status line inside the SAME 342-tall "Middle Content" box the capture ring
|
|
21
|
+
* occupies — 40px below the nav, measured at y=84 of the 390 CONTENT frame —
|
|
22
|
+
* whereas §6-C centers in all remaining space (51px lower). Core models this
|
|
23
|
+
* as the `uploading` state of `PrizmaSelfieCapture`, where the stage dissolves
|
|
24
|
+
* into the canonical `PrizmaLoadingSpinner` in the ring's own slot (owner
|
|
25
|
+
* choreography 2026-07-15). Design system wins — DEVIATIONS.md #11.
|
|
26
|
+
*
|
|
27
|
+
* So the ring stage stays, un-re-implemented, and only its state changes.
|
|
28
|
+
* The Core component owns the ring spacing; the archetype adds none
|
|
29
|
+
* (DEVIATIONS.md #12).
|
|
30
|
+
*/
|
|
31
|
+
export declare const FaceCaptureLoadingScreen: React.ForwardRefExoticComponent<FaceCaptureLoadingScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
32
|
+
export default FaceCaptureLoadingScreen;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaCaptureScreen } from './CaptureScreen';
|
|
5
|
+
import './FaceCaptureLayout.css';
|
|
6
|
+
/**
|
|
7
|
+
* Face Capture — upload / processing (Archetype B, GUIDELINES.md §6-B).
|
|
8
|
+
* Figma: purple sections faceCapture.loading.uploading / .processing.
|
|
9
|
+
*
|
|
10
|
+
* NOT the Processing archetype (§6-C). Both purple sections put the spinner +
|
|
11
|
+
* status line inside the SAME 342-tall "Middle Content" box the capture ring
|
|
12
|
+
* occupies — 40px below the nav, measured at y=84 of the 390 CONTENT frame —
|
|
13
|
+
* whereas §6-C centers in all remaining space (51px lower). Core models this
|
|
14
|
+
* as the `uploading` state of `PrizmaSelfieCapture`, where the stage dissolves
|
|
15
|
+
* into the canonical `PrizmaLoadingSpinner` in the ring's own slot (owner
|
|
16
|
+
* choreography 2026-07-15). Design system wins — DEVIATIONS.md #11.
|
|
17
|
+
*
|
|
18
|
+
* So the ring stage stays, un-re-implemented, and only its state changes.
|
|
19
|
+
* The Core component owns the ring spacing; the archetype adds none
|
|
20
|
+
* (DEVIATIONS.md #12).
|
|
21
|
+
*/
|
|
22
|
+
export const FaceCaptureLoadingScreen = forwardRef(({ strings, stage = 'uploading', screenId = `face-capture-${stage}`, className, ...rest }, ref) => (_jsx(PrizmaCaptureScreen
|
|
23
|
+
// uploading / processing: the feed is closed — not a capture screen (owner rule 2026-08-18).
|
|
24
|
+
, {
|
|
25
|
+
// uploading / processing: the feed is closed — not a capture screen (owner rule 2026-08-18).
|
|
26
|
+
cameraOpen: false, ref: ref, className: className, state: "uploading", statusLabels: {
|
|
27
|
+
uploading: stage === 'processing' ? strings.processing.title : strings.uploading.title,
|
|
28
|
+
}, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, ...rest })));
|
|
29
|
+
FaceCaptureLoadingScreen.displayName = 'FaceCaptureLoadingScreen';
|
|
30
|
+
export default FaceCaptureLoadingScreen;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import { type PrizmaScreenShellProps } from './ScreenShell';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenChromeProps, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
import './FaceCaptureLayout.css';
|
|
7
|
+
export interface FaceCaptureManualCaptureScreenProps extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'>, PrizmaScreenChromeProps {
|
|
8
|
+
/** Module copy — this screen reads the `manualCapture` slice (+ shared labels). */
|
|
9
|
+
strings: FaceCaptureStrings;
|
|
10
|
+
/** Live camera feed (<video>) or sample still (<img>) for the ring window. */
|
|
11
|
+
camera?: ReactNode;
|
|
12
|
+
screenId?: string;
|
|
13
|
+
overrides?: PrizmaScreenOverrides;
|
|
14
|
+
onAction?: PrizmaScreenActionHandler;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Face Capture — manual capture (Archetype B layout, GUIDELINES.md §6-B).
|
|
18
|
+
* Figma: purple section faceCapture.manualCapture.default.
|
|
19
|
+
*
|
|
20
|
+
* Goes through Core's PrizmaSelfieCapture in manual mode (§7): the component
|
|
21
|
+
* owns ring, silhouette guide, instruction line, and shutter. Composed on the
|
|
22
|
+
* foundation shell directly because the CaptureScreen archetype does not
|
|
23
|
+
* forward `isManual` / `onCapture` — foundation gap reported to the owner, no
|
|
24
|
+
* foundation file edited. Layout classes are the archetype's own.
|
|
25
|
+
*
|
|
26
|
+
* Verified pixel-exact against Figma 3.1.0: the `Capture / Selfie` instance sits
|
|
27
|
+
* at nav-bottom + 0 with the ring at +40, the manual instruction at +32 below
|
|
28
|
+
* the ring and the 64px shutter at +32 below that — all of it the component's
|
|
29
|
+
* own padding/gap; the archetype adds none of its own (DEVIATIONS.md #12).
|
|
30
|
+
*/
|
|
31
|
+
export declare const FaceCaptureManualCaptureScreen: React.ForwardRefExoticComponent<FaceCaptureManualCaptureScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
32
|
+
export default FaceCaptureManualCaptureScreen;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaSelfieCapture } from '@incodetech/prizma-core-web/selfie-capture';
|
|
5
|
+
import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
|
|
6
|
+
import { PrizmaScreenShell } from './ScreenShell';
|
|
7
|
+
import { PrizmaScreenNav } from './ScreenNav';
|
|
8
|
+
import './ScreenLayout.css';
|
|
9
|
+
import './FaceCaptureLayout.css';
|
|
10
|
+
/**
|
|
11
|
+
* Face Capture — manual capture (Archetype B layout, GUIDELINES.md §6-B).
|
|
12
|
+
* Figma: purple section faceCapture.manualCapture.default.
|
|
13
|
+
*
|
|
14
|
+
* Goes through Core's PrizmaSelfieCapture in manual mode (§7): the component
|
|
15
|
+
* owns ring, silhouette guide, instruction line, and shutter. Composed on the
|
|
16
|
+
* foundation shell directly because the CaptureScreen archetype does not
|
|
17
|
+
* forward `isManual` / `onCapture` — foundation gap reported to the owner, no
|
|
18
|
+
* foundation file edited. Layout classes are the archetype's own.
|
|
19
|
+
*
|
|
20
|
+
* Verified pixel-exact against Figma 3.1.0: the `Capture / Selfie` instance sits
|
|
21
|
+
* at nav-bottom + 0 with the ring at +40, the manual instruction at +32 below
|
|
22
|
+
* the ring and the 64px shutter at +32 below that — all of it the component's
|
|
23
|
+
* own padding/gap; the archetype adds none of its own (DEVIATIONS.md #12).
|
|
24
|
+
*/
|
|
25
|
+
export const FaceCaptureManualCaptureScreen = forwardRef(({ strings, camera, screenId = 'face-capture-manual-capture', showHeader, showFooter = true, overrides, onAction, className, ...shell }, ref) => (_jsxs(PrizmaScreenShell, { ref: ref, theme: "light", className: className, ...shell, children: [_jsx(PrizmaScreenNav, { reserved: !(showHeader ?? Boolean(overrides?.logo)), logo: overrides?.logo, navLabel: strings.navLabel }), _jsxs("div", { className: "prizma-screen-layout__content prizma-screen-layout__content--capture", children: [_jsx(PrizmaSelfieCapture, { state: "empty", camera: camera, isManual: true, manualFeedbackText: strings.manualCapture.instruction, captureLabel: strings.manualCapture.captureLabel, onCapture: () => onAction?.({ type: 'cta', screenId }) }), showFooter ? (_jsx("div", { className: "prizma-screen-layout__footer prizma-screen-layout__footer--pinned", children: _jsx(PrizmaTag, { label: strings.verifiedLabel }) })) : null] })] })));
|
|
26
|
+
FaceCaptureManualCaptureScreen.displayName = 'FaceCaptureManualCaptureScreen';
|
|
27
|
+
export default FaceCaptureManualCaptureScreen;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaResultScreenProps } from './ResultScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface FaceCaptureNoConnectionScreenProps extends Omit<PrizmaResultScreenProps, 'status' | 'title' | 'subtitle' | 'glyph' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'> {
|
|
7
|
+
/** Module copy — this screen reads the `noConnection` slice. */
|
|
8
|
+
strings: FaceCaptureStrings;
|
|
9
|
+
screenId?: string;
|
|
10
|
+
overrides?: PrizmaScreenOverrides;
|
|
11
|
+
onAction?: PrizmaScreenActionHandler;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Face Capture — no internet connection (purple section
|
|
15
|
+
* `7.faceCapture.genericErrors.noConnection`), built on the
|
|
16
|
+
* `PrizmaResultScreen` archetype (GUIDELINES.md §6-F).
|
|
17
|
+
*
|
|
18
|
+
* Figma's CONTENT frame holds only a Title and a single CTA (measured 390
|
|
19
|
+
* section: Title 24→574, CTAs 574→630). The header and the verified tag are back
|
|
20
|
+
* on by the owner's rule that non-capture screens show both (DEVIATIONS #F-30);
|
|
21
|
+
* the layout is otherwise the archetype's own.
|
|
22
|
+
*
|
|
23
|
+
* The glyph is Figma's `Icon / Wi-Fi` swapped into the Title's icon slot. Core's
|
|
24
|
+
* `PrizmaTitle` allowlist is status | spinner | none, so it rides in the
|
|
25
|
+
* archetype's `glyph` slot with the foundation's `__glyph` class — icon from the
|
|
26
|
+
* canonical bank, no primitive invented, and no module CSS: the class was
|
|
27
|
+
* promoted out of three byte-identical module copies (DEVIATIONS #10, #DC-29).
|
|
28
|
+
*/
|
|
29
|
+
export declare const FaceCaptureNoConnectionScreen: React.ForwardRefExoticComponent<FaceCaptureNoConnectionScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
30
|
+
export default FaceCaptureNoConnectionScreen;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { IconWifiOff } from '@incodetech/prizma-core-icons';
|
|
5
|
+
import { PrizmaResultScreen } from './ResultScreen';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
/**
|
|
8
|
+
* Face Capture — no internet connection (purple section
|
|
9
|
+
* `7.faceCapture.genericErrors.noConnection`), built on the
|
|
10
|
+
* `PrizmaResultScreen` archetype (GUIDELINES.md §6-F).
|
|
11
|
+
*
|
|
12
|
+
* Figma's CONTENT frame holds only a Title and a single CTA (measured 390
|
|
13
|
+
* section: Title 24→574, CTAs 574→630). The header and the verified tag are back
|
|
14
|
+
* on by the owner's rule that non-capture screens show both (DEVIATIONS #F-30);
|
|
15
|
+
* the layout is otherwise the archetype's own.
|
|
16
|
+
*
|
|
17
|
+
* The glyph is Figma's `Icon / Wi-Fi` swapped into the Title's icon slot. Core's
|
|
18
|
+
* `PrizmaTitle` allowlist is status | spinner | none, so it rides in the
|
|
19
|
+
* archetype's `glyph` slot with the foundation's `__glyph` class — icon from the
|
|
20
|
+
* canonical bank, no primitive invented, and no module CSS: the class was
|
|
21
|
+
* promoted out of three byte-identical module copies (DEVIATIONS #10, #DC-29).
|
|
22
|
+
*/
|
|
23
|
+
export const FaceCaptureNoConnectionScreen = forwardRef(({ strings, screenId = 'face-capture-no-connection', overrides, onAction, ...shell }, ref) => (_jsx(PrizmaResultScreen, { ref: ref, glyph: _jsx("span", { className: [
|
|
24
|
+
'prizma-screen-layout__glyph',
|
|
25
|
+
'prizma-screen-layout__glyph--negative',
|
|
26
|
+
overrides?.align === 'left' ? 'prizma-screen-layout__glyph--left' : '',
|
|
27
|
+
]
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.join(' '), children: _jsx(IconWifiOff, { size: "l" }) }), title: strings.noConnection.title, subtitle: strings.noConnection.description, ctaLabel: strings.noConnection.ctaLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell })));
|
|
30
|
+
FaceCaptureNoConnectionScreen.displayName = 'FaceCaptureNoConnectionScreen';
|
|
31
|
+
export default FaceCaptureNoConnectionScreen;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { 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
|
+
export interface FaceCaptureResultErrorScreenProps extends Omit<PrizmaResultScreenProps, 'status' | 'title' | 'subtitle' | 'disclaimer' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'> {
|
|
8
|
+
/** Module copy — this screen reads the `error` slice (+ shared labels). The
|
|
9
|
+
* host passes the copy of the CURRENT error (faceNotAligned, tooDark, …);
|
|
10
|
+
* all 10 purple base sections share this one layout. */
|
|
11
|
+
strings: FaceCaptureStrings;
|
|
12
|
+
/**
|
|
13
|
+
* The `*Exhausted` half of the purple `faceCapture.resultError.*` pairs
|
|
14
|
+
* (9 of them — `eyesClosed` has no exhausted variant in Figma). Retries are
|
|
15
|
+
* used up: the status icon goes from warning to negative, the attempts line
|
|
16
|
+
* is dropped, and the CTA becomes the forward action instead of "Try again".
|
|
17
|
+
*/
|
|
18
|
+
exhausted?: boolean;
|
|
19
|
+
screenId?: string;
|
|
20
|
+
overrides?: PrizmaScreenOverrides;
|
|
21
|
+
onAction?: PrizmaScreenActionHandler;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Face Capture — error result (Archetype C-with-CTA, GUIDELINES.md §6-C + §6-A
|
|
25
|
+
* CTA band). Figma: the 19 purple `faceCapture.resultError.*` sections — copy,
|
|
26
|
+
* status-icon, and CTA variants of this ONE screen.
|
|
27
|
+
*
|
|
28
|
+
* Layout measured off the purple 390 sections (CONTENT frame, 654 tall):
|
|
29
|
+
* nav 8→52 · Title stretched 52→479 with its icon/heading/subtitle block
|
|
30
|
+
* vertically centered · CTA band 479→646. The centered block is exactly Core's
|
|
31
|
+
* `PrizmaTitle` (icon slot → Spacing/16 → H2 → Spacing/12 → H5), so nothing is
|
|
32
|
+
* re-implemented here; the screen only chooses the status and supplies copy.
|
|
33
|
+
*
|
|
34
|
+
* Now built on the `PrizmaResultScreen` archetype (consolidation 2026-08-18).
|
|
35
|
+
* It previously composed the shell by hand because no template offered a
|
|
36
|
+
* centered status block WITH a CTA band — the gap that made three modules
|
|
37
|
+
* rebuild the same skeleton.
|
|
38
|
+
*/
|
|
39
|
+
export declare const FaceCaptureResultErrorScreen: React.ForwardRefExoticComponent<FaceCaptureResultErrorScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
40
|
+
export default FaceCaptureResultErrorScreen;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaResultScreen } from './ResultScreen';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
import './FaceCaptureLayout.css';
|
|
7
|
+
/**
|
|
8
|
+
* Face Capture — error result (Archetype C-with-CTA, GUIDELINES.md §6-C + §6-A
|
|
9
|
+
* CTA band). Figma: the 19 purple `faceCapture.resultError.*` sections — copy,
|
|
10
|
+
* status-icon, and CTA variants of this ONE screen.
|
|
11
|
+
*
|
|
12
|
+
* Layout measured off the purple 390 sections (CONTENT frame, 654 tall):
|
|
13
|
+
* nav 8→52 · Title stretched 52→479 with its icon/heading/subtitle block
|
|
14
|
+
* vertically centered · CTA band 479→646. The centered block is exactly Core's
|
|
15
|
+
* `PrizmaTitle` (icon slot → Spacing/16 → H2 → Spacing/12 → H5), so nothing is
|
|
16
|
+
* re-implemented here; the screen only chooses the status and supplies copy.
|
|
17
|
+
*
|
|
18
|
+
* Now built on the `PrizmaResultScreen` archetype (consolidation 2026-08-18).
|
|
19
|
+
* It previously composed the shell by hand because no template offered a
|
|
20
|
+
* centered status block WITH a CTA band — the gap that made three modules
|
|
21
|
+
* rebuild the same skeleton.
|
|
22
|
+
*/
|
|
23
|
+
export const FaceCaptureResultErrorScreen = forwardRef(({ strings, exhausted = false, screenId = exhausted ? 'face-capture-error-exhausted' : 'face-capture-error', overrides, onAction, ...shell }, ref) => {
|
|
24
|
+
// Figma: the base sections carry "N attempts remaining"; every `*Exhausted`
|
|
25
|
+
// section drops it (the subtitle says the limit is reached instead). Gated
|
|
26
|
+
// here too so a host that keeps the label in its locale pack still renders
|
|
27
|
+
// the designed exhausted screen.
|
|
28
|
+
const attemptsLabel = exhausted ? undefined : strings.error.attemptsLabel;
|
|
29
|
+
return (_jsx(PrizmaResultScreen, { ref: ref, status: exhausted ? 'error' : 'warning', title: strings.error.title, subtitle: strings.error.description, disclaimer: attemptsLabel, ctaLabel: strings.error.ctaLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell }));
|
|
30
|
+
});
|
|
31
|
+
FaceCaptureResultErrorScreen.displayName = 'FaceCaptureResultErrorScreen';
|
|
32
|
+
export default FaceCaptureResultErrorScreen;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaCaptureScreenProps } from './CaptureScreen';
|
|
3
|
+
import type { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
4
|
+
import './FaceCaptureLayout.css';
|
|
5
|
+
export interface FaceCaptureResultSuccessScreenProps extends Omit<PrizmaCaptureScreenProps, 'state' | 'camera' | 'title' | 'feedbackText' | 'statusLabels' | 'verifiedLabel' | 'navLabel'> {
|
|
6
|
+
/** Module copy — this screen reads the `success` slice (+ shared labels). */
|
|
7
|
+
strings: FaceCaptureStrings;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Face Capture — success result (Archetype B, GUIDELINES.md §6-B).
|
|
11
|
+
* Figma: purple section faceCapture.resultSuccess.default.
|
|
12
|
+
*
|
|
13
|
+
* Same reasoning as FaceCaptureLoadingScreen: the check + "Success!" sit in the
|
|
14
|
+
* ring's own 342-tall slot 40px below the nav (Figma "Middle Content" y=84),
|
|
15
|
+
* not in a §6-C full-height centered column. Core renders exactly that as the
|
|
16
|
+
* `success` state of `PrizmaSelfieCapture` — the stage dissolves into the
|
|
17
|
+
* canonical `PrizmaTitle` with the positive status icon (owner choreography
|
|
18
|
+
* 2026-07-15). DEVIATIONS.md #11.
|
|
19
|
+
*
|
|
20
|
+
* The verdict icon, its color token, and the dissolve all belong to Core; this
|
|
21
|
+
* screen only supplies copy (§7 — success reuses the capture geometry, never a
|
|
22
|
+
* new layout). The Core component owns the ring spacing (DEVIATIONS.md #12).
|
|
23
|
+
*/
|
|
24
|
+
export declare const FaceCaptureResultSuccessScreen: React.ForwardRefExoticComponent<FaceCaptureResultSuccessScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
+
export default FaceCaptureResultSuccessScreen;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaCaptureScreen } from './CaptureScreen';
|
|
5
|
+
import './FaceCaptureLayout.css';
|
|
6
|
+
/**
|
|
7
|
+
* Face Capture — success result (Archetype B, GUIDELINES.md §6-B).
|
|
8
|
+
* Figma: purple section faceCapture.resultSuccess.default.
|
|
9
|
+
*
|
|
10
|
+
* Same reasoning as FaceCaptureLoadingScreen: the check + "Success!" sit in the
|
|
11
|
+
* ring's own 342-tall slot 40px below the nav (Figma "Middle Content" y=84),
|
|
12
|
+
* not in a §6-C full-height centered column. Core renders exactly that as the
|
|
13
|
+
* `success` state of `PrizmaSelfieCapture` — the stage dissolves into the
|
|
14
|
+
* canonical `PrizmaTitle` with the positive status icon (owner choreography
|
|
15
|
+
* 2026-07-15). DEVIATIONS.md #11.
|
|
16
|
+
*
|
|
17
|
+
* The verdict icon, its color token, and the dissolve all belong to Core; this
|
|
18
|
+
* screen only supplies copy (§7 — success reuses the capture geometry, never a
|
|
19
|
+
* new layout). The Core component owns the ring spacing (DEVIATIONS.md #12).
|
|
20
|
+
*/
|
|
21
|
+
export const FaceCaptureResultSuccessScreen = forwardRef(({ strings, screenId = 'face-capture-success', className, ...rest }, ref) => (_jsx(PrizmaCaptureScreen
|
|
22
|
+
// success: the feed is closed — not a capture screen (owner rule 2026-08-18).
|
|
23
|
+
, {
|
|
24
|
+
// success: the feed is closed — not a capture screen (owner rule 2026-08-18).
|
|
25
|
+
cameraOpen: false, ref: ref, className: className, state: "success", statusLabels: { success: strings.success.title }, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, ...rest })));
|
|
26
|
+
FaceCaptureResultSuccessScreen.displayName = 'FaceCaptureResultSuccessScreen';
|
|
27
|
+
export default FaceCaptureResultSuccessScreen;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The capturing sub-states — one per purple `faceCapture.capturing.*` spec
|
|
3
|
+
* section. They are copy/ring-state variants of ONE screen
|
|
4
|
+
* (FaceCaptureCapturingScreen), not separate screens.
|
|
5
|
+
*/
|
|
6
|
+
export type FaceCaptureCapturingState = 'initiating' | 'getReady' | 'alignFace' | 'lookAtCamera' | 'tooDark' | 'tooBright' | 'eyesClosed' | 'maskDetected' | 'glassesDetected' | 'hatDetected' | 'moveRight' | 'moveLeft' | 'moveCloser' | 'moveAway' | 'faceOcclusion';
|
|
7
|
+
export interface FaceCaptureStrings {
|
|
8
|
+
/** Accessible name for the logo nav region (i18n — no baked-in English). */
|
|
9
|
+
navLabel?: string;
|
|
10
|
+
/** "verified by" attribution copy for the footer tag. */
|
|
11
|
+
verifiedLabel: string;
|
|
12
|
+
/** faceCapture.tutorial.* — default / loading / ageAssurance are copy +
|
|
13
|
+
* CTA-state variants of this one screen. */
|
|
14
|
+
tutorial: {
|
|
15
|
+
title: string;
|
|
16
|
+
subtitle?: string;
|
|
17
|
+
/** "Stay still, selfie will be taken automatically" */
|
|
18
|
+
disclaimer?: string;
|
|
19
|
+
ctaLabel: string;
|
|
20
|
+
/** Visible/accessible copy while the CTA is loading (tutorial.loading). */
|
|
21
|
+
ctaLoadingLabel?: string;
|
|
22
|
+
};
|
|
23
|
+
/** faceCapture.capturing.* — the H2 instruction under the ring, per state.
|
|
24
|
+
* `initiating` has no instruction in the design; omit it. */
|
|
25
|
+
capturing: Partial<Record<FaceCaptureCapturingState, string>>;
|
|
26
|
+
/** faceCapture.manualCapture.default */
|
|
27
|
+
manualCapture: {
|
|
28
|
+
/** "Align your face within the silhouette and press the button to capture" */
|
|
29
|
+
instruction: string;
|
|
30
|
+
/** Accessible name of the shutter button. */
|
|
31
|
+
captureLabel: string;
|
|
32
|
+
};
|
|
33
|
+
/** faceCapture.loading.uploading */
|
|
34
|
+
uploading: {
|
|
35
|
+
title: string;
|
|
36
|
+
};
|
|
37
|
+
/** faceCapture.loading.processing */
|
|
38
|
+
processing: {
|
|
39
|
+
title: string;
|
|
40
|
+
};
|
|
41
|
+
/** faceCapture.resultSuccess.default */
|
|
42
|
+
success: {
|
|
43
|
+
title: string;
|
|
44
|
+
};
|
|
45
|
+
/** faceCapture.resultError.* — the host passes the copy of the CURRENT
|
|
46
|
+
* error (faceNotAligned, tooDark, …); exhausted variants change icon +
|
|
47
|
+
* copy + CTA via the same slice. */
|
|
48
|
+
error: {
|
|
49
|
+
title: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
/** "2 attempts remaining" — omit on exhausted variants. */
|
|
52
|
+
attemptsLabel?: string;
|
|
53
|
+
/** "Try again" / "Continue" */
|
|
54
|
+
ctaLabel: string;
|
|
55
|
+
};
|
|
56
|
+
/** faceCapture.genericErrors.noConnection */
|
|
57
|
+
noConnection: {
|
|
58
|
+
title: string;
|
|
59
|
+
description?: string;
|
|
60
|
+
ctaLabel: string;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import { type PrizmaTutorialScreenProps } from './TutorialScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { FaceCaptureStrings } from './FaceCaptureStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface FaceCaptureTutorialScreenProps extends Omit<PrizmaTutorialScreenProps, 'title' | 'subtitle' | 'disclaimer' | 'ctaLabel' | 'ctaLoadingLabel' | 'verifiedLabel' | 'navLabel'> {
|
|
7
|
+
/** Module copy — this screen reads the `tutorial` slice (+ shared labels). */
|
|
8
|
+
strings: FaceCaptureStrings;
|
|
9
|
+
/** faceCapture.tutorial.loading: CTA shows the designed loading treatment. */
|
|
10
|
+
ctaLoading?: boolean;
|
|
11
|
+
/** Replace the default selfie illustration (Core PrizmaIllustrationSelfie). */
|
|
12
|
+
illustration?: ReactNode;
|
|
13
|
+
screenId?: string;
|
|
14
|
+
overrides?: PrizmaScreenOverrides;
|
|
15
|
+
onAction?: PrizmaScreenActionHandler;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Face Capture — tutorial, built on the `PrizmaTutorialScreen` archetype
|
|
19
|
+
* (GUIDELINES.md §6-A). Figma: purple sections faceCapture.tutorial.default /
|
|
20
|
+
* .loading / .ageAssurance (copy + CTA-state variants of this one screen).
|
|
21
|
+
*
|
|
22
|
+
* It previously composed the foundation shell by hand because the archetype had
|
|
23
|
+
* no CTA-loading slot and `faceCapture.tutorial.loading` needs one. The slot now
|
|
24
|
+
* exists (`ctaLoading` / `ctaLoadingLabel`, forwarded to Core's own
|
|
25
|
+
* `PrizmaButton` loading treatment — #F-32), so the screen is a single archetype
|
|
26
|
+
* call and declares no layout.
|
|
27
|
+
*/
|
|
28
|
+
export declare const FaceCaptureTutorialScreen: React.ForwardRefExoticComponent<FaceCaptureTutorialScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
29
|
+
export default FaceCaptureTutorialScreen;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaIllustrationSelfie } from '@incodetech/prizma-core-web/illustration-selfie';
|
|
5
|
+
import { PrizmaTutorialScreen } from './TutorialScreen';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
/**
|
|
8
|
+
* Face Capture — tutorial, built on the `PrizmaTutorialScreen` archetype
|
|
9
|
+
* (GUIDELINES.md §6-A). Figma: purple sections faceCapture.tutorial.default /
|
|
10
|
+
* .loading / .ageAssurance (copy + CTA-state variants of this one screen).
|
|
11
|
+
*
|
|
12
|
+
* It previously composed the foundation shell by hand because the archetype had
|
|
13
|
+
* no CTA-loading slot and `faceCapture.tutorial.loading` needs one. The slot now
|
|
14
|
+
* exists (`ctaLoading` / `ctaLoadingLabel`, forwarded to Core's own
|
|
15
|
+
* `PrizmaButton` loading treatment — #F-32), so the screen is a single archetype
|
|
16
|
+
* call and declares no layout.
|
|
17
|
+
*/
|
|
18
|
+
export const FaceCaptureTutorialScreen = forwardRef(({ strings, ctaLoading = false, illustration, screenId = 'face-capture-tutorial', overrides, onAction, ...shell }, ref) => (_jsx(PrizmaTutorialScreen, { ref: ref, title: strings.tutorial.title, subtitle: strings.tutorial.subtitle, disclaimer: strings.tutorial.disclaimer, ctaLabel: strings.tutorial.ctaLabel, ctaLoading: ctaLoading, ctaLoadingLabel: strings.tutorial.ctaLoadingLabel, illustration: illustration ?? _jsx(PrizmaIllustrationSelfie, {}), verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell })));
|
|
19
|
+
FaceCaptureTutorialScreen.displayName = 'FaceCaptureTutorialScreen';
|
|
20
|
+
export default FaceCaptureTutorialScreen;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaProcessingScreenProps } from './ProcessingScreen';
|
|
3
|
+
import type { FaceMatchStrings } from './FaceMatchStrings';
|
|
4
|
+
export interface FaceMatchComparisonCompactScreenProps extends Omit<PrizmaProcessingScreenProps, 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'> {
|
|
5
|
+
/** Module copy — this screen reads the `comparisonCompact` slice. */
|
|
6
|
+
strings: FaceMatchStrings;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Face Match — compact matching state (Archetype C, GUIDELINES.md §6-C).
|
|
10
|
+
* Figma: purple section `faceMatch.comparisonCompact.matching` — the photo-less
|
|
11
|
+
* variant of the matching state, used when the captured images are not shown.
|
|
12
|
+
*
|
|
13
|
+
* This one IS the centered Processing archetype, and it is the counter-example
|
|
14
|
+
* DEVIATIONS.md #11 predicted: Face Capture's loading screens use archetype B
|
|
15
|
+
* because their Figma pins the spinner inside the 342-tall ring box, whereas
|
|
16
|
+
* this section really centers — the spinner + title + subtitle block (342×129)
|
|
17
|
+
* sits at the exact midpoint of the flexible middle frame (middle content
|
|
18
|
+
* 44→456 tall 412, block at y=141.5 = (412 − 129) / 2). So the foundation
|
|
19
|
+
* archetype is reused verbatim and this screen only supplies copy; it is NOT a
|
|
20
|
+
* copy of FaceCaptureLoadingScreen, whose layout differs. DEVIATIONS.md #FM-24.
|
|
21
|
+
*
|
|
22
|
+
* The spinner, its 48px geometry and the title typography all belong to Core's
|
|
23
|
+
* `PrizmaTitle` spinner slot inside the archetype — nothing re-implemented (§7).
|
|
24
|
+
*/
|
|
25
|
+
export declare const FaceMatchComparisonCompactScreen: React.ForwardRefExoticComponent<FaceMatchComparisonCompactScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
26
|
+
export default FaceMatchComparisonCompactScreen;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaProcessingScreen, } from './ProcessingScreen';
|
|
5
|
+
/**
|
|
6
|
+
* Face Match — compact matching state (Archetype C, GUIDELINES.md §6-C).
|
|
7
|
+
* Figma: purple section `faceMatch.comparisonCompact.matching` — the photo-less
|
|
8
|
+
* variant of the matching state, used when the captured images are not shown.
|
|
9
|
+
*
|
|
10
|
+
* This one IS the centered Processing archetype, and it is the counter-example
|
|
11
|
+
* DEVIATIONS.md #11 predicted: Face Capture's loading screens use archetype B
|
|
12
|
+
* because their Figma pins the spinner inside the 342-tall ring box, whereas
|
|
13
|
+
* this section really centers — the spinner + title + subtitle block (342×129)
|
|
14
|
+
* sits at the exact midpoint of the flexible middle frame (middle content
|
|
15
|
+
* 44→456 tall 412, block at y=141.5 = (412 − 129) / 2). So the foundation
|
|
16
|
+
* archetype is reused verbatim and this screen only supplies copy; it is NOT a
|
|
17
|
+
* copy of FaceCaptureLoadingScreen, whose layout differs. DEVIATIONS.md #FM-24.
|
|
18
|
+
*
|
|
19
|
+
* The spinner, its 48px geometry and the title typography all belong to Core's
|
|
20
|
+
* `PrizmaTitle` spinner slot inside the archetype — nothing re-implemented (§7).
|
|
21
|
+
*/
|
|
22
|
+
export const FaceMatchComparisonCompactScreen = forwardRef(({ strings, screenId = 'face-match-comparison-compact', ...rest }, ref) => (_jsx(PrizmaProcessingScreen, { ref: ref, status: "loading", title: strings.comparisonCompact.title, subtitle: strings.comparisonCompact.description, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, ...rest })));
|
|
23
|
+
FaceMatchComparisonCompactScreen.displayName = 'FaceMatchComparisonCompactScreen';
|
|
24
|
+
export default FaceMatchComparisonCompactScreen;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import { type PrizmaScreenShellProps } from './ScreenShell';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { FaceMatchComparisonVariant, FaceMatchStrings } from './FaceMatchStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
import './FaceMatchLayout.css';
|
|
7
|
+
/** Which captured image fills a circle. The host owns the pixels (same
|
|
8
|
+
* contract as `camera` on the capture screens) — Face Match never captures. */
|
|
9
|
+
export type FaceMatchPhotoRole = 'selfie' | 'id' | 'nfc' | 'secondId';
|
|
10
|
+
/** Host-supplied portraits, one per role the chosen variant asks for. Any role
|
|
11
|
+
* left out renders an empty neutral disc. */
|
|
12
|
+
export type FaceMatchComparisonPhotos = Partial<Record<FaceMatchPhotoRole, ReactNode>>;
|
|
13
|
+
/**
|
|
14
|
+
* Where the comparison is in its own choreography — the module MOVING rather
|
|
15
|
+
* than one of the frames it passes through (FaceMatchLayout.css § "The
|
|
16
|
+
* comparison, moving", which carries the timeline and where its numbers come
|
|
17
|
+
* from).
|
|
18
|
+
*
|
|
19
|
+
* arriving The module has just opened. Title only; the discs are still
|
|
20
|
+
* outside the screen.
|
|
21
|
+
* comparing The discs travel in and are then named by their callouts.
|
|
22
|
+
* converged The callouts leave, and the discs run together into one and go
|
|
23
|
+
* with them — handing the screen to the verdict.
|
|
24
|
+
*
|
|
25
|
+
* Setting it puts the screen in its moving form, and `matching` is then ignored:
|
|
26
|
+
* the rosette that prop draws is a frame partway through `converged`, not a
|
|
27
|
+
* place the module rests.
|
|
28
|
+
*/
|
|
29
|
+
export type FaceMatchComparisonPhase = 'arriving' | 'comparing' | 'converged';
|
|
30
|
+
export interface FaceMatchComparisonScreenProps extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'> {
|
|
31
|
+
/** Module copy — this screen reads the `comparison` slice (+ shared labels). */
|
|
32
|
+
strings: FaceMatchStrings;
|
|
33
|
+
/** Which purple photo set to render. Default `'selfieId'`. */
|
|
34
|
+
variant?: FaceMatchComparisonVariant;
|
|
35
|
+
/** The converged state (`comparison.matching` / `comparison.threeFacesMatching`):
|
|
36
|
+
* the label callouts are dropped and the circles overlap into a rosette.
|
|
37
|
+
* A STILL — ignored once `phase` is set. */
|
|
38
|
+
matching?: boolean;
|
|
39
|
+
/** Play the comparison instead of drawing one frame of it. Absent = the still
|
|
40
|
+
* the Figma sections are, which is what a screen grid wants. */
|
|
41
|
+
phase?: FaceMatchComparisonPhase;
|
|
42
|
+
/** The captured portraits. Roles the variant does not use are ignored. */
|
|
43
|
+
photos?: FaceMatchComparisonPhotos;
|
|
44
|
+
screenId?: string;
|
|
45
|
+
overrides?: PrizmaScreenOverrides;
|
|
46
|
+
onAction?: PrizmaScreenActionHandler;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Face Match — identity comparison (Archetype A layout minus the CTA,
|
|
50
|
+
* GUIDELINES.md §6-A). Figma: the five purple `faceMatch.comparison.*` sections
|
|
51
|
+
* — `initialState` · `matching` · `nfc` · `firstAndSecondID` ·
|
|
52
|
+
* `threeFacesMatching` — which are photo-count / label / convergence variants of
|
|
53
|
+
* this ONE screen.
|
|
54
|
+
*
|
|
55
|
+
* This is the module's only genuinely new composition, and the reason Face Match
|
|
56
|
+
* is not a copy of Face Capture: there is no ring, no camera and no CTA. The
|
|
57
|
+
* purple sections' CONTENT frame holds exactly Navigation → Title → the photo
|
|
58
|
+
* cluster → the verified Tag (measured 390 section: nav 0→44, Title 68→96 i.e.
|
|
59
|
+
* the archetype's 24px nav→content gap, cluster in the flexible middle, Tag
|
|
60
|
+
* 616→650).
|
|
61
|
+
*
|
|
62
|
+
* Composed on the foundation shell rather than wrapping PrizmaTutorialScreen
|
|
63
|
+
* because that archetype always renders a CTA and these sections have none —
|
|
64
|
+
* foundation gap reported to the owner, no foundation file edited.
|
|
65
|
+
*
|
|
66
|
+
* TWO FORMS, one component. Without `phase` it draws a FRAME — the purple
|
|
67
|
+
* sections exactly as Figma has them, which is what a screen grid and an export
|
|
68
|
+
* still need. With `phase` it PLAYS, because Face Match has no camera and no
|
|
69
|
+
* control and the movement is therefore the whole screen rather than polish on
|
|
70
|
+
* top of it: the discs arrive from off-screen, are named, and then run together
|
|
71
|
+
* into one and go. That choreography, its three phases and the shipped-SDK
|
|
72
|
+
* numbers behind it live in FaceMatchLayout.css § "The comparison, moving".
|
|
73
|
+
*
|
|
74
|
+
* The label callouts are Core's `PrizmaTooltip` with a bottom-centred arrow. The
|
|
75
|
+
* module Figma draws a bespoke light pill instead (a hand-drawn boolean Union,
|
|
76
|
+
* not a Tooltip instance); the design system wins and these render as the
|
|
77
|
+
* canonical dark tooltip. DEVIATIONS.md #FM-21.
|
|
78
|
+
*/
|
|
79
|
+
export declare const FaceMatchComparisonScreen: React.ForwardRefExoticComponent<FaceMatchComparisonScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
80
|
+
export default FaceMatchComparisonScreen;
|