@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,169 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import { PrizmaOtp } from '@incodetech/prizma-core-web/otp';
|
|
3
|
+
import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { EmailInputOtpState, EmailInputStrings } from './EmailInputStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
|
|
8
|
+
export interface EmailInputOtpScreenProps
|
|
9
|
+
extends Omit<
|
|
10
|
+
PrizmaFormScreenProps,
|
|
11
|
+
'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
|
|
12
|
+
> {
|
|
13
|
+
/** Module copy — this screen reads the `otp` slice. */
|
|
14
|
+
strings: EmailInputStrings;
|
|
15
|
+
/** Which purple `email.OTP.*` section to render. Default `typing`. */
|
|
16
|
+
state?: EmailInputOtpState;
|
|
17
|
+
/** The code as typed. Figma's sample is the alphanumeric `A1B2C3`. */
|
|
18
|
+
value?: string;
|
|
19
|
+
/** How many characters the code carries. Default 6. */
|
|
20
|
+
length?: number;
|
|
21
|
+
screenId?: string;
|
|
22
|
+
overrides?: PrizmaScreenOverrides;
|
|
23
|
+
onAction?: PrizmaScreenActionHandler;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Email Input — the one-time-code screen, built on the Form archetype
|
|
28
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
29
|
+
*
|
|
30
|
+
* ONE screen for all five purple `email.OTP.*` sections (`typing` / `filled` /
|
|
31
|
+
* `processing` and the module's TWO error sections) — identical layout,
|
|
32
|
+
* differing in the state of the code field, the CTA, and the line under it.
|
|
33
|
+
*
|
|
34
|
+
* The code field is Core's `PrizmaOtp`, which is a single centred, letter-spaced
|
|
35
|
+
* field rather than a segmented box row — exactly what the Figma sections draw
|
|
36
|
+
* ("A1B2C3" as one line of type inside one 56px field).
|
|
37
|
+
*
|
|
38
|
+
* `processing` deliberately does NOT use Core's `PrizmaOtp.loading`. That prop
|
|
39
|
+
* centres the spinner INSIDE the code field (owner definition 2026-07-12), but
|
|
40
|
+
* the purple section draws the field simply DISABLED with the code still
|
|
41
|
+
* legible and puts the spinner in the CTA — the same treatment as
|
|
42
|
+
* `verify.loading`, which is what makes the module read consistently.
|
|
43
|
+
* DEVIATIONS #PI-5.
|
|
44
|
+
*
|
|
45
|
+
* DEVIATIONS #EI-3 — the band under the CTA is NOT one treatment for all five
|
|
46
|
+
* sections, which is this module's own finding rather than anything inherited
|
|
47
|
+
* from Phone Input. Measured on the 390 frames, three different treatments:
|
|
48
|
+
* - `typing` (146:37111) draws a re-send COUNTDOWN ("Resend code in 30s") —
|
|
49
|
+
* plain secondary copy, NO links, because the code has only just been sent
|
|
50
|
+
* and re-sending it immediately is meaningless
|
|
51
|
+
* - `filled` (150:38395) and both error sections (150:63411 generic,
|
|
52
|
+
* 150:70717 invalid-code) draw the two-link sentence
|
|
53
|
+
* - `processing` (150:63409) draws that same sentence INERT — every word in
|
|
54
|
+
* the secondary ink, no underline, nothing clickable, because the request is
|
|
55
|
+
* in flight. Rendering the labels as plain text is what produces that, so
|
|
56
|
+
* `processing` reads differently from `filled` in the band as well as in the
|
|
57
|
+
* field.
|
|
58
|
+
* The consequence for a host: `resendCountdown` and `resendPrompt` are not
|
|
59
|
+
* alternatives it may choose between — which one is drawn is decided by
|
|
60
|
+
* `state`, so both must be supplied for the five sections to render as drawn.
|
|
61
|
+
*/
|
|
62
|
+
export const EmailInputOtpScreen = forwardRef<HTMLDivElement, EmailInputOtpScreenProps>(
|
|
63
|
+
(
|
|
64
|
+
{
|
|
65
|
+
strings,
|
|
66
|
+
state = 'typing',
|
|
67
|
+
value,
|
|
68
|
+
length = 6,
|
|
69
|
+
screenId = `email-input-otp-${state}`,
|
|
70
|
+
overrides,
|
|
71
|
+
onAction,
|
|
72
|
+
...shell
|
|
73
|
+
},
|
|
74
|
+
ref,
|
|
75
|
+
) => {
|
|
76
|
+
const busy = state === 'processing';
|
|
77
|
+
const invalid = state === 'error' || state === 'errorGeneric';
|
|
78
|
+
const focused = state === 'typing';
|
|
79
|
+
|
|
80
|
+
const errorText =
|
|
81
|
+
state === 'error'
|
|
82
|
+
? strings.otp.errorText
|
|
83
|
+
: state === 'errorGeneric'
|
|
84
|
+
? strings.otp.genericErrorText
|
|
85
|
+
: undefined;
|
|
86
|
+
|
|
87
|
+
/* `typing` shows the countdown; every other section shows the sentence. */
|
|
88
|
+
const countdown = focused ? strings.otp.resendCountdown : undefined;
|
|
89
|
+
|
|
90
|
+
/* Both links are wrapped by the same helper so the inert (`processing`)
|
|
91
|
+
rendering cannot drift from the actionable one — only the element type
|
|
92
|
+
changes. Each link emits a DISTINCT action: re-sending the code and
|
|
93
|
+
returning to email entry are different flows a host must tell apart
|
|
94
|
+
(DEVIATIONS #PI-10). */
|
|
95
|
+
const link = (label: string, type: 'secondary' | 'tertiary'): ReactNode =>
|
|
96
|
+
busy ? (
|
|
97
|
+
label
|
|
98
|
+
) : (
|
|
99
|
+
<button
|
|
100
|
+
type="button"
|
|
101
|
+
className="prizma-screen-layout__inline-link"
|
|
102
|
+
onClick={() => onAction?.({ type, screenId })}
|
|
103
|
+
>
|
|
104
|
+
{label}
|
|
105
|
+
</button>
|
|
106
|
+
);
|
|
107
|
+
|
|
108
|
+
const resendLine: ReactNode = countdown ? (
|
|
109
|
+
<p className="prizma-screen-layout__inline-prompt">{countdown}</p>
|
|
110
|
+
) : strings.otp.resendPrompt ? (
|
|
111
|
+
<p className="prizma-screen-layout__inline-prompt">
|
|
112
|
+
{strings.otp.resendPrompt}{' '}
|
|
113
|
+
{strings.otp.resendLabel ? link(strings.otp.resendLabel, 'secondary') : null}
|
|
114
|
+
{strings.otp.changeEmailLabel ? (
|
|
115
|
+
<>
|
|
116
|
+
{' '}
|
|
117
|
+
{strings.otp.resendSeparator}{' '}
|
|
118
|
+
{link(strings.otp.changeEmailLabel, 'tertiary')}
|
|
119
|
+
</>
|
|
120
|
+
) : null}
|
|
121
|
+
</p>
|
|
122
|
+
) : undefined;
|
|
123
|
+
|
|
124
|
+
return (
|
|
125
|
+
<PrizmaFormScreen
|
|
126
|
+
ref={ref}
|
|
127
|
+
title={strings.otp.title}
|
|
128
|
+
subtitle={strings.otp.subtitle}
|
|
129
|
+
ctaLabel={strings.otp.ctaLabel}
|
|
130
|
+
/* Figma greys the CTA on both error sections; `typing` keeps it live. */
|
|
131
|
+
ctaDisabled={invalid}
|
|
132
|
+
/* The spinner rides the CTA, not the field (see the note above). */
|
|
133
|
+
ctaLoading={busy}
|
|
134
|
+
ctaLoadingLabel={strings.otp.ctaLoadingLabel}
|
|
135
|
+
linkContent={resendLine}
|
|
136
|
+
verifiedLabel={strings.verifiedLabel}
|
|
137
|
+
navLabel={strings.navLabel}
|
|
138
|
+
screenId={screenId}
|
|
139
|
+
overrides={overrides}
|
|
140
|
+
onAction={onAction}
|
|
141
|
+
{...shell}
|
|
142
|
+
>
|
|
143
|
+
<PrizmaOtp
|
|
144
|
+
length={length}
|
|
145
|
+
/* Core's own static-focus modifier, the same mechanism the verify
|
|
146
|
+
field uses: `typing` is the one section Figma draws focused, and
|
|
147
|
+
`filled` sits on the resting border. DEVIATIONS #PI-7. */
|
|
148
|
+
className={focused ? 'prizma-input-otp--focused' : undefined}
|
|
149
|
+
aria-label={strings.otp.fieldLabel}
|
|
150
|
+
/* Uncontrolled, for the same reason as the email field: `readOnly`
|
|
151
|
+
would paint Core's DISABLED surface on the resting states, which is
|
|
152
|
+
grey Figma does not draw there (DEVIATIONS #PI-6). */
|
|
153
|
+
defaultValue={value ?? ''}
|
|
154
|
+
/* Figma's code is alphanumeric ("A1B2C3"), so the field must not
|
|
155
|
+
advertise a numeric keypad the way Core's OTP default does. */
|
|
156
|
+
inputMode="text"
|
|
157
|
+
/* `processing` is the one section Figma greys — the code stays
|
|
158
|
+
legible while the check runs. */
|
|
159
|
+
disabled={busy}
|
|
160
|
+
error={invalid}
|
|
161
|
+
errorText={errorText}
|
|
162
|
+
/>
|
|
163
|
+
</PrizmaFormScreen>
|
|
164
|
+
);
|
|
165
|
+
},
|
|
166
|
+
);
|
|
167
|
+
EmailInputOtpScreen.displayName = 'EmailInputOtpScreen';
|
|
168
|
+
|
|
169
|
+
export default EmailInputOtpScreen;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
PrizmaProcessingScreen,
|
|
4
|
+
type PrizmaProcessingScreenProps,
|
|
5
|
+
} from './ProcessingScreen';
|
|
6
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
7
|
+
import type { EmailInputStrings } from './EmailInputStrings';
|
|
8
|
+
import './ScreenLayout.css';
|
|
9
|
+
|
|
10
|
+
export interface EmailInputProcessingScreenProps
|
|
11
|
+
extends Omit<
|
|
12
|
+
PrizmaProcessingScreenProps,
|
|
13
|
+
'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
|
|
14
|
+
> {
|
|
15
|
+
/** Module copy — this screen reads the `processing` slice. */
|
|
16
|
+
strings: EmailInputStrings;
|
|
17
|
+
screenId?: string;
|
|
18
|
+
overrides?: PrizmaScreenOverrides;
|
|
19
|
+
onAction?: PrizmaScreenActionHandler;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Email Input — the code is being checked, built on the Processing archetype
|
|
24
|
+
* (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
|
|
25
|
+
*
|
|
26
|
+
* Figma: the purple `email.OTP.processing` section holding `email.processing`
|
|
27
|
+
* — a separate SCREEN from the in-form `email.OTP.processing` state, which
|
|
28
|
+
* keeps the code field and only swaps the CTA. This one is a pure spinner + H2
|
|
29
|
+
* with no button, which is exactly the case §6-F reserves for C rather than the
|
|
30
|
+
* Result archetype.
|
|
31
|
+
*
|
|
32
|
+
* Figma draws this section with a close ✕ in the nav and no verified tag; both
|
|
33
|
+
* are owner-settled and neither is reproduced — GUIDELINES §3 forbids the ✕
|
|
34
|
+
* (DEVIATIONS #PI-9, a standing Wave-3 ruling) and the chrome stays constant
|
|
35
|
+
* across the module's screens (#F-30, #F-34, #PI-8).
|
|
36
|
+
*/
|
|
37
|
+
export const EmailInputProcessingScreen = forwardRef<
|
|
38
|
+
HTMLDivElement,
|
|
39
|
+
EmailInputProcessingScreenProps
|
|
40
|
+
>(
|
|
41
|
+
(
|
|
42
|
+
{
|
|
43
|
+
strings,
|
|
44
|
+
screenId = 'email-input-processing',
|
|
45
|
+
overrides,
|
|
46
|
+
onAction,
|
|
47
|
+
...shell
|
|
48
|
+
},
|
|
49
|
+
ref,
|
|
50
|
+
) => (
|
|
51
|
+
<PrizmaProcessingScreen
|
|
52
|
+
ref={ref}
|
|
53
|
+
status="loading"
|
|
54
|
+
title={strings.processing.title}
|
|
55
|
+
subtitle={strings.processing.subtitle}
|
|
56
|
+
verifiedLabel={strings.verifiedLabel}
|
|
57
|
+
navLabel={strings.navLabel}
|
|
58
|
+
screenId={screenId}
|
|
59
|
+
overrides={overrides}
|
|
60
|
+
onAction={onAction}
|
|
61
|
+
{...shell}
|
|
62
|
+
/>
|
|
63
|
+
),
|
|
64
|
+
);
|
|
65
|
+
EmailInputProcessingScreen.displayName = 'EmailInputProcessingScreen';
|
|
66
|
+
|
|
67
|
+
export default EmailInputProcessingScreen;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
// Email Input — copy contract.
|
|
2
|
+
//
|
|
3
|
+
// Figma: `📨 Email - Screens specs + Localization` (IovIhDAPjR7zxjC4NKZzfq,
|
|
4
|
+
// page 5:13191). Four purple parent sections:
|
|
5
|
+
// email.verifyEmail — default / typing / filled / error / loading
|
|
6
|
+
// email.OTP — typing / filled / processing / error(×2) + email.processing
|
|
7
|
+
// email.error — somethingWentWrong
|
|
8
|
+
// email.success — success
|
|
9
|
+
//
|
|
10
|
+
// Sibling of Phone Input (`PhoneInputStrings.ts`) and deliberately shaped the
|
|
11
|
+
// same way: same archetypes, same state axes, same inline-link split. The two
|
|
12
|
+
// real differences are that the entry field is a single email TextField (no
|
|
13
|
+
// dial-code pairing, so no `Input / Combined` and no country list) and that the
|
|
14
|
+
// module draws no Silent-Network-Auth and no connectivity section.
|
|
15
|
+
//
|
|
16
|
+
// No hardcoded English anywhere in a screen: every visible string arrives here,
|
|
17
|
+
// so the host's locale pack drives the module (the Figma file ships ES + PT
|
|
18
|
+
// columns alongside EN).
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The `email.verifyEmail.*` sections. All five draw the SAME layout — nav →
|
|
22
|
+
* Title (H2 + H5) → Spacing/32 → a single email field → CTA → tag — and differ
|
|
23
|
+
* only in field content and CTA state, which is what GUIDELINES §6-E means by
|
|
24
|
+
* "states are separate screens sharing the identical layout":
|
|
25
|
+
* - `default` — empty field showing the placeholder, CTA enabled
|
|
26
|
+
* - `typing` — focused field with a partial address
|
|
27
|
+
* - `filled` — focused field with a complete address
|
|
28
|
+
* - `error` — negative field + clear ✕ + the invalid-format row
|
|
29
|
+
* - `loading` — field greyed while the code is requested, spinner in the CTA
|
|
30
|
+
*/
|
|
31
|
+
export type EmailInputVerifyState =
|
|
32
|
+
| 'default'
|
|
33
|
+
| 'typing'
|
|
34
|
+
| 'filled'
|
|
35
|
+
| 'error'
|
|
36
|
+
| 'loading';
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The `email.OTP.*` sections — same layout, different code-field state:
|
|
40
|
+
* - `typing` — focused field, partial code, CTA enabled, and the line
|
|
41
|
+
* under the CTA is the RE-SEND COUNTDOWN, not the two links
|
|
42
|
+
* - `filled` — resting field, complete code, the two-link line
|
|
43
|
+
* - `processing` — code submitted: field greyed, spinner in the CTA, and the
|
|
44
|
+
* same sentence rendered INERT (no links)
|
|
45
|
+
* - `error` — wrong code: negative field + "Invalid code…", CTA disabled
|
|
46
|
+
* - `errorGeneric` — the second purple error section, same treatment carrying
|
|
47
|
+
* the generic "Something went wrong" row instead
|
|
48
|
+
*/
|
|
49
|
+
export type EmailInputOtpState =
|
|
50
|
+
| 'typing'
|
|
51
|
+
| 'filled'
|
|
52
|
+
| 'processing'
|
|
53
|
+
| 'error'
|
|
54
|
+
| 'errorGeneric';
|
|
55
|
+
|
|
56
|
+
export interface EmailInputStrings {
|
|
57
|
+
/** "verified by" attribution in the footer tag. */
|
|
58
|
+
verifiedLabel: string;
|
|
59
|
+
/** Accessible name for the logo nav row. */
|
|
60
|
+
navLabel?: string;
|
|
61
|
+
|
|
62
|
+
/** email.verifyEmail.* */
|
|
63
|
+
verify: {
|
|
64
|
+
/** H2 ("Verify your email"). */
|
|
65
|
+
title: string;
|
|
66
|
+
/** H5 ("We'll send you a code to ensure it's yours"). */
|
|
67
|
+
subtitle: string;
|
|
68
|
+
/** Field placeholder ("Email"). */
|
|
69
|
+
placeholder: string;
|
|
70
|
+
/**
|
|
71
|
+
* Accessible label for the email field.
|
|
72
|
+
*
|
|
73
|
+
* DEVIATIONS #EI-2 — Figma draws NO visible label row above the field: the
|
|
74
|
+
* placeholder ("Email") carries the whole meaning, measured on
|
|
75
|
+
* `email.verifyYourEmail.default` (28:13802) and unchanged across all five
|
|
76
|
+
* purple sections. A screen reader would therefore reach an unnamed input,
|
|
77
|
+
* so the copy rides `aria-label` instead of a drawn row — Core wins over
|
|
78
|
+
* Figma on the accessible name, and nothing new is painted. This is the
|
|
79
|
+
* #PI-4 precedent applied unchanged; Phone Input resolved the identical
|
|
80
|
+
* conflict the same way.
|
|
81
|
+
*/
|
|
82
|
+
fieldLabel?: string;
|
|
83
|
+
/** Accessible name for the clear ✕ affordance. Core ships no English
|
|
84
|
+
* default, so the row is only drawn when this is supplied. */
|
|
85
|
+
clearLabel?: string;
|
|
86
|
+
/** Error row on the `error` state ("Invalid email format"). */
|
|
87
|
+
errorText: string;
|
|
88
|
+
/** Primary CTA ("Continue"). */
|
|
89
|
+
ctaLabel: string;
|
|
90
|
+
/** Accessible busy label while the code is requested (`loading`). */
|
|
91
|
+
ctaLoadingLabel?: string;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/** email.OTP.* */
|
|
95
|
+
otp: {
|
|
96
|
+
/** H2 ("Enter the code we've sent to your email"). */
|
|
97
|
+
title: string;
|
|
98
|
+
/** H5 — carries the masked destination address, when a section shows one. */
|
|
99
|
+
subtitle?: string;
|
|
100
|
+
/** Accessible label for the code field (no visible label row in Figma). */
|
|
101
|
+
fieldLabel?: string;
|
|
102
|
+
/** Error row on `error` ("Invalid code. Please try again."). */
|
|
103
|
+
errorText: string;
|
|
104
|
+
/** Error row on `errorGeneric` ("Something went wrong"). */
|
|
105
|
+
genericErrorText: string;
|
|
106
|
+
/**
|
|
107
|
+
* The `typing` section draws a COUNTDOWN instead of the two links —
|
|
108
|
+
* "Resend code in 30s". Pre-formatted by the host, which owns the clock
|
|
109
|
+
* (a screen is one static spec state and runs no timer).
|
|
110
|
+
*/
|
|
111
|
+
resendCountdown?: string;
|
|
112
|
+
/**
|
|
113
|
+
* The line under the CTA on `filled` / `processing` / both error sections
|
|
114
|
+
* is ONE sentence carrying TWO separate links:
|
|
115
|
+
* "Didn't receive the code? [Resend code] or [Change email]".
|
|
116
|
+
* Split into four strings because the links are independently actionable —
|
|
117
|
+
* the host must tell a re-send from a return to email entry — and because a
|
|
118
|
+
* locale needs to order the fragments itself. Omit `resendPrompt` to render
|
|
119
|
+
* no line at all. DEVIATIONS #PI-10.
|
|
120
|
+
*/
|
|
121
|
+
resendPrompt?: string;
|
|
122
|
+
/** First link — re-sends the code. Emits `secondary`. */
|
|
123
|
+
resendLabel?: string;
|
|
124
|
+
/** The conjunction between the two links ("or"). */
|
|
125
|
+
resendSeparator?: string;
|
|
126
|
+
/** Second link — returns to email entry. Emits `tertiary`. */
|
|
127
|
+
changeEmailLabel?: string;
|
|
128
|
+
/** Primary CTA. */
|
|
129
|
+
ctaLabel: string;
|
|
130
|
+
/** Accessible / visible busy copy while the code is checked (`processing`). */
|
|
131
|
+
ctaLoadingLabel?: string;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
/** email.OTP → `email.processing`: the post-submit spinner screen. */
|
|
135
|
+
processing: {
|
|
136
|
+
/** H2 shown under the spinner ("Processing…"). */
|
|
137
|
+
title: string;
|
|
138
|
+
subtitle?: string;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/** email.success */
|
|
142
|
+
success: {
|
|
143
|
+
/** H2 ("Email verified!"). */
|
|
144
|
+
title: string;
|
|
145
|
+
subtitle?: string;
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* email.error.somethingWentWrong.
|
|
150
|
+
*
|
|
151
|
+
* DEVIATIONS #EI-5 — this is the module's ONLY error verdict. The purple
|
|
152
|
+
* `email.error` section (3058:103116) holds exactly one screen, and the file
|
|
153
|
+
* draws no connectivity section anywhere. Phone Input's error screen carries
|
|
154
|
+
* a `variant` axis precisely because its Figma splits `somethingWentWrong`
|
|
155
|
+
* from a no-connection screen with a Wi-Fi glyph; this module has nothing to
|
|
156
|
+
* switch between, so `EmailInputErrorScreen` ships NO `variant` prop and no
|
|
157
|
+
* Wi-Fi glyph. Adding either would be inventing a state the spec does not
|
|
158
|
+
* have. If a connectivity section is added upstream, this row is where the
|
|
159
|
+
* axis gets reinstated.
|
|
160
|
+
*/
|
|
161
|
+
error: {
|
|
162
|
+
title: string;
|
|
163
|
+
subtitle?: string;
|
|
164
|
+
ctaLabel: string;
|
|
165
|
+
};
|
|
166
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
PrizmaProcessingScreen,
|
|
4
|
+
type PrizmaProcessingScreenProps,
|
|
5
|
+
} from './ProcessingScreen';
|
|
6
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
7
|
+
import type { EmailInputStrings } from './EmailInputStrings';
|
|
8
|
+
import './ScreenLayout.css';
|
|
9
|
+
|
|
10
|
+
export interface EmailInputSuccessScreenProps
|
|
11
|
+
extends Omit<
|
|
12
|
+
PrizmaProcessingScreenProps,
|
|
13
|
+
'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
|
|
14
|
+
> {
|
|
15
|
+
/** Module copy — this screen reads the `success` slice. */
|
|
16
|
+
strings: EmailInputStrings;
|
|
17
|
+
screenId?: string;
|
|
18
|
+
overrides?: PrizmaScreenOverrides;
|
|
19
|
+
onAction?: PrizmaScreenActionHandler;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Email Input — the verified verdict, built on the Processing archetype
|
|
24
|
+
* (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
|
|
25
|
+
*
|
|
26
|
+
* Figma: the purple `email.success` section. A centred status mark over a bare
|
|
27
|
+
* H2 ("Email verified!") with **no CTA and no subtitle** — the module hands
|
|
28
|
+
* control straight back to the flow.
|
|
29
|
+
*
|
|
30
|
+
* DEVIATIONS #EI-4 — this screen sits on archetype C while its Phone Input
|
|
31
|
+
* sibling sits on F, and that split is deliberate, not an oversight. Measured
|
|
32
|
+
* on `email.success` (31:19307): mark + H2 and then nothing — the CTA band is
|
|
33
|
+
* empty all the way down to the browser chrome, where the error verdict
|
|
34
|
+
* (40:33375) does draw "Try again" in the same slot. `phoneNumber.success`
|
|
35
|
+
* draws a button; `email.success` does not. §6-F reserves the Result archetype
|
|
36
|
+
* for "every verdict screen that needs a button" and keeps C as the pure
|
|
37
|
+
* no-button case, so following the archetype rule across two modules whose
|
|
38
|
+
* Figma disagrees is what produces two different archetypes here. Putting this
|
|
39
|
+
* screen on F to match its sibling would draw a button the spec omits.
|
|
40
|
+
*
|
|
41
|
+
* The mark is Core's outline status icon via `PrizmaTitle`'s icon slot — the
|
|
42
|
+
* module Figma still draws the two-tone filled disc, one icon sweep behind
|
|
43
|
+
* (DEVIATIONS #15, unchanged here).
|
|
44
|
+
*/
|
|
45
|
+
export const EmailInputSuccessScreen = forwardRef<HTMLDivElement, EmailInputSuccessScreenProps>(
|
|
46
|
+
(
|
|
47
|
+
{
|
|
48
|
+
strings,
|
|
49
|
+
screenId = 'email-input-success',
|
|
50
|
+
overrides,
|
|
51
|
+
onAction,
|
|
52
|
+
...shell
|
|
53
|
+
},
|
|
54
|
+
ref,
|
|
55
|
+
) => (
|
|
56
|
+
<PrizmaProcessingScreen
|
|
57
|
+
ref={ref}
|
|
58
|
+
status="success"
|
|
59
|
+
title={strings.success.title}
|
|
60
|
+
subtitle={strings.success.subtitle}
|
|
61
|
+
verifiedLabel={strings.verifiedLabel}
|
|
62
|
+
navLabel={strings.navLabel}
|
|
63
|
+
screenId={screenId}
|
|
64
|
+
overrides={overrides}
|
|
65
|
+
onAction={onAction}
|
|
66
|
+
{...shell}
|
|
67
|
+
/>
|
|
68
|
+
),
|
|
69
|
+
);
|
|
70
|
+
EmailInputSuccessScreen.displayName = 'EmailInputSuccessScreen';
|
|
71
|
+
|
|
72
|
+
export default EmailInputSuccessScreen;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
|
|
3
|
+
import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { EmailInputStrings, EmailInputVerifyState } from './EmailInputStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
|
|
8
|
+
export interface EmailInputVerifyScreenProps
|
|
9
|
+
extends Omit<
|
|
10
|
+
PrizmaFormScreenProps,
|
|
11
|
+
'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
|
|
12
|
+
> {
|
|
13
|
+
/** Module copy — this screen reads the `verify` slice. */
|
|
14
|
+
strings: EmailInputStrings;
|
|
15
|
+
/** Which purple `email.verifyEmail.*` section to render. Default `default`. */
|
|
16
|
+
state?: EmailInputVerifyState;
|
|
17
|
+
/** The address as typed. Empty renders the placeholder (`default`). */
|
|
18
|
+
value?: string;
|
|
19
|
+
screenId?: string;
|
|
20
|
+
overrides?: PrizmaScreenOverrides;
|
|
21
|
+
onAction?: PrizmaScreenActionHandler;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Email Input — the address-entry screen, built on the Form archetype
|
|
26
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
27
|
+
*
|
|
28
|
+
* ONE screen for all five purple `email.verifyEmail.*` sections
|
|
29
|
+
* (`default` / `typing` / `filled` / `error` / `loading`): measured against the
|
|
30
|
+
* 390 frames they share an identical layout — nav → Title (H2 + H5) →
|
|
31
|
+
* Spacing/32 → the email field → CTA → tag — and differ ONLY in field content
|
|
32
|
+
* and CTA state.
|
|
33
|
+
*
|
|
34
|
+
* Where this parts company with its Phone Input sibling: there is no dial-code
|
|
35
|
+
* pairing here, so no `Input / Combined` row and no module CSS at all — a bare
|
|
36
|
+
* `PrizmaTextField` is the whole field stack, and every offset stays the
|
|
37
|
+
* archetype's.
|
|
38
|
+
*
|
|
39
|
+
* Field treatments, one per Figma frame rather than one for all:
|
|
40
|
+
* - `default` — resting field, placeholder only
|
|
41
|
+
* - `typing` / `filled` — Figma draws BOTH with the focused blue border and a
|
|
42
|
+
* caret, differing only in how much of the address is typed
|
|
43
|
+
* - `error` — Core's negative treatment plus the clear ✕ Figma draws on this
|
|
44
|
+
* section alone
|
|
45
|
+
* - `loading` — the one section Figma greys, with the spinner in the CTA
|
|
46
|
+
*
|
|
47
|
+
* Core's `readOnly` is deliberately NOT used to make the field static: it
|
|
48
|
+
* paints the DISABLED surface (owner definition 2026-07-12), which would grey
|
|
49
|
+
* the four resting states Figma draws white. The field is uncontrolled instead
|
|
50
|
+
* (DEVIATIONS #PI-6).
|
|
51
|
+
*/
|
|
52
|
+
export const EmailInputVerifyScreen = forwardRef<HTMLDivElement, EmailInputVerifyScreenProps>(
|
|
53
|
+
(
|
|
54
|
+
{
|
|
55
|
+
strings,
|
|
56
|
+
state = 'default',
|
|
57
|
+
value,
|
|
58
|
+
screenId = `email-input-verify-${state}`,
|
|
59
|
+
overrides,
|
|
60
|
+
onAction,
|
|
61
|
+
...shell
|
|
62
|
+
},
|
|
63
|
+
ref,
|
|
64
|
+
) => {
|
|
65
|
+
const busy = state === 'loading';
|
|
66
|
+
const invalid = state === 'error';
|
|
67
|
+
const focused = state === 'typing' || state === 'filled';
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<PrizmaFormScreen
|
|
71
|
+
ref={ref}
|
|
72
|
+
title={strings.verify.title}
|
|
73
|
+
subtitle={strings.verify.subtitle}
|
|
74
|
+
ctaLabel={strings.verify.ctaLabel}
|
|
75
|
+
/* Figma's `loading` section swaps the CTA label for Core's spinner. */
|
|
76
|
+
ctaLoading={busy}
|
|
77
|
+
ctaLoadingLabel={strings.verify.ctaLoadingLabel}
|
|
78
|
+
verifiedLabel={strings.verifiedLabel}
|
|
79
|
+
navLabel={strings.navLabel}
|
|
80
|
+
screenId={screenId}
|
|
81
|
+
overrides={overrides}
|
|
82
|
+
onAction={onAction}
|
|
83
|
+
{...shell}
|
|
84
|
+
>
|
|
85
|
+
<PrizmaTextField
|
|
86
|
+
className={
|
|
87
|
+
/* Core's OWN static-focus modifier — the class its CSS already
|
|
88
|
+
implements beside `:focus-within`. `PrizmaTextField` has no
|
|
89
|
+
`forceState` prop the way `PrizmaDropdown` does, so this is how a
|
|
90
|
+
static spec state draws the focus ring without redeclaring any
|
|
91
|
+
styling (DEVIATIONS #PI-7). */
|
|
92
|
+
focused ? 'prizma-input-textfield--focused' : undefined
|
|
93
|
+
}
|
|
94
|
+
type="email"
|
|
95
|
+
inputMode="email"
|
|
96
|
+
autoComplete="email"
|
|
97
|
+
/* Figma's field has no visible label row — the placeholder carries
|
|
98
|
+
the meaning — so the copy rides `aria-label` (DEVIATIONS #PI-4). */
|
|
99
|
+
aria-label={strings.verify.fieldLabel}
|
|
100
|
+
placeholder={strings.verify.placeholder}
|
|
101
|
+
/* Uncontrolled: a screen is one static spec state, so no `onChange`
|
|
102
|
+
is needed and no warning is raised. */
|
|
103
|
+
defaultValue={value ?? ''}
|
|
104
|
+
disabled={busy}
|
|
105
|
+
error={invalid}
|
|
106
|
+
errorText={invalid ? strings.verify.errorText : undefined}
|
|
107
|
+
/* The clear ✕ is drawn on the `error` section only. */
|
|
108
|
+
clearable={invalid}
|
|
109
|
+
clearLabel={strings.verify.clearLabel}
|
|
110
|
+
/>
|
|
111
|
+
</PrizmaFormScreen>
|
|
112
|
+
);
|
|
113
|
+
},
|
|
114
|
+
);
|
|
115
|
+
EmailInputVerifyScreen.displayName = 'EmailInputVerifyScreen';
|
|
116
|
+
|
|
117
|
+
export default EmailInputVerifyScreen;
|