@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,149 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
|
|
5
|
+
import { PrizmaDateField } from '@incodetech/prizma-core-web/date-field';
|
|
6
|
+
import { PrizmaDropdown, } from '@incodetech/prizma-core-web/dropdown';
|
|
7
|
+
import { PrizmaCountryFlag } from '@incodetech/prizma-core-web/combined';
|
|
8
|
+
import { PrizmaFormScreen } from './FormScreen';
|
|
9
|
+
import './ScreenLayout.css';
|
|
10
|
+
import './FormsLayout.css';
|
|
11
|
+
/**
|
|
12
|
+
* The row stacks each purple section draws, in order. Structure belongs to the
|
|
13
|
+
* screen (the archetype and Core own everything visual); only the labels and
|
|
14
|
+
* placeholders come from `FormsStrings`.
|
|
15
|
+
*/
|
|
16
|
+
const PRESET_ROWS = {
|
|
17
|
+
// `forms.name` — the three-name form.
|
|
18
|
+
name: [
|
|
19
|
+
{ key: 'fullName', kind: 'text', requirement: 'required' },
|
|
20
|
+
{ key: 'firstName', kind: 'text', requirement: 'required' },
|
|
21
|
+
{ key: 'lastName', kind: 'text', requirement: 'none' },
|
|
22
|
+
],
|
|
23
|
+
// `longform.customizable` — the five-row customizable form.
|
|
24
|
+
profile: [
|
|
25
|
+
{ key: 'fullName', kind: 'text', requirement: 'required' },
|
|
26
|
+
{ key: 'residence', kind: 'country', requirement: 'required' },
|
|
27
|
+
{ key: 'occupation', kind: 'select', requirement: 'none' },
|
|
28
|
+
{ key: 'dob', kind: 'date', requirement: 'none' },
|
|
29
|
+
{ key: 'referral', kind: 'select', requirement: 'none' },
|
|
30
|
+
],
|
|
31
|
+
// `🧩 Long forms - pre-defined cases` — the four-row eKYC form.
|
|
32
|
+
eKyc: [
|
|
33
|
+
{ key: 'idNumber', kind: 'text', requirement: 'required' },
|
|
34
|
+
{ key: 'email', kind: 'email', requirement: 'required' },
|
|
35
|
+
{ key: 'residence', kind: 'country', requirement: 'required' },
|
|
36
|
+
{ key: 'dob', kind: 'date', requirement: 'required' },
|
|
37
|
+
],
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* The "Forms and data entry - Optional / Required" pair documents the SAME
|
|
41
|
+
* eKYC form with a different marker on each row — that is the whole point of
|
|
42
|
+
* the section, so the override is structure and lives here.
|
|
43
|
+
*/
|
|
44
|
+
const OPTIONAL_VARIANT = {
|
|
45
|
+
idNumber: 'none',
|
|
46
|
+
email: 'required',
|
|
47
|
+
residence: 'optional',
|
|
48
|
+
dob: 'optional',
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Forms & Data Entry — the multi-field screen, built on the Form archetype
|
|
52
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
53
|
+
*
|
|
54
|
+
* ONE screen for the module's seven multi-field purple sections: `forms.name`,
|
|
55
|
+
* `longform.customizable` (default + filled) and the whole
|
|
56
|
+
* `🧩 Long forms - pre-defined cases` group (`longform.default` / `.focused` /
|
|
57
|
+
* `.filled` / `.loading` plus the "Optional / Required" documentation pair).
|
|
58
|
+
* They share the identical skeleton — nav → Title (H2 + the "All fields marked
|
|
59
|
+
* with * are required." H5) → Spacing/32 → a stack of labelled Core inputs →
|
|
60
|
+
* primary CTA → tag — and differ in which rows the stack carries and what state
|
|
61
|
+
* each row is in.
|
|
62
|
+
*
|
|
63
|
+
* Four things are deliberate:
|
|
64
|
+
*
|
|
65
|
+
* 1. Rows are UNCONTROLLED (`defaultValue`). `readOnly` would paint Core's
|
|
66
|
+
* DISABLED grey on the six sections Figma draws white (DEVIATIONS #PI-6);
|
|
67
|
+
* `disabled` is set ONLY on `loading`, the one section Figma actually greys
|
|
68
|
+
* — and it greys every row at once, exactly as drawn.
|
|
69
|
+
* 2. The focused row gets Core's OWN `--focused` modifier through `className`
|
|
70
|
+
* (DEVIATIONS #PI-7). Its clear ✕ needs one module rule to appear, because
|
|
71
|
+
* Core reveals the button under a live `:focus-within` a static spec state
|
|
72
|
+
* can never satisfy — see `FormsLayout.css`, which only lifts Core's
|
|
73
|
+
* `display: none` and re-styles nothing (the #CURP-3 idiom).
|
|
74
|
+
* 3. The in-flight spinner rides the CTA (`ctaLoading`), never a field
|
|
75
|
+
* (DEVIATIONS #PI-5) — without it `loading` would render as `filled`.
|
|
76
|
+
* 4. The required marker rides Core's `requiredHint` so it stays localizable.
|
|
77
|
+
* Core has no OPTIONAL counterpart, so "(Optional)" is composed into the
|
|
78
|
+
* label string instead — DEVIATIONS #FDE-4.
|
|
79
|
+
*
|
|
80
|
+
* The stack SCROLLS inside the content column through the archetype's own
|
|
81
|
+
* `scrollFields` prop: the profile preset is five 78px rows plus gaps and does
|
|
82
|
+
* not fit a 390×844 frame, and screens never reflow (#17). The variant carries
|
|
83
|
+
* the `overflow-y: auto` AND the Spacing/16 margin below the clipped stack, so
|
|
84
|
+
* the sliced last row is followed by clear surface instead of running flush
|
|
85
|
+
* into the CTA band — the half a module stylesheet kept losing. It is a no-op
|
|
86
|
+
* on the short `name` preset, whose rows never overflow. DEVIATIONS #DSC-2,
|
|
87
|
+
* restating #CURP-1.
|
|
88
|
+
*/
|
|
89
|
+
export const FormsLongFormScreen = forwardRef(({ strings, preset = 'eKyc', state = 'default', values, focusedField, options, countries, screenId = `forms-long-form-${preset}-${state}`, className, overrides, onAction, ...shell }, ref) => {
|
|
90
|
+
const copy = strings.longForm[preset];
|
|
91
|
+
const busy = state === 'loading';
|
|
92
|
+
const countryList = countries ?? [];
|
|
93
|
+
// The Optional / Required pair documents the eKYC form specifically; no
|
|
94
|
+
// other preset draws it, so the override never leaks to a preset whose
|
|
95
|
+
// Figma has no such section.
|
|
96
|
+
const applyOptional = state === 'optional' && preset === 'eKyc';
|
|
97
|
+
const rows = PRESET_ROWS[preset].map((row) => applyOptional && OPTIONAL_VARIANT[row.key]
|
|
98
|
+
? { ...row, requirement: OPTIONAL_VARIANT[row.key] }
|
|
99
|
+
: row);
|
|
100
|
+
/** Core appends `requiredHint` itself; "(Optional)" has no Core slot. */
|
|
101
|
+
const labelFor = (row) => {
|
|
102
|
+
const base = copy.fields[row.key]?.label ?? '';
|
|
103
|
+
return row.requirement === 'optional' ? `${base} ${strings.optionalHint}` : base;
|
|
104
|
+
};
|
|
105
|
+
const renderRow = (row) => {
|
|
106
|
+
const fieldCopy = copy.fields[row.key];
|
|
107
|
+
const label = labelFor(row);
|
|
108
|
+
const required = row.requirement === 'required';
|
|
109
|
+
const value = values?.[row.key] ?? '';
|
|
110
|
+
const focused = !busy && focusedField === row.key;
|
|
111
|
+
switch (row.kind) {
|
|
112
|
+
case 'country':
|
|
113
|
+
return (_jsx(PrizmaDropdown, { label: label, required: required, requiredHint: strings.requiredHint, placeholder: fieldCopy?.placeholder, options: countryList.map((c) => ({ value: c.code, label: c.name })), value: value || null, searchable: true, searchPlaceholder: copy.searchPlaceholder, disabled: busy, forceState: focused ? 'focused' : undefined, renderLeading: (option) => {
|
|
114
|
+
const match = countryList.find((c) => c.code === option.value);
|
|
115
|
+
return match ? _jsx(PrizmaCountryFlag, { country: match }) : null;
|
|
116
|
+
} }, row.key));
|
|
117
|
+
case 'select':
|
|
118
|
+
return (_jsx(PrizmaDropdown, { label: label, required: required, requiredHint: strings.requiredHint, placeholder: fieldCopy?.placeholder, options: options?.[row.key] ?? [], value: value || null, disabled: busy, forceState: focused ? 'focused' : undefined }, row.key));
|
|
119
|
+
case 'date':
|
|
120
|
+
return (_jsx(PrizmaDateField, { className: focused ? 'prizma-input-datefield--focused' : undefined, label: label, required: required, requiredHint: strings.requiredHint, placeholder: fieldCopy?.placeholder, defaultValue: value, disabled: busy, calendarLabel: copy.calendarLabel }, row.key));
|
|
121
|
+
default:
|
|
122
|
+
return (_jsx(PrizmaTextField, { className: focused ? 'prizma-input-textfield--focused' : undefined, label: label, required: required, requiredHint: strings.requiredHint, placeholder: fieldCopy?.placeholder, defaultValue: value, type: row.kind === 'email' ? 'email' : 'text', inputMode: row.kind === 'email' ? 'email' : undefined, autoComplete: row.kind === 'email' ? 'email' : 'off', autoCapitalize: row.kind === 'email' ? 'none' : undefined, spellCheck: false, disabled: busy,
|
|
123
|
+
/* Figma draws the clear ✕ only on the focused row of
|
|
124
|
+
`longform.focused`; every other row draws none. */
|
|
125
|
+
clearable: focused, clearLabel: copy.clearLabel }, row.key));
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
return (_jsx(PrizmaFormScreen, { ref: ref, className: [
|
|
129
|
+
'forms-long-form',
|
|
130
|
+
/* Scopes the ONE rule that lets Core's own clear ✕ paint on the
|
|
131
|
+
statically-focused row. See FormsLayout.css. */
|
|
132
|
+
state === 'focused' ? 'forms-long-form--focused' : '',
|
|
133
|
+
className,
|
|
134
|
+
]
|
|
135
|
+
.filter(Boolean)
|
|
136
|
+
.join(' '), title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel,
|
|
137
|
+
/* `longform.default` and `longform.customizable`'s default section grey
|
|
138
|
+
the CTA until something is entered; `forms.name` draws it ENABLED on
|
|
139
|
+
the same empty form. Figma contradicts its own "optimistic rule"
|
|
140
|
+
sticky here, so each section is followed literally — DEVIATIONS
|
|
141
|
+
#FDE-3. */
|
|
142
|
+
ctaDisabled: state === 'default' && preset !== 'name', ctaLoading: busy, ctaLoadingLabel: copy.ctaLoadingLabel,
|
|
143
|
+
/* The four- and five-row stacks are taller than the 844 frame; the
|
|
144
|
+
archetype's variant pans them and keeps Spacing/16 of clear surface
|
|
145
|
+
above the CTA. No module CSS re-declares this. */
|
|
146
|
+
scrollFields: true, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: rows.map(renderRow) }));
|
|
147
|
+
});
|
|
148
|
+
FormsLongFormScreen.displayName = 'FormsLongFormScreen';
|
|
149
|
+
export default FormsLongFormScreen;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which single-field section `FormsFieldScreen` renders. Each key names one
|
|
3
|
+
* purple section and picks the Core input the section draws:
|
|
4
|
+
* - `idNumber` · `cpf` — `PrizmaTextField`
|
|
5
|
+
* - `email` — `PrizmaTextField` with e-mail semantics
|
|
6
|
+
* - `dob` — `PrizmaDateField`
|
|
7
|
+
* - `phone` — `PrizmaCombined` (country dial code + number)
|
|
8
|
+
* - `text` — `PrizmaMultiline`
|
|
9
|
+
*/
|
|
10
|
+
export type FormsFieldKey = 'idNumber' | 'cpf' | 'email' | 'dob' | 'phone' | 'text';
|
|
11
|
+
/**
|
|
12
|
+
* The field treatments the single-field sections draw.
|
|
13
|
+
*
|
|
14
|
+
* `forms.DOB.iconButton` (2:12185) has NO state here, deliberately. That frame
|
|
15
|
+
* draws the date field focused with an OPEN date-picker panel over it — the
|
|
16
|
+
* "March 2024" month grid instanced beside the frame as `Date Picker`
|
|
17
|
+
* (2:5458). Core ships no calendar: `PrizmaDateField`'s contract is that "the
|
|
18
|
+
* date PICKER is the consumer's — the OS picker by contract; the field never
|
|
19
|
+
* renders one", and it exposes no `forceCalendarOpen` hook. Composing a month
|
|
20
|
+
* grid here would be inventing a primitive, and shipping the state without one
|
|
21
|
+
* left a card that was `focused` with a different name. The state returns the
|
|
22
|
+
* day Core gains the panel — DEVIATIONS #FDE-5.
|
|
23
|
+
*
|
|
24
|
+
* - `default` — resting field, placeholder visible, CTA enabled
|
|
25
|
+
* - `focused` — `forms.DOB.typing`: blue focus ring with a partial value
|
|
26
|
+
* - `filled` — a complete value on the resting surface
|
|
27
|
+
* - `emptyError` — `forms.IDnumber.error` (2443:68470): empty NEGATIVE field,
|
|
28
|
+
* "Enter a valid ID number.", CTA greyed. This is the
|
|
29
|
+
* canvas sticky's "optimistic rule": the CTA starts enabled
|
|
30
|
+
* and only greys after a submit with nothing entered.
|
|
31
|
+
* - `invalidError` — `forms.IDnumber.error` (2443:69116): a typed value that
|
|
32
|
+
* failed validation, "Invalid ID number", CTA greyed
|
|
33
|
+
*/
|
|
34
|
+
export type FormsFieldState = 'default' | 'focused' | 'filled' | 'emptyError' | 'invalidError';
|
|
35
|
+
/**
|
|
36
|
+
* Which choice section `FormsChoiceScreen` renders — the label above the
|
|
37
|
+
* dropdown is what separates them:
|
|
38
|
+
* - `residence` — `forms.country` / `forms.Residence` ("Country of residence")
|
|
39
|
+
* - `nationality` — `Forms.nationality` ("Nationality")
|
|
40
|
+
* - `question` — `forms.select` / `forms.yesNo` / `forms.country` question
|
|
41
|
+
* variant ("Enter your question")
|
|
42
|
+
*/
|
|
43
|
+
export type FormsChoiceKey = 'residence' | 'nationality' | 'question';
|
|
44
|
+
/**
|
|
45
|
+
* Which option list the open menu carries. The three question sections draw an
|
|
46
|
+
* IDENTICAL closed field and differ only here, so the option set is its own
|
|
47
|
+
* axis rather than three screens:
|
|
48
|
+
* - `countries` — flag + country name, searchable (`forms.country`)
|
|
49
|
+
* - `generic` — "Option 1…5", no search (`forms.select`)
|
|
50
|
+
* - `yesNo` — two rows, no search (`forms.yesNo`)
|
|
51
|
+
*/
|
|
52
|
+
export type FormsChoiceOptionSet = 'countries' | 'generic' | 'yesNo';
|
|
53
|
+
/**
|
|
54
|
+
* - `closed` — resting trigger with the placeholder
|
|
55
|
+
* - `open` — the menu drawn over the form, nothing selected
|
|
56
|
+
*
|
|
57
|
+
* `forms.residencetyping` (68:31241) has NO state here, deliberately. It is the
|
|
58
|
+
* TYPING frame: the same open menu as `forms.Residenceopen`, distinguished by
|
|
59
|
+
* the search bar holding "Por" with a live caret and an ✕ replacing the
|
|
60
|
+
* magnifier. `PrizmaDropdown` ships documentation-only `forceState` and
|
|
61
|
+
* `forceOpen` but nothing that seeds the query, so the state rendered with an
|
|
62
|
+
* EMPTY search bar — `open` under another name. Faking it would mean
|
|
63
|
+
* hand-rolling a search bar the component already owns. The state returns the
|
|
64
|
+
* day Core gains a `searchValue` — DEVIATIONS #FDE-6.
|
|
65
|
+
*/
|
|
66
|
+
export type FormsChoiceState = 'closed' | 'open';
|
|
67
|
+
/**
|
|
68
|
+
* The multi-field sections `FormsLongFormScreen` renders:
|
|
69
|
+
* - `name` — `forms.name`: full / first / last name
|
|
70
|
+
* - `profile` — `longform.customizable`: the five-field customizable form
|
|
71
|
+
* - `eKyc` — the `🧩 Long forms - pre-defined cases` section: ID number,
|
|
72
|
+
* e-mail, country of residence, date of birth
|
|
73
|
+
*/
|
|
74
|
+
export type FormsLongFormPreset = 'name' | 'profile' | 'eKyc';
|
|
75
|
+
/**
|
|
76
|
+
* - `default` — every field empty
|
|
77
|
+
* - `focused` — `longform.focused`: one field carries the focus ring, an
|
|
78
|
+
* earlier one is already filled
|
|
79
|
+
* - `filled` — every field carries a value
|
|
80
|
+
* - `loading` — `longform.loading`: the whole form greyed, spinner in the CTA
|
|
81
|
+
* - `optional` — the "Optional / Required" documentation pair: the same form
|
|
82
|
+
* with mixed required and optional markers
|
|
83
|
+
*/
|
|
84
|
+
export type FormsLongFormState = 'default' | 'focused' | 'filled' | 'loading' | 'optional';
|
|
85
|
+
/** Copy for one single-field section. */
|
|
86
|
+
export interface FormsFieldCopy {
|
|
87
|
+
/** H2 ("Enter your title", "Enter your email", "Enter your phone number"). */
|
|
88
|
+
title: string;
|
|
89
|
+
/** H5 below the title, where the section draws one. */
|
|
90
|
+
subtitle?: string;
|
|
91
|
+
/** The VISIBLE label row above the field. Unlike Phone Input and CURP
|
|
92
|
+
* (DEVIATIONS #PI-4, #EI-2), every section in this module draws one. */
|
|
93
|
+
label: string;
|
|
94
|
+
/** Field placeholder. The date field takes Core's own DD/MM/YYYY mask. */
|
|
95
|
+
placeholder?: string;
|
|
96
|
+
/** Primary CTA ("Continue"). */
|
|
97
|
+
ctaLabel: string;
|
|
98
|
+
/** Accessible busy copy, for hosts that put the field behind a request. */
|
|
99
|
+
ctaLoadingLabel?: string;
|
|
100
|
+
/** Accessible name for the clear (✕) affordance. */
|
|
101
|
+
clearLabel?: string;
|
|
102
|
+
/** Accessible name for the date field's calendar button (`dob` only). */
|
|
103
|
+
calendarLabel?: string;
|
|
104
|
+
/** Accessible name for the dial-code listbox (`phone` only). */
|
|
105
|
+
countryListLabel?: string;
|
|
106
|
+
/** Error row on `emptyError` ("Enter a valid ID number."). */
|
|
107
|
+
emptyErrorText?: string;
|
|
108
|
+
/** Error row on `invalidError` ("Invalid ID number"). */
|
|
109
|
+
invalidErrorText?: string;
|
|
110
|
+
}
|
|
111
|
+
/** Copy for one choice section. */
|
|
112
|
+
export interface FormsChoiceCopy {
|
|
113
|
+
title: string;
|
|
114
|
+
subtitle?: string;
|
|
115
|
+
/** The visible label above the dropdown. */
|
|
116
|
+
label: string;
|
|
117
|
+
/** Trigger placeholder ("Select an option"). */
|
|
118
|
+
placeholder: string;
|
|
119
|
+
/** Search-bar placeholder inside the menu ("Search for country"). */
|
|
120
|
+
searchPlaceholder?: string;
|
|
121
|
+
/** Accessible name for the search-clear button. */
|
|
122
|
+
clearSearchLabel?: string;
|
|
123
|
+
ctaLabel: string;
|
|
124
|
+
}
|
|
125
|
+
/** Copy for one field row of a multi-field form. Which rows a preset carries
|
|
126
|
+
* is STRUCTURE and lives in `FormsLongFormScreen`; only the words are here. */
|
|
127
|
+
export interface FormsLongFormFieldCopy {
|
|
128
|
+
label: string;
|
|
129
|
+
placeholder?: string;
|
|
130
|
+
}
|
|
131
|
+
/** Copy for one multi-field section. */
|
|
132
|
+
export interface FormsLongFormCopy {
|
|
133
|
+
title: string;
|
|
134
|
+
/** "All fields marked with * are required." */
|
|
135
|
+
subtitle?: string;
|
|
136
|
+
ctaLabel: string;
|
|
137
|
+
ctaLoadingLabel?: string;
|
|
138
|
+
/** One entry per row the preset draws — see `FormsLongFormScreen`. */
|
|
139
|
+
fields: Record<string, FormsLongFormFieldCopy>;
|
|
140
|
+
/** Accessible name for the clear (✕) affordance on the focused row. */
|
|
141
|
+
clearLabel?: string;
|
|
142
|
+
/** Accessible name for the calendar button on the date row. */
|
|
143
|
+
calendarLabel?: string;
|
|
144
|
+
/** Search-bar placeholder for the country row's menu. */
|
|
145
|
+
searchPlaceholder?: string;
|
|
146
|
+
}
|
|
147
|
+
export interface FormsStrings {
|
|
148
|
+
/** "verified by" attribution in the footer tag. */
|
|
149
|
+
verifiedLabel: string;
|
|
150
|
+
/** Accessible name for the logo nav row. */
|
|
151
|
+
navLabel?: string;
|
|
152
|
+
/**
|
|
153
|
+
* The required marker appended to a label ("*"). It rides Core's
|
|
154
|
+
* `requiredHint` prop so it stays localizable and so no module paints its
|
|
155
|
+
* own asterisk — the CURP-4 idiom.
|
|
156
|
+
*/
|
|
157
|
+
requiredHint: string;
|
|
158
|
+
/**
|
|
159
|
+
* The optional marker appended to a label ("(Optional)"). Core has a
|
|
160
|
+
* `requiredHint` but NO optional counterpart, so the marker is composed into
|
|
161
|
+
* the label string by the screen. See DEVIATIONS #FDE-4.
|
|
162
|
+
*/
|
|
163
|
+
optionalHint: string;
|
|
164
|
+
/** The single-field sections. */
|
|
165
|
+
fields: Record<FormsFieldKey, FormsFieldCopy>;
|
|
166
|
+
/** The choice sections. */
|
|
167
|
+
choice: Record<FormsChoiceKey, FormsChoiceCopy>;
|
|
168
|
+
/** The multi-field sections. */
|
|
169
|
+
longForm: Record<FormsLongFormPreset, FormsLongFormCopy>;
|
|
170
|
+
/** `forms.success` — a bare status mark over an H2, no CTA. */
|
|
171
|
+
success: {
|
|
172
|
+
title: string;
|
|
173
|
+
subtitle?: string;
|
|
174
|
+
};
|
|
175
|
+
/** `forms.error` — status mark, H2 and a "Try again" CTA. */
|
|
176
|
+
error: {
|
|
177
|
+
title: string;
|
|
178
|
+
subtitle?: string;
|
|
179
|
+
ctaLabel: string;
|
|
180
|
+
};
|
|
181
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Forms & Data Entry — copy contract.
|
|
2
|
+
//
|
|
3
|
+
// Figma: `🧩 Forms and Data entry (Input type) - Screens specs + Localization`
|
|
4
|
+
// (N6otHMuY2Hha5eBqRz0uC3, page 1:222). Two top-level groups of purple parent
|
|
5
|
+
// sections:
|
|
6
|
+
//
|
|
7
|
+
// 🧩 Forms and Data entry (Input type)
|
|
8
|
+
// forms.idnumber · forms.cpf · forms.email · forms.phone · forms.text
|
|
9
|
+
// forms.dob (default / typing / iconButton†)
|
|
10
|
+
// forms.country (Residence: default / open / typing†) · Forms.nationality
|
|
11
|
+
// forms.select · forms.yesNo · forms.country (question)
|
|
12
|
+
// forms.name · longform.customizable
|
|
13
|
+
// forms.success · forms.error · forms.inputerror (empty / invalid)
|
|
14
|
+
//
|
|
15
|
+
// 🧩 Long forms - pre-defined cases
|
|
16
|
+
// forms.longform.default / longform.focused / longform.filled /
|
|
17
|
+
// longform.loading / "Forms and data entry - Optional / Required"
|
|
18
|
+
//
|
|
19
|
+
// This is the archetype-E showcase: every section is nav → title block →
|
|
20
|
+
// labelled field stack → CTA → verified tag (GUIDELINES §6-E), and the sections
|
|
21
|
+
// differ only in WHICH Core input sits in the stack and in what state. The
|
|
22
|
+
// module therefore ships four screen families rather than nineteen screens:
|
|
23
|
+
// one for a single field, one for a choice field, one for a multi-field form,
|
|
24
|
+
// plus the two verdicts.
|
|
25
|
+
//
|
|
26
|
+
// † Two sections have no state of their own, because the ONE thing that makes
|
|
27
|
+
// each of them a distinct frame is a piece of Core that does not exist yet: the
|
|
28
|
+
// open date-picker panel (`forms.DOB.iconButton`) and a search bar carrying a
|
|
29
|
+
// typed query (`forms.residencetyping`). Both are logged as Core requests —
|
|
30
|
+
// DEVIATIONS #FDE-5 and #FDE-6 — and neither is faked here: a card that repeats
|
|
31
|
+
// its neighbour is the defect, not the coverage. See the state unions below.
|
|
32
|
+
//
|
|
33
|
+
// No hardcoded English anywhere in a screen: every visible string arrives here,
|
|
34
|
+
// so the host's locale pack drives the module (the Figma file ships ES + PT
|
|
35
|
+
// columns beside the EN one).
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaProcessingScreenProps } from './ProcessingScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { FormsStrings } from './FormsStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface FormsSuccessScreenProps extends Omit<PrizmaProcessingScreenProps, 'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'> {
|
|
7
|
+
/** Module copy — this screen reads the `success` slice. */
|
|
8
|
+
strings: FormsStrings;
|
|
9
|
+
screenId?: string;
|
|
10
|
+
overrides?: PrizmaScreenOverrides;
|
|
11
|
+
onAction?: PrizmaScreenActionHandler;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Forms & Data Entry — the success verdict, built on the Processing archetype
|
|
15
|
+
* (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
|
|
16
|
+
*
|
|
17
|
+
* Figma: the purple `forms.success` section (3:18734). A centred status mark
|
|
18
|
+
* over a bare H2 ("Success!") and then NOTHING — the CTA slot is empty all the
|
|
19
|
+
* way down to the anchored tag, while the sibling `forms.error` section
|
|
20
|
+
* (2014:21506) draws "Try again" in that same slot.
|
|
21
|
+
*
|
|
22
|
+
* §6-F reserves the Result archetype for "every verdict screen that needs a
|
|
23
|
+
* button" and keeps C as the pure no-button case, so the module's two verdicts
|
|
24
|
+
* legitimately sit on two different archetypes — the #EI-4 split, applied
|
|
25
|
+
* unchanged.
|
|
26
|
+
*
|
|
27
|
+
* The mark is Core's outline status icon via `PrizmaTitle`'s icon slot; the
|
|
28
|
+
* module Figma still draws the two-tone filled disc, one icon sweep behind
|
|
29
|
+
* (DEVIATIONS #15, unchanged here).
|
|
30
|
+
*/
|
|
31
|
+
export declare const FormsSuccessScreen: React.ForwardRefExoticComponent<FormsSuccessScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
32
|
+
export default FormsSuccessScreen;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaProcessingScreen, } from './ProcessingScreen';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
/**
|
|
7
|
+
* Forms & Data Entry — the success verdict, built on the Processing archetype
|
|
8
|
+
* (GUIDELINES.md §6-C, `PrizmaProcessingScreen`).
|
|
9
|
+
*
|
|
10
|
+
* Figma: the purple `forms.success` section (3:18734). A centred status mark
|
|
11
|
+
* over a bare H2 ("Success!") and then NOTHING — the CTA slot is empty all the
|
|
12
|
+
* way down to the anchored tag, while the sibling `forms.error` section
|
|
13
|
+
* (2014:21506) draws "Try again" in that same slot.
|
|
14
|
+
*
|
|
15
|
+
* §6-F reserves the Result archetype for "every verdict screen that needs a
|
|
16
|
+
* button" and keeps C as the pure no-button case, so the module's two verdicts
|
|
17
|
+
* legitimately sit on two different archetypes — the #EI-4 split, applied
|
|
18
|
+
* unchanged.
|
|
19
|
+
*
|
|
20
|
+
* The mark is Core's outline status icon via `PrizmaTitle`'s icon slot; the
|
|
21
|
+
* module Figma still draws the two-tone filled disc, one icon sweep behind
|
|
22
|
+
* (DEVIATIONS #15, unchanged here).
|
|
23
|
+
*/
|
|
24
|
+
export const FormsSuccessScreen = forwardRef(({ strings, screenId = 'forms-success', overrides, onAction, ...shell }, ref) => (_jsx(PrizmaProcessingScreen, { ref: ref, status: "success", title: strings.success.title, subtitle: strings.success.subtitle, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell })));
|
|
25
|
+
FormsSuccessScreen.displayName = 'FormsSuccessScreen';
|
|
26
|
+
export default FormsSuccessScreen;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaListScreenProps } from './ListScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { GeolocationBrowser, GeolocationStrings } from './GeolocationStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface GeolocationBrowserStepsScreenProps extends Omit<PrizmaListScreenProps, 'status' | 'title' | 'subtitle' | 'children' | 'ctaLabel' | 'secondaryCtaLabel' | 'linkLabel' | 'verifiedLabel' | 'navLabel'> {
|
|
7
|
+
/** Module copy — this screen reads the `browserSteps` slice. */
|
|
8
|
+
strings: GeolocationStrings;
|
|
9
|
+
/** Which browser's steps to show. Default `safariIos`. */
|
|
10
|
+
browser?: GeolocationBrowser;
|
|
11
|
+
/**
|
|
12
|
+
* Offer the second action. Default `true`. Figma's Samsung Internet section
|
|
13
|
+
* draws the primary alone, because that flow cannot skip the step.
|
|
14
|
+
*/
|
|
15
|
+
showSkip?: boolean;
|
|
16
|
+
screenId?: string;
|
|
17
|
+
overrides?: PrizmaScreenOverrides;
|
|
18
|
+
onAction?: PrizmaScreenActionHandler;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Geolocation — "Follow the next steps to allow Incode to access your
|
|
22
|
+
* location", built on the List archetype (GUIDELINES.md §6-G,
|
|
23
|
+
* `PrizmaListScreen`).
|
|
24
|
+
*
|
|
25
|
+
* ONE screen for all NINE purple sections of the Web group. They draw the
|
|
26
|
+
* identical skeleton — title block → a step list filling the middle → the
|
|
27
|
+
* refresh CTA — and differ only in the rows, because re-enabling location is a
|
|
28
|
+
* different journey in Safari, Chrome, Firefox, Opera and Samsung Internet, on
|
|
29
|
+
* iOS and on Android. Nine files would have been nine chances to drift.
|
|
30
|
+
*
|
|
31
|
+
* The rows are Core's `PrizmaCardListCommonIssues` verbatim; only the leading
|
|
32
|
+
* glyph is chosen here, from the canonical bank (see `STEP_ICONS`).
|
|
33
|
+
*
|
|
34
|
+
* The title block is LEFT-aligned for this whole family. Every
|
|
35
|
+
* `Geolocation.allowLocation.<browser>` section starts the two-line headline —
|
|
36
|
+
* and the browser label under it — flush at the gutter, over left-led step
|
|
37
|
+
* rows; a centred headline above a left-aligned list reads as a mistake. The
|
|
38
|
+
* screen therefore DEFAULTS the archetype's own `align` override to `left`
|
|
39
|
+
* rather than declaring any alignment of its own, and a host that passes
|
|
40
|
+
* `overrides.align` still wins.
|
|
41
|
+
*
|
|
42
|
+
* Two things Figma draws that this screen does not, both reported rather than
|
|
43
|
+
* worked around:
|
|
44
|
+
* - **Mixed weight inside a row.** Figma bolds the actionable fragment ("Tap
|
|
45
|
+
* **Three dots** in the top right"); Core's row `title` is a plain `string`,
|
|
46
|
+
* so the sentence renders in one weight. Core request: a `ReactNode` title.
|
|
47
|
+
* - **Primary above secondary.** Figma stacks "Refresh page" over "Skip this
|
|
48
|
+
* step" on all nine sections; archetype G's band renders the secondary first
|
|
49
|
+
* (`ListScreen.tsx`), so these screens ship inverted against their frames.
|
|
50
|
+
* The archetype owns the order and no module re-declares it — archetype G
|
|
51
|
+
* needs a `ctaOrder` slot the way archetype F already has `ctaOrientation`.
|
|
52
|
+
* ESCALATED, NOT RESOLVED: DEVIATIONS.md still has no Geolocation section, so
|
|
53
|
+
* there is no ruling to cite yet.
|
|
54
|
+
*/
|
|
55
|
+
export declare const GeolocationBrowserStepsScreen: React.ForwardRefExoticComponent<GeolocationBrowserStepsScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
56
|
+
export default GeolocationBrowserStepsScreen;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { IconArrowLeft, IconFolderFileOpen, IconGeoPin, IconLock, IconLockCheck, IconMobilePhone, IconNumberedList, IconTextAi, } from '@incodetech/prizma-core-icons';
|
|
5
|
+
import { PrizmaCardListCommonIssues } from '@incodetech/prizma-core-web/card-list';
|
|
6
|
+
import { PrizmaListScreen } from './ListScreen';
|
|
7
|
+
import './ScreenLayout.css';
|
|
8
|
+
/**
|
|
9
|
+
* Step kind → canonical bank glyph. ONE map, in one place, for the same reason
|
|
10
|
+
* Document Capture's common-issues map exists (DEVIATIONS #DC-23): Figma leads
|
|
11
|
+
* every row with OS/browser chrome the Prizma bank does not ship — a ⋮ overflow
|
|
12
|
+
* menu, a gear, a permission toggle, Safari's "AA" control and each browser's
|
|
13
|
+
* own logo. Shipping those would mean inventing primitives and bundling brand
|
|
14
|
+
* rasters, both forbidden (rule 1, GUIDELINES §10), so each row takes the
|
|
15
|
+
* nearest canonical glyph:
|
|
16
|
+
*
|
|
17
|
+
* addressBar → IconTextAi Safari's "AA" is the address-bar text control
|
|
18
|
+
* menu → IconNumberedList the ⋮ overflow opens a menu list
|
|
19
|
+
* settings → IconLock site settings sit behind the address-bar lock
|
|
20
|
+
* permissions → IconLockCheck a granted permission
|
|
21
|
+
* location → IconGeoPin near-exact
|
|
22
|
+
* device → IconMobilePhone the device's Settings app
|
|
23
|
+
* apps → IconFolderFileOpen the app list / app drawer
|
|
24
|
+
* return → IconArrowLeft "return here and refresh" (Figma draws the
|
|
25
|
+
* browser's logo — a brand raster, never bundled)
|
|
26
|
+
*
|
|
27
|
+
* Owner decision needed: mint the eight glyphs, or bless these substitutions.
|
|
28
|
+
* NOT YET RECORDED: DEVIATIONS.md has no Geolocation section, so this is an
|
|
29
|
+
* open escalation rather than a settled ruling. Verified against the frames on
|
|
30
|
+
* 2026-08-19 — every section leads its rows with OS/browser chrome, and the
|
|
31
|
+
* last row of each browser section draws that browser's own logo (Chrome disc,
|
|
32
|
+
* Firefox flame, Opera O, Samsung Internet mark).
|
|
33
|
+
*/
|
|
34
|
+
const STEP_ICONS = {
|
|
35
|
+
addressBar: _jsx(IconTextAi, { size: "m" }),
|
|
36
|
+
menu: _jsx(IconNumberedList, { size: "m" }),
|
|
37
|
+
settings: _jsx(IconLock, { size: "m" }),
|
|
38
|
+
permissions: _jsx(IconLockCheck, { size: "m" }),
|
|
39
|
+
location: _jsx(IconGeoPin, { size: "m" }),
|
|
40
|
+
device: _jsx(IconMobilePhone, { size: "m" }),
|
|
41
|
+
apps: _jsx(IconFolderFileOpen, { size: "m" }),
|
|
42
|
+
return: _jsx(IconArrowLeft, { size: "m" }),
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Geolocation — "Follow the next steps to allow Incode to access your
|
|
46
|
+
* location", built on the List archetype (GUIDELINES.md §6-G,
|
|
47
|
+
* `PrizmaListScreen`).
|
|
48
|
+
*
|
|
49
|
+
* ONE screen for all NINE purple sections of the Web group. They draw the
|
|
50
|
+
* identical skeleton — title block → a step list filling the middle → the
|
|
51
|
+
* refresh CTA — and differ only in the rows, because re-enabling location is a
|
|
52
|
+
* different journey in Safari, Chrome, Firefox, Opera and Samsung Internet, on
|
|
53
|
+
* iOS and on Android. Nine files would have been nine chances to drift.
|
|
54
|
+
*
|
|
55
|
+
* The rows are Core's `PrizmaCardListCommonIssues` verbatim; only the leading
|
|
56
|
+
* glyph is chosen here, from the canonical bank (see `STEP_ICONS`).
|
|
57
|
+
*
|
|
58
|
+
* The title block is LEFT-aligned for this whole family. Every
|
|
59
|
+
* `Geolocation.allowLocation.<browser>` section starts the two-line headline —
|
|
60
|
+
* and the browser label under it — flush at the gutter, over left-led step
|
|
61
|
+
* rows; a centred headline above a left-aligned list reads as a mistake. The
|
|
62
|
+
* screen therefore DEFAULTS the archetype's own `align` override to `left`
|
|
63
|
+
* rather than declaring any alignment of its own, and a host that passes
|
|
64
|
+
* `overrides.align` still wins.
|
|
65
|
+
*
|
|
66
|
+
* Two things Figma draws that this screen does not, both reported rather than
|
|
67
|
+
* worked around:
|
|
68
|
+
* - **Mixed weight inside a row.** Figma bolds the actionable fragment ("Tap
|
|
69
|
+
* **Three dots** in the top right"); Core's row `title` is a plain `string`,
|
|
70
|
+
* so the sentence renders in one weight. Core request: a `ReactNode` title.
|
|
71
|
+
* - **Primary above secondary.** Figma stacks "Refresh page" over "Skip this
|
|
72
|
+
* step" on all nine sections; archetype G's band renders the secondary first
|
|
73
|
+
* (`ListScreen.tsx`), so these screens ship inverted against their frames.
|
|
74
|
+
* The archetype owns the order and no module re-declares it — archetype G
|
|
75
|
+
* needs a `ctaOrder` slot the way archetype F already has `ctaOrientation`.
|
|
76
|
+
* ESCALATED, NOT RESOLVED: DEVIATIONS.md still has no Geolocation section, so
|
|
77
|
+
* there is no ruling to cite yet.
|
|
78
|
+
*/
|
|
79
|
+
export const GeolocationBrowserStepsScreen = forwardRef(({ strings, browser = 'safariIos', showSkip = true, screenId = `geolocation-allow-location-${browser}`, overrides, onAction, ...shell }, ref) => {
|
|
80
|
+
const slice = strings.browserSteps.browsers[browser];
|
|
81
|
+
/* Family default, not a local re-declaration: the archetype already owns a
|
|
82
|
+
left variant, so the screen only picks which of ITS variants this family
|
|
83
|
+
uses. An explicit `overrides.align` from the host still wins. */
|
|
84
|
+
const alignedOverrides = {
|
|
85
|
+
...overrides,
|
|
86
|
+
align: overrides?.align ?? 'left',
|
|
87
|
+
};
|
|
88
|
+
return (_jsx(PrizmaListScreen, { ref: ref, title: strings.browserSteps.title, subtitle: slice?.label, ctaLabel: strings.browserSteps.ctaLabel, secondaryCtaLabel: showSkip ? strings.browserSteps.skipLabel : undefined, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: alignedOverrides, onAction: onAction, ...shell, children: _jsx(PrizmaCardListCommonIssues, { items: (slice?.steps ?? []).map((step) => ({
|
|
89
|
+
icon: STEP_ICONS[step.kind],
|
|
90
|
+
title: step.label,
|
|
91
|
+
showSubtitle: false,
|
|
92
|
+
})) }) }));
|
|
93
|
+
});
|
|
94
|
+
GeolocationBrowserStepsScreen.displayName = 'GeolocationBrowserStepsScreen';
|
|
95
|
+
export default GeolocationBrowserStepsScreen;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaResultScreenProps } from './ResultScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { GeolocationErrorVariant, GeolocationStrings } from './GeolocationStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface GeolocationErrorScreenProps extends Omit<PrizmaResultScreenProps, 'status' | 'title' | 'subtitle' | 'glyph' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'> {
|
|
7
|
+
/** Module copy — this screen reads the `error` slice its `variant` names. */
|
|
8
|
+
strings: GeolocationStrings;
|
|
9
|
+
/** Which purple `Geolocation.error.*` section to render. Default `locationUnavailable`. */
|
|
10
|
+
variant?: GeolocationErrorVariant;
|
|
11
|
+
screenId?: string;
|
|
12
|
+
overrides?: PrizmaScreenOverrides;
|
|
13
|
+
onAction?: PrizmaScreenActionHandler;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Geolocation — the error verdicts, built on the Result archetype
|
|
17
|
+
* (GUIDELINES.md §6-F, `PrizmaResultScreen`).
|
|
18
|
+
*
|
|
19
|
+
* ONE screen for the four purple `Geolocation.error.*` sections. All four draw
|
|
20
|
+
* the identical skeleton — a centred mark + title + supporting line over a
|
|
21
|
+
* single CTA — and differ only in copy and in which mark leads:
|
|
22
|
+
*
|
|
23
|
+
* - `locationUnavailable` — weak/inaccurate signal, "Try again"
|
|
24
|
+
* - `quit` — attempts exhausted, the step is required
|
|
25
|
+
* - `skip` — attempts exhausted, the step is optional
|
|
26
|
+
* - `noNetwork` — the connectivity family every module carries
|
|
27
|
+
*
|
|
28
|
+
* Figma draws the first three with a filled amber disc; Core renders the
|
|
29
|
+
* canonical OUTLINE warning mark (icon-outline sweep, DEVIATIONS #15). The
|
|
30
|
+
* module Figma is one sweep behind, exactly as Face Capture's and ID Capture's
|
|
31
|
+
* result screens were.
|
|
32
|
+
*
|
|
33
|
+
* `noNetwork` KEEPS the logo header and the verified tag even though its purple
|
|
34
|
+
* section draws neither: the owner rule of 2026-08-18 (#F-30, #F-34) makes the
|
|
35
|
+
* chrome constant across every screen so nothing shifts between states, and all
|
|
36
|
+
* modules' connectivity screens must read identically (#PI-8).
|
|
37
|
+
*
|
|
38
|
+
* The Wi-Fi mark is Figma's `Icon / Wi-Fi`; Core's `PrizmaTitle` icon allowlist
|
|
39
|
+
* is `status | spinner | none`, so it rides the archetype's `glyph` slot with
|
|
40
|
+
* the foundation's `__glyph` class, drawn from the canonical icon bank (#10).
|
|
41
|
+
*/
|
|
42
|
+
export declare const GeolocationErrorScreen: React.ForwardRefExoticComponent<GeolocationErrorScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
43
|
+
export default GeolocationErrorScreen;
|