@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,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which purple `documentCapture.tutorial.*` intro variant to render. They are
|
|
3
|
+
* copy variants of ONE screen (DocumentCaptureTutorialScreen) — the layout is
|
|
4
|
+
* identical; only the subtitle and the CTA label change with the capture
|
|
5
|
+
* methods the session enables.
|
|
6
|
+
*/
|
|
7
|
+
export type DocumentCaptureTutorialVariant =
|
|
8
|
+
/** `tutorial.default` — camera AND upload allowed ("Continue"). */
|
|
9
|
+
'default'
|
|
10
|
+
/** `tutorial.captureOnly` — camera only ("Capture document"). */
|
|
11
|
+
| 'captureOnly'
|
|
12
|
+
/** `tutorial.uploadOnly` — upload only ("Upload document"). */
|
|
13
|
+
| 'uploadOnly';
|
|
14
|
+
/**
|
|
15
|
+
* Which `documentCapture.tutorial.methodSelection*` sheet to render.
|
|
16
|
+
*
|
|
17
|
+
* web — the 2-row menu: Take photo · Upload document (menu-list-2)
|
|
18
|
+
* native — the 3-row menu: Take photo · Camera roll · Choose file
|
|
19
|
+
* (menu-list-3)
|
|
20
|
+
* nativeUpload — the same native menu with the camera row DROPPED, so 2 rows:
|
|
21
|
+
* Camera roll · Choose file (menu-list-2)
|
|
22
|
+
*
|
|
23
|
+
* `nativeUpload` has no purple spec section of its own. It comes off the iOS
|
|
24
|
+
* full flow (`cbFXiChmJ8cWQDHwVghBqJ`, node 4415:38025), where the upload-only
|
|
25
|
+
* leg presents a `methodSelectionNative` instance whose sheet measures 206 tall
|
|
26
|
+
* against the spec'd 262 — exactly one row less, with "Take photo" hidden,
|
|
27
|
+
* because a session that does not allow the camera cannot offer it. The flow is
|
|
28
|
+
* right and the spec set is one variant short; recorded as such rather than
|
|
29
|
+
* quietly rendering the 3-row sheet in a flow that forbids the camera.
|
|
30
|
+
* Flagged for the owner: 2026-09-02, Camila.
|
|
31
|
+
*/
|
|
32
|
+
export type DocumentCaptureMethodSelectionVariant = 'web' | 'native' | 'nativeUpload';
|
|
33
|
+
/**
|
|
34
|
+
* The three purple states shared by `confirmImage.*` and `confirmUpload.*`.
|
|
35
|
+
* Identical layout, identical stage — only the header block (title vs loading
|
|
36
|
+
* bar), the stage verdict and the CTA row change.
|
|
37
|
+
*/
|
|
38
|
+
export type DocumentCaptureConfirmStage = 'review' | 'analyzing' | 'success';
|
|
39
|
+
/** One `commonIssues` row: an H5 title + a Body/M description. */
|
|
40
|
+
export interface DocumentCaptureIssueStrings {
|
|
41
|
+
title: string;
|
|
42
|
+
description?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface DocumentCaptureStrings {
|
|
45
|
+
/** Accessible name for the logo nav region (i18n — no baked-in English). */
|
|
46
|
+
navLabel?: string;
|
|
47
|
+
/** "verified by" attribution copy for the footer tag. */
|
|
48
|
+
verifiedLabel: string;
|
|
49
|
+
/** "All data is encrypted" reassurance row under every capture / review
|
|
50
|
+
* stage. Omit to drop the row (Core's `showEncryptedLabel` boolean). */
|
|
51
|
+
encryptedLabel?: string;
|
|
52
|
+
/** documentCapture.tutorial.default / .captureOnly / .uploadOnly — the
|
|
53
|
+
* subtitle and CTA label are per-variant; everything else is shared. */
|
|
54
|
+
tutorial: {
|
|
55
|
+
title: string;
|
|
56
|
+
/** Per-variant description (H5). */
|
|
57
|
+
subtitle: Record<DocumentCaptureTutorialVariant, string>;
|
|
58
|
+
/** Per-variant primary CTA ("Continue" / "Capture document" / …). */
|
|
59
|
+
ctaLabel: Record<DocumentCaptureTutorialVariant, string>;
|
|
60
|
+
/** Tertiary link under the CTA ("Skip this step"). Omit to drop it. */
|
|
61
|
+
skipLabel?: string;
|
|
62
|
+
};
|
|
63
|
+
/** documentCapture.tutorial.methodSelectionWeb / .methodSelectionNative —
|
|
64
|
+
* the action rows of the capture-method sheet. `web` shows the first two,
|
|
65
|
+
* `native` all three. */
|
|
66
|
+
methodSelection: {
|
|
67
|
+
/** Accessible name of the sheet (Core requires it on the menu variants). */
|
|
68
|
+
sheetLabel: string;
|
|
69
|
+
/** "Take photo" */
|
|
70
|
+
takePhotoLabel: string;
|
|
71
|
+
/** "Upload document" (web) */
|
|
72
|
+
uploadLabel: string;
|
|
73
|
+
/** "Choose from camera roll" (native only) */
|
|
74
|
+
cameraRollLabel: string;
|
|
75
|
+
/** "Choose file" (native only) */
|
|
76
|
+
chooseFileLabel: string;
|
|
77
|
+
};
|
|
78
|
+
/** documentCapture.commonIssues.default */
|
|
79
|
+
commonIssues: {
|
|
80
|
+
title: string;
|
|
81
|
+
/** The four rows, in Figma order: out of frame · folded · shadows ·
|
|
82
|
+
* dirty lens. Icons come from the canonical bank, not from copy
|
|
83
|
+
* (DEVIATIONS.md #DC-23). */
|
|
84
|
+
issues: readonly DocumentCaptureIssueStrings[];
|
|
85
|
+
/** "Try again" */
|
|
86
|
+
ctaLabel: string;
|
|
87
|
+
};
|
|
88
|
+
/** documentCapture.nextPage.optional / .mandatory */
|
|
89
|
+
nextPage: {
|
|
90
|
+
title: string;
|
|
91
|
+
/** `optional` subtitle ("If there's another page…"). */
|
|
92
|
+
subtitle: string;
|
|
93
|
+
/** `mandatory` subtitle ("Take a photo of the next page to continue."). */
|
|
94
|
+
mandatorySubtitle: string;
|
|
95
|
+
/** "Next page" */
|
|
96
|
+
ctaLabel: string;
|
|
97
|
+
/** "All pages captured" — the tertiary link, `optional` only. */
|
|
98
|
+
doneLabel?: string;
|
|
99
|
+
};
|
|
100
|
+
/** documentCapture.capture.default / .filled — the dark camera stage. */
|
|
101
|
+
capture: {
|
|
102
|
+
/** White H2 above the frame ("Show your full document"). */
|
|
103
|
+
title: string;
|
|
104
|
+
/** Muted instruction under it. */
|
|
105
|
+
subtitle?: string;
|
|
106
|
+
/** Accessible name of the shutter button. */
|
|
107
|
+
captureLabel: string;
|
|
108
|
+
/** Accessible name of the "?" help control. */
|
|
109
|
+
helpLabel: string;
|
|
110
|
+
};
|
|
111
|
+
/** documentCapture.confirmImage.reviewPhoto / .analyzing / .success */
|
|
112
|
+
confirmImage: {
|
|
113
|
+
/** `review` title ("Review your document"). */
|
|
114
|
+
title: string;
|
|
115
|
+
/** `review` description. */
|
|
116
|
+
subtitle?: string;
|
|
117
|
+
/** Loading-bar caption on `analyzing` ("Analyzing..."). */
|
|
118
|
+
analyzingLabel: string;
|
|
119
|
+
/** H2 on `success` ("Successfully processed!"). */
|
|
120
|
+
successTitle: string;
|
|
121
|
+
/** Secondary CTA on `review` ("Replace"). */
|
|
122
|
+
replaceLabel: string;
|
|
123
|
+
/** Primary CTA on `review` / `success` ("Continue"). */
|
|
124
|
+
ctaLabel: string;
|
|
125
|
+
};
|
|
126
|
+
/** documentCapture.confirmUpload.reviewFile / .analyzing / .success */
|
|
127
|
+
confirmUpload: {
|
|
128
|
+
/** `review` title ("Review your document"). */
|
|
129
|
+
title: string;
|
|
130
|
+
/** `review` description. */
|
|
131
|
+
subtitle?: string;
|
|
132
|
+
/** Loading-bar caption on `analyzing` ("Uploading..."). */
|
|
133
|
+
analyzingLabel: string;
|
|
134
|
+
/** H2 on `success` ("Successfully processed!"). */
|
|
135
|
+
successTitle: string;
|
|
136
|
+
/** Secondary CTA on `review` ("Replace"). */
|
|
137
|
+
replaceLabel: string;
|
|
138
|
+
/** Primary CTA on `review` / `success` ("Continue"). */
|
|
139
|
+
ctaLabel: string;
|
|
140
|
+
};
|
|
141
|
+
/** documentCapture.errors.genericError / .genericErrorExhausted — the host
|
|
142
|
+
* passes the copy of the CURRENT verdict; the exhausted variant changes
|
|
143
|
+
* icon + copy + CTA through the same slice. */
|
|
144
|
+
error: {
|
|
145
|
+
title: string;
|
|
146
|
+
description?: string;
|
|
147
|
+
/** "2 attempts remaining" — omit on the exhausted variant. */
|
|
148
|
+
attemptsLabel?: string;
|
|
149
|
+
/** "Recapture document" / "Continue" */
|
|
150
|
+
ctaLabel: string;
|
|
151
|
+
};
|
|
152
|
+
/** documentCapture.errors.noConnection */
|
|
153
|
+
noConnection: {
|
|
154
|
+
title: string;
|
|
155
|
+
description?: string;
|
|
156
|
+
ctaLabel: string;
|
|
157
|
+
};
|
|
158
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// Document Capture module — copy contract.
|
|
2
|
+
//
|
|
3
|
+
// Every Document Capture screen receives the SAME
|
|
4
|
+
// `strings: DocumentCaptureStrings` object (rule: all copy via props, no
|
|
5
|
+
// hardcoded English — GUIDELINES.md §9). The object is the module's locale
|
|
6
|
+
// pack: one instance drives the whole flow, which is what the FlowPlayer steps
|
|
7
|
+
// through. Sample copy lives only in previews / host apps.
|
|
8
|
+
//
|
|
9
|
+
// Authoritative screen list: the PURPLE "screen specs" sections of the
|
|
10
|
+
// Document Capture Figma file (cbFXiChmJ8cWQDHwVghBqJ, page 4094:15561) —
|
|
11
|
+
// tutorial (4 purple variants + 3 method-selection variants) · commonIssues ·
|
|
12
|
+
// nextPage (optional / mandatory) · capture (default / filled) · confirmImage
|
|
13
|
+
// (reviewPhoto / analyzing / success) · confirmUpload (reviewFile / analyzing /
|
|
14
|
+
// success + 2 native picker specs) · errors (noConnection / genericError /
|
|
15
|
+
// genericErrorExhausted).
|
|
16
|
+
//
|
|
17
|
+
// FOUR purple variants document OS-NATIVE chrome, not Prizma screens, and are
|
|
18
|
+
// therefore NOT part of this contract (DEVIATIONS.md #DC-20):
|
|
19
|
+
// `tutorial.uploadOnlySelector`, `tutorial.nativeMethodSelectionOnWeb`,
|
|
20
|
+
// `upload.selectFromLibrary`, `upload.selectFromFiles`.
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import { type PrizmaTutorialScreenProps } from './TutorialScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { DocumentCaptureStrings, DocumentCaptureTutorialVariant } from './DocumentCaptureStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface DocumentCaptureTutorialScreenProps extends Omit<PrizmaTutorialScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'linkLabel' | 'verifiedLabel' | 'navLabel'> {
|
|
7
|
+
/** Module copy — this screen reads the `tutorial` slice (+ shared labels). */
|
|
8
|
+
strings: DocumentCaptureStrings;
|
|
9
|
+
/** Which purple `documentCapture.tutorial.*` intro section to render. */
|
|
10
|
+
variant?: DocumentCaptureTutorialVariant;
|
|
11
|
+
/** Replace the module's document illustration. */
|
|
12
|
+
illustration?: ReactNode;
|
|
13
|
+
screenId?: string;
|
|
14
|
+
overrides?: PrizmaScreenOverrides;
|
|
15
|
+
onAction?: PrizmaScreenActionHandler;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Document Capture — tutorial, built on the `PrizmaTutorialScreen` archetype
|
|
19
|
+
* (GUIDELINES.md §6-A). Figma: purple sections
|
|
20
|
+
* `documentCapture.tutorial.default` / `.captureOnly` / `.uploadOnly` — copy
|
|
21
|
+
* variants of this ONE screen (subtitle + CTA label).
|
|
22
|
+
*
|
|
23
|
+
* Measured off the 390 sections (CONTENT 654 tall, `px-24 py-8`):
|
|
24
|
+
* nav 8→52 · Title 68→127 (nav + Spacing/24) · illustration container flexes ·
|
|
25
|
+
* CTAs 472→646 = primary + the "Skip this step" tertiary link + Tag.
|
|
26
|
+
*
|
|
27
|
+
* There is NO disclaimer on any Document Capture tutorial variant — the slot
|
|
28
|
+
* GUIDELINES §6-A reserves is simply unused.
|
|
29
|
+
*
|
|
30
|
+
* It used to hand-build the shell because the archetype hardcoded a single
|
|
31
|
+
* `PrizmaButton` with no link slot. The archetype now carries `linkLabel` (#F-32);
|
|
32
|
+
* the link's gap above the tag comes from the band's flat Spacing/16 rather than
|
|
33
|
+
* `PrizmaButtonGroup`'s Spacing/12, a 4px consolidation logged as #F-32.
|
|
34
|
+
*/
|
|
35
|
+
export declare const DocumentCaptureTutorialScreen: React.ForwardRefExoticComponent<DocumentCaptureTutorialScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
36
|
+
export default DocumentCaptureTutorialScreen;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaTutorialScreen } from './TutorialScreen';
|
|
5
|
+
import { DocumentCaptureIllustration } from './DocumentCaptureIllustration';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
/**
|
|
8
|
+
* Document Capture — tutorial, built on the `PrizmaTutorialScreen` archetype
|
|
9
|
+
* (GUIDELINES.md §6-A). Figma: purple sections
|
|
10
|
+
* `documentCapture.tutorial.default` / `.captureOnly` / `.uploadOnly` — copy
|
|
11
|
+
* variants of this ONE screen (subtitle + CTA label).
|
|
12
|
+
*
|
|
13
|
+
* Measured off the 390 sections (CONTENT 654 tall, `px-24 py-8`):
|
|
14
|
+
* nav 8→52 · Title 68→127 (nav + Spacing/24) · illustration container flexes ·
|
|
15
|
+
* CTAs 472→646 = primary + the "Skip this step" tertiary link + Tag.
|
|
16
|
+
*
|
|
17
|
+
* There is NO disclaimer on any Document Capture tutorial variant — the slot
|
|
18
|
+
* GUIDELINES §6-A reserves is simply unused.
|
|
19
|
+
*
|
|
20
|
+
* It used to hand-build the shell because the archetype hardcoded a single
|
|
21
|
+
* `PrizmaButton` with no link slot. The archetype now carries `linkLabel` (#F-32);
|
|
22
|
+
* the link's gap above the tag comes from the band's flat Spacing/16 rather than
|
|
23
|
+
* `PrizmaButtonGroup`'s Spacing/12, a 4px consolidation logged as #F-32.
|
|
24
|
+
*/
|
|
25
|
+
export const DocumentCaptureTutorialScreen = forwardRef(({ strings, variant = 'default', illustration, screenId = `document-capture-tutorial-${variant}`, overrides, onAction, ...shell }, ref) => (_jsx(PrizmaTutorialScreen, { ref: ref, title: strings.tutorial.title, subtitle: strings.tutorial.subtitle[variant], ctaLabel: strings.tutorial.ctaLabel[variant], linkLabel: strings.tutorial.skipLabel, illustration: illustration ?? _jsx(DocumentCaptureIllustration, {}), verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell })));
|
|
26
|
+
DocumentCaptureTutorialScreen.displayName = 'DocumentCaptureTutorialScreen';
|
|
27
|
+
export default DocumentCaptureTutorialScreen;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaFormScreenProps } from './FormScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { EkybAddressState, EkybAddressValues, EkybOption, EkybStrings } from './EkybStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface EkybAddressDetailsScreenProps extends Omit<PrizmaFormScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'ctaLoading' | 'ctaLoadingLabel' | 'verifiedLabel' | 'children' | 'navLabel' | 'linkLabel' | 'linkContent' | 'progress' | 'scrollFields'> {
|
|
7
|
+
/** Module copy — this screen reads the `address` slice. */
|
|
8
|
+
strings: EkybStrings;
|
|
9
|
+
/** Which address section to render. Default `empty`. */
|
|
10
|
+
state?: EkybAddressState;
|
|
11
|
+
/** The six field values. Empty renders the resting empty field. */
|
|
12
|
+
values?: EkybAddressValues;
|
|
13
|
+
/** The selectable states/provinces. Runtime data, not copy — a jurisdiction
|
|
14
|
+
* catalogue, never a string table. */
|
|
15
|
+
states?: EkybOption[];
|
|
16
|
+
screenId?: string;
|
|
17
|
+
overrides?: PrizmaScreenOverrides;
|
|
18
|
+
onAction?: PrizmaScreenActionHandler;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* eKYB — step 2 of the wizard, the registered address, built on the Form
|
|
22
|
+
* archetype (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
23
|
+
*
|
|
24
|
+
* ONE screen for both sections of the SECOND `eKYB.Bdetails` purple parent
|
|
25
|
+
* (6340:32594): `empty` (6340:50731) and `filled` (6340:38197). They share an
|
|
26
|
+
* identical skeleton — nav → Title (H2 + H5) → Spacing/32 → six labelled fields
|
|
27
|
+
* at Spacing/16 → "Continue" → "Back" → tag — and differ ONLY in field content.
|
|
28
|
+
*
|
|
29
|
+
* Four things are deliberate:
|
|
30
|
+
*
|
|
31
|
+
* 1. The stack SCROLLS inside the content column — now through the archetype's
|
|
32
|
+
* own `scrollFields` prop, not a module stylesheet. The Figma frame is
|
|
33
|
+
* 1128–1158 tall (six labelled fields are 548 on their own); a 390×844
|
|
34
|
+
* screen never reflows (#17), and without the release the surplus paints
|
|
35
|
+
* over the CTA. The module used to hand-roll `overflow-y: auto` in
|
|
36
|
+
* `EkybLayout.css`; five Wave-3 modules hit the same wall, the archetype
|
|
37
|
+
* absorbed it (DEVIATIONS #DSC-2), and that file is now deleted. The
|
|
38
|
+
* archetype's variant also carries the Spacing/16 margin that keeps the
|
|
39
|
+
* clipped column clear of the CTA rather than sliced against it.
|
|
40
|
+
* 2. Every field is UNCONTROLLED (`defaultValue`) — a screen is one static spec
|
|
41
|
+
* state, and Core's `readOnly` would grey a surface Figma draws white
|
|
42
|
+
* (#PI-6). Neither section greys anything, so nothing is `disabled`.
|
|
43
|
+
* 3. "Address line 2" is the ONE optional field of the page: Figma draws no `*`
|
|
44
|
+
* on it, so it alone renders no `requiredHint`.
|
|
45
|
+
* 4. "Back" is composed into the archetype's `linkContent` slot as a Core
|
|
46
|
+
* `secondary` button — the #CURP-2 precedent — so it stays a distinct
|
|
47
|
+
* `secondary` action and sits BELOW the primary (#GEO-1).
|
|
48
|
+
*
|
|
49
|
+
* NOTE on `filled`: 6340:38197 leaves the REQUIRED "State" dropdown on its
|
|
50
|
+
* "Select state" placeholder while all five text fields carry values. That is
|
|
51
|
+
* built as drawn rather than silently corrected, and reported as a Figma
|
|
52
|
+
* self-contradiction (the #CURP-4 class of finding) — a host that passes
|
|
53
|
+
* `values.state` gets the selected row.
|
|
54
|
+
*
|
|
55
|
+
* The three-segment journey bar (6384:86825 / 6340:66380 — segment 1 pale,
|
|
56
|
+
* segment 2 solid, segment 3 grey) is Core's `PrizmaStepper` at
|
|
57
|
+
* `currentState={2}`, composed into the archetype's `progress` slot. This is
|
|
58
|
+
* step 2 of 3.
|
|
59
|
+
*/
|
|
60
|
+
export declare const EkybAddressDetailsScreen: React.ForwardRefExoticComponent<EkybAddressDetailsScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
61
|
+
export default EkybAddressDetailsScreen;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
|
|
5
|
+
import { PrizmaDropdown } from '@incodetech/prizma-core-web/dropdown';
|
|
6
|
+
import { PrizmaButton } from '@incodetech/prizma-core-web/button';
|
|
7
|
+
import { PrizmaStepper } from '@incodetech/prizma-core-web/stepper';
|
|
8
|
+
import { PrizmaFormScreen } from './FormScreen';
|
|
9
|
+
import './ScreenLayout.css';
|
|
10
|
+
/**
|
|
11
|
+
* eKYB — step 2 of the wizard, the registered address, built on the Form
|
|
12
|
+
* archetype (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
13
|
+
*
|
|
14
|
+
* ONE screen for both sections of the SECOND `eKYB.Bdetails` purple parent
|
|
15
|
+
* (6340:32594): `empty` (6340:50731) and `filled` (6340:38197). They share an
|
|
16
|
+
* identical skeleton — nav → Title (H2 + H5) → Spacing/32 → six labelled fields
|
|
17
|
+
* at Spacing/16 → "Continue" → "Back" → tag — and differ ONLY in field content.
|
|
18
|
+
*
|
|
19
|
+
* Four things are deliberate:
|
|
20
|
+
*
|
|
21
|
+
* 1. The stack SCROLLS inside the content column — now through the archetype's
|
|
22
|
+
* own `scrollFields` prop, not a module stylesheet. The Figma frame is
|
|
23
|
+
* 1128–1158 tall (six labelled fields are 548 on their own); a 390×844
|
|
24
|
+
* screen never reflows (#17), and without the release the surplus paints
|
|
25
|
+
* over the CTA. The module used to hand-roll `overflow-y: auto` in
|
|
26
|
+
* `EkybLayout.css`; five Wave-3 modules hit the same wall, the archetype
|
|
27
|
+
* absorbed it (DEVIATIONS #DSC-2), and that file is now deleted. The
|
|
28
|
+
* archetype's variant also carries the Spacing/16 margin that keeps the
|
|
29
|
+
* clipped column clear of the CTA rather than sliced against it.
|
|
30
|
+
* 2. Every field is UNCONTROLLED (`defaultValue`) — a screen is one static spec
|
|
31
|
+
* state, and Core's `readOnly` would grey a surface Figma draws white
|
|
32
|
+
* (#PI-6). Neither section greys anything, so nothing is `disabled`.
|
|
33
|
+
* 3. "Address line 2" is the ONE optional field of the page: Figma draws no `*`
|
|
34
|
+
* on it, so it alone renders no `requiredHint`.
|
|
35
|
+
* 4. "Back" is composed into the archetype's `linkContent` slot as a Core
|
|
36
|
+
* `secondary` button — the #CURP-2 precedent — so it stays a distinct
|
|
37
|
+
* `secondary` action and sits BELOW the primary (#GEO-1).
|
|
38
|
+
*
|
|
39
|
+
* NOTE on `filled`: 6340:38197 leaves the REQUIRED "State" dropdown on its
|
|
40
|
+
* "Select state" placeholder while all five text fields carry values. That is
|
|
41
|
+
* built as drawn rather than silently corrected, and reported as a Figma
|
|
42
|
+
* self-contradiction (the #CURP-4 class of finding) — a host that passes
|
|
43
|
+
* `values.state` gets the selected row.
|
|
44
|
+
*
|
|
45
|
+
* The three-segment journey bar (6384:86825 / 6340:66380 — segment 1 pale,
|
|
46
|
+
* segment 2 solid, segment 3 grey) is Core's `PrizmaStepper` at
|
|
47
|
+
* `currentState={2}`, composed into the archetype's `progress` slot. This is
|
|
48
|
+
* step 2 of 3.
|
|
49
|
+
*/
|
|
50
|
+
export const EkybAddressDetailsScreen = forwardRef(({ strings, state = 'empty', values, states = [], screenId = `ekyb-address-${state}`, className, overrides, onAction, ...shell }, ref) => {
|
|
51
|
+
const copy = strings.address;
|
|
52
|
+
return (_jsxs(PrizmaFormScreen, { ref: ref, className: ['ekyb-address', className].filter(Boolean).join(' '),
|
|
53
|
+
/* The archetype's own scrolling field stack — the six-field column is
|
|
54
|
+
548 tall against a middle that cannot be. No module CSS. */
|
|
55
|
+
scrollFields: true,
|
|
56
|
+
/* Step 2 of 3. `showIcons={false}`: the eKYB bar is a bare 5px rail. */
|
|
57
|
+
progress: _jsx(PrizmaStepper, { steps: 3, currentState: 2, showIcons: false, "aria-label": strings.stepperLabel }), title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel, linkContent: _jsx(PrizmaButton, { variant: "secondary", size: "L", onClick: () => onAction?.({ type: 'secondary', screenId }), children: strings.backLabel }), verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: { align: overrides?.align ?? 'left', logo: overrides?.logo }, onAction: onAction, ...shell, children: [_jsx(PrizmaTextField, { label: copy.street.label, placeholder: copy.street.placeholder, required: true, requiredHint: strings.requiredHint, autoComplete: "off", defaultValue: values?.street ?? '' }), _jsx(PrizmaTextField, { label: copy.houseNumber.label, placeholder: copy.houseNumber.placeholder, required: true, requiredHint: strings.requiredHint, autoComplete: "off", defaultValue: values?.houseNumber ?? '' }), _jsx(PrizmaTextField, { label: copy.addressLine2.label, placeholder: copy.addressLine2.placeholder, autoComplete: "off", defaultValue: values?.addressLine2 ?? '' }), _jsx(PrizmaTextField, { label: copy.city.label, placeholder: copy.city.placeholder, required: true, requiredHint: strings.requiredHint, autoComplete: "off", defaultValue: values?.city ?? '' }), _jsx(PrizmaDropdown, { label: copy.state.label, placeholder: copy.state.placeholder, required: true, requiredHint: strings.requiredHint, options: states,
|
|
58
|
+
/* Both sections draw the placeholder unless the host supplies a
|
|
59
|
+
value — see the docstring note on 6340:38197. */
|
|
60
|
+
defaultValue: values?.state ?? null }), _jsx(PrizmaTextField, { label: copy.postalCode.label, placeholder: copy.postalCode.placeholder, required: true, requiredHint: strings.requiredHint, autoComplete: "off", defaultValue: values?.postalCode ?? '' })] }));
|
|
61
|
+
});
|
|
62
|
+
EkybAddressDetailsScreen.displayName = 'EkybAddressDetailsScreen';
|
|
63
|
+
export default EkybAddressDetailsScreen;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaFormScreenProps } from './FormScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { EkybBusinessState, EkybBusinessValues, EkybStrings } from './EkybStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface EkybBusinessDetailsScreenProps extends Omit<PrizmaFormScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'ctaLoading' | 'ctaLoadingLabel' | 'verifiedLabel' | 'children' | 'navLabel' | 'linkLabel' | 'linkContent' | 'progress'> {
|
|
7
|
+
/** Module copy — this screen reads the `business` slice. */
|
|
8
|
+
strings: EkybStrings;
|
|
9
|
+
/** Which purple `eKYB.Bdetails.*` section to render. Default `empty`. */
|
|
10
|
+
state?: EkybBusinessState;
|
|
11
|
+
/** The two field values. Empty renders the resting empty field. */
|
|
12
|
+
values?: EkybBusinessValues;
|
|
13
|
+
screenId?: string;
|
|
14
|
+
overrides?: PrizmaScreenOverrides;
|
|
15
|
+
onAction?: PrizmaScreenActionHandler;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* eKYB — step 1 of the wizard, the company's identity, built on the Form
|
|
19
|
+
* archetype (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
20
|
+
*
|
|
21
|
+
* ONE screen for both purple `eKYB.Bdetails.*` sections (`empty` 2115:21864,
|
|
22
|
+
* `filled` 5663:83132): measured against the 390 frames they share an identical
|
|
23
|
+
* skeleton — nav → Title (H2 + H5) → Spacing/32 → two labelled fields at
|
|
24
|
+
* Spacing/16 → "Continue" → "Back" → tag — and differ ONLY in field content.
|
|
25
|
+
*
|
|
26
|
+
* Three things are deliberate, each a lesson an earlier module paid for:
|
|
27
|
+
*
|
|
28
|
+
* 1. The fields are UNCONTROLLED (`defaultValue`). A screen is one static spec
|
|
29
|
+
* state, so no `onChange` is needed — and Core's `readOnly`, the other way to
|
|
30
|
+
* freeze a field, paints the DISABLED grey surface on sections Figma draws
|
|
31
|
+
* white (DEVIATIONS #PI-6). Neither section greys anything, so nothing here
|
|
32
|
+
* is `disabled`.
|
|
33
|
+
* 2. Figma draws no placeholders on these fields — the label row carries the
|
|
34
|
+
* meaning — so `empty` really is a blank field, not a hinted one.
|
|
35
|
+
* 3. "Back" is a full-width OUTLINED `secondary` button under the primary.
|
|
36
|
+
* Archetype E has no `secondaryCtaLabel` slot (archetype F does), so it is
|
|
37
|
+
* composed into the archetype's `linkContent` slot exactly as CURP does
|
|
38
|
+
* (DEVIATIONS #CURP-2): no primitive invented, no layout declared, the
|
|
39
|
+
* action stays a distinct `secondary` event, and it lands BELOW the primary,
|
|
40
|
+
* which is both what Figma draws and what #GEO-1 requires.
|
|
41
|
+
*
|
|
42
|
+
* The required asterisk is Core's `requiredHint` suffix on a `required` field —
|
|
43
|
+
* the label rows Figma draws as "Business name *" / "Tax ID *" — so the marker
|
|
44
|
+
* stays localizable and is never baked into the label string.
|
|
45
|
+
*
|
|
46
|
+
* The three-segment journey bar Figma draws between the nav and the title is
|
|
47
|
+
* Core's own `PrizmaStepper` in the archetype's `progress` slot — the slot
|
|
48
|
+
* archetype E gained for eKYC (DEVIATIONS #EK-1) and the fix for the QA finding
|
|
49
|
+
* that the wizard shipped with no progress signal. This is step 1 of 3, so the
|
|
50
|
+
* bar is at `currentState="Start"`: segment 1 filled, segments 2 and 3 grey,
|
|
51
|
+
* exactly what 5919:68599 renders. Both offsets around it live in
|
|
52
|
+
* `ScreenLayout.css`, never here.
|
|
53
|
+
*/
|
|
54
|
+
export declare const EkybBusinessDetailsScreen: React.ForwardRefExoticComponent<EkybBusinessDetailsScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
55
|
+
export default EkybBusinessDetailsScreen;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
|
|
5
|
+
import { PrizmaButton } from '@incodetech/prizma-core-web/button';
|
|
6
|
+
import { PrizmaStepper } from '@incodetech/prizma-core-web/stepper';
|
|
7
|
+
import { PrizmaFormScreen } from './FormScreen';
|
|
8
|
+
import './ScreenLayout.css';
|
|
9
|
+
/**
|
|
10
|
+
* eKYB — step 1 of the wizard, the company's identity, built on the Form
|
|
11
|
+
* archetype (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
12
|
+
*
|
|
13
|
+
* ONE screen for both purple `eKYB.Bdetails.*` sections (`empty` 2115:21864,
|
|
14
|
+
* `filled` 5663:83132): measured against the 390 frames they share an identical
|
|
15
|
+
* skeleton — nav → Title (H2 + H5) → Spacing/32 → two labelled fields at
|
|
16
|
+
* Spacing/16 → "Continue" → "Back" → tag — and differ ONLY in field content.
|
|
17
|
+
*
|
|
18
|
+
* Three things are deliberate, each a lesson an earlier module paid for:
|
|
19
|
+
*
|
|
20
|
+
* 1. The fields are UNCONTROLLED (`defaultValue`). A screen is one static spec
|
|
21
|
+
* state, so no `onChange` is needed — and Core's `readOnly`, the other way to
|
|
22
|
+
* freeze a field, paints the DISABLED grey surface on sections Figma draws
|
|
23
|
+
* white (DEVIATIONS #PI-6). Neither section greys anything, so nothing here
|
|
24
|
+
* is `disabled`.
|
|
25
|
+
* 2. Figma draws no placeholders on these fields — the label row carries the
|
|
26
|
+
* meaning — so `empty` really is a blank field, not a hinted one.
|
|
27
|
+
* 3. "Back" is a full-width OUTLINED `secondary` button under the primary.
|
|
28
|
+
* Archetype E has no `secondaryCtaLabel` slot (archetype F does), so it is
|
|
29
|
+
* composed into the archetype's `linkContent` slot exactly as CURP does
|
|
30
|
+
* (DEVIATIONS #CURP-2): no primitive invented, no layout declared, the
|
|
31
|
+
* action stays a distinct `secondary` event, and it lands BELOW the primary,
|
|
32
|
+
* which is both what Figma draws and what #GEO-1 requires.
|
|
33
|
+
*
|
|
34
|
+
* The required asterisk is Core's `requiredHint` suffix on a `required` field —
|
|
35
|
+
* the label rows Figma draws as "Business name *" / "Tax ID *" — so the marker
|
|
36
|
+
* stays localizable and is never baked into the label string.
|
|
37
|
+
*
|
|
38
|
+
* The three-segment journey bar Figma draws between the nav and the title is
|
|
39
|
+
* Core's own `PrizmaStepper` in the archetype's `progress` slot — the slot
|
|
40
|
+
* archetype E gained for eKYC (DEVIATIONS #EK-1) and the fix for the QA finding
|
|
41
|
+
* that the wizard shipped with no progress signal. This is step 1 of 3, so the
|
|
42
|
+
* bar is at `currentState="Start"`: segment 1 filled, segments 2 and 3 grey,
|
|
43
|
+
* exactly what 5919:68599 renders. Both offsets around it live in
|
|
44
|
+
* `ScreenLayout.css`, never here.
|
|
45
|
+
*/
|
|
46
|
+
export const EkybBusinessDetailsScreen = forwardRef(({ strings, state = 'empty', values, screenId = `ekyb-business-${state}`, overrides, onAction, ...shell }, ref) => {
|
|
47
|
+
const copy = strings.business;
|
|
48
|
+
return (_jsxs(PrizmaFormScreen, { ref: ref,
|
|
49
|
+
/* Step 1 of 3. `showIcons={false}` because the eKYB frames draw the bar
|
|
50
|
+
as a bare 5px rail with no glyph row. */
|
|
51
|
+
progress: _jsx(PrizmaStepper, { steps: 3, currentState: "Start", showIcons: false, "aria-label": strings.stepperLabel }), title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel, linkContent: _jsx(PrizmaButton, { variant: "secondary", size: "L", onClick: () => onAction?.({ type: 'secondary', screenId }), children: strings.backLabel }), verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId,
|
|
52
|
+
/* Left-aligned title block, the alignment every eKYB frame draws; a host
|
|
53
|
+
`align` still wins (#GEO-2). */
|
|
54
|
+
overrides: { align: overrides?.align ?? 'left', logo: overrides?.logo }, onAction: onAction, ...shell, children: [_jsx(PrizmaTextField, { label: copy.businessName.label, placeholder: copy.businessName.placeholder, required: true, requiredHint: strings.requiredHint, autoComplete: "off", defaultValue: values?.businessName ?? '' }), _jsx(PrizmaTextField, { label: copy.taxId.label, placeholder: copy.taxId.placeholder, required: true, requiredHint: strings.requiredHint, autoComplete: "off", defaultValue: values?.taxId ?? '' })] }));
|
|
55
|
+
});
|
|
56
|
+
EkybBusinessDetailsScreen.displayName = 'EkybBusinessDetailsScreen';
|
|
57
|
+
export default EkybBusinessDetailsScreen;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaFormScreenProps } from './FormScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { EkybCountryState, EkybOption, EkybStrings } from './EkybStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface EkybCountryScreenProps extends Omit<PrizmaFormScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'ctaLoading' | 'ctaLoadingLabel' | 'verifiedLabel' | 'children' | 'navLabel' | 'linkLabel' | 'linkContent'> {
|
|
7
|
+
/** Module copy — this screen reads the `country` slice. */
|
|
8
|
+
strings: EkybStrings;
|
|
9
|
+
/** Which purple `eKYB.country.*` section to render. Default `empty`. */
|
|
10
|
+
state?: EkybCountryState;
|
|
11
|
+
/** The selectable countries. Runtime data, not copy — the host owns the
|
|
12
|
+
* catalogue. */
|
|
13
|
+
countries?: EkybOption[];
|
|
14
|
+
/** Selected `EkybOption.value`. Omit to render the placeholder (`empty`). */
|
|
15
|
+
value?: string;
|
|
16
|
+
screenId?: string;
|
|
17
|
+
overrides?: PrizmaScreenOverrides;
|
|
18
|
+
onAction?: PrizmaScreenActionHandler;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* eKYB — the country-of-registration page, built on the Form archetype
|
|
22
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
23
|
+
*
|
|
24
|
+
* ONE screen for all three purple `eKYB.country.*` sections (`empty`
|
|
25
|
+
* 2115:20444, `filled` 5655:42140, `dropdown` 5707:54174): measured against the
|
|
26
|
+
* 390 frames they share an identical skeleton — nav → Title (H2 + H5) →
|
|
27
|
+
* Spacing/32 → one labelled dropdown → "Continue" pushed to the bottom → tag —
|
|
28
|
+
* and differ ONLY in what the dropdown carries, which is exactly what
|
|
29
|
+
* GUIDELINES §6-E means by "states are separate screens sharing the identical
|
|
30
|
+
* layout".
|
|
31
|
+
*
|
|
32
|
+
* Three things are deliberate:
|
|
33
|
+
*
|
|
34
|
+
* 1. The field DOES carry a visible label. Unlike Phone Input's combined row
|
|
35
|
+
* (#PI-4), Figma draws "Country" above this dropdown, which is Core's own
|
|
36
|
+
* `label` slot — so the copy rides the visible label, not `aria-label`.
|
|
37
|
+
* 2. `dropdown` IS the open-menu spec state, which Core exposes as the
|
|
38
|
+
* documentation-only `forceOpen` (a screen is one static spec state, never a
|
|
39
|
+
* live interaction) — the same mechanism Phone Input's `countryCode` and
|
|
40
|
+
* CURP's `Gene.dropdown` sections use. The search bar Figma draws inside the
|
|
41
|
+
* menu is Core's own `searchable`.
|
|
42
|
+
* 3. The closed field and the menu row are DIFFERENT faces of one option:
|
|
43
|
+
* 5707:54174 draws "🇺🇸 United States" in the field while the rows read
|
|
44
|
+
* "🇺🇸 +1 United States". That is Core's `PrizmaDropdownOption.fieldLabel`,
|
|
45
|
+
* so nothing is hand-composed. The flag travels inside the label text
|
|
46
|
+
* because Core still ships no country-flag primitive (#PI-3).
|
|
47
|
+
*
|
|
48
|
+
* This page is the only eKYB form page with NO "Back" secondary and NO Stepper —
|
|
49
|
+
* it is step 0, before the three-step wizard starts.
|
|
50
|
+
*/
|
|
51
|
+
export declare const EkybCountryScreen: React.ForwardRefExoticComponent<EkybCountryScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
52
|
+
export default EkybCountryScreen;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaDropdown } from '@incodetech/prizma-core-web/dropdown';
|
|
5
|
+
import { PrizmaFormScreen } from './FormScreen';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
/**
|
|
8
|
+
* eKYB — the country-of-registration page, built on the Form archetype
|
|
9
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
10
|
+
*
|
|
11
|
+
* ONE screen for all three purple `eKYB.country.*` sections (`empty`
|
|
12
|
+
* 2115:20444, `filled` 5655:42140, `dropdown` 5707:54174): measured against the
|
|
13
|
+
* 390 frames they share an identical skeleton — nav → Title (H2 + H5) →
|
|
14
|
+
* Spacing/32 → one labelled dropdown → "Continue" pushed to the bottom → tag —
|
|
15
|
+
* and differ ONLY in what the dropdown carries, which is exactly what
|
|
16
|
+
* GUIDELINES §6-E means by "states are separate screens sharing the identical
|
|
17
|
+
* layout".
|
|
18
|
+
*
|
|
19
|
+
* Three things are deliberate:
|
|
20
|
+
*
|
|
21
|
+
* 1. The field DOES carry a visible label. Unlike Phone Input's combined row
|
|
22
|
+
* (#PI-4), Figma draws "Country" above this dropdown, which is Core's own
|
|
23
|
+
* `label` slot — so the copy rides the visible label, not `aria-label`.
|
|
24
|
+
* 2. `dropdown` IS the open-menu spec state, which Core exposes as the
|
|
25
|
+
* documentation-only `forceOpen` (a screen is one static spec state, never a
|
|
26
|
+
* live interaction) — the same mechanism Phone Input's `countryCode` and
|
|
27
|
+
* CURP's `Gene.dropdown` sections use. The search bar Figma draws inside the
|
|
28
|
+
* menu is Core's own `searchable`.
|
|
29
|
+
* 3. The closed field and the menu row are DIFFERENT faces of one option:
|
|
30
|
+
* 5707:54174 draws "🇺🇸 United States" in the field while the rows read
|
|
31
|
+
* "🇺🇸 +1 United States". That is Core's `PrizmaDropdownOption.fieldLabel`,
|
|
32
|
+
* so nothing is hand-composed. The flag travels inside the label text
|
|
33
|
+
* because Core still ships no country-flag primitive (#PI-3).
|
|
34
|
+
*
|
|
35
|
+
* This page is the only eKYB form page with NO "Back" secondary and NO Stepper —
|
|
36
|
+
* it is step 0, before the three-step wizard starts.
|
|
37
|
+
*/
|
|
38
|
+
export const EkybCountryScreen = forwardRef(({ strings, state = 'empty', countries = [], value, screenId = `ekyb-country-${state}`, overrides, onAction, ...shell }, ref) => {
|
|
39
|
+
const copy = strings.country;
|
|
40
|
+
// `empty` is the only section drawn on the placeholder; both other sections
|
|
41
|
+
// draw a chosen country in the closed field.
|
|
42
|
+
const selected = state === 'empty' ? null : (value ?? countries[0]?.value ?? null);
|
|
43
|
+
return (_jsx(PrizmaFormScreen, { ref: ref, title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId,
|
|
44
|
+
/* Every eKYB form frame LEFT-aligns its title block, while the archetype
|
|
45
|
+
defaults to centred. The module supplies its designed alignment
|
|
46
|
+
through the sanctioned override rather than declaring any layout of
|
|
47
|
+
its own, and a host that passes `align` still wins (#GEO-2). */
|
|
48
|
+
overrides: { align: overrides?.align ?? 'left', logo: overrides?.logo }, onAction: onAction, ...shell, children: _jsx(PrizmaDropdown, { label: copy.field.label, placeholder: copy.field.placeholder, options: countries,
|
|
49
|
+
/* Uncontrolled: a screen is one static spec state, so no `onChange` is
|
|
50
|
+
needed. Core's `readOnly`/`disabled` are NOT used to freeze it —
|
|
51
|
+
they paint the DISABLED grey surface on a section Figma draws white
|
|
52
|
+
(DEVIATIONS #PI-6). */
|
|
53
|
+
defaultValue: selected, searchable: true, searchPlaceholder: copy.searchPlaceholder, clearSearchLabel: copy.clearSearchLabel,
|
|
54
|
+
/* The `dropdown` section IS the open-menu spec state. */
|
|
55
|
+
forceOpen: state === 'dropdown' }) }));
|
|
56
|
+
});
|
|
57
|
+
EkybCountryScreen.displayName = 'EkybCountryScreen';
|
|
58
|
+
export default EkybCountryScreen;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaResultScreenProps } from './ResultScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { EkybStrings } from './EkybStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface EkybErrorScreenProps extends Omit<PrizmaResultScreenProps, 'status' | 'title' | 'subtitle' | 'glyph' | 'ctaLabel' | 'secondaryCtaLabel' | 'verifiedLabel' | 'navLabel'> {
|
|
7
|
+
/** Module copy — this screen reads the `error` slice. */
|
|
8
|
+
strings: EkybStrings;
|
|
9
|
+
screenId?: string;
|
|
10
|
+
overrides?: PrizmaScreenOverrides;
|
|
11
|
+
onAction?: PrizmaScreenActionHandler;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* eKYB — the negative verdict (`eKYB.error`, 2116:34743), built on the Result
|
|
15
|
+
* archetype (GUIDELINES.md §6-F, `PrizmaResultScreen`).
|
|
16
|
+
*
|
|
17
|
+
* Nav → centred negative mark + H2 ("Something went wrong") → CTA band with the
|
|
18
|
+
* single "Try again" primary → anchored tag. It sits on F rather than C for one
|
|
19
|
+
* reason: it has a button, and §6-F reserves C for the pure no-button case —
|
|
20
|
+
* which is why its `success` sibling is on C and this one is not.
|
|
21
|
+
*
|
|
22
|
+
* This is a generic-error screen, and per the standing owner rule it KEEPS the
|
|
23
|
+
* logo header and the verified tag even where a module's Figma draws them bare
|
|
24
|
+
* (#PI-8, #F-34) — here Figma draws both anyway, so nothing is overridden.
|
|
25
|
+
*
|
|
26
|
+
* Core's outline status mark is used, not Figma's two-tone filled disc
|
|
27
|
+
* (icon-outline sweep, #15 / #DC-34).
|
|
28
|
+
*/
|
|
29
|
+
export declare const EkybErrorScreen: React.ForwardRefExoticComponent<EkybErrorScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
30
|
+
export default EkybErrorScreen;
|