@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,92 @@
|
|
|
1
|
+
/* CURP โ module layout additions.
|
|
2
|
+
*
|
|
3
|
+
* THREE rules, and none of them declares spacing: the content column, the 24px
|
|
4
|
+
* gutters, the title โ fields Spacing/32, the field gaps, the CTA column and
|
|
5
|
+
* the anchored footer all stay the foundation's (`ScreenLayout.css`,
|
|
6
|
+
* `FormScreen.css`). Nothing here re-declares an archetype value, invents a
|
|
7
|
+
* primitive or repaints one โ every rule RELEASES a Core/foundation constraint
|
|
8
|
+
* that a purple CURP section contradicts, the same idiom as Phone Input's
|
|
9
|
+
* `width: auto` on Core's fill-width Dropdown (DEVIATIONS #PI-1).
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/* โโ The generator's field stack is taller than the screen โโโโโโโโโโโโโโโโโโโ
|
|
13
|
+
* `CURP.Gene.default` is a 1051-tall frame: its `input-list` alone is 548 tall
|
|
14
|
+
* (six 78px labelled fields at Spacing/16) and the CONTENT frame grows to 861
|
|
15
|
+
* instead of the usual 654. At the 390ร844 reference the column has ~470 for
|
|
16
|
+
* it, so the last dropdown and the CTA fall past the fold.
|
|
17
|
+
*
|
|
18
|
+
* Archetype E's `.prizma-form-screen__fields` is `flex: 1; min-height: 0` with
|
|
19
|
+
* no overflow behaviour โ it was measured against Phone Input, whose forms are
|
|
20
|
+
* one or two fields โ so the surplus is silently clipped by `ScreenShell`'s
|
|
21
|
+
* `overflow: hidden`, and (because the fields cannot shrink below
|
|
22
|
+
* `--prizma-input-size-field-height`) it first PAINTS OVER the sibling CTA.
|
|
23
|
+
* Screens are authored at 390ร844 and never reflow (README / DEVIATIONS #17),
|
|
24
|
+
* so growing the frame is not an option either.
|
|
25
|
+
*
|
|
26
|
+
* The stack is therefore allowed to scroll INSIDE the column: the title, the
|
|
27
|
+
* CTA and the anchored tag stay put and the six fields pan, which is the
|
|
28
|
+
* closest a fixed 844 frame gets to Figma's taller page. It adds NO padding, NO
|
|
29
|
+
* gap and NO size of its own.
|
|
30
|
+
*
|
|
31
|
+
* Applied to EVERY `CURP.Gene.*` section including `dropdown`. The earlier
|
|
32
|
+
* build withheld it from `dropdown` to keep Core's absolutely-positioned menu
|
|
33
|
+
* from being clipped, and that traded one clipped element for a worse one: with
|
|
34
|
+
* `overflow: visible` the 548-tall stack overflowed its box and painted the
|
|
35
|
+
* open menu straight across the "Generate" button, which Figma (2058:16373)
|
|
36
|
+
* draws clear and unobstructed under the menu. The CTA is never allowed to be
|
|
37
|
+
* overlapped; the menu is handled by the next rule instead.
|
|
38
|
+
*
|
|
39
|
+
* FOUNDATION REQUEST: promote this to `FormScreen.css` as a
|
|
40
|
+
* `.prizma-form-screen__fields--scroll` variant (or make overflow the default),
|
|
41
|
+
* driven by a `scrollFields` prop on `PrizmaFormScreen`. Every long-form module
|
|
42
|
+
* still to come in Wave 3 โ eKYC, eKYB, address entry โ will hit the same wall.
|
|
43
|
+
*/
|
|
44
|
+
.curp-generate--scroll .prizma-form-screen__fields {
|
|
45
|
+
overflow-y: auto;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* โโ The open Gender menu must stay inside the scrolling column โโโโโโโโโโโโโโ
|
|
49
|
+
* `CURP.Gene.dropdown` exists to show the three gender rows, so they may not be
|
|
50
|
+
* clipped. Core's menu is `position: absolute; top: calc(100% + 8px)` on the
|
|
51
|
+
* field anchor with no portal (Dropdown.css:186-192) and no collision
|
|
52
|
+
* detection, so opening DOWNWARD from the 4th of six fields runs past the
|
|
53
|
+
* bottom of the scrolling box.
|
|
54
|
+
*
|
|
55
|
+
* The one section that forces the menu open therefore anchors it ABOVE its
|
|
56
|
+
* trigger โ the flip a positioned menu normally performs for itself. Only the
|
|
57
|
+
* anchor edge changes: Core's own overlay, own menu, own Spacing/8 offset, own
|
|
58
|
+
* shadow, own rows. The stacking Figma draws (menu over the fields BELOW it)
|
|
59
|
+
* becomes menu over the fields above it, which is the concession a 390ร844
|
|
60
|
+
* frame owes an 1111-tall Figma page.
|
|
61
|
+
*
|
|
62
|
+
* CORE REQUEST: `PrizmaDropdown` needs a portalled (or `position: fixed`) menu
|
|
63
|
+
* with flip/shift collision handling โ today the menu cannot escape any
|
|
64
|
+
* scrolling or clipping ancestor. Every module that puts a dropdown in a long
|
|
65
|
+
* form inherits this.
|
|
66
|
+
*/
|
|
67
|
+
.curp-generate--menu-open .prizma-dropdown__overlay {
|
|
68
|
+
top: auto;
|
|
69
|
+
bottom: calc(100% + var(--prizma-spacing-8));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* โโ The invalid CURP field keeps its clear โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
73
|
+
* `CURP.EnterCURP.error` (76:36434) draws three things at once: the red field,
|
|
74
|
+
* the "โ Invalid CURP" row AND the grey clear โ at the field's right edge.
|
|
75
|
+
* Core renders that button (`PrizmaTextField clearable`) but reveals it only
|
|
76
|
+
* under `:focus-within:not(--error)` (TextField.css:119-121) โ two guards a
|
|
77
|
+
* static error spec state can never satisfy, so the โ never appeared.
|
|
78
|
+
*
|
|
79
|
+
* This releases the guard for that ONE section. It is Core's own button, icon,
|
|
80
|
+
* box and color token โ nothing is hand-rolled (ยง9/ยง10) and no โ glyph is
|
|
81
|
+
* declared here; only Core's `display: none` is lifted, and only where the
|
|
82
|
+
* button already carries Core's own `--show` state (i.e. the field has a
|
|
83
|
+
* value, exactly as Core decides). Every other CURP section keeps Core's
|
|
84
|
+
* behaviour: `filled` (79:1553) draws NO โ and gets none.
|
|
85
|
+
*
|
|
86
|
+
* CORE REQUEST: `PrizmaTextField` needs the `forceState` prop `PrizmaDropdown`
|
|
87
|
+
* already has (the open ask in DEVIATIONS #PI-7) plus a relaxed guard so the
|
|
88
|
+
* clear affordance can coexist with the error treatment, as Figma draws it.
|
|
89
|
+
*/
|
|
90
|
+
.curp-enter--error .prizma-input-textfield--error .prizma-input-textfield__clear--show {
|
|
91
|
+
display: inline-flex;
|
|
92
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
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 { CurpProcessingVariant, CurpStrings } from './CurpStrings';
|
|
8
|
+
import './ScreenLayout.css';
|
|
9
|
+
|
|
10
|
+
export interface CurpProcessingScreenProps
|
|
11
|
+
extends Omit<
|
|
12
|
+
PrizmaProcessingScreenProps,
|
|
13
|
+
'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
|
|
14
|
+
> {
|
|
15
|
+
/** Module copy โ this screen reads the `processing` slice. */
|
|
16
|
+
strings: CurpStrings;
|
|
17
|
+
/** Which spinner section to render. Default `verifying`. */
|
|
18
|
+
variant?: CurpProcessingVariant;
|
|
19
|
+
screenId?: string;
|
|
20
|
+
overrides?: PrizmaScreenOverrides;
|
|
21
|
+
onAction?: PrizmaScreenActionHandler;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* CURP โ the two in-flight screens, built on the Processing archetype
|
|
26
|
+
* (GUIDELINES.md ยง6-C, `PrizmaProcessingScreen`).
|
|
27
|
+
*
|
|
28
|
+
* ONE screen for both purple spinner sections, which are the same frame with
|
|
29
|
+
* different copy:
|
|
30
|
+
* - `verifying` โ `CURP.EnterCURP.veryfing` (the Figma layer name carries the
|
|
31
|
+
* typo), the typed CURP being checked
|
|
32
|
+
* - `generating` โ `CURP.Gene.generating`, the key being derived from the form
|
|
33
|
+
*
|
|
34
|
+
* Both are the pure spinner + H2 case with no button, which is exactly what
|
|
35
|
+
* ยง6-F reserves for C rather than the Result archetype. Measured: the Figma
|
|
36
|
+
* `middle container` centres the 108-tall spinner block in its 570 box
|
|
37
|
+
* ((570 โ 108) / 2 = 231, the frame's own y), so the archetype's centred column
|
|
38
|
+
* is the right template โ the counter-case DEVIATIONS #11 anticipated.
|
|
39
|
+
*/
|
|
40
|
+
export const CurpProcessingScreen = forwardRef<HTMLDivElement, CurpProcessingScreenProps>(
|
|
41
|
+
(
|
|
42
|
+
{
|
|
43
|
+
strings,
|
|
44
|
+
variant = 'verifying',
|
|
45
|
+
screenId = `curp-${variant}`,
|
|
46
|
+
overrides,
|
|
47
|
+
onAction,
|
|
48
|
+
...shell
|
|
49
|
+
},
|
|
50
|
+
ref,
|
|
51
|
+
) => {
|
|
52
|
+
const copy =
|
|
53
|
+
variant === 'generating'
|
|
54
|
+
? strings.processing.generating
|
|
55
|
+
: strings.processing.verifying;
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
<PrizmaProcessingScreen
|
|
59
|
+
ref={ref}
|
|
60
|
+
status="loading"
|
|
61
|
+
title={copy.title}
|
|
62
|
+
subtitle={copy.subtitle}
|
|
63
|
+
verifiedLabel={strings.verifiedLabel}
|
|
64
|
+
navLabel={strings.navLabel}
|
|
65
|
+
screenId={screenId}
|
|
66
|
+
overrides={overrides}
|
|
67
|
+
onAction={onAction}
|
|
68
|
+
{...shell}
|
|
69
|
+
/>
|
|
70
|
+
);
|
|
71
|
+
},
|
|
72
|
+
);
|
|
73
|
+
CurpProcessingScreen.displayName = 'CurpProcessingScreen';
|
|
74
|
+
|
|
75
|
+
export default CurpProcessingScreen;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { CurpResultVariant, CurpStrings } from './CurpStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
|
|
7
|
+
export interface CurpResultScreenProps
|
|
8
|
+
extends Omit<
|
|
9
|
+
PrizmaResultScreenProps,
|
|
10
|
+
'status' | 'title' | 'subtitle' | 'glyph' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
|
|
11
|
+
> {
|
|
12
|
+
/** Module copy โ this screen reads the `result` slice its `variant` names. */
|
|
13
|
+
strings: CurpStrings;
|
|
14
|
+
/** Which verdict section to render. Default `verified`. */
|
|
15
|
+
variant?: CurpResultVariant;
|
|
16
|
+
screenId?: string;
|
|
17
|
+
overrides?: PrizmaScreenOverrides;
|
|
18
|
+
onAction?: PrizmaScreenActionHandler;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* CURP โ the three verdicts, built on the Result archetype
|
|
23
|
+
* (GUIDELINES.md ยง6-F, `PrizmaResultScreen`).
|
|
24
|
+
*
|
|
25
|
+
* ONE screen for the module's three purple verdict sections, which share the
|
|
26
|
+
* archetype's skeleton โ nav โ centred status mark + title block โ CTA band โ
|
|
27
|
+
* anchored tag โ and differ only in status, copy and whether a button exists:
|
|
28
|
+
* - `verified` โ `CURP.EnterCURP.verify`, the positive mark. Figma draws
|
|
29
|
+
* NO button here: the flow advances on its own once the key checks out, so
|
|
30
|
+
* `ctaLabel` is optional in the copy contract and the band disappears.
|
|
31
|
+
* - `notVerified` โ `CURP.EnterCURP.notVerify`, the negative mark + "Try
|
|
32
|
+
* again". Its sibling section `CURP.EnterCURP.notVerifyID` is an
|
|
33
|
+
* override-free INSTANCE of the same frame โ same mark, same copy, same
|
|
34
|
+
* button โ so it is this screen, not a second one.
|
|
35
|
+
* - `generateError` โ `CURP.Gene.error`, the generator failing: negative mark,
|
|
36
|
+
* a supporting line, and "Edit information" back to the form.
|
|
37
|
+
*
|
|
38
|
+
* Core's outline status marks are used, not Figma's two-tone filled discs โ the
|
|
39
|
+
* icon-outline sweep of 2026-07-28 settled that for every module (DEVIATIONS
|
|
40
|
+
* #15, #DC-34), and this file's Figma is one sweep behind on all three frames.
|
|
41
|
+
*/
|
|
42
|
+
export const CurpResultScreen = forwardRef<HTMLDivElement, CurpResultScreenProps>(
|
|
43
|
+
(
|
|
44
|
+
{
|
|
45
|
+
strings,
|
|
46
|
+
variant = 'verified',
|
|
47
|
+
screenId = `curp-result-${variant}`,
|
|
48
|
+
overrides,
|
|
49
|
+
onAction,
|
|
50
|
+
...shell
|
|
51
|
+
},
|
|
52
|
+
ref,
|
|
53
|
+
) => {
|
|
54
|
+
const copy =
|
|
55
|
+
variant === 'notVerified'
|
|
56
|
+
? strings.result.notVerified
|
|
57
|
+
: variant === 'generateError'
|
|
58
|
+
? strings.result.generateError
|
|
59
|
+
: strings.result.verified;
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<PrizmaResultScreen
|
|
63
|
+
ref={ref}
|
|
64
|
+
status={variant === 'verified' ? 'success' : 'error'}
|
|
65
|
+
title={copy.title}
|
|
66
|
+
subtitle={copy.subtitle}
|
|
67
|
+
ctaLabel={copy.ctaLabel}
|
|
68
|
+
verifiedLabel={strings.verifiedLabel}
|
|
69
|
+
navLabel={strings.navLabel}
|
|
70
|
+
screenId={screenId}
|
|
71
|
+
overrides={overrides}
|
|
72
|
+
onAction={onAction}
|
|
73
|
+
{...shell}
|
|
74
|
+
/>
|
|
75
|
+
);
|
|
76
|
+
},
|
|
77
|
+
);
|
|
78
|
+
CurpResultScreen.displayName = 'CurpResultScreen';
|
|
79
|
+
|
|
80
|
+
export default CurpResultScreen;
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// CURP โ copy contract.
|
|
2
|
+
//
|
|
3
|
+
// Figma: `๐๏ธ CURP - Screens specs + Localization` (YFYCUUSIxLV6I8jnwWgWDW,
|
|
4
|
+
// page 5:13191). TWO purple parent sections:
|
|
5
|
+
// CURP.EnterCURP โ default / focused / filled / error / loading /
|
|
6
|
+
// veryfing / verify / notVerify (+ notVerifyID)
|
|
7
|
+
// CURP.Gene โ default / dropdown / filled / generating / error / confirm
|
|
8
|
+
//
|
|
9
|
+
// The module is Mexico's national-ID (Clave รnica de Registro de Poblaciรณn)
|
|
10
|
+
// lookup: the user either TYPES a CURP and it is verified, or โ when they do
|
|
11
|
+
// not know it โ GENERATES one from six identity fields and confirms the result.
|
|
12
|
+
//
|
|
13
|
+
// No hardcoded English anywhere in a screen: every visible string arrives here,
|
|
14
|
+
// so the host's locale pack drives the module (the Figma file ships ES + PT
|
|
15
|
+
// columns beside the EN one).
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The `CURP.EnterCURP.*` input sections. All five draw the SAME layout โ
|
|
19
|
+
* nav โ Title โ Spacing/32 โ one text field โ primary + secondary CTA โ tag โ
|
|
20
|
+
* and differ only in field content and CTA state, which is exactly what
|
|
21
|
+
* GUIDELINES ยง6-E means by "states are separate screens sharing the identical
|
|
22
|
+
* layout":
|
|
23
|
+
* - `default` โ empty field showing the placeholder, CTA enabled (Figma draws
|
|
24
|
+
* it enabled even with nothing typed)
|
|
25
|
+
* - `focused` โ empty field with the focus ring and the caret (keyboard up)
|
|
26
|
+
* - `filled` โ focus ring with a complete CURP typed
|
|
27
|
+
* - `error` โ negative field + clear โ + the "Invalid CURP" row
|
|
28
|
+
* - `loading` โ both actions inert while the lookup runs; the spinner rides the
|
|
29
|
+
* CTA, never the field (the Phone Input lesson, DEVIATIONS #PI-5)
|
|
30
|
+
*/
|
|
31
|
+
export type CurpEnterState = 'default' | 'focused' | 'filled' | 'error' | 'loading';
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The `CURP.Gene.*` form sections โ the six-field generator:
|
|
35
|
+
* - `default` โ every field empty on its placeholder
|
|
36
|
+
* - `dropdown` โ the Gender menu open over the form (Core's `forceOpen`)
|
|
37
|
+
* - `filled` โ every field carrying a value
|
|
38
|
+
*/
|
|
39
|
+
export type CurpGenerateState = 'default' | 'dropdown' | 'filled';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The two spinner sections. `verifying` is `CURP.EnterCURP.veryfing` (the
|
|
43
|
+
* Figma layer name carries the typo); `generating` is `CURP.Gene.generating`.
|
|
44
|
+
*/
|
|
45
|
+
export type CurpProcessingVariant = 'verifying' | 'generating';
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The three verdict sections:
|
|
49
|
+
* - `verified` โ `CURP.EnterCURP.verify`, the positive mark, no CTA
|
|
50
|
+
* - `notVerified` โ `CURP.EnterCURP.notVerify`, the negative mark + retry
|
|
51
|
+
* - `generateError` โ `CURP.Gene.error`, generation failed + "Edit information"
|
|
52
|
+
*/
|
|
53
|
+
export type CurpResultVariant = 'verified' | 'notVerified' | 'generateError';
|
|
54
|
+
|
|
55
|
+
/** One selectable row in the Gender / Birth-state menus. Runtime data, not
|
|
56
|
+
* copy โ the host supplies its own list (the state catalogue is 32 entries and
|
|
57
|
+
* the gender set is a product decision), exactly as Phone Input takes its dial
|
|
58
|
+
* codes as data rather than strings. */
|
|
59
|
+
export interface CurpOption {
|
|
60
|
+
/** Stable value, e.g. `F` / `M` / `X`, or a 2-letter state code. */
|
|
61
|
+
value: string;
|
|
62
|
+
/** The row label as drawn. */
|
|
63
|
+
label: string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** The values the generator form carries. Runtime data, never copy. */
|
|
67
|
+
export interface CurpGenerateValues {
|
|
68
|
+
firstName?: string;
|
|
69
|
+
firstLastName?: string;
|
|
70
|
+
secondLastName?: string;
|
|
71
|
+
/** A `CurpOption.value` from `genders`. */
|
|
72
|
+
gender?: string;
|
|
73
|
+
/** As typed into the date field, e.g. `07/10/1990`. */
|
|
74
|
+
dateOfBirth?: string;
|
|
75
|
+
/** A `CurpOption.value` from `states`. */
|
|
76
|
+
birthState?: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Copy for one labelled field of the generator form. */
|
|
80
|
+
export interface CurpFieldStrings {
|
|
81
|
+
/** Visible label ("First name"). The required `*` is appended by Core from
|
|
82
|
+
* `CurpStrings.requiredHint`, never baked into this string. */
|
|
83
|
+
label: string;
|
|
84
|
+
/** Placeholder inside the field ("Your first name *"). */
|
|
85
|
+
placeholder?: string;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export interface CurpStrings {
|
|
89
|
+
/** "verified by" attribution in the footer tag. */
|
|
90
|
+
verifiedLabel: string;
|
|
91
|
+
/** Accessible name for the logo nav row. */
|
|
92
|
+
navLabel?: string;
|
|
93
|
+
/**
|
|
94
|
+
* Suffix Core appends to a required field's label โ the `*` every
|
|
95
|
+
* `CURP.Gene.*` label carries. Passed to Core's own `requiredHint` prop so
|
|
96
|
+
* the marker is localizable and never hardcoded in a screen.
|
|
97
|
+
*/
|
|
98
|
+
requiredHint?: string;
|
|
99
|
+
|
|
100
|
+
/** CURP.EnterCURP.{default,focused,filled,error,loading} */
|
|
101
|
+
enter: {
|
|
102
|
+
/** H2 ("Enter your CURP"). */
|
|
103
|
+
title: string;
|
|
104
|
+
/** H5 โ the purple sections draw none, kept for hosts that want one. */
|
|
105
|
+
subtitle?: string;
|
|
106
|
+
/** Field placeholder ("Your CURP"). */
|
|
107
|
+
placeholder: string;
|
|
108
|
+
/** Accessible label for the field โ Figma draws no visible label row, so
|
|
109
|
+
* the copy rides `aria-label` (the #PI-4 precedent). */
|
|
110
|
+
fieldLabel?: string;
|
|
111
|
+
/** Accessible name for the clear โ shown on the `error` section. */
|
|
112
|
+
clearLabel?: string;
|
|
113
|
+
/** Error row on the `error` state ("Invalid CURP"). */
|
|
114
|
+
errorText: string;
|
|
115
|
+
/** Primary CTA ("Continue"). */
|
|
116
|
+
ctaLabel: string;
|
|
117
|
+
/** Accessible busy label while the lookup runs (`loading`). */
|
|
118
|
+
ctaLoadingLabel?: string;
|
|
119
|
+
/** Secondary CTA below the primary ("I don't have a CURP") โ it branches
|
|
120
|
+
* into the generator. Emits `secondary`. */
|
|
121
|
+
noCurpLabel: string;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/** CURP.Gene.{default,dropdown,filled} */
|
|
125
|
+
generate: {
|
|
126
|
+
/** H2 ("Generate your CURP"). */
|
|
127
|
+
title: string;
|
|
128
|
+
/** H5 ("All fields marked with * are required."). */
|
|
129
|
+
subtitle?: string;
|
|
130
|
+
firstName: CurpFieldStrings;
|
|
131
|
+
firstLastName: CurpFieldStrings;
|
|
132
|
+
secondLastName: CurpFieldStrings;
|
|
133
|
+
gender: CurpFieldStrings & {
|
|
134
|
+
/** Search placeholder inside the open menu, when the host makes it
|
|
135
|
+
* searchable. */
|
|
136
|
+
searchPlaceholder?: string;
|
|
137
|
+
};
|
|
138
|
+
dateOfBirth: CurpFieldStrings & {
|
|
139
|
+
/** Accessible name for Core's trailing calendar affordance. */
|
|
140
|
+
calendarLabel?: string;
|
|
141
|
+
};
|
|
142
|
+
birthState: CurpFieldStrings & { searchPlaceholder?: string };
|
|
143
|
+
/** Primary CTA ("Generate"). */
|
|
144
|
+
ctaLabel: string;
|
|
145
|
+
/** Accessible busy label, for hosts that keep the user on the form while
|
|
146
|
+
* the generator runs instead of moving to the spinner screen. */
|
|
147
|
+
ctaLoadingLabel?: string;
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
/** CURP.Gene.confirm โ the generated CURP shown back for confirmation. */
|
|
151
|
+
confirm: {
|
|
152
|
+
/** H2 ("Confirm your CURP"). */
|
|
153
|
+
title: string;
|
|
154
|
+
subtitle?: string;
|
|
155
|
+
/** Accessible label for the read-back field (no visible label row). */
|
|
156
|
+
fieldLabel?: string;
|
|
157
|
+
/** Primary CTA ("Continue"). */
|
|
158
|
+
ctaLabel: string;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
/** The two spinner screens. */
|
|
162
|
+
processing: {
|
|
163
|
+
/** CURP.EnterCURP.veryfing ("Verifying your CURPโฆ"). */
|
|
164
|
+
verifying: { title: string; subtitle?: string };
|
|
165
|
+
/** CURP.Gene.generating ("Generating CURPโฆ"). */
|
|
166
|
+
generating: { title: string; subtitle?: string };
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
/** The three verdict screens. */
|
|
170
|
+
result: {
|
|
171
|
+
/** CURP.EnterCURP.verify ("CURP verified!") โ Figma draws no CTA. */
|
|
172
|
+
verified: { title: string; subtitle?: string; ctaLabel?: string };
|
|
173
|
+
/** CURP.EnterCURP.notVerify ("CURP not verified" / "Try again"). */
|
|
174
|
+
notVerified: { title: string; subtitle?: string; ctaLabel: string };
|
|
175
|
+
/** CURP.Gene.error ("Couldn't generate CURP" / "Edit information"). */
|
|
176
|
+
generateError: { title: string; subtitle?: string; ctaLabel: string };
|
|
177
|
+
};
|
|
178
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import React, { forwardRef, Fragment, type ReactNode } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
PrizmaCheckbox,
|
|
4
|
+
type PrizmaConsentSegment,
|
|
5
|
+
} from '@incodetech/prizma-core-web/checkbox';
|
|
6
|
+
import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
|
|
7
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
8
|
+
import type {
|
|
9
|
+
DataSharingConsentState,
|
|
10
|
+
DataSharingConsentStrings,
|
|
11
|
+
} from './DataSharingConsentStrings';
|
|
12
|
+
import './ScreenLayout.css';
|
|
13
|
+
import './DataSharingConsentLayout.css';
|
|
14
|
+
|
|
15
|
+
export interface DataSharingConsentConsentScreenProps
|
|
16
|
+
extends Omit<
|
|
17
|
+
PrizmaFormScreenProps,
|
|
18
|
+
| 'title'
|
|
19
|
+
| 'subtitle'
|
|
20
|
+
| 'ctaLabel'
|
|
21
|
+
| 'ctaDisabled'
|
|
22
|
+
| 'verifiedLabel'
|
|
23
|
+
| 'children'
|
|
24
|
+
| 'navLabel'
|
|
25
|
+
| 'linkLabel'
|
|
26
|
+
| 'linkContent'
|
|
27
|
+
// The column rhythm and the panning stack are the section's, not a host's.
|
|
28
|
+
| 'fieldsOffset'
|
|
29
|
+
| 'fieldsGap'
|
|
30
|
+
| 'scrollFields'
|
|
31
|
+
> {
|
|
32
|
+
/** Module copy โ this screen reads the `consent` slice. */
|
|
33
|
+
strings: DataSharingConsentStrings;
|
|
34
|
+
/** Which purple `User Consent` treatment to render. Default `default`. */
|
|
35
|
+
state?: DataSharingConsentState;
|
|
36
|
+
screenId?: string;
|
|
37
|
+
overrides?: PrizmaScreenOverrides;
|
|
38
|
+
onAction?: PrizmaScreenActionHandler;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Renders an ordered segment list as a line of copy carrying inline links โ
|
|
43
|
+
* the same contract Core's `PrizmaCheckbox size="L"` uses for its own body, so
|
|
44
|
+
* one shape of copy serves both the disclosure paragraph and the consent cards.
|
|
45
|
+
* A link is a real `<a href>` (it opens a legal document, it does not advance
|
|
46
|
+
* the flow) and it additionally emits `tertiary` so a host can intercept it โ
|
|
47
|
+
* distinct from `cta`, per the rule that a sentence carrying links is not one
|
|
48
|
+
* button (DEVIATIONS #PI-10).
|
|
49
|
+
*/
|
|
50
|
+
function renderSegments(
|
|
51
|
+
segments: PrizmaConsentSegment[],
|
|
52
|
+
onLink?: () => void,
|
|
53
|
+
): ReactNode {
|
|
54
|
+
return segments.map((seg, i) =>
|
|
55
|
+
typeof seg === 'string' ? (
|
|
56
|
+
<Fragment key={i}>{seg}</Fragment>
|
|
57
|
+
) : (
|
|
58
|
+
<a
|
|
59
|
+
key={i}
|
|
60
|
+
className="data-sharing-consent__body-link"
|
|
61
|
+
href={seg.href}
|
|
62
|
+
target={seg.target}
|
|
63
|
+
rel={seg.rel}
|
|
64
|
+
onClick={(e) => {
|
|
65
|
+
seg.onClick?.(e);
|
|
66
|
+
onLink?.();
|
|
67
|
+
}}
|
|
68
|
+
>
|
|
69
|
+
{seg.text}
|
|
70
|
+
</a>
|
|
71
|
+
),
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Data Sharing Consent โ the biometric-disclosure consent screen, built on the
|
|
77
|
+
* Form archetype (GUIDELINES.md ยง6-E, `PrizmaFormScreen`).
|
|
78
|
+
*
|
|
79
|
+
* ONE screen for the whole purple `User Consent` section (27151:441): the
|
|
80
|
+
* master component (27151:321), the taller every-consent variant (29645:5306)
|
|
81
|
+
* and the `๐ง Behavior` frame (27198:2661) share an identical skeleton โ nav โ
|
|
82
|
+
* Title (H2, no subtitle) โ the legal disclosure โ one or more consent cards โ
|
|
83
|
+
* primary CTA โ tag โ and differ ONLY in how many cards are listed, whether
|
|
84
|
+
* they are ticked, and whether the CTA is released.
|
|
85
|
+
*
|
|
86
|
+
* ONE screen for TWO MODULES, too โ `data-sharing-consent` and `user-consent`
|
|
87
|
+
* are separate SDK modules drawing this same screen, so a host passes its own
|
|
88
|
+
* `screenId` prefix and nothing else changes. See `DataSharingConsentStrings`.
|
|
89
|
+
*
|
|
90
|
+
* WHY ARCHETYPE E AND NOT G. ยง6-G names "consent" among its consumers and its
|
|
91
|
+
* title โ list offset is the Spacing/24 this section draws, so G was the
|
|
92
|
+
* obvious first read. It cannot serve this module: `PrizmaListScreen` has **no
|
|
93
|
+
* `ctaDisabled` slot**, and the gated CTA is the whole point of a consent
|
|
94
|
+
* screen โ Figma greys "Continue" on two of the four sections and releases it
|
|
95
|
+
* on the other two. Archetype E is also the truthful reading of the middle: a
|
|
96
|
+
* `PrizmaCheckbox` is a real `<input type="checkbox">` that joins the form, so
|
|
97
|
+
* this is a form whose validity gates its CTA, not a static card list.
|
|
98
|
+
*
|
|
99
|
+
* THE COLUMN RHYTHM IS Spacing/24, NOT E'S DEFAULT 32/16. The master component
|
|
100
|
+
* (27151:321) draws a flat 24 down the whole middle โ title 0โ28, the
|
|
101
|
+
* disclosure at y=52, the disclosure ending 304 and the first consent card at
|
|
102
|
+
* 328 โ and the tall variant (29645:5306) repeats it between every card (459 โ
|
|
103
|
+
* 557 โ 655, each 74 tall). E's own 32/16 is Phone Input's measured value
|
|
104
|
+
* (#PI-2) and stays the archetype default; this screen SELECTS 24 for both
|
|
105
|
+
* through the archetype's `fieldsOffset` / `fieldsGap` slots. Nothing is
|
|
106
|
+
* re-declared in `DataSharingConsentLayout.css` โ the values live once, in
|
|
107
|
+
* `FormScreen.css`, keyed off the Prizma spacing scale. DEVIATIONS #DSC-1.
|
|
108
|
+
*
|
|
109
|
+
* Three things are deliberate:
|
|
110
|
+
*
|
|
111
|
+
* 1. The consent card is Core's `PrizmaCheckbox size="L"` โ the component IS
|
|
112
|
+
* the tinted container Figma draws (Spacing/20/16 padding, the container
|
|
113
|
+
* radius, `Surface/Brand/50`, the 28ร28 box, the Size-S body). Nothing about
|
|
114
|
+
* the card is composed here.
|
|
115
|
+
* 2. The boxes are STATIC, like every other spec state in this package: Core's
|
|
116
|
+
* `checked` is a required controlled prop and the component always wires its
|
|
117
|
+
* own `onChange`, so a screen carries one tick state and raises no React
|
|
118
|
+
* warning. `disabled` is NOT used โ Figma draws these cards on the live
|
|
119
|
+
* surface in every section, and `disabled` would repaint them
|
|
120
|
+
* `Surface/Neutral/50` (the #PI-6 lesson: never borrow a semantic state to
|
|
121
|
+
* make something inert).
|
|
122
|
+
* 3. The CTA is gated by `ctaDisabled`, which is Core's own
|
|
123
|
+
* `button/primary/surface|text/disabled` treatment โ the grey "Continue" the
|
|
124
|
+
* master frame draws.
|
|
125
|
+
* 4. The refusal states pass Core's `error` + `errorText` STRAIGHT THROUGH to
|
|
126
|
+
* the checkbox and paint nothing themselves. The card keeps its fill, takes
|
|
127
|
+
* no border, and the box keeps its default border; the message row below the
|
|
128
|
+
* card is the whole visible error (#1925). A screen that added a wash or an
|
|
129
|
+
* outline here would be re-deciding a call the component already made.
|
|
130
|
+
*/
|
|
131
|
+
export const DataSharingConsentConsentScreen = forwardRef<
|
|
132
|
+
HTMLDivElement,
|
|
133
|
+
DataSharingConsentConsentScreenProps
|
|
134
|
+
>(
|
|
135
|
+
(
|
|
136
|
+
{
|
|
137
|
+
strings,
|
|
138
|
+
state = 'default',
|
|
139
|
+
screenId = `data-sharing-consent-${state}`,
|
|
140
|
+
className,
|
|
141
|
+
overrides,
|
|
142
|
+
onAction,
|
|
143
|
+
...shell
|
|
144
|
+
},
|
|
145
|
+
ref,
|
|
146
|
+
) => {
|
|
147
|
+
// The master frame lists the mandatory consent alone; the tall variant and
|
|
148
|
+
// the Behavior frame list every consent the flow asks for.
|
|
149
|
+
const listsEveryConsent =
|
|
150
|
+
state === 'multiple' ||
|
|
151
|
+
state === 'multipleAccepted' ||
|
|
152
|
+
state === 'multipleRejected';
|
|
153
|
+
// Ticked on the two sections Figma draws with the blue box and the released
|
|
154
|
+
// CTA; unticked โ and therefore CTA-greyed โ everywhere else.
|
|
155
|
+
const accepted = state === 'accepted' || state === 'multipleAccepted';
|
|
156
|
+
// Continue was pressed and refused. Never true at the same time as
|
|
157
|
+
// `accepted`: there is nothing to refuse once the consents are ticked.
|
|
158
|
+
const rejected = state === 'rejected' || state === 'multipleRejected';
|
|
159
|
+
|
|
160
|
+
const items = listsEveryConsent
|
|
161
|
+
? strings.consent.items
|
|
162
|
+
: strings.consent.items.slice(0, 1);
|
|
163
|
+
|
|
164
|
+
return (
|
|
165
|
+
<PrizmaFormScreen
|
|
166
|
+
ref={ref}
|
|
167
|
+
/* Scopes the module's one text style (the legal disclosure paragraph
|
|
168
|
+
and its inline document link). It declares no spacing. */
|
|
169
|
+
className={['data-sharing-consent', className].filter(Boolean).join(' ')}
|
|
170
|
+
title={strings.consent.title}
|
|
171
|
+
subtitle={strings.consent.subtitle}
|
|
172
|
+
/* The section's flat Spacing/24 column rhythm โ selected from the
|
|
173
|
+
spacing scale, not declared. See the docstring above. */
|
|
174
|
+
fieldsOffset="24"
|
|
175
|
+
fieldsGap="24"
|
|
176
|
+
/* The disclosure is host-supplied legal copy: it can outgrow the 844
|
|
177
|
+
frame on ANY of the four states, so the stack pans on all of them โ
|
|
178
|
+
the archetype clips it Spacing/16 above the CTA, as 29645:5306 draws
|
|
179
|
+
the sliced second card. */
|
|
180
|
+
scrollFields
|
|
181
|
+
ctaLabel={strings.consent.ctaLabel}
|
|
182
|
+
/* "Continue" stays inert until the consents are ticked โ Core's own
|
|
183
|
+
disabled primary, the grey button the master frame draws. */
|
|
184
|
+
ctaDisabled={!accepted}
|
|
185
|
+
verifiedLabel={strings.verifiedLabel}
|
|
186
|
+
navLabel={strings.navLabel}
|
|
187
|
+
screenId={screenId}
|
|
188
|
+
overrides={overrides}
|
|
189
|
+
onAction={onAction}
|
|
190
|
+
{...shell}
|
|
191
|
+
>
|
|
192
|
+
<p className="data-sharing-consent__body">
|
|
193
|
+
{renderSegments(strings.consent.body, () =>
|
|
194
|
+
onAction?.({ type: 'tertiary', screenId }),
|
|
195
|
+
)}
|
|
196
|
+
</p>
|
|
197
|
+
{items.map((item, i) => (
|
|
198
|
+
<PrizmaCheckbox
|
|
199
|
+
key={i}
|
|
200
|
+
size="L"
|
|
201
|
+
checked={accepted}
|
|
202
|
+
aria-label={item.ariaLabel}
|
|
203
|
+
/* A refusal is about the MANDATORY consents only โ an optional one
|
|
204
|
+
left unticked is a choice, not a mistake โ and it cannot survive
|
|
205
|
+
the box being ticked. */
|
|
206
|
+
error={rejected && !!item.required && !accepted}
|
|
207
|
+
errorText={strings.consent.errorText}
|
|
208
|
+
/* The `*` on a mandatory consent rides `requiredHint` so it stays
|
|
209
|
+
localizable rather than being baked into the copy (#CURP-4). */
|
|
210
|
+
segments={
|
|
211
|
+
item.required && strings.requiredHint
|
|
212
|
+
? [...item.segments, strings.requiredHint]
|
|
213
|
+
: item.segments
|
|
214
|
+
}
|
|
215
|
+
/>
|
|
216
|
+
))}
|
|
217
|
+
</PrizmaFormScreen>
|
|
218
|
+
);
|
|
219
|
+
},
|
|
220
|
+
);
|
|
221
|
+
DataSharingConsentConsentScreen.displayName = 'DataSharingConsentConsentScreen';
|
|
222
|
+
|
|
223
|
+
export default DataSharingConsentConsentScreen;
|