@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,76 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import { PrizmaIllustrationNfcScan } from '@incodetech/prizma-core-web/illustration-nfc-scan';
|
|
3
|
+
import { PrizmaTutorialScreen, type PrizmaTutorialScreenProps } from './TutorialScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { NfcDocumentType, NfcStrings } from './NfcStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
|
|
8
|
+
export interface NfcTutorialScreenProps
|
|
9
|
+
extends Omit<
|
|
10
|
+
PrizmaTutorialScreenProps,
|
|
11
|
+
'title' | 'subtitle' | 'ctaLabel' | 'illustration' | 'verifiedLabel' | 'navLabel'
|
|
12
|
+
> {
|
|
13
|
+
/** Module copy — this screen reads the `tutorial` slice. */
|
|
14
|
+
strings: NfcStrings;
|
|
15
|
+
/** Which purple section: `nfc.tutorial.passport` or `nfc.tutorial.id`. */
|
|
16
|
+
documentType?: NfcDocumentType;
|
|
17
|
+
/** Replace Core's NFC artwork (hosts that ship their own document art). */
|
|
18
|
+
illustration?: ReactNode;
|
|
19
|
+
screenId?: string;
|
|
20
|
+
overrides?: PrizmaScreenOverrides;
|
|
21
|
+
onAction?: PrizmaScreenActionHandler;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* NFC — "Let's scan your passport chip" / "Read the chip on the ID", the
|
|
26
|
+
* instruction screen the CTA starts the read from. Purple sections
|
|
27
|
+
* `nfc.tutorial.passport` (19974:80984) and `nfc.tutorial.id` (19978:115144),
|
|
28
|
+
* on the Tutorial archetype (GUIDELINES.md §6-A).
|
|
29
|
+
*
|
|
30
|
+
* The centrepiece is Core's `PrizmaIllustrationNfcScan` — the looping
|
|
31
|
+
* phone-approaches-the-chip composition whose Figma frames ARE the two
|
|
32
|
+
* `iOS Animation` / `Android Animation` layers these sections draw. The screen
|
|
33
|
+
* supplies no artwork of its own.
|
|
34
|
+
*
|
|
35
|
+
* This is also what the four `nfc.scanning.*ready` sections show: they are this
|
|
36
|
+
* exact screen with the platform's NFC sheet presented over it, so they need no
|
|
37
|
+
* screen of their own (see `NfcScanningScreen`).
|
|
38
|
+
*/
|
|
39
|
+
export const NfcTutorialScreen = forwardRef<HTMLDivElement, NfcTutorialScreenProps>(
|
|
40
|
+
(
|
|
41
|
+
{
|
|
42
|
+
strings,
|
|
43
|
+
documentType = 'passport',
|
|
44
|
+
illustration,
|
|
45
|
+
screenId = `nfc-tutorial-${documentType}`,
|
|
46
|
+
overrides,
|
|
47
|
+
onAction,
|
|
48
|
+
...shell
|
|
49
|
+
},
|
|
50
|
+
ref,
|
|
51
|
+
) => (
|
|
52
|
+
<PrizmaTutorialScreen
|
|
53
|
+
ref={ref}
|
|
54
|
+
title={strings.tutorial[documentType].title}
|
|
55
|
+
subtitle={strings.tutorial[documentType].subtitle}
|
|
56
|
+
ctaLabel={strings.tutorial.ctaLabel}
|
|
57
|
+
illustration={
|
|
58
|
+
illustration ?? (
|
|
59
|
+
<PrizmaIllustrationNfcScan
|
|
60
|
+
type={documentType}
|
|
61
|
+
ariaLabel={strings.tutorial.illustrationLabel}
|
|
62
|
+
/>
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
verifiedLabel={strings.verifiedLabel}
|
|
66
|
+
navLabel={strings.navLabel}
|
|
67
|
+
screenId={screenId}
|
|
68
|
+
overrides={overrides}
|
|
69
|
+
onAction={onAction}
|
|
70
|
+
{...shell}
|
|
71
|
+
/>
|
|
72
|
+
),
|
|
73
|
+
);
|
|
74
|
+
NfcTutorialScreen.displayName = 'NfcTutorialScreen';
|
|
75
|
+
|
|
76
|
+
export default NfcTutorialScreen;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { PermissionsStrings } from './PermissionsStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
|
|
7
|
+
export interface PermissionsAllowScreenProps
|
|
8
|
+
extends Omit<
|
|
9
|
+
PrizmaResultScreenProps,
|
|
10
|
+
| 'status'
|
|
11
|
+
| 'title'
|
|
12
|
+
| 'subtitle'
|
|
13
|
+
| 'glyph'
|
|
14
|
+
| 'ctaLabel'
|
|
15
|
+
| 'linkLabel'
|
|
16
|
+
| 'verifiedLabel'
|
|
17
|
+
| 'navLabel'
|
|
18
|
+
> {
|
|
19
|
+
/** Family copy — this screen reads the `allow` slice. */
|
|
20
|
+
strings: PermissionsStrings;
|
|
21
|
+
screenId?: string;
|
|
22
|
+
overrides?: PrizmaScreenOverrides;
|
|
23
|
+
onAction?: PrizmaScreenActionHandler;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Permissions — "Allow Incode to access your camera", built on the Result
|
|
28
|
+
* archetype (GUIDELINES.md §6-F, `PrizmaResultScreen`).
|
|
29
|
+
*
|
|
30
|
+
* Figma: `1-3-2-id-allow-camera` of the `Permissions` section
|
|
31
|
+
* (qGJjfL4O0JSjz1x4tOjJn8, 3:1193). The sibling of
|
|
32
|
+
* `PermissionsRequiredScreen`, and the reason they are two screens rather than
|
|
33
|
+
* one with a variant: this frame states the ask in a centred title + supporting
|
|
34
|
+
* line, that one argues it with a list of reasons hung under the title. Result
|
|
35
|
+
* centres its column, List hangs it from the top — different archetypes, so
|
|
36
|
+
* different screens.
|
|
37
|
+
*
|
|
38
|
+
* `1-3-2-id-allow-camera-quit-process` is the SAME screen with an iOS confirm
|
|
39
|
+
* alert layered over it — an OS surface, not a second Prizma screen (see
|
|
40
|
+
* `PermissionsStrings.ts`).
|
|
41
|
+
*
|
|
42
|
+
* `showHeader={false}` keeps the section's logo-free chrome (the flow has not
|
|
43
|
+
* started) with the nav row still reserved.
|
|
44
|
+
*
|
|
45
|
+
* TWO things Figma draws that this screen does not, both reported rather than
|
|
46
|
+
* worked around:
|
|
47
|
+
* - **The filled amber disc.** Core renders the canonical OUTLINE warning mark
|
|
48
|
+
* (icon-outline sweep, DEVIATIONS #15).
|
|
49
|
+
* - **"Quit process" above the CTA.** Archetype F renders its tertiary link
|
|
50
|
+
* BELOW the button stack (`ResultScreen.tsx`), so this screen ships inverted
|
|
51
|
+
* against its frame. The archetype owns the order and no screen re-declares
|
|
52
|
+
* it — F needs a `ctaOrder` slot alongside the `ctaOrientation` it already
|
|
53
|
+
* has, exactly as Geolocation escalated for the same reason. Borrowing
|
|
54
|
+
* `bandContent` to fake the position is the workaround #VS-17 rejected.
|
|
55
|
+
*/
|
|
56
|
+
export const PermissionsAllowScreen = forwardRef<
|
|
57
|
+
HTMLDivElement,
|
|
58
|
+
PermissionsAllowScreenProps
|
|
59
|
+
>(
|
|
60
|
+
(
|
|
61
|
+
{
|
|
62
|
+
strings,
|
|
63
|
+
screenId = 'permissions-allow',
|
|
64
|
+
showHeader = false,
|
|
65
|
+
overrides,
|
|
66
|
+
onAction,
|
|
67
|
+
...shell
|
|
68
|
+
},
|
|
69
|
+
ref,
|
|
70
|
+
) => (
|
|
71
|
+
<PrizmaResultScreen
|
|
72
|
+
ref={ref}
|
|
73
|
+
showHeader={showHeader}
|
|
74
|
+
status="warning"
|
|
75
|
+
title={strings.allow.title}
|
|
76
|
+
subtitle={strings.allow.subtitle}
|
|
77
|
+
ctaLabel={strings.allow.ctaLabel}
|
|
78
|
+
linkLabel={strings.allow.quitLabel}
|
|
79
|
+
verifiedLabel={strings.verifiedLabel}
|
|
80
|
+
navLabel={strings.navLabel}
|
|
81
|
+
screenId={screenId}
|
|
82
|
+
overrides={overrides}
|
|
83
|
+
onAction={onAction}
|
|
84
|
+
{...shell}
|
|
85
|
+
/>
|
|
86
|
+
),
|
|
87
|
+
);
|
|
88
|
+
PermissionsAllowScreen.displayName = 'PermissionsAllowScreen';
|
|
89
|
+
|
|
90
|
+
export default PermissionsAllowScreen;
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
IconArrowLeft,
|
|
4
|
+
IconCamera,
|
|
5
|
+
IconFolderFileOpen,
|
|
6
|
+
IconLock,
|
|
7
|
+
IconLockCheck,
|
|
8
|
+
IconMobilePhone,
|
|
9
|
+
IconNumberedList,
|
|
10
|
+
IconTextAi,
|
|
11
|
+
} from '@incodetech/prizma-core-icons';
|
|
12
|
+
import { PrizmaCardListCommonIssues } from '@incodetech/prizma-core-web/card-list';
|
|
13
|
+
import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
|
|
14
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
15
|
+
import type {
|
|
16
|
+
PermissionsBrowser,
|
|
17
|
+
PermissionsStepKind,
|
|
18
|
+
PermissionsStrings,
|
|
19
|
+
} from './PermissionsStrings';
|
|
20
|
+
import './ScreenLayout.css';
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Step kind → canonical bank glyph. ONE map, in one place, for the same reason
|
|
24
|
+
* Geolocation's exists (`GeolocationBrowserStepsScreen`) and Document Capture's
|
|
25
|
+
* before it (DEVIATIONS #DC-23): Figma leads every row with OS/browser chrome
|
|
26
|
+
* the Prizma bank does not ship — a ⋮ overflow menu, a gear tile, a permission
|
|
27
|
+
* toggle, Safari's "AA" control and each browser's own logo on the last row.
|
|
28
|
+
* Shipping those would mean inventing primitives and bundling brand rasters,
|
|
29
|
+
* both forbidden (rule 1, GUIDELINES §10), so each row takes the nearest
|
|
30
|
+
* canonical glyph:
|
|
31
|
+
*
|
|
32
|
+
* settings → IconLock site settings sit behind the address-bar lock
|
|
33
|
+
* browser → IconTextAi Safari's "AA" is the address-bar text control
|
|
34
|
+
* menu → IconNumberedList the ⋮ overflow opens a menu list
|
|
35
|
+
* permissions → IconLockCheck a granted permission
|
|
36
|
+
* camera → IconCamera exact
|
|
37
|
+
* toggle → IconLockCheck the Allow/Ask switch
|
|
38
|
+
* device → IconMobilePhone the device's Settings app
|
|
39
|
+
* apps → IconFolderFileOpen the app list / app drawer
|
|
40
|
+
* return → IconArrowLeft "return here and refresh" (Figma draws the
|
|
41
|
+
* browser's own logo — never bundled)
|
|
42
|
+
*
|
|
43
|
+
* This is the SAME substitution table Geolocation already escalated to the
|
|
44
|
+
* owner, extended by `camera`/`toggle`/`browser` for this family. Mint the
|
|
45
|
+
* glyphs or bless the substitutions — one decision covers both families.
|
|
46
|
+
*/
|
|
47
|
+
const STEP_ICONS: Record<PermissionsStepKind, ReactNode> = {
|
|
48
|
+
settings: <IconLock size="m" />,
|
|
49
|
+
browser: <IconTextAi size="m" />,
|
|
50
|
+
menu: <IconNumberedList size="m" />,
|
|
51
|
+
permissions: <IconLockCheck size="m" />,
|
|
52
|
+
camera: <IconCamera size="m" />,
|
|
53
|
+
toggle: <IconLockCheck size="m" />,
|
|
54
|
+
device: <IconMobilePhone size="m" />,
|
|
55
|
+
apps: <IconFolderFileOpen size="m" />,
|
|
56
|
+
return: <IconArrowLeft size="m" />,
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export interface PermissionsBrowserStepsScreenProps
|
|
60
|
+
extends Omit<
|
|
61
|
+
PrizmaListScreenProps,
|
|
62
|
+
| 'status'
|
|
63
|
+
| 'title'
|
|
64
|
+
| 'subtitle'
|
|
65
|
+
| 'children'
|
|
66
|
+
| 'ctaLabel'
|
|
67
|
+
| 'linkLabel'
|
|
68
|
+
| 'verifiedLabel'
|
|
69
|
+
| 'navLabel'
|
|
70
|
+
> {
|
|
71
|
+
/** Family copy — this screen reads the `browserSteps` slice. */
|
|
72
|
+
strings: PermissionsStrings;
|
|
73
|
+
/** Which browser's steps to show. Default `safariIos`. */
|
|
74
|
+
browser?: PermissionsBrowser;
|
|
75
|
+
screenId?: string;
|
|
76
|
+
overrides?: PrizmaScreenOverrides;
|
|
77
|
+
onAction?: PrizmaScreenActionHandler;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Permissions — "Follow the next steps to allow Incode to access your camera",
|
|
82
|
+
* built on the List archetype (GUIDELINES.md §6-G, `PrizmaListScreen`).
|
|
83
|
+
*
|
|
84
|
+
* Figma: `1-4-2-id` of the `Permissions` section, plus the four
|
|
85
|
+
* `Android browsers` frames of the Web full-flow board (4:8159 — Chrome,
|
|
86
|
+
* Firefox, Samsung Internet, Opera). ONE screen for all five: they draw the
|
|
87
|
+
* identical skeleton — title block → a step list filling the middle → the
|
|
88
|
+
* refresh CTA — and differ only in the rows, because re-enabling the camera is
|
|
89
|
+
* a different journey in each browser. Five files would have been five chances
|
|
90
|
+
* to drift.
|
|
91
|
+
*
|
|
92
|
+
* The rows are Core's `PrizmaCardListCommonIssues` verbatim; only the leading
|
|
93
|
+
* glyph is chosen here, from the canonical bank (see `STEP_ICONS`).
|
|
94
|
+
*
|
|
95
|
+
* The title block is LEFT-aligned for this whole family. Every frame starts the
|
|
96
|
+
* two-line headline flush at the gutter over left-led step rows; a centred
|
|
97
|
+
* headline above a left-aligned list reads as a mistake. The screen therefore
|
|
98
|
+
* DEFAULTS the archetype's own `align` override to `left` rather than declaring
|
|
99
|
+
* any alignment of its own, and a host that passes `overrides.align` still wins.
|
|
100
|
+
*
|
|
101
|
+
* One thing Figma draws that this screen does not: **mixed weight inside a
|
|
102
|
+
* row.** Figma bolds the actionable fragment ("Tap **Three dots** in the top
|
|
103
|
+
* right"); Core's row `title` is a plain `string`, so the sentence renders in
|
|
104
|
+
* one weight. Core request already open from Geolocation: a `ReactNode` title.
|
|
105
|
+
*/
|
|
106
|
+
export const PermissionsBrowserStepsScreen = forwardRef<
|
|
107
|
+
HTMLDivElement,
|
|
108
|
+
PermissionsBrowserStepsScreenProps
|
|
109
|
+
>(
|
|
110
|
+
(
|
|
111
|
+
{
|
|
112
|
+
strings,
|
|
113
|
+
browser = 'safariIos',
|
|
114
|
+
screenId = `permissions-browser-steps-${browser}`,
|
|
115
|
+
showHeader = false,
|
|
116
|
+
overrides,
|
|
117
|
+
onAction,
|
|
118
|
+
...shell
|
|
119
|
+
},
|
|
120
|
+
ref,
|
|
121
|
+
) => {
|
|
122
|
+
const slice = strings.browserSteps.browsers[browser];
|
|
123
|
+
/* Family default, not a local re-declaration: the archetype already owns a
|
|
124
|
+
left variant, so the screen only picks which of ITS variants this family
|
|
125
|
+
uses. An explicit `overrides.align` from the host still wins. */
|
|
126
|
+
const alignedOverrides: PrizmaScreenOverrides = {
|
|
127
|
+
...overrides,
|
|
128
|
+
align: overrides?.align ?? 'left',
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
return (
|
|
132
|
+
<PrizmaListScreen
|
|
133
|
+
ref={ref}
|
|
134
|
+
showHeader={showHeader}
|
|
135
|
+
title={strings.browserSteps.title}
|
|
136
|
+
subtitle={slice?.label}
|
|
137
|
+
ctaLabel={strings.browserSteps.ctaLabel}
|
|
138
|
+
verifiedLabel={strings.verifiedLabel}
|
|
139
|
+
navLabel={strings.navLabel}
|
|
140
|
+
screenId={screenId}
|
|
141
|
+
overrides={alignedOverrides}
|
|
142
|
+
onAction={onAction}
|
|
143
|
+
{...shell}
|
|
144
|
+
>
|
|
145
|
+
<PrizmaCardListCommonIssues
|
|
146
|
+
items={(slice?.steps ?? []).map((step) => ({
|
|
147
|
+
icon: STEP_ICONS[step.kind],
|
|
148
|
+
title: step.label,
|
|
149
|
+
showSubtitle: false,
|
|
150
|
+
}))}
|
|
151
|
+
/>
|
|
152
|
+
</PrizmaListScreen>
|
|
153
|
+
);
|
|
154
|
+
},
|
|
155
|
+
);
|
|
156
|
+
PermissionsBrowserStepsScreen.displayName = 'PermissionsBrowserStepsScreen';
|
|
157
|
+
|
|
158
|
+
export default PermissionsBrowserStepsScreen;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import React, { forwardRef, type ReactNode } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
IconApproval,
|
|
4
|
+
IconBankCardSearch,
|
|
5
|
+
IconCamera,
|
|
6
|
+
IconGeoPin,
|
|
7
|
+
IconMicrophone,
|
|
8
|
+
} from '@incodetech/prizma-core-icons';
|
|
9
|
+
import { PrizmaCardListCommonIssues } from '@incodetech/prizma-core-web/card-list';
|
|
10
|
+
import { PrizmaListScreen, type PrizmaListScreenProps } from './ListScreen';
|
|
11
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
12
|
+
import type { PermissionsCapability, PermissionsStrings } from './PermissionsStrings';
|
|
13
|
+
import './ScreenLayout.css';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The reason rows' leading glyphs, in the order the frame lists them: the
|
|
17
|
+
* capability itself · what it proves · that it is required. Canonical bank only
|
|
18
|
+
* (§10). The first row is keyed to the capability so a microphone prompt does
|
|
19
|
+
* not lead with a camera.
|
|
20
|
+
*/
|
|
21
|
+
const LEAD_ICON: Record<PermissionsCapability, ReactNode> = {
|
|
22
|
+
camera: <IconCamera size="m" />,
|
|
23
|
+
microphone: <IconMicrophone size="m" />,
|
|
24
|
+
location: <IconGeoPin size="m" />,
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const TRAILING_ICONS = [
|
|
28
|
+
<IconBankCardSearch key="authenticity" size="m" />,
|
|
29
|
+
<IconApproval key="required" size="m" />,
|
|
30
|
+
];
|
|
31
|
+
|
|
32
|
+
export interface PermissionsRequiredScreenProps
|
|
33
|
+
extends Omit<
|
|
34
|
+
PrizmaListScreenProps,
|
|
35
|
+
| 'status'
|
|
36
|
+
| 'title'
|
|
37
|
+
| 'subtitle'
|
|
38
|
+
| 'children'
|
|
39
|
+
| 'ctaLabel'
|
|
40
|
+
| 'linkLabel'
|
|
41
|
+
| 'verifiedLabel'
|
|
42
|
+
| 'navLabel'
|
|
43
|
+
> {
|
|
44
|
+
/** Family copy — this screen reads the `required` slice. */
|
|
45
|
+
strings: PermissionsStrings;
|
|
46
|
+
/** Which capability is being asked for. Keys the first row's glyph. Default `camera`. */
|
|
47
|
+
capability?: PermissionsCapability;
|
|
48
|
+
screenId?: string;
|
|
49
|
+
overrides?: PrizmaScreenOverrides;
|
|
50
|
+
onAction?: PrizmaScreenActionHandler;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Permissions — "Camera permission is required", built on the List archetype
|
|
55
|
+
* (GUIDELINES.md §6-G, `PrizmaListScreen`).
|
|
56
|
+
*
|
|
57
|
+
* Figma: `1-3-2-id` of the `Permissions` section (qGJjfL4O0JSjz1x4tOjJn8,
|
|
58
|
+
* 3:1193). This is the screen a user lands on after refusing the browser's own
|
|
59
|
+
* prompt: a warning mark, the headline, three rows saying what the capability
|
|
60
|
+
* is for, a tertiary "quit" link and the ask.
|
|
61
|
+
*
|
|
62
|
+
* `1-3-2-id-quit-process` is the SAME screen with an iOS confirm alert layered
|
|
63
|
+
* over it — an OS surface, not a second Prizma screen, so it is not built here
|
|
64
|
+
* (see `PermissionsStrings.ts`).
|
|
65
|
+
*
|
|
66
|
+
* `showHeader={false}` keeps the section's logo-free chrome — the flow has not
|
|
67
|
+
* started — with the nav row still reserved so nothing shifts on the next
|
|
68
|
+
* screen.
|
|
69
|
+
*
|
|
70
|
+
* Figma draws the status mark as a filled amber disc; Core renders the
|
|
71
|
+
* canonical OUTLINE warning mark (icon-outline sweep, DEVIATIONS #15). The
|
|
72
|
+
* generic file is one sweep behind, exactly as the module files were.
|
|
73
|
+
*/
|
|
74
|
+
export const PermissionsRequiredScreen = forwardRef<
|
|
75
|
+
HTMLDivElement,
|
|
76
|
+
PermissionsRequiredScreenProps
|
|
77
|
+
>(
|
|
78
|
+
(
|
|
79
|
+
{
|
|
80
|
+
strings,
|
|
81
|
+
capability = 'camera',
|
|
82
|
+
screenId = 'permissions-required',
|
|
83
|
+
showHeader = false,
|
|
84
|
+
overrides,
|
|
85
|
+
onAction,
|
|
86
|
+
...shell
|
|
87
|
+
},
|
|
88
|
+
ref,
|
|
89
|
+
) => (
|
|
90
|
+
<PrizmaListScreen
|
|
91
|
+
ref={ref}
|
|
92
|
+
showHeader={showHeader}
|
|
93
|
+
status="warning"
|
|
94
|
+
title={strings.required.title}
|
|
95
|
+
subtitle={strings.required.description}
|
|
96
|
+
ctaLabel={strings.required.ctaLabel}
|
|
97
|
+
linkLabel={strings.required.quitLabel}
|
|
98
|
+
verifiedLabel={strings.verifiedLabel}
|
|
99
|
+
navLabel={strings.navLabel}
|
|
100
|
+
screenId={screenId}
|
|
101
|
+
overrides={overrides}
|
|
102
|
+
onAction={onAction}
|
|
103
|
+
{...shell}
|
|
104
|
+
>
|
|
105
|
+
<PrizmaCardListCommonIssues
|
|
106
|
+
items={strings.required.rows.map((row, i) => ({
|
|
107
|
+
icon: i === 0 ? LEAD_ICON[capability] : TRAILING_ICONS[(i - 1) % TRAILING_ICONS.length],
|
|
108
|
+
title: row.title,
|
|
109
|
+
subtitle: row.description,
|
|
110
|
+
showSubtitle: Boolean(row.description),
|
|
111
|
+
}))}
|
|
112
|
+
/>
|
|
113
|
+
</PrizmaListScreen>
|
|
114
|
+
),
|
|
115
|
+
);
|
|
116
|
+
PermissionsRequiredScreen.displayName = 'PermissionsRequiredScreen';
|
|
117
|
+
|
|
118
|
+
export default PermissionsRequiredScreen;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// Permission screens — copy contract for the GENERIC family.
|
|
2
|
+
//
|
|
3
|
+
// Figma: `Module Generic Screens` (qGJjfL4O0JSjz1x4tOjJn8), section
|
|
4
|
+
// `Permissions` (3:1193), with the two full-flow frames `🍎 iOS` (3:7788) and
|
|
5
|
+
// `🌐 Web` (3:620).
|
|
6
|
+
//
|
|
7
|
+
// These screens are not one module's. Every module that reaches for the camera
|
|
8
|
+
// — ID Capture, Face Capture, Document Capture, Video Selfie — shows the SAME
|
|
9
|
+
// three surfaces when the browser or the OS says no, which is why the file that
|
|
10
|
+
// documents them is called "Generic Screens" and why they live here rather than
|
|
11
|
+
// under a module prefix. `IdCapturePermissionScreen` predates this family and
|
|
12
|
+
// is the ID Capture-flavoured copy of the same skeleton; it stays where it is so
|
|
13
|
+
// nothing that imports it breaks (DEVIATIONS #IDC-26).
|
|
14
|
+
//
|
|
15
|
+
// The section's seven frames collapse onto THREE built screens:
|
|
16
|
+
//
|
|
17
|
+
// 1-3-2-id → PermissionsRequiredScreen (reason rows)
|
|
18
|
+
// 1-3-2-id-allow-camera → PermissionsAllowScreen (subtitle)
|
|
19
|
+
// 1-4-2-id (+ 4 Android siblings) → PermissionsBrowserStepsScreen
|
|
20
|
+
//
|
|
21
|
+
// The other four are OS chrome and are NOT built:
|
|
22
|
+
//
|
|
23
|
+
// 1-3-1-id-permission-modal the browser's own "Allow camera access" sheet
|
|
24
|
+
// 1-4-1-id the iOS "…Would Like to Access the Camera" alert
|
|
25
|
+
// 1-3-2-id-quit-process an iOS confirm alert layered over 1-3-2-id
|
|
26
|
+
// 1-3-2-id-allow-camera-quit the same alert layered over the allow screen
|
|
27
|
+
//
|
|
28
|
+
// None of them is a Prizma surface: their chrome does not exist in Core and
|
|
29
|
+
// rebuilding it would mean inventing primitives and shipping platform rasters,
|
|
30
|
+
// both forbidden (rule 1, GUIDELINES §10). Same call as Document Capture's iOS
|
|
31
|
+
// action sheets (#DC-20) and Geolocation's system alert. Core Lab draws them as
|
|
32
|
+
// dashed OS mocks on the flow instead, so the chain still reads.
|
|
33
|
+
//
|
|
34
|
+
// No hardcoded English anywhere in a screen: every visible string arrives here,
|
|
35
|
+
// so a host's locale pack drives the family.
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The capability being asked for. The Figma section is drawn for the camera
|
|
39
|
+
* throughout, but the skeleton is identical for a microphone or a location
|
|
40
|
+
* prompt — so the screens never name the device themselves, the copy does, and
|
|
41
|
+
* this type exists only to key the reason-row glyphs.
|
|
42
|
+
*/
|
|
43
|
+
export type PermissionsCapability = 'camera' | 'microphone' | 'location';
|
|
44
|
+
|
|
45
|
+
/** A single reason row — Core `PrizmaCardListCommonIssues` rows. */
|
|
46
|
+
export interface PermissionsReasonRow {
|
|
47
|
+
title: string;
|
|
48
|
+
description?: string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Which browser's "turn it back on" journey to show. `safariIos` is the base
|
|
53
|
+
* `1-4-2-id` frame; the other four are the `Android browsers` section of the
|
|
54
|
+
* Web flow (4:8159). Re-enabling a permission is a different journey in every
|
|
55
|
+
* browser, which is why one screen carries five step lists rather than five
|
|
56
|
+
* screens carrying one skeleton.
|
|
57
|
+
*/
|
|
58
|
+
export type PermissionsBrowser =
|
|
59
|
+
| 'safariIos'
|
|
60
|
+
| 'chromeAndroid'
|
|
61
|
+
| 'firefoxAndroid'
|
|
62
|
+
| 'samsungAndroid'
|
|
63
|
+
| 'operaAndroid';
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Step kind → canonical bank glyph, resolved in
|
|
67
|
+
* `PermissionsBrowserStepsScreen`. Figma leads every row with OS/browser chrome
|
|
68
|
+
* the Prizma bank does not ship — a ⋮ overflow, a gear tile, a permission
|
|
69
|
+
* toggle, and each browser's own logo on the last row. Shipping those would
|
|
70
|
+
* mean inventing primitives and bundling brand rasters, so each row takes the
|
|
71
|
+
* nearest canonical glyph. Same substitution table Geolocation already
|
|
72
|
+
* escalated (`GeolocationBrowserStepsScreen`); this family reuses it rather
|
|
73
|
+
* than inventing a second one.
|
|
74
|
+
*/
|
|
75
|
+
export type PermissionsStepKind =
|
|
76
|
+
| 'settings'
|
|
77
|
+
| 'browser'
|
|
78
|
+
| 'menu'
|
|
79
|
+
| 'permissions'
|
|
80
|
+
| 'camera'
|
|
81
|
+
| 'toggle'
|
|
82
|
+
| 'device'
|
|
83
|
+
| 'apps'
|
|
84
|
+
| 'return';
|
|
85
|
+
|
|
86
|
+
export interface PermissionsStep {
|
|
87
|
+
kind: PermissionsStepKind;
|
|
88
|
+
label: string;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface PermissionsBrowserSteps {
|
|
92
|
+
/** Names the browser under the headline. Figma labels the section, not the
|
|
93
|
+
* screen; the label keeps five otherwise near-identical cards apart. */
|
|
94
|
+
label: string;
|
|
95
|
+
steps: PermissionsStep[];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
export interface PermissionsStrings {
|
|
99
|
+
/** Accessible name for the logo nav region (i18n — no baked-in English). */
|
|
100
|
+
navLabel?: string;
|
|
101
|
+
/** "verified by" attribution copy for the footer tag. */
|
|
102
|
+
verifiedLabel: string;
|
|
103
|
+
|
|
104
|
+
/** `1-3-2-id` — the permission was refused and the flow explains why it needs it. */
|
|
105
|
+
required: {
|
|
106
|
+
title: string;
|
|
107
|
+
/** Optional line under the title. Figma's frame draws the rows alone. */
|
|
108
|
+
description?: string;
|
|
109
|
+
rows: PermissionsReasonRow[];
|
|
110
|
+
/** Tertiary link — "Quit process". */
|
|
111
|
+
quitLabel: string;
|
|
112
|
+
ctaLabel: string;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/** `1-3-2-id-allow-camera` — the first ask, before any refusal. */
|
|
116
|
+
allow: {
|
|
117
|
+
title: string;
|
|
118
|
+
subtitle?: string;
|
|
119
|
+
quitLabel: string;
|
|
120
|
+
ctaLabel: string;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/** `1-4-2-id` + the four `Android browsers` siblings. */
|
|
124
|
+
browserSteps: {
|
|
125
|
+
title: string;
|
|
126
|
+
ctaLabel: string;
|
|
127
|
+
browsers: Record<PermissionsBrowser, PermissionsBrowserSteps>;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { IconWifiOff } from '@incodetech/prizma-core-icons';
|
|
3
|
+
import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { PhoneInputErrorVariant, PhoneInputStrings } from './PhoneInputStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
|
|
8
|
+
export interface PhoneInputErrorScreenProps
|
|
9
|
+
extends Omit<
|
|
10
|
+
PrizmaResultScreenProps,
|
|
11
|
+
| 'status'
|
|
12
|
+
| 'title'
|
|
13
|
+
| 'subtitle'
|
|
14
|
+
| 'glyph'
|
|
15
|
+
| 'ctaLabel'
|
|
16
|
+
| 'verifiedLabel'
|
|
17
|
+
| 'navLabel'
|
|
18
|
+
> {
|
|
19
|
+
/** Module copy — this screen reads the `error` slice its `variant` names. */
|
|
20
|
+
strings: PhoneInputStrings;
|
|
21
|
+
/** Which purple `phoneNumber.error.*` section to render. Default `tryAgain`. */
|
|
22
|
+
variant?: PhoneInputErrorVariant;
|
|
23
|
+
screenId?: string;
|
|
24
|
+
overrides?: PrizmaScreenOverrides;
|
|
25
|
+
onAction?: PrizmaScreenActionHandler;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Phone Input — the error verdicts, built on the Result archetype
|
|
30
|
+
* (GUIDELINES.md §6-F, `PrizmaResultScreen`).
|
|
31
|
+
*
|
|
32
|
+
* ONE screen for the three purple `phoneNumber.error.*` sections:
|
|
33
|
+
* - `tryAgain` — the code could not be sent, retry
|
|
34
|
+
* - `unknown` — `phonenumber.error.unknown`, the generic failure
|
|
35
|
+
* - `noNetwork` — the connectivity family every module carries
|
|
36
|
+
*
|
|
37
|
+
* `noNetwork` KEEPS the logo header and the verified tag, exactly as the three
|
|
38
|
+
* Wave-2 `*NoConnectionScreen`s do. The module Figma draws this section bare —
|
|
39
|
+
* DEVIATIONS #9 recorded that observation in Wave 1 — but the owner rule of
|
|
40
|
+
* 2026-08-18 (#F-34) supersedes it: the chrome is constant across every screen
|
|
41
|
+
* so nothing shifts between states, and all four modules' connectivity screens
|
|
42
|
+
* must read identically. DEVIATIONS #PI-8.
|
|
43
|
+
*
|
|
44
|
+
* The Wi-Fi mark is Figma's `Icon / Wi-Fi`; Core's `PrizmaTitle` icon allowlist
|
|
45
|
+
* is `status | spinner | none`, so it rides the archetype's `glyph` slot with
|
|
46
|
+
* the foundation's `__glyph` class, drawn from the canonical icon bank
|
|
47
|
+
* (DEVIATIONS #10).
|
|
48
|
+
*/
|
|
49
|
+
export const PhoneInputErrorScreen = forwardRef<HTMLDivElement, PhoneInputErrorScreenProps>(
|
|
50
|
+
(
|
|
51
|
+
{
|
|
52
|
+
strings,
|
|
53
|
+
variant = 'tryAgain',
|
|
54
|
+
screenId = `phone-input-error-${variant}`,
|
|
55
|
+
overrides,
|
|
56
|
+
onAction,
|
|
57
|
+
...shell
|
|
58
|
+
},
|
|
59
|
+
ref,
|
|
60
|
+
) => {
|
|
61
|
+
const noConnection = variant === 'noNetwork';
|
|
62
|
+
const copy = noConnection
|
|
63
|
+
? strings.error.noConnection
|
|
64
|
+
: variant === 'unknown'
|
|
65
|
+
? strings.error.unknown
|
|
66
|
+
: strings.error.tryAgain;
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
<PrizmaResultScreen
|
|
70
|
+
ref={ref}
|
|
71
|
+
/* The connectivity screen leads with the Wi-Fi glyph instead of a
|
|
72
|
+
status mark; the other two carry the canonical error mark. */
|
|
73
|
+
status={noConnection ? 'none' : 'error'}
|
|
74
|
+
glyph={
|
|
75
|
+
noConnection ? (
|
|
76
|
+
<span
|
|
77
|
+
className={[
|
|
78
|
+
'prizma-screen-layout__glyph',
|
|
79
|
+
'prizma-screen-layout__glyph--negative',
|
|
80
|
+
overrides?.align === 'left' ? 'prizma-screen-layout__glyph--left' : '',
|
|
81
|
+
]
|
|
82
|
+
.filter(Boolean)
|
|
83
|
+
.join(' ')}
|
|
84
|
+
>
|
|
85
|
+
<IconWifiOff size="l" />
|
|
86
|
+
</span>
|
|
87
|
+
) : undefined
|
|
88
|
+
}
|
|
89
|
+
title={copy.title}
|
|
90
|
+
subtitle={copy.subtitle}
|
|
91
|
+
ctaLabel={copy.ctaLabel}
|
|
92
|
+
verifiedLabel={strings.verifiedLabel}
|
|
93
|
+
navLabel={strings.navLabel}
|
|
94
|
+
screenId={screenId}
|
|
95
|
+
overrides={overrides}
|
|
96
|
+
onAction={onAction}
|
|
97
|
+
{...shell}
|
|
98
|
+
/>
|
|
99
|
+
);
|
|
100
|
+
},
|
|
101
|
+
);
|
|
102
|
+
PhoneInputErrorScreen.displayName = 'PhoneInputErrorScreen';
|
|
103
|
+
|
|
104
|
+
export default PhoneInputErrorScreen;
|