@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,101 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import { type PrizmaScreenShellProps } from './ScreenShell';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenChromeProps, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import './ScreenLayout.css';
|
|
5
|
+
import './FormScreen.css';
|
|
6
|
+
/**
|
|
7
|
+
* A step of the Prizma spacing scale, named rather than valued. The archetype's
|
|
8
|
+
* two field-stack offsets are SELECTED from this scale by the module — it can
|
|
9
|
+
* never introduce a number of its own, so "no module re-declares spacing" still
|
|
10
|
+
* holds while a section that genuinely draws a different rhythm can be matched.
|
|
11
|
+
*/
|
|
12
|
+
export type PrizmaFormFieldsSpacing = '4' | '8' | '12' | '16' | '20' | '24' | '32' | '40';
|
|
13
|
+
export interface PrizmaFormScreenProps extends Omit<PrizmaScreenShellProps, 'dark' | 'title' | 'children'>, PrizmaScreenChromeProps {
|
|
14
|
+
/**
|
|
15
|
+
* An optional block between the logo nav and the title block — the archetype
|
|
16
|
+
* had no slot there at all. eKYC's Figma draws a two-segment Core
|
|
17
|
+
* `PrizmaStepper` across the full content width on all SIX of its form frames
|
|
18
|
+
* (page 1 blue + grey, page 2 pale + blue, page 2 loading both green), and it
|
|
19
|
+
* is the only chrome that tells the two pages apart. The slot takes a
|
|
20
|
+
* `ReactNode` so the module supplies Core's own component: the archetype
|
|
21
|
+
* invents no primitive and declares no spacing of its own — both offsets live
|
|
22
|
+
* once in `ScreenLayout.css` (`.prizma-screen-layout__progress`). Omit it and
|
|
23
|
+
* nothing renders, so every existing consumer is byte-identical.
|
|
24
|
+
* DEVIATIONS #EK-1.
|
|
25
|
+
*/
|
|
26
|
+
progress?: ReactNode;
|
|
27
|
+
/** Screen title (H2). */
|
|
28
|
+
title: string;
|
|
29
|
+
/** Description below the title (H5). */
|
|
30
|
+
subtitle?: string;
|
|
31
|
+
/** CTA label. Omit for keyboard-driven states with no visible CTA. */
|
|
32
|
+
ctaLabel?: string;
|
|
33
|
+
/** Disable the CTA (empty/invalid form states). */
|
|
34
|
+
ctaDisabled?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Request in flight: Core's `PrizmaButton` swaps the label for its designed
|
|
37
|
+
* spinner. Every form module draws this — Phone Input's `verify.loading` and
|
|
38
|
+
* `OTP.processing` both put the spinner IN THE CTA, not in the field — so the
|
|
39
|
+
* slot belongs to the archetype rather than to each module (#F-32 precedent,
|
|
40
|
+
* DEVIATIONS #PI-5).
|
|
41
|
+
*/
|
|
42
|
+
ctaLoading?: boolean;
|
|
43
|
+
/** Accessible / visible loading copy. No hardcoded English default. */
|
|
44
|
+
ctaLoadingLabel?: string;
|
|
45
|
+
/**
|
|
46
|
+
* A single standalone link below the primary, rendered as Core's
|
|
47
|
+
* `tertiary-link` button (full width, the same idiom as archetype A).
|
|
48
|
+
* For a SENTENCE carrying links inline, use `linkContent` instead — an L
|
|
49
|
+
* button is `width: 100%; min-height: 56px` and cannot sit inside a line of
|
|
50
|
+
* body text.
|
|
51
|
+
*/
|
|
52
|
+
linkLabel?: string;
|
|
53
|
+
/**
|
|
54
|
+
* A composed line below the primary: body copy with inline links, e.g. Phone
|
|
55
|
+
* Input's "Didn't receive the code? **Resend code** or **Change phone
|
|
56
|
+
* number**" — plain text plus TWO separately-actionable links. Core ships no
|
|
57
|
+
* inline-link primitive, so the foundation provides the recipe
|
|
58
|
+
* (`__inline-prompt` / `__inline-link` in ScreenLayout.css) and the module
|
|
59
|
+
* supplies the sentence. DEVIATIONS #PI-10.
|
|
60
|
+
*/
|
|
61
|
+
linkContent?: ReactNode;
|
|
62
|
+
/** "verified by" attribution copy for the footer tag. */
|
|
63
|
+
verifiedLabel: string;
|
|
64
|
+
/** The field stack — Core inputs (PrizmaTextField, PrizmaOtp, PrizmaDropdown…). */
|
|
65
|
+
children?: ReactNode;
|
|
66
|
+
/**
|
|
67
|
+
* Title block → field stack offset. Defaults to Spacing/32, the value Phone
|
|
68
|
+
* Input's sections draw (DEVIATIONS #PI-2), so every existing consumer is
|
|
69
|
+
* untouched. Data Sharing Consent's `User Consent` sections draw Spacing/24
|
|
70
|
+
* (27151:321: title ends 28, the disclosure starts at 52) — DEVIATIONS #DSC-1.
|
|
71
|
+
*/
|
|
72
|
+
fieldsOffset?: PrizmaFormFieldsSpacing;
|
|
73
|
+
/**
|
|
74
|
+
* Gap BETWEEN rows of the field stack. Defaults to Spacing/16. Data Sharing
|
|
75
|
+
* Consent draws Spacing/24 between the disclosure and the first consent card
|
|
76
|
+
* (304 → 328) and between every card (459 → 557 → 655, each 74 tall,
|
|
77
|
+
* 29645:5306) — DEVIATIONS #DSC-1.
|
|
78
|
+
*/
|
|
79
|
+
fieldsGap?: PrizmaFormFieldsSpacing;
|
|
80
|
+
/**
|
|
81
|
+
* Let the field stack PAN inside the column when the section draws a middle
|
|
82
|
+
* taller than the 844 frame: the title, the CTA and the anchored tag hold
|
|
83
|
+
* still while the fields scroll, and the clipped content stops Spacing/16
|
|
84
|
+
* above the CTA rather than running under it. Five Wave-3 modules hand-rolled
|
|
85
|
+
* this in their own stylesheets (CURP #CURP-1, Forms, Qualified Signature,
|
|
86
|
+
* eKYB, Data Sharing Consent); it is the archetype's now. DEVIATIONS #DSC-2.
|
|
87
|
+
*/
|
|
88
|
+
scrollFields?: boolean;
|
|
89
|
+
navLabel?: string;
|
|
90
|
+
screenId?: string;
|
|
91
|
+
overrides?: PrizmaScreenOverrides;
|
|
92
|
+
onAction?: PrizmaScreenActionHandler;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Archetype E — Form / Input (GUIDELINES.md §6-E).
|
|
96
|
+
* Nav → title block → field stack → CTA → verified tag. Module states
|
|
97
|
+
* (typing / filled / loading) are separate screens sharing this identical
|
|
98
|
+
* layout, changing only field content.
|
|
99
|
+
*/
|
|
100
|
+
export declare const PrizmaFormScreen: React.ForwardRefExoticComponent<PrizmaFormScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
101
|
+
export default PrizmaFormScreen;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaTitle } from '@incodetech/prizma-core-web/title';
|
|
5
|
+
import { PrizmaButton } from '@incodetech/prizma-core-web/button';
|
|
6
|
+
import { PrizmaTag } from '@incodetech/prizma-core-web/tag';
|
|
7
|
+
import { PrizmaScreenShell } from './ScreenShell';
|
|
8
|
+
import { PrizmaScreenNav } from './ScreenNav';
|
|
9
|
+
import './ScreenLayout.css';
|
|
10
|
+
import './FormScreen.css';
|
|
11
|
+
/**
|
|
12
|
+
* Archetype E — Form / Input (GUIDELINES.md §6-E).
|
|
13
|
+
* Nav → title block → field stack → CTA → verified tag. Module states
|
|
14
|
+
* (typing / filled / loading) are separate screens sharing this identical
|
|
15
|
+
* layout, changing only field content.
|
|
16
|
+
*/
|
|
17
|
+
export const PrizmaFormScreen = forwardRef(({ progress, title, subtitle, ctaLabel, ctaDisabled, ctaLoading = false, ctaLoadingLabel, linkLabel, linkContent, verifiedLabel, children, fieldsOffset, fieldsGap, scrollFields = false, navLabel, screenId, showHeader = true, showFooter = true, overrides, onAction, ...shell }, ref) => (_jsxs(PrizmaScreenShell, { ref: ref, ...shell, children: [_jsx(PrizmaScreenNav, { reserved: !showHeader, logo: overrides?.logo, navLabel: navLabel }), _jsxs("div", { className: "prizma-screen-layout__content", children: [progress ? (_jsx("div", { className: "prizma-screen-layout__progress", children: progress })) : null, _jsx(PrizmaTitle, { variant: overrides?.align === 'left' ? 'left' : 'centered', title: title, showSubtitle: Boolean(subtitle), subtitle: subtitle }), _jsx("div", { className: [
|
|
18
|
+
'prizma-form-screen__fields',
|
|
19
|
+
scrollFields ? 'prizma-form-screen__fields--scroll' : null,
|
|
20
|
+
]
|
|
21
|
+
.filter(Boolean)
|
|
22
|
+
.join(' '),
|
|
23
|
+
/* Custom properties only — the VALUES stay in FormScreen.css, keyed
|
|
24
|
+
off the Prizma spacing scale. Nothing here is a literal. */
|
|
25
|
+
style: fieldsOffset || fieldsGap
|
|
26
|
+
? {
|
|
27
|
+
...(fieldsOffset
|
|
28
|
+
? { '--pfs-fields-offset': `var(--prizma-spacing-${fieldsOffset})` }
|
|
29
|
+
: null),
|
|
30
|
+
...(fieldsGap
|
|
31
|
+
? { '--pfs-fields-gap': `var(--prizma-spacing-${fieldsGap})` }
|
|
32
|
+
: null),
|
|
33
|
+
}
|
|
34
|
+
: undefined, children: children }), ctaLabel || linkLabel || linkContent ? (_jsxs("div", { className: "prizma-screen-layout__cta prizma-form-screen__cta", children: [ctaLabel ? (_jsx(PrizmaButton, { variant: "primary", size: "L", disabled: ctaDisabled, loading: ctaLoading, loadingLabel: ctaLoadingLabel, onClick: () => onAction?.({ type: 'cta', screenId }), children: ctaLabel })) : null, linkLabel ? (_jsx(PrizmaButton, { variant: "tertiary-link", size: "L", onClick: () => onAction?.({ type: 'secondary', screenId }), children: linkLabel })) : null, linkContent] })) : null, showFooter ? (_jsx("div", { className: "prizma-screen-layout__footer prizma-screen-layout__footer--pinned", children: _jsx(PrizmaTag, { label: verifiedLabel }) })) : null] })] })));
|
|
35
|
+
PrizmaFormScreen.displayName = 'PrizmaFormScreen';
|
|
36
|
+
export default PrizmaFormScreen;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaDropdownOption } from '@incodetech/prizma-core-web/dropdown';
|
|
3
|
+
import { type PrizmaCountry } from '@incodetech/prizma-core-web/combined';
|
|
4
|
+
import { type PrizmaFormScreenProps } from './FormScreen';
|
|
5
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
6
|
+
import type { FormsChoiceKey, FormsChoiceOptionSet, FormsChoiceState, FormsStrings } from './FormsStrings';
|
|
7
|
+
import './ScreenLayout.css';
|
|
8
|
+
export interface FormsChoiceScreenProps extends Omit<PrizmaFormScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'> {
|
|
9
|
+
/** Module copy — this screen reads one `choice.*` slice. */
|
|
10
|
+
strings: FormsStrings;
|
|
11
|
+
/** Which choice purple section to render. Default `residence`. */
|
|
12
|
+
field?: FormsChoiceKey;
|
|
13
|
+
/** Which option list the menu carries. Default `countries`. */
|
|
14
|
+
optionSet?: FormsChoiceOptionSet;
|
|
15
|
+
/** Which treatment of that section. Default `closed`. */
|
|
16
|
+
state?: FormsChoiceState;
|
|
17
|
+
/**
|
|
18
|
+
* The option rows. Runtime data, never copy — the host supplies its own
|
|
19
|
+
* localized list, the same contract Phone Input's `countries` prop carries.
|
|
20
|
+
* Ignored when `optionSet` is `countries`, which is driven by `countries`.
|
|
21
|
+
*/
|
|
22
|
+
options?: PrizmaDropdownOption[];
|
|
23
|
+
/**
|
|
24
|
+
* The selectable countries for the `countries` option set. Each row draws
|
|
25
|
+
* Core's canonical flag raster through `PrizmaDropdown.renderLeading` — the
|
|
26
|
+
* very use case that component's docstring names.
|
|
27
|
+
*/
|
|
28
|
+
countries?: PrizmaCountry[];
|
|
29
|
+
/** The selected option value, where the section draws one. */
|
|
30
|
+
value?: string;
|
|
31
|
+
screenId?: string;
|
|
32
|
+
overrides?: PrizmaScreenOverrides;
|
|
33
|
+
onAction?: PrizmaScreenActionHandler;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Forms & Data Entry — the choice screen, built on the Form archetype
|
|
37
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
38
|
+
*
|
|
39
|
+
* ONE screen for eight purple sections across four parent groups —
|
|
40
|
+
* `forms.country` (Residence: `default` / `open`; the third frame,
|
|
41
|
+
* `forms.residencetyping`, needs a search query Core cannot seed — DEVIATIONS
|
|
42
|
+
* #FDE-6), `Forms.nationality`, `forms.select` (×2), `forms.yesNo` (×2) and the
|
|
43
|
+
* `forms.country` question variant (×2). Measured against the 390 frames the
|
|
44
|
+
* three groups draw a BYTE-IDENTICAL closed field: same title block, same
|
|
45
|
+
* labelled `PrizmaDropdown`, same "Select an option" trigger, same CTA. What
|
|
46
|
+
* separates them is (a) the label above the field and (b) what the OPEN menu
|
|
47
|
+
* lists — so the module carries a `field` axis and an `optionSet` axis instead
|
|
48
|
+
* of eight screens, and the demo enumerates the closed state ONCE per distinct
|
|
49
|
+
* label rather than three times identically.
|
|
50
|
+
*
|
|
51
|
+
* Three notes:
|
|
52
|
+
*
|
|
53
|
+
* 1. The section draws a VISIBLE label row, so the copy uses Core's `label`
|
|
54
|
+
* slot. Phone Input and Email Input ride `aria-label` because their Figma
|
|
55
|
+
* draws no label (DEVIATIONS #PI-4, #EI-2) — this module's does.
|
|
56
|
+
* 2. The open sections draw the trigger with the bold blue border. Core paints
|
|
57
|
+
* that on `:focus-visible` only, which a static spec state never reaches, so
|
|
58
|
+
* the screen uses the documentation-only `forceState="focused"` the
|
|
59
|
+
* component already exposes for exactly this. Nothing is re-styled.
|
|
60
|
+
* 3. `forceOpen` IS the open-menu spec state — a screen is one static frame,
|
|
61
|
+
* never a live interaction. Its missing sibling is a `searchValue`: without
|
|
62
|
+
* one the TYPING frame renders as `open` with an empty search bar, so that
|
|
63
|
+
* section is not enumerated rather than shipped as a duplicate (#FDE-6).
|
|
64
|
+
*/
|
|
65
|
+
export declare const FormsChoiceScreen: React.ForwardRefExoticComponent<FormsChoiceScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
66
|
+
export default FormsChoiceScreen;
|
|
@@ -0,0 +1,63 @@
|
|
|
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 { PrizmaCountryFlag } from '@incodetech/prizma-core-web/combined';
|
|
6
|
+
import { PrizmaFormScreen } from './FormScreen';
|
|
7
|
+
import './ScreenLayout.css';
|
|
8
|
+
/**
|
|
9
|
+
* Forms & Data Entry — the choice screen, built on the Form archetype
|
|
10
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
11
|
+
*
|
|
12
|
+
* ONE screen for eight purple sections across four parent groups —
|
|
13
|
+
* `forms.country` (Residence: `default` / `open`; the third frame,
|
|
14
|
+
* `forms.residencetyping`, needs a search query Core cannot seed — DEVIATIONS
|
|
15
|
+
* #FDE-6), `Forms.nationality`, `forms.select` (×2), `forms.yesNo` (×2) and the
|
|
16
|
+
* `forms.country` question variant (×2). Measured against the 390 frames the
|
|
17
|
+
* three groups draw a BYTE-IDENTICAL closed field: same title block, same
|
|
18
|
+
* labelled `PrizmaDropdown`, same "Select an option" trigger, same CTA. What
|
|
19
|
+
* separates them is (a) the label above the field and (b) what the OPEN menu
|
|
20
|
+
* lists — so the module carries a `field` axis and an `optionSet` axis instead
|
|
21
|
+
* of eight screens, and the demo enumerates the closed state ONCE per distinct
|
|
22
|
+
* label rather than three times identically.
|
|
23
|
+
*
|
|
24
|
+
* Three notes:
|
|
25
|
+
*
|
|
26
|
+
* 1. The section draws a VISIBLE label row, so the copy uses Core's `label`
|
|
27
|
+
* slot. Phone Input and Email Input ride `aria-label` because their Figma
|
|
28
|
+
* draws no label (DEVIATIONS #PI-4, #EI-2) — this module's does.
|
|
29
|
+
* 2. The open sections draw the trigger with the bold blue border. Core paints
|
|
30
|
+
* that on `:focus-visible` only, which a static spec state never reaches, so
|
|
31
|
+
* the screen uses the documentation-only `forceState="focused"` the
|
|
32
|
+
* component already exposes for exactly this. Nothing is re-styled.
|
|
33
|
+
* 3. `forceOpen` IS the open-menu spec state — a screen is one static frame,
|
|
34
|
+
* never a live interaction. Its missing sibling is a `searchValue`: without
|
|
35
|
+
* one the TYPING frame renders as `open` with an empty search bar, so that
|
|
36
|
+
* section is not enumerated rather than shipped as a duplicate (#FDE-6).
|
|
37
|
+
*/
|
|
38
|
+
export const FormsChoiceScreen = forwardRef(({ strings, field = 'residence', optionSet = 'countries', state = 'closed', options, countries, value, screenId = `forms-choice-${field}-${optionSet}-${state}`, overrides, onAction, ...shell }, ref) => {
|
|
39
|
+
const copy = strings.choice[field];
|
|
40
|
+
const open = state === 'open';
|
|
41
|
+
// The `countries` set is the one Figma draws with a search bar and a flag
|
|
42
|
+
// per row; `generic` and `yesNo` draw a bare list.
|
|
43
|
+
const isCountries = optionSet === 'countries';
|
|
44
|
+
const countryList = countries ?? [];
|
|
45
|
+
const rows = isCountries
|
|
46
|
+
? countryList.map((c) => ({ value: c.code, label: c.name }))
|
|
47
|
+
: (options ?? []);
|
|
48
|
+
return (_jsx(PrizmaFormScreen, { ref: ref, title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: _jsx(PrizmaDropdown, { label: copy.label, placeholder: copy.placeholder, options: rows, value: value ?? null,
|
|
49
|
+
/* The open sections draw the focused border; Core's own
|
|
50
|
+
documentation-only modifier supplies it (see note 2). */
|
|
51
|
+
forceState: open ? 'focused' : undefined, forceOpen: open, searchable: isCountries, searchPlaceholder: copy.searchPlaceholder, clearSearchLabel: copy.clearSearchLabel,
|
|
52
|
+
/* Core's canonical flag raster in the option's leading slot — the
|
|
53
|
+
primitive Phone Input had to do without (DEVIATIONS #PI-3) and
|
|
54
|
+
`PrizmaDropdown.renderLeading`'s own docstring asks for. */
|
|
55
|
+
renderLeading: isCountries
|
|
56
|
+
? (option) => {
|
|
57
|
+
const match = countryList.find((c) => c.code === option.value);
|
|
58
|
+
return match ? _jsx(PrizmaCountryFlag, { country: match }) : null;
|
|
59
|
+
}
|
|
60
|
+
: undefined }) }));
|
|
61
|
+
});
|
|
62
|
+
FormsChoiceScreen.displayName = 'FormsChoiceScreen';
|
|
63
|
+
export default FormsChoiceScreen;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaResultScreenProps } from './ResultScreen';
|
|
3
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
4
|
+
import type { FormsStrings } from './FormsStrings';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
export interface FormsErrorScreenProps extends Omit<PrizmaResultScreenProps, 'status' | 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'navLabel'> {
|
|
7
|
+
/** Module copy — this screen reads the `error` slice. */
|
|
8
|
+
strings: FormsStrings;
|
|
9
|
+
screenId?: string;
|
|
10
|
+
overrides?: PrizmaScreenOverrides;
|
|
11
|
+
onAction?: PrizmaScreenActionHandler;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Forms & Data Entry — the error verdict, built on the Result archetype
|
|
15
|
+
* (GUIDELINES.md §6-F, `PrizmaResultScreen`).
|
|
16
|
+
*
|
|
17
|
+
* Figma: the purple `forms.error` section (2014:21506) — the negative status
|
|
18
|
+
* mark over "Something went wrong" with a single "Try again" CTA and the
|
|
19
|
+
* anchored tag. One button, so archetype F rather than C (its sibling
|
|
20
|
+
* `forms.success` draws none and stays on C — see `FormsSuccessScreen`).
|
|
21
|
+
*
|
|
22
|
+
* The module has no connectivity family: unlike Phone Input, the Forms sections
|
|
23
|
+
* carry ONE generic error screen and no `noConnection` variant, so there is no
|
|
24
|
+
* `variant` axis and no Wi-Fi glyph here. Logged so the asymmetry is not read
|
|
25
|
+
* as an omission (the #EI-5 precedent).
|
|
26
|
+
*/
|
|
27
|
+
export declare const FormsErrorScreen: React.ForwardRefExoticComponent<FormsErrorScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
28
|
+
export default FormsErrorScreen;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaResultScreen } from './ResultScreen';
|
|
5
|
+
import './ScreenLayout.css';
|
|
6
|
+
/**
|
|
7
|
+
* Forms & Data Entry — the error verdict, built on the Result archetype
|
|
8
|
+
* (GUIDELINES.md §6-F, `PrizmaResultScreen`).
|
|
9
|
+
*
|
|
10
|
+
* Figma: the purple `forms.error` section (2014:21506) — the negative status
|
|
11
|
+
* mark over "Something went wrong" with a single "Try again" CTA and the
|
|
12
|
+
* anchored tag. One button, so archetype F rather than C (its sibling
|
|
13
|
+
* `forms.success` draws none and stays on C — see `FormsSuccessScreen`).
|
|
14
|
+
*
|
|
15
|
+
* The module has no connectivity family: unlike Phone Input, the Forms sections
|
|
16
|
+
* carry ONE generic error screen and no `noConnection` variant, so there is no
|
|
17
|
+
* `variant` axis and no Wi-Fi glyph here. Logged so the asymmetry is not read
|
|
18
|
+
* as an omission (the #EI-5 precedent).
|
|
19
|
+
*/
|
|
20
|
+
export const FormsErrorScreen = forwardRef(({ strings, screenId = 'forms-error', overrides, onAction, ...shell }, ref) => (_jsx(PrizmaResultScreen, { ref: ref, status: "error", title: strings.error.title, subtitle: strings.error.subtitle, ctaLabel: strings.error.ctaLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell })));
|
|
21
|
+
FormsErrorScreen.displayName = 'FormsErrorScreen';
|
|
22
|
+
export default FormsErrorScreen;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaCountry } from '@incodetech/prizma-core-web/combined';
|
|
3
|
+
import { type PrizmaFormScreenProps } from './FormScreen';
|
|
4
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
5
|
+
import type { FormsFieldKey, FormsFieldState, FormsStrings } from './FormsStrings';
|
|
6
|
+
import './ScreenLayout.css';
|
|
7
|
+
export interface FormsFieldScreenProps extends Omit<PrizmaFormScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'> {
|
|
8
|
+
/** Module copy — this screen reads one `fields.*` slice. */
|
|
9
|
+
strings: FormsStrings;
|
|
10
|
+
/** Which single-field purple section to render. */
|
|
11
|
+
field: FormsFieldKey;
|
|
12
|
+
/** Which treatment of that section. Default `default`. */
|
|
13
|
+
state?: FormsFieldState;
|
|
14
|
+
/** The value as typed. Empty renders the placeholder. */
|
|
15
|
+
value?: string;
|
|
16
|
+
/**
|
|
17
|
+
* `phone` only — the dial code the combined field opens on. Runtime data,
|
|
18
|
+
* not copy; Core's `PrizmaCombined` ships its own list and defaults to
|
|
19
|
+
* Serbia, which is exactly what `forms.phoneNumber` draws.
|
|
20
|
+
*/
|
|
21
|
+
country?: PrizmaCountry;
|
|
22
|
+
/** `phone` only — the selectable dial codes. */
|
|
23
|
+
countries?: PrizmaCountry[];
|
|
24
|
+
screenId?: string;
|
|
25
|
+
overrides?: PrizmaScreenOverrides;
|
|
26
|
+
onAction?: PrizmaScreenActionHandler;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Forms & Data Entry — the single-field screen, built on the Form archetype
|
|
30
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
31
|
+
*
|
|
32
|
+
* ONE screen for eight purple sections — `forms.idnumber`, `forms.cpf`,
|
|
33
|
+
* `forms.email`, `forms.phone`, `forms.text`, two of the three `forms.dob`
|
|
34
|
+
* sections (`forms.DOB.iconButton` draws an open month grid Core does not ship
|
|
35
|
+
* — DEVIATIONS #FDE-5) and the two `forms.inputerror` sections. Measured
|
|
36
|
+
* against the 390 frames they
|
|
37
|
+
* share an identical skeleton: nav → Title → Spacing/32 → ONE labelled field →
|
|
38
|
+
* primary CTA → tag. What changes is which Core input sits in the stack and
|
|
39
|
+
* what state it is in, which is exactly what GUIDELINES §6-E means by "states
|
|
40
|
+
* are separate screens sharing the identical layout".
|
|
41
|
+
*
|
|
42
|
+
* Four rules carried over from the Wave-3 modules that paid for them:
|
|
43
|
+
*
|
|
44
|
+
* 1. Every field is UNCONTROLLED (`defaultValue`). A screen is one static spec
|
|
45
|
+
* state, so no `onChange` is needed — and Core's `readOnly`, the other way
|
|
46
|
+
* to make a field inert, paints the DISABLED grey surface on states Figma
|
|
47
|
+
* draws white (DEVIATIONS #PI-6). Nothing here greys, so nothing is
|
|
48
|
+
* disabled either.
|
|
49
|
+
* 2. `focused` gets Core's OWN `--focused` modifier through
|
|
50
|
+
* `className` — the class its CSS already implements beside `:focus-within`.
|
|
51
|
+
* The input family has no `forceState` prop yet, unlike `PrizmaDropdown`
|
|
52
|
+
* (DEVIATIONS #PI-7); nothing is re-styled here.
|
|
53
|
+
* 3. `clearable` is left OFF on every state. Figma draws no clear ✕ on any of
|
|
54
|
+
* these sections, and on the two error sections Core could not reveal one
|
|
55
|
+
* anyway — its `:focus-within:not(--error)` guard makes the prop a silent
|
|
56
|
+
* no-op there (DEVIATIONS #CURP-3). Setting a prop that cannot paint is the
|
|
57
|
+
* defect that shipped on CURP.
|
|
58
|
+
* 4. The in-flight spinner, when a host wires one, rides the CTA
|
|
59
|
+
* (`ctaLoading`), never the field (DEVIATIONS #PI-5).
|
|
60
|
+
*
|
|
61
|
+
* Unlike Phone Input and Email Input, EVERY section here draws a visible label
|
|
62
|
+
* row above the field, so the copy uses Core's `label` slot rather than
|
|
63
|
+
* `aria-label` (#PI-4 / #EI-2 do not apply — see DEVIATIONS #FDE-1).
|
|
64
|
+
*/
|
|
65
|
+
export declare const FormsFieldScreen: React.ForwardRefExoticComponent<FormsFieldScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
66
|
+
export default FormsFieldScreen;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from 'react';
|
|
4
|
+
import { PrizmaTextField } from '@incodetech/prizma-core-web/text-field';
|
|
5
|
+
import { PrizmaDateField } from '@incodetech/prizma-core-web/date-field';
|
|
6
|
+
import { PrizmaMultiline } from '@incodetech/prizma-core-web/multiline';
|
|
7
|
+
import { PrizmaCombined } from '@incodetech/prizma-core-web/combined';
|
|
8
|
+
import { PrizmaFormScreen } from './FormScreen';
|
|
9
|
+
import './ScreenLayout.css';
|
|
10
|
+
/**
|
|
11
|
+
* Forms & Data Entry — the single-field screen, built on the Form archetype
|
|
12
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
13
|
+
*
|
|
14
|
+
* ONE screen for eight purple sections — `forms.idnumber`, `forms.cpf`,
|
|
15
|
+
* `forms.email`, `forms.phone`, `forms.text`, two of the three `forms.dob`
|
|
16
|
+
* sections (`forms.DOB.iconButton` draws an open month grid Core does not ship
|
|
17
|
+
* — DEVIATIONS #FDE-5) and the two `forms.inputerror` sections. Measured
|
|
18
|
+
* against the 390 frames they
|
|
19
|
+
* share an identical skeleton: nav → Title → Spacing/32 → ONE labelled field →
|
|
20
|
+
* primary CTA → tag. What changes is which Core input sits in the stack and
|
|
21
|
+
* what state it is in, which is exactly what GUIDELINES §6-E means by "states
|
|
22
|
+
* are separate screens sharing the identical layout".
|
|
23
|
+
*
|
|
24
|
+
* Four rules carried over from the Wave-3 modules that paid for them:
|
|
25
|
+
*
|
|
26
|
+
* 1. Every field is UNCONTROLLED (`defaultValue`). A screen is one static spec
|
|
27
|
+
* state, so no `onChange` is needed — and Core's `readOnly`, the other way
|
|
28
|
+
* to make a field inert, paints the DISABLED grey surface on states Figma
|
|
29
|
+
* draws white (DEVIATIONS #PI-6). Nothing here greys, so nothing is
|
|
30
|
+
* disabled either.
|
|
31
|
+
* 2. `focused` gets Core's OWN `--focused` modifier through
|
|
32
|
+
* `className` — the class its CSS already implements beside `:focus-within`.
|
|
33
|
+
* The input family has no `forceState` prop yet, unlike `PrizmaDropdown`
|
|
34
|
+
* (DEVIATIONS #PI-7); nothing is re-styled here.
|
|
35
|
+
* 3. `clearable` is left OFF on every state. Figma draws no clear ✕ on any of
|
|
36
|
+
* these sections, and on the two error sections Core could not reveal one
|
|
37
|
+
* anyway — its `:focus-within:not(--error)` guard makes the prop a silent
|
|
38
|
+
* no-op there (DEVIATIONS #CURP-3). Setting a prop that cannot paint is the
|
|
39
|
+
* defect that shipped on CURP.
|
|
40
|
+
* 4. The in-flight spinner, when a host wires one, rides the CTA
|
|
41
|
+
* (`ctaLoading`), never the field (DEVIATIONS #PI-5).
|
|
42
|
+
*
|
|
43
|
+
* Unlike Phone Input and Email Input, EVERY section here draws a visible label
|
|
44
|
+
* row above the field, so the copy uses Core's `label` slot rather than
|
|
45
|
+
* `aria-label` (#PI-4 / #EI-2 do not apply — see DEVIATIONS #FDE-1).
|
|
46
|
+
*/
|
|
47
|
+
export const FormsFieldScreen = forwardRef(({ strings, field, state = 'default', value, country, countries, screenId = `forms-field-${field}-${state}`, overrides, onAction, ...shell }, ref) => {
|
|
48
|
+
const copy = strings.fields[field];
|
|
49
|
+
// The two `forms.inputerror` sections are the only ones that paint the
|
|
50
|
+
// negative surface, and they are also the only ones that grey the CTA —
|
|
51
|
+
// the canvas sticky's "optimistic rule" (the button starts enabled and
|
|
52
|
+
// greys only after a submit that failed validation).
|
|
53
|
+
const emptyError = state === 'emptyError';
|
|
54
|
+
const invalidError = state === 'invalidError';
|
|
55
|
+
const invalid = emptyError || invalidError;
|
|
56
|
+
const errorText = emptyError ? copy.emptyErrorText : copy.invalidErrorText;
|
|
57
|
+
// `forms.DOB.typing` draws the blue focus ring. Its neighbour
|
|
58
|
+
// `forms.DOB.iconButton` draws the same ring UNDER an open month grid, and
|
|
59
|
+
// Core owns no picker to open — so that section has no state here rather
|
|
60
|
+
// than a second focus ring wearing its name. See FormsStrings.
|
|
61
|
+
const focused = state === 'focused';
|
|
62
|
+
const focusClass = (modifier) => (focused ? modifier : undefined);
|
|
63
|
+
// The `emptyError` section draws the field with NOTHING in it — not even
|
|
64
|
+
// the grey placeholder every resting section shows. Passing no placeholder
|
|
65
|
+
// is the screen choosing content, not overriding a Core treatment.
|
|
66
|
+
const placeholder = emptyError ? undefined : copy.placeholder;
|
|
67
|
+
const renderField = () => {
|
|
68
|
+
switch (field) {
|
|
69
|
+
case 'dob':
|
|
70
|
+
return (_jsx(PrizmaDateField, { className: focusClass('prizma-input-datefield--focused'), label: copy.label, placeholder: placeholder, defaultValue: value ?? '', error: invalid, errorText: invalid ? errorText : undefined, calendarLabel: copy.calendarLabel }));
|
|
71
|
+
case 'phone':
|
|
72
|
+
return (_jsx(PrizmaCombined, { label: copy.label, placeholder: placeholder, defaultValue: value ?? '', defaultCountry: country, countries: countries, countryListLabel: copy.countryListLabel, error: invalid, errorText: invalid ? errorText : undefined }));
|
|
73
|
+
case 'text':
|
|
74
|
+
return (_jsx(PrizmaMultiline, { className: focusClass('prizma-input-multiline--focused'), label: copy.label, placeholder: placeholder, defaultValue: value ?? '', error: invalid, errorText: invalid ? errorText : undefined, clearable: false, clearLabel: copy.clearLabel }));
|
|
75
|
+
default:
|
|
76
|
+
return (_jsx(PrizmaTextField, { className: focusClass('prizma-input-textfield--focused'), label: copy.label, placeholder: placeholder, defaultValue: value ?? '',
|
|
77
|
+
/* `forms.email` is the one section with e-mail semantics; the
|
|
78
|
+
rest are plain text keys. */
|
|
79
|
+
type: field === 'email' ? 'email' : 'text', inputMode: field === 'email' ? 'email' : undefined, autoComplete: field === 'email' ? 'email' : 'off', autoCapitalize: field === 'email' ? 'none' : undefined, spellCheck: false, error: invalid, errorText: invalid ? errorText : undefined, clearable: false, clearLabel: copy.clearLabel }));
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
return (_jsx(PrizmaFormScreen, { ref: ref, title: copy.title, subtitle: copy.subtitle, ctaLabel: copy.ctaLabel, ctaDisabled: invalid, ctaLoadingLabel: copy.ctaLoadingLabel, verifiedLabel: strings.verifiedLabel, navLabel: strings.navLabel, screenId: screenId, overrides: overrides, onAction: onAction, ...shell, children: renderField() }));
|
|
83
|
+
});
|
|
84
|
+
FormsFieldScreen.displayName = 'FormsFieldScreen';
|
|
85
|
+
export default FormsFieldScreen;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/* Forms & Data Entry — module layout additions.
|
|
2
|
+
*
|
|
3
|
+
* ONE rule, and it declares no spacing. The content column, the 24px gutters,
|
|
4
|
+
* the title → fields Spacing/32, the field gaps, the CTA column and the
|
|
5
|
+
* anchored footer all stay the foundation's (`ScreenLayout.css`,
|
|
6
|
+
* `FormScreen.css`). The rule RELEASES a constraint that a purple section
|
|
7
|
+
* contradicts — the same idiom as Phone Input's `width: auto` on Core's
|
|
8
|
+
* fill-width Dropdown (#PI-1). No primitive is invented, no Core value
|
|
9
|
+
* repainted, no `!important`.
|
|
10
|
+
*
|
|
11
|
+
* The module's other layout need — the multi-field stacks that are taller than
|
|
12
|
+
* the 844 frame — is NOT here: it is the archetype's `scrollFields` prop
|
|
13
|
+
* (`PrizmaFormScreen`, `.prizma-form-screen__fields--scroll`), which carries
|
|
14
|
+
* both the `overflow-y: auto` and the Spacing/16 margin that makes the cut read
|
|
15
|
+
* as a cut. `FormsLongFormScreen` passes it. DEVIATIONS #DSC-2 / #CURP-1.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/* ── The focused row keeps its clear ✕ ───────────────────────────────────────
|
|
19
|
+
* `longform.focused` (9:24653) draws the e-mail row with the blue focus ring,
|
|
20
|
+
* the partial value AND the grey clear ✕ at the field's right edge.
|
|
21
|
+
*
|
|
22
|
+
* Core renders that button (`PrizmaTextField clearable`) but reveals it only
|
|
23
|
+
* under `:focus-within` (TextField.css:121) — a LIVE focus a static spec state
|
|
24
|
+
* can never hold. Its sibling `--focused` modifier, the documentation hook the
|
|
25
|
+
* screen already uses for the border, is not part of that selector, so the
|
|
26
|
+
* prop was a silent no-op: exactly the defect QA caught on CURP (#CURP-3).
|
|
27
|
+
*
|
|
28
|
+
* This mirrors Core's own reveal verbatim — same element, same `--show` state
|
|
29
|
+
* (which Core still owns: the button appears only when the field has a value),
|
|
30
|
+
* same disabled/error guards — swapping only the live `:focus-within` for the
|
|
31
|
+
* static modifier. Nothing is hand-rolled: no ✕ glyph, no box, no colour is
|
|
32
|
+
* declared here; only Core's `display: none` is lifted, and only on the one
|
|
33
|
+
* section that draws the affordance.
|
|
34
|
+
*
|
|
35
|
+
* CORE REQUEST (extends #PI-7): give the input family the `forceState` prop
|
|
36
|
+
* `PrizmaDropdown` already has, and let it drive the clear affordance as well
|
|
37
|
+
* as the border — then this rule disappears.
|
|
38
|
+
*/
|
|
39
|
+
.forms-long-form--focused
|
|
40
|
+
.prizma-input-textfield--focused:not(.prizma-input-textfield--disabled):not(
|
|
41
|
+
.prizma-input-textfield--error
|
|
42
|
+
)
|
|
43
|
+
.prizma-input-textfield__clear.prizma-input-textfield__clear--show {
|
|
44
|
+
display: inline-flex;
|
|
45
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type PrizmaDropdownOption } from '@incodetech/prizma-core-web/dropdown';
|
|
3
|
+
import { type PrizmaCountry } from '@incodetech/prizma-core-web/combined';
|
|
4
|
+
import { type PrizmaFormScreenProps } from './FormScreen';
|
|
5
|
+
import type { PrizmaScreenActionHandler, PrizmaScreenOverrides } from './types';
|
|
6
|
+
import type { FormsLongFormPreset, FormsLongFormState, FormsStrings } from './FormsStrings';
|
|
7
|
+
import './ScreenLayout.css';
|
|
8
|
+
import './FormsLayout.css';
|
|
9
|
+
export interface FormsLongFormScreenProps extends Omit<PrizmaFormScreenProps, 'title' | 'subtitle' | 'ctaLabel' | 'verifiedLabel' | 'children' | 'navLabel'> {
|
|
10
|
+
/** Module copy — this screen reads one `longForm.*` slice. */
|
|
11
|
+
strings: FormsStrings;
|
|
12
|
+
/** Which multi-field purple section to render. Default `eKyc`. */
|
|
13
|
+
preset?: FormsLongFormPreset;
|
|
14
|
+
/** Which treatment of that section. Default `default`. */
|
|
15
|
+
state?: FormsLongFormState;
|
|
16
|
+
/** Value per row key. Text/date rows take the literal value; `country` rows
|
|
17
|
+
* take an ISO code; `select` rows take an option value. */
|
|
18
|
+
values?: Record<string, string>;
|
|
19
|
+
/** Which row carries the focus ring on the `focused` section. */
|
|
20
|
+
focusedField?: string;
|
|
21
|
+
/** Option rows for the `select` kinds. Runtime data, never copy — the host
|
|
22
|
+
* supplies its own localized list. */
|
|
23
|
+
options?: Record<string, PrizmaDropdownOption[]>;
|
|
24
|
+
/** The selectable countries for `country` rows. */
|
|
25
|
+
countries?: PrizmaCountry[];
|
|
26
|
+
screenId?: string;
|
|
27
|
+
overrides?: PrizmaScreenOverrides;
|
|
28
|
+
onAction?: PrizmaScreenActionHandler;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Forms & Data Entry — the multi-field screen, built on the Form archetype
|
|
32
|
+
* (GUIDELINES.md §6-E, `PrizmaFormScreen`).
|
|
33
|
+
*
|
|
34
|
+
* ONE screen for the module's seven multi-field purple sections: `forms.name`,
|
|
35
|
+
* `longform.customizable` (default + filled) and the whole
|
|
36
|
+
* `🧩 Long forms - pre-defined cases` group (`longform.default` / `.focused` /
|
|
37
|
+
* `.filled` / `.loading` plus the "Optional / Required" documentation pair).
|
|
38
|
+
* They share the identical skeleton — nav → Title (H2 + the "All fields marked
|
|
39
|
+
* with * are required." H5) → Spacing/32 → a stack of labelled Core inputs →
|
|
40
|
+
* primary CTA → tag — and differ in which rows the stack carries and what state
|
|
41
|
+
* each row is in.
|
|
42
|
+
*
|
|
43
|
+
* Four things are deliberate:
|
|
44
|
+
*
|
|
45
|
+
* 1. Rows are UNCONTROLLED (`defaultValue`). `readOnly` would paint Core's
|
|
46
|
+
* DISABLED grey on the six sections Figma draws white (DEVIATIONS #PI-6);
|
|
47
|
+
* `disabled` is set ONLY on `loading`, the one section Figma actually greys
|
|
48
|
+
* — and it greys every row at once, exactly as drawn.
|
|
49
|
+
* 2. The focused row gets Core's OWN `--focused` modifier through `className`
|
|
50
|
+
* (DEVIATIONS #PI-7). Its clear ✕ needs one module rule to appear, because
|
|
51
|
+
* Core reveals the button under a live `:focus-within` a static spec state
|
|
52
|
+
* can never satisfy — see `FormsLayout.css`, which only lifts Core's
|
|
53
|
+
* `display: none` and re-styles nothing (the #CURP-3 idiom).
|
|
54
|
+
* 3. The in-flight spinner rides the CTA (`ctaLoading`), never a field
|
|
55
|
+
* (DEVIATIONS #PI-5) — without it `loading` would render as `filled`.
|
|
56
|
+
* 4. The required marker rides Core's `requiredHint` so it stays localizable.
|
|
57
|
+
* Core has no OPTIONAL counterpart, so "(Optional)" is composed into the
|
|
58
|
+
* label string instead — DEVIATIONS #FDE-4.
|
|
59
|
+
*
|
|
60
|
+
* The stack SCROLLS inside the content column through the archetype's own
|
|
61
|
+
* `scrollFields` prop: the profile preset is five 78px rows plus gaps and does
|
|
62
|
+
* not fit a 390×844 frame, and screens never reflow (#17). The variant carries
|
|
63
|
+
* the `overflow-y: auto` AND the Spacing/16 margin below the clipped stack, so
|
|
64
|
+
* the sliced last row is followed by clear surface instead of running flush
|
|
65
|
+
* into the CTA band — the half a module stylesheet kept losing. It is a no-op
|
|
66
|
+
* on the short `name` preset, whose rows never overflow. DEVIATIONS #DSC-2,
|
|
67
|
+
* restating #CURP-1.
|
|
68
|
+
*/
|
|
69
|
+
export declare const FormsLongFormScreen: React.ForwardRefExoticComponent<FormsLongFormScreenProps & React.RefAttributes<HTMLDivElement>>;
|
|
70
|
+
export default FormsLongFormScreen;
|