@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,61 @@
|
|
|
1
|
+
/* Phone Input โ module layout additions.
|
|
2
|
+
*
|
|
3
|
+
* ONLY what the foundation archetypes and Prizma Core do not already own.
|
|
4
|
+
* Every value is a token. Nothing here re-declares an archetype spacing rule:
|
|
5
|
+
* the content column, the 24px gutters, the title โ fields offset and the
|
|
6
|
+
* anchored footer all stay the foundation's (`ScreenLayout.css`,
|
|
7
|
+
* `FormScreen.css`).
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/* โโ Combined country + phone row โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
11
|
+
* Figma `Input / Combined` (3939:41889): "a combined form element that allows
|
|
12
|
+
* users to input phone number" โ a dropdown + text field pair at Spacing/8,
|
|
13
|
+
* the dropdown hugging its content, the field filling the rest.
|
|
14
|
+
*
|
|
15
|
+
* Core ships both primitives; what it has no component for is the PAIRING, so
|
|
16
|
+
* the row lives here. `align-items: start` keeps the two fields top-aligned
|
|
17
|
+
* when the text field grows an error/helper row that the dropdown does not.
|
|
18
|
+
*/
|
|
19
|
+
.phone-input-combined {
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: flex-start;
|
|
22
|
+
gap: var(--prizma-spacing-8);
|
|
23
|
+
width: 100%;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* The dial-code dropdown hugs its content ("๐ท๐ธ +381"), as Figma draws it.
|
|
27
|
+
*
|
|
28
|
+
* Core's `.prizma-dropdown` is `width: 100%` (Dropdown.css) โ it is built to
|
|
29
|
+
* FILL its container and ships no hug/auto-width variant, so inside this row it
|
|
30
|
+
* consumed the whole column and pushed the number field out. Constrained here
|
|
31
|
+
* from the module layer (no Core file touched, no !important): `width: auto`
|
|
32
|
+
* releases the fill and `flex: 0 0 auto` keeps the row from stretching it back.
|
|
33
|
+
* The inner `__anchor` inherits the same rule for the same reason.
|
|
34
|
+
* A `width`/`fit` prop on `PrizmaDropdown` would remove this โ DEVIATIONS #PI-1.
|
|
35
|
+
*/
|
|
36
|
+
.phone-input-combined__country,
|
|
37
|
+
.phone-input-combined__country .prizma-dropdown__anchor,
|
|
38
|
+
.phone-input-combined__country .prizma-dropdown__label-container {
|
|
39
|
+
flex: 0 0 auto;
|
|
40
|
+
width: auto;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* โฆand the number field takes the remaining width. `min-width: 0` is what lets
|
|
44
|
+
* it actually shrink inside the flex row instead of overflowing the column. */
|
|
45
|
+
.phone-input-combined__number {
|
|
46
|
+
flex: 1 1 auto;
|
|
47
|
+
min-width: 0;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* The open menu must NOT inherit the hugged anchor's width: Core anchors the
|
|
51
|
+
* menu to the trigger, so once the trigger hugs "๐ท๐ธ +381" the option rows
|
|
52
|
+
* truncate ("+โฆ"). The menu keeps its own readable width โ it lists country
|
|
53
|
+
* names and dial codes, which the closed field never shows. Sized to the
|
|
54
|
+
* content and capped at the 342 column so it never escapes the screen.
|
|
55
|
+
* DEVIATIONS #PI-1 (same root cause as the hug).
|
|
56
|
+
*/
|
|
57
|
+
.phone-input-combined__country .prizma-dropdown__menu {
|
|
58
|
+
width: max-content;
|
|
59
|
+
min-width: 100%;
|
|
60
|
+
max-width: 342px;
|
|
61
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaOtp } from '@incodetech/prizma-core-web/otp';
|
|
3
|
+
import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { PhoneInputOtpState, PhoneInputStrings } from './PhoneInputStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
import './PhoneInputLayout.css';
|
|
8
|
+
|
|
9
|
+
export interface PhoneInputOtpScreenProps
|
|
10
|
+
extends Omit<
|
|
11
|
+
PrizmaFormScreenProps,
|
|
12
|
+
'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
|
|
13
|
+
> {
|
|
14
|
+
/** Module copy โ this screen reads the `otp` slice. */
|
|
15
|
+
strings: PhoneInputStrings;
|
|
16
|
+
/** Which purple `phoneNumber.OTP.*` section to render. Default `typing`. */
|
|
17
|
+
state?: PhoneInputOtpState;
|
|
18
|
+
/** The code as typed. `typing` draws a partial value, `filled` a complete one. */
|
|
19
|
+
value?: string;
|
|
20
|
+
/** How many digits the code carries. Default 6. */
|
|
21
|
+
length?: number;
|
|
22
|
+
screenId?: string;
|
|
23
|
+
overrides?: PrizmaScreenOverrides;
|
|
24
|
+
onAction?: PrizmaScreenActionHandler;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Phone Input โ the one-time-code screen, built on the Form archetype
|
|
29
|
+
* (GUIDELINES.md ยง6-E, `PrizmaFormScreen`).
|
|
30
|
+
*
|
|
31
|
+
* ONE screen for all four purple `phoneNumber.OTP.*` sections
|
|
32
|
+
* (`typing` / `filled` / `processing` / `error`) โ identical layout, differing
|
|
33
|
+
* only in the state of the code field and the CTA.
|
|
34
|
+
*
|
|
35
|
+
* `processing` deliberately does NOT use Core's `PrizmaOtp.loading`. That prop
|
|
36
|
+
* centres the spinner INSIDE the code field (owner definition 2026-07-12), but
|
|
37
|
+
* the purple `OTP.processing` section draws the field simply DISABLED with the
|
|
38
|
+
* code still legible and puts the spinner in the CTA โ the same treatment as
|
|
39
|
+
* `verify.loading`, which is what makes the module read consistently. Figma
|
|
40
|
+
* wins; `PrizmaOtp.loading` stays correct for hosts that want the in-field
|
|
41
|
+
* spinner. DEVIATIONS #PI-5.
|
|
42
|
+
*/
|
|
43
|
+
export const PhoneInputOtpScreen = forwardRef<HTMLDivElement, PhoneInputOtpScreenProps>(
|
|
44
|
+
(
|
|
45
|
+
{
|
|
46
|
+
strings,
|
|
47
|
+
state = 'typing',
|
|
48
|
+
value,
|
|
49
|
+
length = 6,
|
|
50
|
+
screenId = `phone-input-otp-${state}`,
|
|
51
|
+
overrides,
|
|
52
|
+
onAction,
|
|
53
|
+
...shell
|
|
54
|
+
},
|
|
55
|
+
ref,
|
|
56
|
+
) => (
|
|
57
|
+
<PrizmaFormScreen
|
|
58
|
+
ref={ref}
|
|
59
|
+
title={strings.otp.title}
|
|
60
|
+
subtitle={strings.otp.subtitle}
|
|
61
|
+
ctaLabel={strings.otp.ctaLabel}
|
|
62
|
+
/* Figma greys the CTA until the code is complete. */
|
|
63
|
+
ctaDisabled={state === 'typing'}
|
|
64
|
+
/* The spinner rides the CTA, not the field (see the note above). */
|
|
65
|
+
ctaLoading={state === 'processing'}
|
|
66
|
+
ctaLoadingLabel={strings.otp.ctaLoadingLabel}
|
|
67
|
+
/* "Didn't receive the code? Resend code or Change phone number" โ drawn
|
|
68
|
+
under the CTA on every OTP section. ONE sentence, TWO independently
|
|
69
|
+
actionable links, so it uses the archetype's composed-line slot rather
|
|
70
|
+
than `linkLabel` (a full-width 56px button cannot sit inside a line of
|
|
71
|
+
body text, and one button could not tell the two actions apart โ
|
|
72
|
+
DEVIATIONS #PI-10). */
|
|
73
|
+
linkContent={
|
|
74
|
+
strings.otp.resendPrompt ? (
|
|
75
|
+
<p className="prizma-screen-layout__inline-prompt">
|
|
76
|
+
{strings.otp.resendPrompt}{' '}
|
|
77
|
+
{strings.otp.resendLabel ? (
|
|
78
|
+
<button
|
|
79
|
+
type="button"
|
|
80
|
+
className="prizma-screen-layout__inline-link"
|
|
81
|
+
onClick={() => onAction?.({ type: 'secondary', screenId })}
|
|
82
|
+
>
|
|
83
|
+
{strings.otp.resendLabel}
|
|
84
|
+
</button>
|
|
85
|
+
) : null}
|
|
86
|
+
{strings.otp.changeNumberLabel ? (
|
|
87
|
+
<>
|
|
88
|
+
{' '}
|
|
89
|
+
{strings.otp.resendSeparator}{' '}
|
|
90
|
+
<button
|
|
91
|
+
type="button"
|
|
92
|
+
className="prizma-screen-layout__inline-link"
|
|
93
|
+
onClick={() => onAction?.({ type: 'tertiary', screenId })}
|
|
94
|
+
>
|
|
95
|
+
{strings.otp.changeNumberLabel}
|
|
96
|
+
</button>
|
|
97
|
+
</>
|
|
98
|
+
) : null}
|
|
99
|
+
</p>
|
|
100
|
+
) : undefined
|
|
101
|
+
}
|
|
102
|
+
verifiedLabel={strings.verifiedLabel}
|
|
103
|
+
navLabel={strings.navLabel}
|
|
104
|
+
screenId={screenId}
|
|
105
|
+
overrides={overrides}
|
|
106
|
+
onAction={onAction}
|
|
107
|
+
{...shell}
|
|
108
|
+
>
|
|
109
|
+
<PrizmaOtp
|
|
110
|
+
length={length}
|
|
111
|
+
/* Uncontrolled, for the same reason as the phone field: `readOnly`
|
|
112
|
+
would paint Core's DISABLED surface on the resting states, which is
|
|
113
|
+
grey Figma does not draw there (DEVIATIONS #PI-6). */
|
|
114
|
+
defaultValue={value ?? ''}
|
|
115
|
+
/* `processing` is the one section Figma greys โ the code stays legible
|
|
116
|
+
while the check runs. */
|
|
117
|
+
disabled={state === 'processing'}
|
|
118
|
+
error={state === 'error'}
|
|
119
|
+
errorText={state === 'error' ? strings.otp.errorText : undefined}
|
|
120
|
+
/>
|
|
121
|
+
</PrizmaFormScreen>
|
|
122
|
+
),
|
|
123
|
+
);
|
|
124
|
+
PhoneInputOtpScreen.displayName = 'PhoneInputOtpScreen';
|
|
125
|
+
|
|
126
|
+
export default PhoneInputOtpScreen;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import {
|
|
3
|
+
PrizmaProcessingScreen,
|
|
4
|
+
type PrizmaProcessingScreenProps,
|
|
5
|
+
} from './ProcessingScreen';
|
|
6
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
7
|
+
import type { PhoneInputStrings } from './PhoneInputStrings';
|
|
8
|
+
import './ScreenLayout.css';
|
|
9
|
+
|
|
10
|
+
export interface PhoneInputSnaLoadingScreenProps
|
|
11
|
+
extends Omit<
|
|
12
|
+
PrizmaProcessingScreenProps,
|
|
13
|
+
'status' | 'title' | 'subtitle' | 'verifiedLabel' | 'navLabel'
|
|
14
|
+
> {
|
|
15
|
+
/** Module copy โ this screen reads the `sna` slice. */
|
|
16
|
+
strings: PhoneInputStrings;
|
|
17
|
+
screenId?: string;
|
|
18
|
+
overrides?: PrizmaScreenOverrides;
|
|
19
|
+
onAction?: PrizmaScreenActionHandler;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Phone Input โ Silent Network Auth in flight, built on the Processing
|
|
24
|
+
* archetype (GUIDELINES.md ยง6-C, `PrizmaProcessingScreen`).
|
|
25
|
+
*
|
|
26
|
+
* Figma: the purple `phoneNumber.loading` section (`phoneNumber.SNA.loading`).
|
|
27
|
+
* A pure spinner + H2 screen with no button, which is exactly the case ยง6-F
|
|
28
|
+
* reserves for C rather than the Result archetype โ nothing here needs a CTA
|
|
29
|
+
* band, so the centred column stays.
|
|
30
|
+
*/
|
|
31
|
+
export const PhoneInputSnaLoadingScreen = forwardRef<
|
|
32
|
+
HTMLDivElement,
|
|
33
|
+
PhoneInputSnaLoadingScreenProps
|
|
34
|
+
>(
|
|
35
|
+
(
|
|
36
|
+
{
|
|
37
|
+
strings,
|
|
38
|
+
screenId = 'phone-input-sna-loading',
|
|
39
|
+
overrides,
|
|
40
|
+
onAction,
|
|
41
|
+
...shell
|
|
42
|
+
},
|
|
43
|
+
ref,
|
|
44
|
+
) => (
|
|
45
|
+
<PrizmaProcessingScreen
|
|
46
|
+
ref={ref}
|
|
47
|
+
status="loading"
|
|
48
|
+
title={strings.sna.title}
|
|
49
|
+
subtitle={strings.sna.subtitle}
|
|
50
|
+
verifiedLabel={strings.verifiedLabel}
|
|
51
|
+
navLabel={strings.navLabel}
|
|
52
|
+
screenId={screenId}
|
|
53
|
+
overrides={overrides}
|
|
54
|
+
onAction={onAction}
|
|
55
|
+
{...shell}
|
|
56
|
+
/>
|
|
57
|
+
),
|
|
58
|
+
);
|
|
59
|
+
PhoneInputSnaLoadingScreen.displayName = 'PhoneInputSnaLoadingScreen';
|
|
60
|
+
|
|
61
|
+
export default PhoneInputSnaLoadingScreen;
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// Phone Input โ copy contract.
|
|
2
|
+
//
|
|
3
|
+
// Figma: `๐ Phone - Screens specs + Localization` (nIj8kklozEOMs2e5sLzGFi,
|
|
4
|
+
// page 5:13191). Five purple parent sections:
|
|
5
|
+
// phoneNumber.verify โ default / countryCode / phonetyping / phoneFilled / loading
|
|
6
|
+
// phoneNumber.OTP โ typing / filled / processing / error
|
|
7
|
+
// phoneNumber.loading โ SNA.loading (Silent Network Auth)
|
|
8
|
+
// phoneNumber.success โ success
|
|
9
|
+
// phoneNumber.error โ tryAgain / unknown / noNetwork
|
|
10
|
+
//
|
|
11
|
+
// No hardcoded English anywhere in a screen: every visible string arrives here,
|
|
12
|
+
// so the host's locale pack drives the module (the file ships ES + PT columns).
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The `phoneNumber.verify.*` sections. All five draw the SAME layout โ the
|
|
16
|
+
* country dropdown + phone field pair โ and differ only in field content and
|
|
17
|
+
* CTA state, so they are states of one screen rather than five screens:
|
|
18
|
+
* - `default` โ placeholder phone, CTA enabled (Figma draws it enabled)
|
|
19
|
+
* - `countryCode` โ the country dropdown open over the form
|
|
20
|
+
* - `typing` โ partial value, focused field
|
|
21
|
+
* - `filled` โ complete value
|
|
22
|
+
* - `loading` โ CTA in its loading treatment while the code is requested
|
|
23
|
+
*/
|
|
24
|
+
export type PhoneInputVerifyState =
|
|
25
|
+
| 'default'
|
|
26
|
+
| 'countryCode'
|
|
27
|
+
| 'typing'
|
|
28
|
+
| 'filled'
|
|
29
|
+
| 'loading';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The `phoneNumber.OTP.*` sections โ same layout, different field state:
|
|
33
|
+
* - `typing` โ partial code
|
|
34
|
+
* - `filled` โ complete code
|
|
35
|
+
* - `processing` โ code submitted, `PrizmaOtp` in its loading treatment
|
|
36
|
+
* - `error` โ wrong code, negative field + error row
|
|
37
|
+
*/
|
|
38
|
+
export type PhoneInputOtpState = 'typing' | 'filled' | 'processing' | 'error';
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The `phoneNumber.error.*` sections. `tryAgain` and `unknown` keep the module
|
|
42
|
+
* chrome; `noNetwork` is the connectivity family every module carries โ no nav,
|
|
43
|
+
* no tag, a Wi-Fi glyph above the title (DEVIATIONS #9, #10).
|
|
44
|
+
*/
|
|
45
|
+
export type PhoneInputErrorVariant = 'tryAgain' | 'unknown' | 'noNetwork';
|
|
46
|
+
|
|
47
|
+
/** One selectable country in the dial-code dropdown. Runtime data, not copy โ
|
|
48
|
+
* the host supplies its own list; `flag` is the emoji Figma draws (Core has no
|
|
49
|
+
* country-flag primitive โ DEVIATIONS #PI-3). */
|
|
50
|
+
export interface PhoneInputCountry {
|
|
51
|
+
/** Stable value, e.g. an ISO 3166-1 alpha-2 code. */
|
|
52
|
+
value: string;
|
|
53
|
+
/** Dial code as drawn, e.g. `+381`. */
|
|
54
|
+
dialCode: string;
|
|
55
|
+
/** Country name for the open menu row. */
|
|
56
|
+
label: string;
|
|
57
|
+
/** Emoji flag, e.g. `๐ท๐ธ`. */
|
|
58
|
+
flag?: string;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface PhoneInputStrings {
|
|
62
|
+
/** "verified by" attribution in the footer tag. */
|
|
63
|
+
verifiedLabel: string;
|
|
64
|
+
/** Accessible name for the logo nav row. */
|
|
65
|
+
navLabel?: string;
|
|
66
|
+
|
|
67
|
+
/** phoneNumber.verify.* */
|
|
68
|
+
verify: {
|
|
69
|
+
/** H2 ("Verify your phone number"). */
|
|
70
|
+
title: string;
|
|
71
|
+
/** H5 ("We'll send you a code to ensure it's yours"). */
|
|
72
|
+
subtitle: string;
|
|
73
|
+
/** Phone field placeholder ("(123) 123-45-67"). */
|
|
74
|
+
placeholder: string;
|
|
75
|
+
/** Accessible label for the phone field. */
|
|
76
|
+
fieldLabel?: string;
|
|
77
|
+
/** Accessible label for the country dial-code dropdown. */
|
|
78
|
+
countryLabel?: string;
|
|
79
|
+
/** Search placeholder inside the open country menu. */
|
|
80
|
+
countrySearchPlaceholder?: string;
|
|
81
|
+
/** Primary CTA ("Continue"). */
|
|
82
|
+
ctaLabel: string;
|
|
83
|
+
/** Accessible busy label while the code is requested (`loading`). */
|
|
84
|
+
ctaLoadingLabel?: string;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/** phoneNumber.OTP.* */
|
|
88
|
+
otp: {
|
|
89
|
+
/** H2 ("Enter the code we've sent via SMS"). */
|
|
90
|
+
title: string;
|
|
91
|
+
/** H5 โ carries the masked destination number, when the section shows one. */
|
|
92
|
+
subtitle?: string;
|
|
93
|
+
/** Error row on the `error` state ("Incorrect code, try again"). */
|
|
94
|
+
errorText: string;
|
|
95
|
+
/**
|
|
96
|
+
* The line under the CTA is ONE sentence carrying TWO separate links:
|
|
97
|
+
* "Didn't receive the code? [Resend code] or [Change phone number]".
|
|
98
|
+
* It is split into four strings because the links are independently
|
|
99
|
+
* actionable โ the host must be able to tell a re-send from a return to
|
|
100
|
+
* phone entry โ and because a locale needs to order the fragments itself.
|
|
101
|
+
* Omit `resendPrompt` to render no line at all.
|
|
102
|
+
*/
|
|
103
|
+
resendPrompt?: string;
|
|
104
|
+
/** First link โ re-sends the code. Emits `secondary`. */
|
|
105
|
+
resendLabel?: string;
|
|
106
|
+
/** The conjunction between the two links ("or"). */
|
|
107
|
+
resendSeparator?: string;
|
|
108
|
+
/** Second link โ returns to phone entry. Emits `tertiary`. */
|
|
109
|
+
changeNumberLabel?: string;
|
|
110
|
+
/** Primary CTA. */
|
|
111
|
+
ctaLabel: string;
|
|
112
|
+
/** Accessible / visible busy copy while the code is checked (`processing`). */
|
|
113
|
+
ctaLoadingLabel?: string;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/** phoneNumber.loading โ Silent Network Auth, a pure processing screen. */
|
|
117
|
+
sna: {
|
|
118
|
+
/** H2 shown under the spinner. */
|
|
119
|
+
title: string;
|
|
120
|
+
subtitle?: string;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/** phoneNumber.success */
|
|
124
|
+
success: {
|
|
125
|
+
title: string;
|
|
126
|
+
subtitle?: string;
|
|
127
|
+
ctaLabel?: string;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
/** phoneNumber.error.* โ one slice per variant. */
|
|
131
|
+
error: {
|
|
132
|
+
tryAgain: { title: string; subtitle?: string; ctaLabel: string };
|
|
133
|
+
unknown: { title: string; subtitle?: string; ctaLabel: string };
|
|
134
|
+
noConnection: { title: string; subtitle?: string; ctaLabel: string };
|
|
135
|
+
};
|
|
136
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaResultScreen, type PrizmaResultScreenProps } from './ResultScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { PhoneInputStrings } from './PhoneInputStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
|
|
7
|
+
export interface PhoneInputSuccessScreenProps
|
|
8
|
+
extends Omit<
|
|
9
|
+
PrizmaResultScreenProps,
|
|
10
|
+
'status' | 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'
|
|
11
|
+
> {
|
|
12
|
+
/** Module copy โ this screen reads the `success` slice. */
|
|
13
|
+
strings: PhoneInputStrings;
|
|
14
|
+
screenId?: string;
|
|
15
|
+
overrides?: PrizmaScreenOverrides;
|
|
16
|
+
onAction?: PrizmaScreenActionHandler;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Phone Input โ the verified verdict, built on the Result archetype
|
|
21
|
+
* (GUIDELINES.md ยง6-F, `PrizmaResultScreen`).
|
|
22
|
+
*
|
|
23
|
+
* Figma: the purple `phoneNumber.success` section. Centred status mark + title
|
|
24
|
+
* over the CTA band. The mark is Core's outline status icon via
|
|
25
|
+
* `PrizmaTitle`'s icon slot โ the module Figma still draws the two-tone filled
|
|
26
|
+
* disc, one icon sweep behind (DEVIATIONS #15, unchanged here).
|
|
27
|
+
*/
|
|
28
|
+
export const PhoneInputSuccessScreen = forwardRef<HTMLDivElement, PhoneInputSuccessScreenProps>(
|
|
29
|
+
(
|
|
30
|
+
{
|
|
31
|
+
strings,
|
|
32
|
+
screenId = 'phone-input-success',
|
|
33
|
+
overrides,
|
|
34
|
+
onAction,
|
|
35
|
+
...shell
|
|
36
|
+
},
|
|
37
|
+
ref,
|
|
38
|
+
) => (
|
|
39
|
+
<PrizmaResultScreen
|
|
40
|
+
ref={ref}
|
|
41
|
+
status="success"
|
|
42
|
+
title={strings.success.title}
|
|
43
|
+
subtitle={strings.success.subtitle}
|
|
44
|
+
ctaLabel={strings.success.ctaLabel}
|
|
45
|
+
verifiedLabel={strings.verifiedLabel}
|
|
46
|
+
navLabel={strings.navLabel}
|
|
47
|
+
screenId={screenId}
|
|
48
|
+
overrides={overrides}
|
|
49
|
+
onAction={onAction}
|
|
50
|
+
{...shell}
|
|
51
|
+
/>
|
|
52
|
+
),
|
|
53
|
+
);
|
|
54
|
+
PhoneInputSuccessScreen.displayName = 'PhoneInputSuccessScreen';
|
|
55
|
+
|
|
56
|
+
export default PhoneInputSuccessScreen;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
|
|
3
|
+
import { PrizmaDropdown } from '@incodetech/prizma-core-web/dropdown';
|
|
4
|
+
import { PrizmaFormScreen, type PrizmaFormScreenProps } from './FormScreen';
|
|
5
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
6
|
+
import type {
|
|
7
|
+
PhoneInputCountry,
|
|
8
|
+
PhoneInputStrings,
|
|
9
|
+
PhoneInputVerifyState,
|
|
10
|
+
} from './PhoneInputStrings';
|
|
11
|
+
import './ScreenLayout.css';
|
|
12
|
+
import './PhoneInputLayout.css';
|
|
13
|
+
|
|
14
|
+
export interface PhoneInputVerifyScreenProps
|
|
15
|
+
extends Omit<
|
|
16
|
+
PrizmaFormScreenProps,
|
|
17
|
+
'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'
|
|
18
|
+
> {
|
|
19
|
+
/** Module copy โ this screen reads the `verify` slice. */
|
|
20
|
+
strings: PhoneInputStrings;
|
|
21
|
+
/** Which purple `phoneNumber.verify.*` section to render. Default `default`. */
|
|
22
|
+
state?: PhoneInputVerifyState;
|
|
23
|
+
/** The selectable dial codes. Runtime data, not copy. */
|
|
24
|
+
countries?: PhoneInputCountry[];
|
|
25
|
+
/** Selected country `value`. Defaults to the first entry. */
|
|
26
|
+
country?: string;
|
|
27
|
+
/** The phone number as typed. Empty renders the placeholder (`default`). */
|
|
28
|
+
value?: string;
|
|
29
|
+
screenId?: string;
|
|
30
|
+
overrides?: PrizmaScreenOverrides;
|
|
31
|
+
onAction?: PrizmaScreenActionHandler;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Figma's `countryCode` section draws the dropdown menu open over the form;
|
|
35
|
+
* Core exposes that as the documentation-only `forceOpen` (a screen is one
|
|
36
|
+
* static spec state, never a live interaction). */
|
|
37
|
+
const DEFAULT_COUNTRIES: PhoneInputCountry[] = [
|
|
38
|
+
{ value: 'RS', dialCode: '+381', label: 'Serbia', flag: '๐ท๐ธ' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Phone Input โ the phone-entry screen, built on the Form archetype
|
|
43
|
+
* (GUIDELINES.md ยง6-E, `PrizmaFormScreen`).
|
|
44
|
+
*
|
|
45
|
+
* ONE screen for all five purple `phoneNumber.verify.*` sections
|
|
46
|
+
* (`default` / `countryCode` / `phonetyping` / `phoneFilled` / `loading`):
|
|
47
|
+
* measured against the 390 frames, they share an identical layout โ nav โ Title
|
|
48
|
+
* (H2 + H5) โ Spacing/32 โ the combined country-dropdown + phone-field row โ
|
|
49
|
+
* CTA โ tag โ and differ ONLY in field content and CTA state, which is exactly
|
|
50
|
+
* what GUIDELINES ยง6-E means by "states are separate screens sharing the
|
|
51
|
+
* identical layout".
|
|
52
|
+
*
|
|
53
|
+
* Figma's `Input / Combined` is a dropdown + text field pair at Spacing/8, the
|
|
54
|
+
* dropdown hugging its content and the field filling the rest. Core ships both
|
|
55
|
+
* primitives (`PrizmaDropdown`, `PrizmaTextField`) at the designed 56px min
|
|
56
|
+
* height and `Border/Radius/small`, so the module layer contributes only the
|
|
57
|
+
* row that pairs them (`PhoneInputLayout.css`) โ no primitive is re-implemented.
|
|
58
|
+
*/
|
|
59
|
+
export const PhoneInputVerifyScreen = forwardRef<HTMLDivElement, PhoneInputVerifyScreenProps>(
|
|
60
|
+
(
|
|
61
|
+
{
|
|
62
|
+
strings,
|
|
63
|
+
state = 'default',
|
|
64
|
+
countries = DEFAULT_COUNTRIES,
|
|
65
|
+
country,
|
|
66
|
+
value,
|
|
67
|
+
screenId = `phone-input-verify-${state}`,
|
|
68
|
+
overrides,
|
|
69
|
+
onAction,
|
|
70
|
+
...shell
|
|
71
|
+
},
|
|
72
|
+
ref,
|
|
73
|
+
) => {
|
|
74
|
+
const selected = country ?? countries[0]?.value;
|
|
75
|
+
const options = countries.map((c) => ({
|
|
76
|
+
value: c.value,
|
|
77
|
+
// The closed field shows flag + dial code exactly as Figma draws it
|
|
78
|
+
// ("๐ท๐ธ +381"); the open menu row adds the country name.
|
|
79
|
+
label: [c.flag, c.dialCode].filter(Boolean).join(' '),
|
|
80
|
+
}));
|
|
81
|
+
|
|
82
|
+
// Figma treats the states as three distinct field treatments, not one:
|
|
83
|
+
// `loading` greys BOTH fields (the request is in flight and the form is
|
|
84
|
+
// inert) and puts the spinner in the CTA; `typing` draws the focused blue
|
|
85
|
+
// border with the caret and the clear affordance; everything else is a
|
|
86
|
+
// plain editable field on the default white surface. Core's read-only
|
|
87
|
+
// paints the DISABLED surface (owner definition 2026-07-12), so it is used
|
|
88
|
+
// for none of them โ it would grey the resting states too (DEVIATIONS #PI-6).
|
|
89
|
+
const busy = state === 'loading';
|
|
90
|
+
const focused = state === 'typing';
|
|
91
|
+
|
|
92
|
+
return (
|
|
93
|
+
<PrizmaFormScreen
|
|
94
|
+
ref={ref}
|
|
95
|
+
title={strings.verify.title}
|
|
96
|
+
subtitle={strings.verify.subtitle}
|
|
97
|
+
ctaLabel={strings.verify.ctaLabel}
|
|
98
|
+
/* Figma's `loading` section swaps the CTA label for Core's spinner. */
|
|
99
|
+
ctaLoading={busy}
|
|
100
|
+
ctaLoadingLabel={strings.verify.ctaLoadingLabel}
|
|
101
|
+
verifiedLabel={strings.verifiedLabel}
|
|
102
|
+
navLabel={strings.navLabel}
|
|
103
|
+
screenId={screenId}
|
|
104
|
+
overrides={overrides}
|
|
105
|
+
onAction={onAction}
|
|
106
|
+
{...shell}
|
|
107
|
+
>
|
|
108
|
+
<div className="phone-input-combined">
|
|
109
|
+
<PrizmaDropdown
|
|
110
|
+
className="phone-input-combined__country"
|
|
111
|
+
/* Figma's combined row draws NO visible labels โ the flag + dial
|
|
112
|
+
code and the placeholder carry the meaning โ so the module copy
|
|
113
|
+
rides `aria-label` instead of Core's visible `label` slot, which
|
|
114
|
+
would add a row the design does not have. */
|
|
115
|
+
aria-label={strings.verify.countryLabel}
|
|
116
|
+
options={options}
|
|
117
|
+
value={selected}
|
|
118
|
+
searchable
|
|
119
|
+
searchPlaceholder={strings.verify.countrySearchPlaceholder}
|
|
120
|
+
/* The `countryCode` section IS the open-menu spec state. */
|
|
121
|
+
forceOpen={state === 'countryCode'}
|
|
122
|
+
disabled={busy}
|
|
123
|
+
/>
|
|
124
|
+
<PrizmaTextField
|
|
125
|
+
className={[
|
|
126
|
+
'phone-input-combined__number',
|
|
127
|
+
/* Core's own static-focus modifier โ the same mechanism the
|
|
128
|
+
Dropdown exposes as `forceState`, which `PrizmaTextField` has
|
|
129
|
+
no prop for yet (DEVIATIONS #PI-7). No styling is redeclared. */
|
|
130
|
+
focused ? 'prizma-input-textfield--focused' : '',
|
|
131
|
+
]
|
|
132
|
+
.filter(Boolean)
|
|
133
|
+
.join(' ')}
|
|
134
|
+
type="tel"
|
|
135
|
+
inputMode="tel"
|
|
136
|
+
aria-label={strings.verify.fieldLabel}
|
|
137
|
+
placeholder={strings.verify.placeholder}
|
|
138
|
+
/* Uncontrolled: a screen is one static spec state, and `value`
|
|
139
|
+
without `onChange` would either warn or force `readOnly`, whose
|
|
140
|
+
disabled surface is exactly the grey Figma does NOT draw here. */
|
|
141
|
+
defaultValue={value ?? ''}
|
|
142
|
+
disabled={busy}
|
|
143
|
+
/* Figma draws the clear โ only while the field is focused. */
|
|
144
|
+
clearable={focused}
|
|
145
|
+
/>
|
|
146
|
+
</div>
|
|
147
|
+
</PrizmaFormScreen>
|
|
148
|
+
);
|
|
149
|
+
},
|
|
150
|
+
);
|
|
151
|
+
PhoneInputVerifyScreen.displayName = 'PhoneInputVerifyScreen';
|
|
152
|
+
|
|
153
|
+
export default PhoneInputVerifyScreen;
|