@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
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/* CaptureOverlay — the one shared capture vignette (GUIDELINES.md §6-D, §7).
|
|
2
|
+
*
|
|
3
|
+
* The transparent window carries the scrim as an oversized box-shadow, so the
|
|
4
|
+
* dimmed surround always hugs the window's rounded geometry. Hardcoded values
|
|
5
|
+
* below are geometry fixed by design (verified absent from the token set):
|
|
6
|
+
* the 2000px scrim spread, the rgba(0,0,0,.8) scrim, the 35%-white default
|
|
7
|
+
* border, and the ID-1 card aspect ratio.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.prizma-capture-overlay {
|
|
11
|
+
position: relative;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
flex-shrink: 0;
|
|
14
|
+
border-radius: var(--prizma-border-radius-medium);
|
|
15
|
+
border: 4px solid rgba(255, 255, 255, 0.35); /* hardcoded — Figma overlay frame, no token */
|
|
16
|
+
box-shadow: 0 0 0 2000px rgba(0, 0, 0, 0.8); /* hardcoded — the vignette scrim, no token */
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* Ring (face): 342×342 at the 390 reference → 87.7cqw, capped at design size. */
|
|
20
|
+
.prizma-capture-overlay--ring {
|
|
21
|
+
width: min(87.7cqw, 342px);
|
|
22
|
+
aspect-ratio: 1;
|
|
23
|
+
border-radius: var(--prizma-border-radius-full);
|
|
24
|
+
margin-inline: auto;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Landscape (ID card): full content width, ID-1 card ratio. */
|
|
28
|
+
.prizma-capture-overlay--landscape {
|
|
29
|
+
width: 100%;
|
|
30
|
+
aspect-ratio: 1.586; /* hardcoded — ISO/IEC 7810 ID-1 card ratio */
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* Portrait (document / proof of address): full content width, letter-ish ratio. */
|
|
34
|
+
.prizma-capture-overlay--portrait {
|
|
35
|
+
width: 100%;
|
|
36
|
+
aspect-ratio: 0.72; /* hardcoded — Studio portrait document frame ratio */
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.prizma-capture-overlay--focused {
|
|
40
|
+
border-color: var(--prizma-border-status-focus);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.prizma-capture-overlay--success {
|
|
44
|
+
border-color: var(--prizma-border-status-positive-static);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Window content (camera feed / captured still) fills the window. */
|
|
48
|
+
.prizma-capture-overlay > img,
|
|
49
|
+
.prizma-capture-overlay > video {
|
|
50
|
+
position: absolute;
|
|
51
|
+
inset: 0;
|
|
52
|
+
width: 100%;
|
|
53
|
+
height: 100%;
|
|
54
|
+
object-fit: cover;
|
|
55
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React, { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';
|
|
2
|
+
import './CaptureOverlay.css';
|
|
3
|
+
|
|
4
|
+
export type PrizmaCaptureOverlayShape = 'ring' | 'portrait' | 'landscape';
|
|
5
|
+
export type PrizmaCaptureOverlayState = 'default' | 'focused' | 'success';
|
|
6
|
+
|
|
7
|
+
export interface PrizmaCaptureOverlayProps extends ComponentPropsWithoutRef<'div'> {
|
|
8
|
+
/** Window geometry: `ring` (face, circular), `landscape` (ID card),
|
|
9
|
+
* `portrait` (document / proof of address). */
|
|
10
|
+
shape: PrizmaCaptureOverlayShape;
|
|
11
|
+
/** Border treatment: `default` (35% white), `focused` (focus token),
|
|
12
|
+
* `success` (positive token). */
|
|
13
|
+
state?: PrizmaCaptureOverlayState;
|
|
14
|
+
/** Content inside the transparent window (camera feed / captured still). */
|
|
15
|
+
children?: ReactNode;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated DO NOT USE — scheduled for removal. Use Core instead:
|
|
20
|
+
* `PrizmaIdCapture` (`type="id" | "passport" | "poa"`, `mode="overlay"`,
|
|
21
|
+
* `scrim`) or `PrizmaSelfieCapture`.
|
|
22
|
+
*
|
|
23
|
+
* This component was written from the Studio-era guidelines' description of the
|
|
24
|
+
* capture vignette without first checking that the design system already ships
|
|
25
|
+
* it. It does, and better: Core's scrim is
|
|
26
|
+
* `box-shadow: 0 0 0 200vmax var(--prizma-surface-neutral-900-80-static)`
|
|
27
|
+
* (tokenized, viewport-relative) and it carries the real id-h / id-v /
|
|
28
|
+
* passport-h / passport-v / glare geometry, while this file hardcodes
|
|
29
|
+
* `rgba(0,0,0,.8)` at a fixed 2000px spread over three generic shapes.
|
|
30
|
+
*
|
|
31
|
+
* Keeping a local re-implementation of a Core primitive is exactly the drift
|
|
32
|
+
* this package exists to end. Zero modules use it (face-capture and face-match
|
|
33
|
+
* use `PrizmaSelfieCapture`; document-capture uses `PrizmaIdCapture`).
|
|
34
|
+
* DEVIATIONS.md #F-26.
|
|
35
|
+
*/
|
|
36
|
+
export const PrizmaCaptureOverlay = forwardRef<HTMLDivElement, PrizmaCaptureOverlayProps>(
|
|
37
|
+
({ shape, state = 'default', className, children, ...rest }, ref) => (
|
|
38
|
+
<div
|
|
39
|
+
ref={ref}
|
|
40
|
+
className={[
|
|
41
|
+
'prizma-capture-overlay',
|
|
42
|
+
`prizma-capture-overlay--${shape}`,
|
|
43
|
+
`prizma-capture-overlay--${state}`,
|
|
44
|
+
className ?? '',
|
|
45
|
+
]
|
|
46
|
+
.filter(Boolean)
|
|
47
|
+
.join(' ')}
|
|
48
|
+
{...rest}
|
|
49
|
+
>
|
|
50
|
+
{children}
|
|
51
|
+
</div>
|
|
52
|
+
),
|
|
53
|
+
);
|
|
54
|
+
PrizmaCaptureOverlay.displayName = 'PrizmaCaptureOverlay';
|
|
55
|
+
|
|
56
|
+
export default PrizmaCaptureOverlay;
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
PrizmaSelfieCapture,
|
|
4
|
+
type PrizmaSelfieCaptureState,
|
|
5
|
+
} from '@incodetech/prizma-core-web/selfie-capture';
|
|
6
|
+
import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
|
|
7
|
+
import { PrizmaScreenShell, type PrizmaScreenShellProps } from './ScreenShell';
|
|
8
|
+
import { PrizmaScreenNav } from './ScreenNav';
|
|
9
|
+
import type {
|
|
10
|
+
PrizmaScreenActionHandler,
|
|
11
|
+
PrizmaScreenChromeProps,
|
|
12
|
+
PrizmaScreenOverrides,
|
|
13
|
+
} from './types';
|
|
14
|
+
import './ScreenLayout.css';
|
|
15
|
+
|
|
16
|
+
export interface PrizmaCaptureScreenProps
|
|
17
|
+
extends Omit<PrizmaScreenShellProps, 'dark' | 'title'>,
|
|
18
|
+
PrizmaScreenChromeProps {
|
|
19
|
+
/** Where the selfie flow is — forwarded to PrizmaSelfieCapture. */
|
|
20
|
+
state?: PrizmaSelfieCaptureState;
|
|
21
|
+
/**
|
|
22
|
+
* Is the LIVE CAMERA FEED open? Default `true`.
|
|
23
|
+
*
|
|
24
|
+
* Only feed-open screens count as "capture screens" (owner rule 2026-08-18):
|
|
25
|
+
* `uploading` / `processing` / `success` reuse this archetype's geometry —
|
|
26
|
+
* Core dissolves the stage into a spinner or status mark (DEVIATIONS #11) —
|
|
27
|
+
* but the camera is closed, so they are ordinary screens: header shown, and
|
|
28
|
+
* they follow the app theme instead of pinning light.
|
|
29
|
+
*/
|
|
30
|
+
cameraOpen?: boolean;
|
|
31
|
+
/** Live camera feed (<video>) or captured still (<img>). */
|
|
32
|
+
camera?: ReactNode;
|
|
33
|
+
/** Instruction line under the ring (e.g. "Look at the camera"). Rendered by
|
|
34
|
+
* PrizmaSelfieCapture as Headline/H4 at the designed offset — this is the
|
|
35
|
+
* ONLY place a capture instruction belongs (DEVIATIONS #12, #14). */
|
|
36
|
+
feedbackText?: string;
|
|
37
|
+
/** Manual capture mode — shutter button + manual instruction copy. */
|
|
38
|
+
isManual?: boolean;
|
|
39
|
+
manualFeedbackText?: string;
|
|
40
|
+
/** Per-state status copy (uploading / success / error / warning). */
|
|
41
|
+
statusLabels?: Partial<Record<PrizmaSelfieCaptureState, string>>;
|
|
42
|
+
/** "verified by" attribution copy for the footer tag. */
|
|
43
|
+
verifiedLabel: string;
|
|
44
|
+
navLabel?: string;
|
|
45
|
+
screenId?: string;
|
|
46
|
+
overrides?: PrizmaScreenOverrides;
|
|
47
|
+
onAction?: PrizmaScreenActionHandler;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Archetype B — Capture / Liveness ring (GUIDELINES.md §6-B).
|
|
52
|
+
* Nav → capture stage → tag pinned to the bottom. The ring offset (40), the
|
|
53
|
+
* instruction gap (32), the instruction typography (H4), the silhouette,
|
|
54
|
+
* and every verdict state live INSIDE Core's PrizmaSelfieCapture — this
|
|
55
|
+
* archetype adds no offsets of its own (DEVIATIONS #12, #14) and never
|
|
56
|
+
* re-implements any of it (§7).
|
|
57
|
+
*
|
|
58
|
+
* Core also models `uploading` / `success` as capture STATES (the stage
|
|
59
|
+
* dissolves into the spinner / status title in the ring's own slot), so
|
|
60
|
+
* loading and result screens of a capture module use this archetype too —
|
|
61
|
+
* not the centered Processing archetype (DEVIATIONS #11).
|
|
62
|
+
*/
|
|
63
|
+
export const PrizmaCaptureScreen = forwardRef<HTMLDivElement, PrizmaCaptureScreenProps>(
|
|
64
|
+
(
|
|
65
|
+
{
|
|
66
|
+
showHeader,
|
|
67
|
+
showFooter = true,
|
|
68
|
+
cameraOpen = true,
|
|
69
|
+
state,
|
|
70
|
+
camera,
|
|
71
|
+
feedbackText,
|
|
72
|
+
isManual,
|
|
73
|
+
manualFeedbackText,
|
|
74
|
+
statusLabels,
|
|
75
|
+
verifiedLabel,
|
|
76
|
+
navLabel,
|
|
77
|
+
screenId,
|
|
78
|
+
overrides,
|
|
79
|
+
onAction,
|
|
80
|
+
...shell
|
|
81
|
+
},
|
|
82
|
+
ref,
|
|
83
|
+
) => (
|
|
84
|
+
// Pin light ONLY while the camera feed is open: Core paints the live
|
|
85
|
+
// capture area with Static inks because "the capture screen stays WHITE in
|
|
86
|
+
// both modes — light is needed for the shot" (SelfieCapture.css, owner
|
|
87
|
+
// 2026-07-14). Feed-closed screens are ordinary screens and follow the app.
|
|
88
|
+
// DEVIATIONS #F-27.
|
|
89
|
+
<PrizmaScreenShell ref={ref} theme={cameraOpen ? 'light' : undefined} {...shell}>
|
|
90
|
+
{/* Feed-open capture screens are footer-only by default: dense screens,
|
|
91
|
+
and the space is reserved for flashlight / hologram / accepted
|
|
92
|
+
documents. Supplying `overrides.logo` IS the client opt-in. Once the
|
|
93
|
+
feed closes (uploading / processing / success) the screen is ordinary
|
|
94
|
+
and the header returns. Owner rule 2026-08-18. */}
|
|
95
|
+
<PrizmaScreenNav
|
|
96
|
+
reserved={!(showHeader ?? (cameraOpen ? Boolean(overrides?.logo) : true))}
|
|
97
|
+
logo={overrides?.logo}
|
|
98
|
+
navLabel={navLabel}
|
|
99
|
+
/>
|
|
100
|
+
<div className="prizma-screen-layout__content prizma-screen-layout__content--capture">
|
|
101
|
+
<PrizmaSelfieCapture
|
|
102
|
+
state={state}
|
|
103
|
+
camera={camera}
|
|
104
|
+
showFeedback={Boolean(feedbackText ?? manualFeedbackText)}
|
|
105
|
+
feedbackText={feedbackText}
|
|
106
|
+
isManual={isManual}
|
|
107
|
+
manualFeedbackText={manualFeedbackText}
|
|
108
|
+
statusLabels={statusLabels}
|
|
109
|
+
/>
|
|
110
|
+
{showFooter ? (
|
|
111
|
+
<div className="prizma-screen-layout__footer prizma-screen-layout__footer--pinned">
|
|
112
|
+
<PrizmaTag label={verifiedLabel} />
|
|
113
|
+
</div>
|
|
114
|
+
) : null}
|
|
115
|
+
</div>
|
|
116
|
+
</PrizmaScreenShell>
|
|
117
|
+
),
|
|
118
|
+
);
|
|
119
|
+
PrizmaCaptureScreen.displayName = 'PrizmaCaptureScreen';
|
|
120
|
+
|
|
121
|
+
export default PrizmaCaptureScreen;
|
|
@@ -0,0 +1,75 @@
|
|
|
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 { CurpStrings } from './CurpStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
|
|
8
|
+
export interface CurpConfirmScreenProps
|
|
9
|
+
extends Omit<
|
|
10
|
+
PrizmaFormScreenProps,
|
|
11
|
+
'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
|
|
12
|
+
> {
|
|
13
|
+
/** Module copy — this screen reads the `confirm` slice. */
|
|
14
|
+
strings: CurpStrings;
|
|
15
|
+
/** The CURP the generator produced, read back for confirmation. */
|
|
16
|
+
value?: string;
|
|
17
|
+
screenId?: string;
|
|
18
|
+
overrides?: PrizmaScreenOverrides;
|
|
19
|
+
onAction?: PrizmaScreenActionHandler;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* CURP — the generated-CURP confirmation, built on the Form archetype
|
|
24
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
25
|
+
*
|
|
26
|
+
* Figma: the purple `CURP.Gene.confirm` section. Structurally it is
|
|
27
|
+
* `CurpEnterScreen` with one field and one CTA — nav → Title → Spacing/32 →
|
|
28
|
+
* field → CTA → tag — but the field is a READ-BACK of what the generator
|
|
29
|
+
* produced rather than an input, and there is no secondary action, so it stays
|
|
30
|
+
* its own screen rather than a sixth state of the entry form.
|
|
31
|
+
*
|
|
32
|
+
* The field is the one place in this module where Core's disabled surface is
|
|
33
|
+
* correct: Figma paints it `input/surface/disabled` grey with the value in full
|
|
34
|
+
* ink, which is exactly what `disabled` renders. (`readOnly` would paint the
|
|
35
|
+
* same grey and is the semantically better match, but it is the prop the pilot
|
|
36
|
+
* was told not to reach for by reflex — DEVIATIONS #PI-6 — and on a static spec
|
|
37
|
+
* screen the two are visually identical, so the plainer one is used.)
|
|
38
|
+
*/
|
|
39
|
+
export const CurpConfirmScreen = forwardRef<HTMLDivElement, CurpConfirmScreenProps>(
|
|
40
|
+
(
|
|
41
|
+
{
|
|
42
|
+
strings,
|
|
43
|
+
value,
|
|
44
|
+
screenId = 'curp-confirm',
|
|
45
|
+
overrides,
|
|
46
|
+
onAction,
|
|
47
|
+
...shell
|
|
48
|
+
},
|
|
49
|
+
ref,
|
|
50
|
+
) => (
|
|
51
|
+
<PrizmaFormScreen
|
|
52
|
+
ref={ref}
|
|
53
|
+
title={strings.confirm.title}
|
|
54
|
+
subtitle={strings.confirm.subtitle}
|
|
55
|
+
ctaLabel={strings.confirm.ctaLabel}
|
|
56
|
+
verifiedLabel={strings.verifiedLabel}
|
|
57
|
+
navLabel={strings.navLabel}
|
|
58
|
+
screenId={screenId}
|
|
59
|
+
overrides={overrides}
|
|
60
|
+
onAction={onAction}
|
|
61
|
+
{...shell}
|
|
62
|
+
>
|
|
63
|
+
<PrizmaTextField
|
|
64
|
+
/* No visible label row in the section — the title carries the meaning
|
|
65
|
+
(DEVIATIONS #PI-4). */
|
|
66
|
+
aria-label={strings.confirm.fieldLabel}
|
|
67
|
+
defaultValue={value ?? ''}
|
|
68
|
+
disabled
|
|
69
|
+
/>
|
|
70
|
+
</PrizmaFormScreen>
|
|
71
|
+
),
|
|
72
|
+
);
|
|
73
|
+
CurpConfirmScreen.displayName = 'CurpConfirmScreen';
|
|
74
|
+
|
|
75
|
+
export default CurpConfirmScreen;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
|
|
3
|
+
import { PrizmaButton } from '@incodetech/prizma-core-web/button';
|
|
4
|
+
import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
|
|
5
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
6
|
+
import type { CurpEnterState, CurpStrings } from './CurpStrings';
|
|
7
|
+
import './ScreenLayout.css';
|
|
8
|
+
import './CurpLayout.css';
|
|
9
|
+
|
|
10
|
+
export interface CurpEnterScreenProps
|
|
11
|
+
extends Omit<
|
|
12
|
+
PrizmaFormScreenProps,
|
|
13
|
+
'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel' | 'linkContent'
|
|
14
|
+
> {
|
|
15
|
+
/** Module copy — this screen reads the `enter` slice. */
|
|
16
|
+
strings: CurpStrings;
|
|
17
|
+
/** Which purple `CURP.EnterCURP.*` section to render. Default `default`. */
|
|
18
|
+
state?: CurpEnterState;
|
|
19
|
+
/** The CURP as typed. Empty renders the placeholder. */
|
|
20
|
+
value?: string;
|
|
21
|
+
screenId?: string;
|
|
22
|
+
overrides?: PrizmaScreenOverrides;
|
|
23
|
+
onAction?: PrizmaScreenActionHandler;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* CURP — the CURP-entry screen, built on the Form archetype
|
|
28
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
29
|
+
*
|
|
30
|
+
* ONE screen for all five purple `CURP.EnterCURP.*` input sections
|
|
31
|
+
* (`default` / `focused` / `filled` / `error` / `loading`): measured against the
|
|
32
|
+
* 390 frames they share an identical skeleton — nav → Title (H2, no subtitle)
|
|
33
|
+
* → Spacing/32 → a single text field → primary CTA → secondary CTA → tag — and
|
|
34
|
+
* differ ONLY in field content, field treatment and CTA state.
|
|
35
|
+
*
|
|
36
|
+
* Three things are deliberate, each a lesson the Phone Input pilot paid for:
|
|
37
|
+
*
|
|
38
|
+
* 1. The field is UNCONTROLLED (`defaultValue`). A screen is one static spec
|
|
39
|
+
* state, so no `onChange` is needed — and Core's `readOnly`, the other way
|
|
40
|
+
* to make a field inert, paints the DISABLED grey surface on states Figma
|
|
41
|
+
* draws white (DEVIATIONS #PI-6). `disabled` is set ONLY on `loading`, the
|
|
42
|
+
* one section Figma actually greys.
|
|
43
|
+
* 2. `focused` and `filled` get Core's OWN `--focused` modifier through
|
|
44
|
+
* `className` — the class its CSS already implements beside `:focus-within`.
|
|
45
|
+
* `PrizmaTextField` has no `forceState` prop yet, unlike `PrizmaDropdown`
|
|
46
|
+
* (DEVIATIONS #PI-7); nothing is re-styled here.
|
|
47
|
+
* 3. The in-flight spinner rides the CTA (`ctaLoading`), never the field
|
|
48
|
+
* (DEVIATIONS #PI-5).
|
|
49
|
+
*
|
|
50
|
+
* The secondary action, "I don't have a CURP", is drawn by every section as a
|
|
51
|
+
* full-width OUTLINED button — Core's `PrizmaButton variant="secondary"` — sat
|
|
52
|
+
* Spacing/16 under the primary. Archetype E has no `secondaryCtaLabel` slot
|
|
53
|
+
* (archetype F does), so the button is composed into the archetype's
|
|
54
|
+
* `linkContent` slot: no primitive is invented, no layout is declared, and the
|
|
55
|
+
* two actions stay distinguishable (`cta` vs `secondary`, the #PI-10 rule).
|
|
56
|
+
* The gap is reported for promotion — see the module's DEVIATIONS rows.
|
|
57
|
+
*/
|
|
58
|
+
export const CurpEnterScreen = forwardRef<HTMLDivElement, CurpEnterScreenProps>(
|
|
59
|
+
(
|
|
60
|
+
{
|
|
61
|
+
strings,
|
|
62
|
+
state = 'default',
|
|
63
|
+
value,
|
|
64
|
+
screenId = `curp-enter-${state}`,
|
|
65
|
+
className,
|
|
66
|
+
overrides,
|
|
67
|
+
onAction,
|
|
68
|
+
...shell
|
|
69
|
+
},
|
|
70
|
+
ref,
|
|
71
|
+
) => {
|
|
72
|
+
// Figma treats the five sections as four distinct field treatments:
|
|
73
|
+
// `loading` greys the field and both actions (the lookup is in flight and
|
|
74
|
+
// the form is inert); `error` paints the negative surface with the clear ✕
|
|
75
|
+
// and the "Invalid CURP" row; `focused` / `filled` draw the blue focus ring
|
|
76
|
+
// with the caret; `default` is the plain resting field on the white
|
|
77
|
+
// surface.
|
|
78
|
+
const busy = state === 'loading';
|
|
79
|
+
const invalid = state === 'error';
|
|
80
|
+
const focused = state === 'focused' || state === 'filled';
|
|
81
|
+
|
|
82
|
+
return (
|
|
83
|
+
<PrizmaFormScreen
|
|
84
|
+
ref={ref}
|
|
85
|
+
/* Scopes the one module rule that lets the `error` section keep the
|
|
86
|
+
clear ✕ Figma draws inside the invalid field — Core renders the
|
|
87
|
+
button but hides it behind a `:focus-within:not(--error)` guard a
|
|
88
|
+
static spec state can never satisfy. See CurpLayout.css and the Core
|
|
89
|
+
request recorded there. Nothing is hand-rolled: the rule only lifts
|
|
90
|
+
Core's `display: none`. */
|
|
91
|
+
className={[
|
|
92
|
+
'curp-enter',
|
|
93
|
+
invalid ? 'curp-enter--error' : '',
|
|
94
|
+
className,
|
|
95
|
+
]
|
|
96
|
+
.filter(Boolean)
|
|
97
|
+
.join(' ')}
|
|
98
|
+
title={strings.enter.title}
|
|
99
|
+
subtitle={strings.enter.subtitle}
|
|
100
|
+
ctaLabel={strings.enter.ctaLabel}
|
|
101
|
+
/* The `loading` section swaps the CTA label for Core's spinner. */
|
|
102
|
+
ctaLoading={busy}
|
|
103
|
+
ctaLoadingLabel={strings.enter.ctaLoadingLabel}
|
|
104
|
+
linkContent={
|
|
105
|
+
<PrizmaButton
|
|
106
|
+
variant="secondary"
|
|
107
|
+
size="L"
|
|
108
|
+
/* Figma greys this action too while the lookup runs. */
|
|
109
|
+
disabled={busy}
|
|
110
|
+
onClick={() => onAction?.({ type: 'secondary', screenId })}
|
|
111
|
+
>
|
|
112
|
+
{strings.enter.noCurpLabel}
|
|
113
|
+
</PrizmaButton>
|
|
114
|
+
}
|
|
115
|
+
verifiedLabel={strings.verifiedLabel}
|
|
116
|
+
navLabel={strings.navLabel}
|
|
117
|
+
screenId={screenId}
|
|
118
|
+
overrides={overrides}
|
|
119
|
+
onAction={onAction}
|
|
120
|
+
{...shell}
|
|
121
|
+
>
|
|
122
|
+
<PrizmaTextField
|
|
123
|
+
className={focused ? 'prizma-input-textfield--focused' : undefined}
|
|
124
|
+
/* Figma draws no visible label row — the title and the placeholder
|
|
125
|
+
carry the meaning — so the copy rides `aria-label` rather than
|
|
126
|
+
Core's visible `label` slot (DEVIATIONS #PI-4). */
|
|
127
|
+
aria-label={strings.enter.fieldLabel}
|
|
128
|
+
placeholder={strings.enter.placeholder}
|
|
129
|
+
defaultValue={value ?? ''}
|
|
130
|
+
/* A CURP is an 18-character uppercase key. */
|
|
131
|
+
autoCapitalize="characters"
|
|
132
|
+
autoComplete="off"
|
|
133
|
+
spellCheck={false}
|
|
134
|
+
disabled={busy}
|
|
135
|
+
error={invalid}
|
|
136
|
+
errorText={invalid ? strings.enter.errorText : undefined}
|
|
137
|
+
/* The clear ✕ is drawn only on the error section (76:36434); the
|
|
138
|
+
`filled` section (79:1553) draws none. Core still owns WHEN it
|
|
139
|
+
shows — its `--show` state needs a value in the field. */
|
|
140
|
+
clearable={invalid}
|
|
141
|
+
clearLabel={strings.enter.clearLabel}
|
|
142
|
+
/>
|
|
143
|
+
</PrizmaFormScreen>
|
|
144
|
+
);
|
|
145
|
+
},
|
|
146
|
+
);
|
|
147
|
+
CurpEnterScreen.displayName = 'CurpEnterScreen';
|
|
148
|
+
|
|
149
|
+
export default CurpEnterScreen;
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
|
|
3
|
+
import { PrizmaDateField } from '@incodetech/prizma-core-web/date-field';
|
|
4
|
+
import { PrizmaDropdown } from '@incodetech/prizma-core-web/dropdown';
|
|
5
|
+
import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
|
|
6
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
7
|
+
import type {
|
|
8
|
+
CurpGenerateState,
|
|
9
|
+
CurpGenerateValues,
|
|
10
|
+
CurpOption,
|
|
11
|
+
CurpStrings,
|
|
12
|
+
} from './CurpStrings';
|
|
13
|
+
import './ScreenLayout.css';
|
|
14
|
+
import './CurpLayout.css';
|
|
15
|
+
|
|
16
|
+
export interface CurpGenerateScreenProps
|
|
17
|
+
extends Omit<
|
|
18
|
+
PrizmaFormScreenProps,
|
|
19
|
+
'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
|
|
20
|
+
> {
|
|
21
|
+
/** Module copy — this screen reads the `generate` slice. */
|
|
22
|
+
strings: CurpStrings;
|
|
23
|
+
/** Which purple `CURP.Gene.*` section to render. Default `default`. */
|
|
24
|
+
state?: CurpGenerateState;
|
|
25
|
+
/** The six field values. Empty fields fall back to their placeholders. */
|
|
26
|
+
values?: CurpGenerateValues;
|
|
27
|
+
/** Selectable genders. Runtime data, not copy — the host owns the set. */
|
|
28
|
+
genders?: CurpOption[];
|
|
29
|
+
/** Selectable birth states (the 32 Mexican entities plus "born abroad").
|
|
30
|
+
* Runtime data — a catalogue, never a string table. */
|
|
31
|
+
states?: CurpOption[];
|
|
32
|
+
screenId?: string;
|
|
33
|
+
overrides?: PrizmaScreenOverrides;
|
|
34
|
+
onAction?: PrizmaScreenActionHandler;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* CURP — the generator form, built on the Form archetype
|
|
39
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
40
|
+
*
|
|
41
|
+
* ONE screen for the three purple `CURP.Gene.*` form sections
|
|
42
|
+
* (`default` / `dropdown` / `filled`): identical layout — nav → Title (H2 +
|
|
43
|
+
* H5) → Spacing/32 → six labelled fields at Spacing/16 → CTA → tag — differing
|
|
44
|
+
* only in field content and whether the Gender menu is open.
|
|
45
|
+
*
|
|
46
|
+
* Unlike `CurpEnterScreen`, these fields DO carry visible labels: Figma draws
|
|
47
|
+
* "First name *", "Gender *" and so on above every field, which is Core's
|
|
48
|
+
* `label` slot exactly. The required `*` is Core's `requiredHint` suffix rather
|
|
49
|
+
* than part of the label string, so a locale can move or replace the marker.
|
|
50
|
+
*
|
|
51
|
+
* The date field is Core's `PrizmaDateField` (the `Input / Date` kind, with its
|
|
52
|
+
* DD/MM/YYYY mask and trailing calendar affordance) — the picker itself belongs
|
|
53
|
+
* to the OS by Core's contract, so no `onCalendarClick` is wired on a static
|
|
54
|
+
* spec screen and the icon stays decorative.
|
|
55
|
+
*
|
|
56
|
+
* The `dropdown` section IS the open-menu spec state, which Core exposes as the
|
|
57
|
+
* documentation-only `forceOpen` (a screen is one static state, never a live
|
|
58
|
+
* interaction) — the same mechanism Phone Input's `countryCode` section uses.
|
|
59
|
+
*/
|
|
60
|
+
export const CurpGenerateScreen = forwardRef<HTMLDivElement, CurpGenerateScreenProps>(
|
|
61
|
+
(
|
|
62
|
+
{
|
|
63
|
+
strings,
|
|
64
|
+
state = 'default',
|
|
65
|
+
values,
|
|
66
|
+
genders = [],
|
|
67
|
+
states = [],
|
|
68
|
+
screenId = `curp-generate-${state}`,
|
|
69
|
+
className,
|
|
70
|
+
overrides,
|
|
71
|
+
onAction,
|
|
72
|
+
...shell
|
|
73
|
+
},
|
|
74
|
+
ref,
|
|
75
|
+
) => {
|
|
76
|
+
const copy = strings.generate;
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<PrizmaFormScreen
|
|
80
|
+
ref={ref}
|
|
81
|
+
/* Scopes the two module rules in CurpLayout.css (see the foundation and
|
|
82
|
+
Core requests recorded there):
|
|
83
|
+
- `--scroll` lets the six-field stack scroll inside the 844 frame
|
|
84
|
+
instead of overflowing its box and painting over the CTA. EVERY
|
|
85
|
+
section gets it, `dropdown` included — Figma draws "Generate"
|
|
86
|
+
clear and unobstructed under the open menu.
|
|
87
|
+
- `--menu-open` flips Core's absolutely-positioned menu above its
|
|
88
|
+
trigger on the one section that forces it open, so the three
|
|
89
|
+
gender rows stay inside the scrolling column. */
|
|
90
|
+
className={[
|
|
91
|
+
'curp-generate',
|
|
92
|
+
'curp-generate--scroll',
|
|
93
|
+
state === 'dropdown' ? 'curp-generate--menu-open' : '',
|
|
94
|
+
className,
|
|
95
|
+
]
|
|
96
|
+
.filter(Boolean)
|
|
97
|
+
.join(' ')}
|
|
98
|
+
title={copy.title}
|
|
99
|
+
subtitle={copy.subtitle}
|
|
100
|
+
ctaLabel={copy.ctaLabel}
|
|
101
|
+
ctaLoadingLabel={copy.ctaLoadingLabel}
|
|
102
|
+
verifiedLabel={strings.verifiedLabel}
|
|
103
|
+
navLabel={strings.navLabel}
|
|
104
|
+
screenId={screenId}
|
|
105
|
+
overrides={overrides}
|
|
106
|
+
onAction={onAction}
|
|
107
|
+
{...shell}
|
|
108
|
+
>
|
|
109
|
+
{/* Every field is UNCONTROLLED: a screen is one static spec state, so
|
|
110
|
+
no `onChange` is needed — and Core's `readOnly` would paint the
|
|
111
|
+
DISABLED grey surface on states Figma draws white
|
|
112
|
+
(DEVIATIONS #PI-6). */}
|
|
113
|
+
<PrizmaTextField
|
|
114
|
+
label={copy.firstName.label}
|
|
115
|
+
placeholder={copy.firstName.placeholder}
|
|
116
|
+
required
|
|
117
|
+
requiredHint={strings.requiredHint}
|
|
118
|
+
autoComplete="off"
|
|
119
|
+
defaultValue={values?.firstName ?? ''}
|
|
120
|
+
/>
|
|
121
|
+
<PrizmaTextField
|
|
122
|
+
label={copy.firstLastName.label}
|
|
123
|
+
placeholder={copy.firstLastName.placeholder}
|
|
124
|
+
required
|
|
125
|
+
requiredHint={strings.requiredHint}
|
|
126
|
+
autoComplete="off"
|
|
127
|
+
defaultValue={values?.firstLastName ?? ''}
|
|
128
|
+
/>
|
|
129
|
+
<PrizmaTextField
|
|
130
|
+
label={copy.secondLastName.label}
|
|
131
|
+
placeholder={copy.secondLastName.placeholder}
|
|
132
|
+
required
|
|
133
|
+
requiredHint={strings.requiredHint}
|
|
134
|
+
autoComplete="off"
|
|
135
|
+
defaultValue={values?.secondLastName ?? ''}
|
|
136
|
+
/>
|
|
137
|
+
<PrizmaDropdown
|
|
138
|
+
label={copy.gender.label}
|
|
139
|
+
placeholder={copy.gender.placeholder}
|
|
140
|
+
required
|
|
141
|
+
requiredHint={strings.requiredHint}
|
|
142
|
+
options={genders}
|
|
143
|
+
defaultValue={values?.gender ?? null}
|
|
144
|
+
searchPlaceholder={copy.gender.searchPlaceholder}
|
|
145
|
+
/* The `dropdown` section is the open Gender menu. */
|
|
146
|
+
forceOpen={state === 'dropdown'}
|
|
147
|
+
/>
|
|
148
|
+
<PrizmaDateField
|
|
149
|
+
label={copy.dateOfBirth.label}
|
|
150
|
+
placeholder={copy.dateOfBirth.placeholder}
|
|
151
|
+
required
|
|
152
|
+
requiredHint={strings.requiredHint}
|
|
153
|
+
calendarLabel={copy.dateOfBirth.calendarLabel}
|
|
154
|
+
defaultValue={values?.dateOfBirth ?? ''}
|
|
155
|
+
/>
|
|
156
|
+
<PrizmaDropdown
|
|
157
|
+
label={copy.birthState.label}
|
|
158
|
+
placeholder={copy.birthState.placeholder}
|
|
159
|
+
required
|
|
160
|
+
requiredHint={strings.requiredHint}
|
|
161
|
+
options={states}
|
|
162
|
+
defaultValue={values?.birthState ?? null}
|
|
163
|
+
searchable
|
|
164
|
+
searchPlaceholder={copy.birthState.searchPlaceholder}
|
|
165
|
+
/>
|
|
166
|
+
</PrizmaFormScreen>
|
|
167
|
+
);
|
|
168
|
+
},
|
|
169
|
+
);
|
|
170
|
+
CurpGenerateScreen.displayName = 'CurpGenerateScreen';
|
|
171
|
+
|
|
172
|
+
export default CurpGenerateScreen;
|