datakeen-session-react 1.1.194 → 1.1.195-dev.10
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/LICENSE +218 -0
- package/README.md +1 -17
- package/dist/cjs/_virtual/_commonjsHelpers.js +0 -1
- package/dist/cjs/_virtual/heic2any.js +0 -1
- package/dist/cjs/_virtual/heic2any2.js +0 -1
- package/dist/cjs/assets/Face Scan Square.svg.js +0 -1
- package/dist/cjs/assets/Lightbulb.svg.js +0 -1
- package/dist/cjs/assets/Monitor Camera.svg.js +0 -1
- package/dist/cjs/assets/User Hands.svg.js +0 -1
- package/dist/cjs/assets/before-document.png.js +0 -1
- package/dist/cjs/assets/before-passport.png.js +0 -1
- package/dist/cjs/assets/before-photo.png.js +0 -1
- package/dist/cjs/assets/before-verso.png.js +0 -1
- package/dist/cjs/assets/check.svg.js +0 -1
- package/dist/cjs/assets/icons/shield_magic_link.svg.js +0 -1
- package/dist/cjs/assets/selfietake.svg.js +0 -1
- package/dist/cjs/components/DatakeenSession.js +0 -1
- package/dist/cjs/components/document-collection/DocumentCollection.js +0 -1
- package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js +0 -1
- package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js +0 -1
- package/dist/cjs/components/document-collection/DocumentCollectionSelection.js +0 -1
- package/dist/cjs/components/document-collection/DocumentCollectionUpload.js +0 -1
- package/dist/cjs/components/document-collection/DocumentError.js +5 -2
- package/dist/cjs/components/document-collection/DocumentProcessing.js +13 -12
- package/dist/cjs/components/document-collection/DocumentSuccess.js +0 -1
- package/dist/cjs/components/document-video/DocumentVideoCapture.js +0 -1
- package/dist/cjs/components/document-video/DocumentVideoConfirmation.js +0 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoFlow.js +0 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoInstructions.js +0 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js +9 -6
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoRecorder.js +0 -1
- package/dist/cjs/components/icons/ElectronicIcon.js +0 -1
- package/dist/cjs/components/icons/PoweredByIcon.js +0 -1
- package/dist/cjs/components/icons/PreIntroIcon.js +0 -1
- package/dist/cjs/components/icons/StartIcon.js +0 -1
- package/dist/cjs/components/id-check/BeforePhoto.js +0 -1
- package/dist/cjs/components/id-check/BeforeVersoPhoto.js +0 -1
- package/dist/cjs/components/id-check/CameraError.js +0 -1
- package/dist/cjs/components/id-check/CameraMask.js +0 -1
- package/dist/cjs/components/id-check/OrientationToggle.js +0 -1
- package/dist/cjs/components/id-check/Photo.js +0 -1
- package/dist/cjs/components/id-check/PhotoConfirmation.js +0 -1
- package/dist/cjs/components/id-check/PhotoPreview.js +0 -1
- package/dist/cjs/components/jdi/JDDWorkInProgress.js +0 -1
- package/dist/cjs/components/jdi/JDICountrySelection.js +0 -1
- package/dist/cjs/components/jdi/JDIDocumentSelection.js +0 -1
- package/dist/cjs/components/jdi/JDIDocumentUpload.js +0 -1
- package/dist/cjs/components/jdi/JDIError.js +5 -2
- package/dist/cjs/components/jdi/JDIPreIntroduction.js +0 -1
- package/dist/cjs/components/jdi/JDIProcessing.js +15 -15
- package/dist/cjs/components/jdi/JDISuccess.js +0 -1
- package/dist/cjs/components/legal-consent/LegalConsentNode.js +0 -1
- package/dist/cjs/components/nfc-scan/BiometricSymbol.js +0 -1
- package/dist/cjs/components/nfc-scan/NfcChipGate.js +0 -1
- package/dist/cjs/components/nfc-scan/NfcFallbackSurvey.js +0 -1
- package/dist/cjs/components/nfc-scan/NfcOnboardingNotice.js +0 -1
- package/dist/cjs/components/nfc-scan/NfcScanNode.js +0 -1
- package/dist/cjs/components/nfc-scan/NfcSuccessAnimation.js +0 -1
- package/dist/cjs/components/nfc-scan/PuceCniSymbol.js +0 -1
- package/dist/cjs/components/selfie/SelfieConfirmation.js +0 -1
- package/dist/cjs/components/selfie/Video.css.js +0 -1
- package/dist/cjs/components/selfie/Video.js +2 -3
- package/dist/cjs/components/selfie/VideoFixes.css.js +0 -1
- package/dist/cjs/components/selfie/VideoResetStyles.js +0 -1
- package/dist/cjs/components/selfie/hooks/useLiveFrameCapture.js +0 -1
- package/dist/cjs/components/selfie/hooks/useVideoRecorderStyles.js +0 -1
- package/dist/cjs/components/selfie/selfie-flow/InstructionsSelfie.js +0 -1
- package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js +2 -3
- package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js +0 -1
- package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js +5 -2
- package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js +123 -14
- package/dist/cjs/components/selfie/utils/selfieCaptureUtils.js +0 -1
- package/dist/cjs/components/selfie/utils/unisseyStrings.js +0 -1
- package/dist/cjs/components/selfie/utils/videoElementStyles.js +0 -1
- package/dist/cjs/components/session/DocumentCheck.js +0 -1
- package/dist/cjs/components/session/EndFlow.js +15 -6
- package/dist/cjs/components/session/MobileRedirect.js +0 -1
- package/dist/cjs/components/session/PdfGeneration.js +0 -1
- package/dist/cjs/components/session/Selfie.js +1 -2
- package/dist/cjs/components/session/SessionContent.js +5 -4
- package/dist/cjs/components/session/SessionExpired.js +0 -1
- package/dist/cjs/components/session/StartSession.js +4 -30
- package/dist/cjs/components/session/UserInputForm/AddressFields.js +0 -1
- package/dist/cjs/components/session/UserInputForm/ContactFields.js +0 -1
- package/dist/cjs/components/session/UserInputForm/CustomFormFields.js +2 -11
- package/dist/cjs/components/session/UserInputForm/DatePickerField.js +0 -1
- package/dist/cjs/components/session/UserInputForm/IdentityFields.js +0 -1
- package/dist/cjs/components/session/UserInputForm/LegalEntityFields.js +0 -1
- package/dist/cjs/components/session/UserInputForm/LegalRepFields.js +0 -1
- package/dist/cjs/components/session/UserInputForm/NationalityField.js +0 -1
- package/dist/cjs/components/session/UserInputForm.js +4 -2
- package/dist/cjs/components/session/VideoWorkInProgress.js +0 -1
- package/dist/cjs/components/session/controleJdiPolicy.js +0 -1
- package/dist/cjs/components/session/endScreenIcons.js +0 -1
- package/dist/cjs/components/signature-electronic/DocusealSignature.js +0 -1
- package/dist/cjs/components/signature-electronic/SignatureElectronic.js +0 -1
- package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js +0 -1
- package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js +0 -1
- package/dist/cjs/components/start-flow/Start.js +6 -7
- package/dist/cjs/components/states/ErrorState.js +0 -1
- package/dist/cjs/components/states/LoadingState.js +0 -1
- package/dist/cjs/components/states/NoSessionIdState.js +0 -1
- package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js +35 -0
- package/dist/cjs/components/template/ConditionNodeHandler.js +0 -1
- package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +82 -39
- package/dist/cjs/components/template/TemplateNodeRenderer.js +8 -4
- package/dist/cjs/components/template/conditionNodePolicy.js +0 -1
- package/dist/cjs/components/ui/Body.js +0 -1
- package/dist/cjs/components/ui/Button.js +0 -1
- package/dist/cjs/components/ui/ButtonDesktop.js +0 -1
- package/dist/cjs/components/ui/Card.js +0 -1
- package/dist/cjs/components/ui/MobilePageLayout.js +0 -1
- package/dist/cjs/components/ui/PDFPreview.js +0 -1
- package/dist/cjs/components/ui/PageActions.js +0 -1
- package/dist/cjs/components/ui/Paper.js +0 -1
- package/dist/cjs/components/ui/PoweredBy.js +0 -1
- package/dist/cjs/components/ui/QRCodeDisplay.js +0 -1
- package/dist/cjs/components/ui/SelectComponent.js +0 -1
- package/dist/cjs/components/ui/Subtitle.js +0 -1
- package/dist/cjs/components/ui/Title.js +0 -1
- package/dist/cjs/config/env.js +0 -1
- package/dist/cjs/constants/userInputForm.js +0 -1
- package/dist/cjs/context/ConfigContext.js +0 -1
- package/dist/cjs/context/DocumentContext.js +0 -1
- package/dist/cjs/context/SessionContext.js +0 -1
- package/dist/cjs/hooks/useClientInfo.js +0 -1
- package/dist/cjs/hooks/useCountryOptions.js +0 -1
- package/dist/cjs/hooks/useI18n.js +0 -1
- package/dist/cjs/hooks/useIsMobile.js +0 -1
- package/dist/cjs/hooks/useNfcSseStatus.js +0 -1
- package/dist/cjs/hooks/useRouteCSS.js +0 -1
- package/dist/cjs/hooks/useSession.js +0 -1
- package/dist/cjs/hooks/useSessionData.js +10 -6
- package/dist/cjs/hooks/useStepCSS.js +0 -1
- package/dist/cjs/hooks/useStepNavigation.js +25 -6
- package/dist/cjs/hooks/useTemplateLoader.js +0 -1
- package/dist/cjs/hooks/useUserInputForm.js +65 -7
- package/dist/cjs/i18n/country/country.en.json.js +0 -1
- package/dist/cjs/i18n/country/country.fr.json.js +0 -1
- package/dist/cjs/i18n/country/country.iso2.en.json.js +0 -1
- package/dist/cjs/i18n/country/country.iso2.fr.json.js +0 -1
- package/dist/cjs/i18n/documents/documents.en.json.js +0 -1
- package/dist/cjs/i18n/documents/documents.fr.json.js +0 -1
- package/dist/cjs/i18n/en.json.js +28 -28
- package/dist/cjs/i18n/es.json.js +28 -28
- package/dist/cjs/i18n/fr.json.js +28 -28
- package/dist/cjs/i18n/index.js +0 -1
- package/dist/cjs/index.css.js +0 -1
- package/dist/cjs/index.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr.js +0 -1
- package/dist/cjs/node_modules/heic2any/dist/heic2any.js +0 -1
- package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.js +0 -1
- package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
- package/dist/cjs/node_modules/style-inject/dist/style-inject.es.js +0 -1
- package/dist/cjs/node_modules/tslib/tslib.es6.js +0 -1
- package/dist/cjs/providers/I18nProvider.js +0 -1
- package/dist/cjs/services/analysis.js +40 -27
- package/dist/cjs/services/api.js +0 -1
- package/dist/cjs/services/auditTrailService.js +0 -1
- package/dist/cjs/services/cameraService.js +0 -1
- package/dist/cjs/services/documentEdgeDetectionService.js +0 -1
- package/dist/cjs/services/documentTemplate.js +0 -1
- package/dist/cjs/services/iadService.js +29 -0
- package/dist/cjs/services/integrationService.js +0 -1
- package/dist/cjs/services/pollingService.js +0 -1
- package/dist/cjs/services/professionalImageQuality.js +0 -1
- package/dist/cjs/services/retryService.js +0 -1
- package/dist/cjs/services/sessionCredentials.js +0 -1
- package/dist/cjs/services/sessionMemoryStore.js +0 -1
- package/dist/cjs/services/sessionService.js +33 -7
- package/dist/cjs/services/utils.js +0 -1
- package/dist/cjs/types/session.js +0 -1
- package/dist/cjs/utils/analysisErrors.js +33 -13
- package/dist/cjs/utils/apiAnalysis.js +0 -1
- package/dist/cjs/utils/conditionEvaluator.js +0 -1
- package/dist/cjs/utils/countryFlags.js +0 -1
- package/dist/cjs/utils/cssLoader.js +0 -1
- package/dist/cjs/utils/customFieldIds.js +0 -1
- package/dist/cjs/utils/customFieldLocks.js +27 -0
- package/dist/cjs/utils/customFieldValidation.js +44 -2
- package/dist/cjs/utils/documentLabels.js +0 -1
- package/dist/cjs/utils/europeanCountries.js +0 -1
- package/dist/cjs/utils/fileConverter.js +0 -1
- package/dist/cjs/utils/imageConverter.js +0 -1
- package/dist/cjs/utils/imageProcessing.js +0 -1
- package/dist/cjs/utils/isMobileDevice.js +0 -1
- package/dist/cjs/utils/isoCountryCodes.js +0 -1
- package/dist/cjs/utils/jdiCodes.js +0 -1
- package/dist/cjs/utils/labelToKey.js +0 -1
- package/dist/cjs/utils/listFieldUtils.js +0 -1
- package/dist/cjs/utils/mimeTypes.js +0 -1
- package/dist/cjs/utils/navigation.js +0 -1
- package/dist/cjs/utils/renderInlineMarkdown.js +0 -1
- package/dist/cjs/utils/sessionStatus.js +27 -0
- package/dist/cjs/utils/userInputForm.js +0 -1
- package/dist/cjs/utils/utils.js +0 -1
- package/dist/cjs/utils/validationUtils.js +0 -1
- package/dist/esm/_virtual/_commonjsHelpers.js +0 -1
- package/dist/esm/_virtual/heic2any.js +0 -1
- package/dist/esm/_virtual/heic2any2.js +0 -1
- package/dist/esm/assets/Face Scan Square.svg.js +0 -1
- package/dist/esm/assets/Lightbulb.svg.js +0 -1
- package/dist/esm/assets/Monitor Camera.svg.js +0 -1
- package/dist/esm/assets/User Hands.svg.js +0 -1
- package/dist/esm/assets/before-document.png.js +0 -1
- package/dist/esm/assets/before-passport.png.js +0 -1
- package/dist/esm/assets/before-photo.png.js +0 -1
- package/dist/esm/assets/before-verso.png.js +0 -1
- package/dist/esm/assets/check.svg.js +0 -1
- package/dist/esm/assets/icons/shield_magic_link.svg.js +0 -1
- package/dist/esm/assets/selfietake.svg.js +0 -1
- package/dist/esm/components/DatakeenSession.js +0 -1
- package/dist/esm/components/document-collection/DocumentCollection.js +0 -1
- package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js +0 -1
- package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js +0 -1
- package/dist/esm/components/document-collection/DocumentCollectionSelection.js +0 -1
- package/dist/esm/components/document-collection/DocumentCollectionUpload.js +0 -1
- package/dist/esm/components/document-collection/DocumentError.js +5 -2
- package/dist/esm/components/document-collection/DocumentProcessing.js +14 -13
- package/dist/esm/components/document-collection/DocumentSuccess.js +0 -1
- package/dist/esm/components/document-video/DocumentVideoCapture.js +0 -1
- package/dist/esm/components/document-video/DocumentVideoConfirmation.js +0 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoFlow.js +0 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoInstructions.js +0 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js +9 -6
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoRecorder.js +0 -1
- package/dist/esm/components/icons/ElectronicIcon.js +0 -1
- package/dist/esm/components/icons/PoweredByIcon.js +0 -1
- package/dist/esm/components/icons/PreIntroIcon.js +0 -1
- package/dist/esm/components/icons/StartIcon.js +0 -1
- package/dist/esm/components/id-check/BeforePhoto.js +0 -1
- package/dist/esm/components/id-check/BeforeVersoPhoto.js +0 -1
- package/dist/esm/components/id-check/CameraError.js +0 -1
- package/dist/esm/components/id-check/CameraMask.js +0 -1
- package/dist/esm/components/id-check/OrientationToggle.js +0 -1
- package/dist/esm/components/id-check/Photo.js +0 -1
- package/dist/esm/components/id-check/PhotoConfirmation.js +0 -1
- package/dist/esm/components/id-check/PhotoPreview.js +0 -1
- package/dist/esm/components/jdi/JDDWorkInProgress.js +0 -1
- package/dist/esm/components/jdi/JDICountrySelection.js +0 -1
- package/dist/esm/components/jdi/JDIDocumentSelection.js +0 -1
- package/dist/esm/components/jdi/JDIDocumentUpload.js +0 -1
- package/dist/esm/components/jdi/JDIError.js +5 -2
- package/dist/esm/components/jdi/JDIPreIntroduction.js +0 -1
- package/dist/esm/components/jdi/JDIProcessing.js +16 -16
- package/dist/esm/components/jdi/JDISuccess.js +0 -1
- package/dist/esm/components/legal-consent/LegalConsentNode.js +0 -1
- package/dist/esm/components/nfc-scan/BiometricSymbol.js +0 -1
- package/dist/esm/components/nfc-scan/NfcChipGate.js +0 -1
- package/dist/esm/components/nfc-scan/NfcFallbackSurvey.js +0 -1
- package/dist/esm/components/nfc-scan/NfcOnboardingNotice.js +0 -1
- package/dist/esm/components/nfc-scan/NfcScanNode.js +0 -1
- package/dist/esm/components/nfc-scan/NfcSuccessAnimation.js +0 -1
- package/dist/esm/components/nfc-scan/PuceCniSymbol.js +0 -1
- package/dist/esm/components/selfie/SelfieConfirmation.js +0 -1
- package/dist/esm/components/selfie/Video.css.js +0 -1
- package/dist/esm/components/selfie/Video.js +2 -3
- package/dist/esm/components/selfie/VideoFixes.css.js +0 -1
- package/dist/esm/components/selfie/VideoResetStyles.js +0 -1
- package/dist/esm/components/selfie/hooks/useLiveFrameCapture.js +0 -1
- package/dist/esm/components/selfie/hooks/useVideoRecorderStyles.js +0 -1
- package/dist/esm/components/selfie/selfie-flow/InstructionsSelfie.js +0 -1
- package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js +2 -3
- package/dist/esm/components/selfie/selfie-flow/SelfiePreIntroduction.js +0 -1
- package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js +5 -2
- package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js +124 -15
- package/dist/esm/components/selfie/utils/selfieCaptureUtils.js +0 -1
- package/dist/esm/components/selfie/utils/unisseyStrings.js +0 -1
- package/dist/esm/components/selfie/utils/videoElementStyles.js +0 -1
- package/dist/esm/components/session/DocumentCheck.js +0 -1
- package/dist/esm/components/session/EndFlow.js +15 -6
- package/dist/esm/components/session/MobileRedirect.js +0 -1
- package/dist/esm/components/session/PdfGeneration.js +0 -1
- package/dist/esm/components/session/Selfie.js +1 -2
- package/dist/esm/components/session/SessionContent.js +5 -4
- package/dist/esm/components/session/SessionExpired.js +0 -1
- package/dist/esm/components/session/StartSession.js +5 -31
- package/dist/esm/components/session/UserInputForm/AddressFields.js +0 -1
- package/dist/esm/components/session/UserInputForm/ContactFields.js +0 -1
- package/dist/esm/components/session/UserInputForm/CustomFormFields.js +1 -10
- package/dist/esm/components/session/UserInputForm/DatePickerField.js +0 -1
- package/dist/esm/components/session/UserInputForm/IdentityFields.js +0 -1
- package/dist/esm/components/session/UserInputForm/LegalEntityFields.js +0 -1
- package/dist/esm/components/session/UserInputForm/LegalRepFields.js +0 -1
- package/dist/esm/components/session/UserInputForm/NationalityField.js +0 -1
- package/dist/esm/components/session/UserInputForm.js +4 -2
- package/dist/esm/components/session/VideoWorkInProgress.js +0 -1
- package/dist/esm/components/session/controleJdiPolicy.js +0 -1
- package/dist/esm/components/session/endScreenIcons.js +0 -1
- package/dist/esm/components/signature-electronic/DocusealSignature.js +0 -1
- package/dist/esm/components/signature-electronic/SignatureElectronic.js +0 -1
- package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js +0 -1
- package/dist/esm/components/signature-electronic/SignedDocumentPreview.js +0 -1
- package/dist/esm/components/start-flow/Start.js +6 -7
- package/dist/esm/components/states/ErrorState.js +0 -1
- package/dist/esm/components/states/LoadingState.js +0 -1
- package/dist/esm/components/states/NoSessionIdState.js +0 -1
- package/dist/esm/components/template/ComplementaryMandateNodeHandler.js +31 -0
- package/dist/esm/components/template/ConditionNodeHandler.js +0 -1
- package/dist/esm/components/template/ExternalVerificationNodeHandler.js +82 -39
- package/dist/esm/components/template/TemplateNodeRenderer.js +8 -4
- package/dist/esm/components/template/conditionNodePolicy.js +0 -1
- package/dist/esm/components/ui/Body.js +0 -1
- package/dist/esm/components/ui/Button.js +0 -1
- package/dist/esm/components/ui/ButtonDesktop.js +0 -1
- package/dist/esm/components/ui/Card.js +0 -1
- package/dist/esm/components/ui/MobilePageLayout.js +0 -1
- package/dist/esm/components/ui/PDFPreview.js +0 -1
- package/dist/esm/components/ui/PageActions.js +0 -1
- package/dist/esm/components/ui/Paper.js +0 -1
- package/dist/esm/components/ui/PoweredBy.js +0 -1
- package/dist/esm/components/ui/QRCodeDisplay.js +0 -1
- package/dist/esm/components/ui/SelectComponent.js +0 -1
- package/dist/esm/components/ui/Subtitle.js +0 -1
- package/dist/esm/components/ui/Title.js +0 -1
- package/dist/esm/config/env.js +0 -1
- package/dist/esm/constants/userInputForm.js +0 -1
- package/dist/esm/context/ConfigContext.js +0 -1
- package/dist/esm/context/DocumentContext.js +0 -1
- package/dist/esm/context/SessionContext.js +0 -1
- package/dist/esm/hooks/useClientInfo.js +0 -1
- package/dist/esm/hooks/useCountryOptions.js +0 -1
- package/dist/esm/hooks/useI18n.js +0 -1
- package/dist/esm/hooks/useIsMobile.js +0 -1
- package/dist/esm/hooks/useNfcSseStatus.js +0 -1
- package/dist/esm/hooks/useRouteCSS.js +0 -1
- package/dist/esm/hooks/useSession.js +0 -1
- package/dist/esm/hooks/useSessionData.js +10 -6
- package/dist/esm/hooks/useStepCSS.js +0 -1
- package/dist/esm/hooks/useStepNavigation.js +23 -4
- package/dist/esm/hooks/useTemplateLoader.js +0 -1
- package/dist/esm/hooks/useUserInputForm.js +66 -8
- package/dist/esm/i18n/country/country.en.json.js +0 -1
- package/dist/esm/i18n/country/country.fr.json.js +0 -1
- package/dist/esm/i18n/country/country.iso2.en.json.js +0 -1
- package/dist/esm/i18n/country/country.iso2.fr.json.js +0 -1
- package/dist/esm/i18n/documents/documents.en.json.js +0 -1
- package/dist/esm/i18n/documents/documents.fr.json.js +0 -1
- package/dist/esm/i18n/en.json.js +28 -28
- package/dist/esm/i18n/es.json.js +28 -28
- package/dist/esm/i18n/fr.json.js +28 -28
- package/dist/esm/i18n/index.js +0 -1
- package/dist/esm/index.css.js +0 -1
- package/dist/esm/index.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr.js +0 -1
- package/dist/esm/node_modules/heic2any/dist/heic2any.js +0 -1
- package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.js +0 -1
- package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
- package/dist/esm/node_modules/style-inject/dist/style-inject.es.js +0 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js +0 -1
- package/dist/esm/providers/I18nProvider.js +0 -1
- package/dist/esm/services/analysis.js +40 -27
- package/dist/esm/services/api.js +0 -1
- package/dist/esm/services/auditTrailService.js +0 -1
- package/dist/esm/services/cameraService.js +0 -1
- package/dist/esm/services/documentEdgeDetectionService.js +0 -1
- package/dist/esm/services/documentTemplate.js +0 -1
- package/dist/esm/services/iadService.js +27 -0
- package/dist/esm/services/integrationService.js +0 -1
- package/dist/esm/services/pollingService.js +0 -1
- package/dist/esm/services/professionalImageQuality.js +0 -1
- package/dist/esm/services/retryService.js +0 -1
- package/dist/esm/services/sessionCredentials.js +0 -1
- package/dist/esm/services/sessionMemoryStore.js +0 -1
- package/dist/esm/services/sessionService.js +33 -8
- package/dist/esm/services/utils.js +0 -1
- package/dist/esm/types/session.js +0 -1
- package/dist/esm/utils/analysisErrors.js +30 -13
- package/dist/esm/utils/apiAnalysis.js +0 -1
- package/dist/esm/utils/conditionEvaluator.js +0 -1
- package/dist/esm/utils/countryFlags.js +0 -1
- package/dist/esm/utils/cssLoader.js +0 -1
- package/dist/esm/utils/customFieldIds.js +0 -1
- package/dist/esm/utils/customFieldLocks.js +24 -0
- package/dist/esm/utils/customFieldValidation.js +44 -3
- package/dist/esm/utils/documentLabels.js +0 -1
- package/dist/esm/utils/europeanCountries.js +0 -1
- package/dist/esm/utils/fileConverter.js +0 -1
- package/dist/esm/utils/imageConverter.js +0 -1
- package/dist/esm/utils/imageProcessing.js +0 -1
- package/dist/esm/utils/isMobileDevice.js +0 -1
- package/dist/esm/utils/isoCountryCodes.js +0 -1
- package/dist/esm/utils/jdiCodes.js +0 -1
- package/dist/esm/utils/labelToKey.js +0 -1
- package/dist/esm/utils/listFieldUtils.js +0 -1
- package/dist/esm/utils/mimeTypes.js +0 -1
- package/dist/esm/utils/navigation.js +0 -1
- package/dist/esm/utils/renderInlineMarkdown.js +0 -1
- package/dist/esm/utils/sessionStatus.js +25 -0
- package/dist/esm/utils/userInputForm.js +0 -1
- package/dist/esm/utils/utils.js +0 -1
- package/dist/esm/utils/validationUtils.js +0 -1
- package/package.json +9 -2
- package/.gitlab/issue_templates/bug.md +0 -14
- package/.gitlab/issue_templates/feature.md +0 -11
- package/.gitlab/issue_templates/task.md +0 -11
- package/.gitlab/merge_request_templates/default.md +0 -15
- package/.gitlab/merge_request_templates/hotfix.md +0 -15
- package/.gitlab-ci.yml +0 -290
- package/CLAUDE.md +0 -233
- package/__mocks__/@unissey-web/sdk-react.js +0 -17
- package/__mocks__/fileMock.js +0 -1
- package/__mocks__/pdfjs-dist/legacy/build/pdf.js +0 -5
- package/__mocks__/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
- package/assets/logo.svg +0 -56
- package/axios.install.md +0 -2
- package/babel.config.js +0 -15
- package/dist/cjs/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/cjs/_virtual/heic2any.js.map +0 -1
- package/dist/cjs/_virtual/heic2any2.js.map +0 -1
- package/dist/cjs/assets/Face Scan Square.svg.js.map +0 -1
- package/dist/cjs/assets/Lightbulb.svg.js.map +0 -1
- package/dist/cjs/assets/Monitor Camera.svg.js.map +0 -1
- package/dist/cjs/assets/User Hands.svg.js.map +0 -1
- package/dist/cjs/assets/before-document.png.js.map +0 -1
- package/dist/cjs/assets/before-passport.png.js.map +0 -1
- package/dist/cjs/assets/before-photo.png.js.map +0 -1
- package/dist/cjs/assets/before-verso.png.js.map +0 -1
- package/dist/cjs/assets/check.svg.js.map +0 -1
- package/dist/cjs/assets/icons/shield_magic_link.svg.js.map +0 -1
- package/dist/cjs/assets/selfietake.svg.js.map +0 -1
- package/dist/cjs/components/DatakeenSession.js.map +0 -1
- package/dist/cjs/components/document-collection/DocumentCollection.js.map +0 -1
- package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js.map +0 -1
- package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js.map +0 -1
- package/dist/cjs/components/document-collection/DocumentCollectionSelection.js.map +0 -1
- package/dist/cjs/components/document-collection/DocumentCollectionUpload.js.map +0 -1
- package/dist/cjs/components/document-collection/DocumentError.js.map +0 -1
- package/dist/cjs/components/document-collection/DocumentProcessing.js.map +0 -1
- package/dist/cjs/components/document-collection/DocumentSuccess.js.map +0 -1
- package/dist/cjs/components/document-video/DocumentVideoCapture.js.map +0 -1
- package/dist/cjs/components/document-video/DocumentVideoConfirmation.js.map +0 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoFlow.js.map +0 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoInstructions.js.map +0 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +0 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoRecorder.js.map +0 -1
- package/dist/cjs/components/icons/ElectronicIcon.js.map +0 -1
- package/dist/cjs/components/icons/PoweredByIcon.js.map +0 -1
- package/dist/cjs/components/icons/PreIntroIcon.js.map +0 -1
- package/dist/cjs/components/icons/StartIcon.js.map +0 -1
- package/dist/cjs/components/id-check/BeforePhoto.js.map +0 -1
- package/dist/cjs/components/id-check/BeforeVersoPhoto.js.map +0 -1
- package/dist/cjs/components/id-check/CameraError.js.map +0 -1
- package/dist/cjs/components/id-check/CameraMask.js.map +0 -1
- package/dist/cjs/components/id-check/OrientationToggle.js.map +0 -1
- package/dist/cjs/components/id-check/Photo.js.map +0 -1
- package/dist/cjs/components/id-check/PhotoConfirmation.js.map +0 -1
- package/dist/cjs/components/id-check/PhotoPreview.js.map +0 -1
- package/dist/cjs/components/jdi/JDDWorkInProgress.js.map +0 -1
- package/dist/cjs/components/jdi/JDICountrySelection.js.map +0 -1
- package/dist/cjs/components/jdi/JDIDocumentSelection.js.map +0 -1
- package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +0 -1
- package/dist/cjs/components/jdi/JDIError.js.map +0 -1
- package/dist/cjs/components/jdi/JDIPreIntroduction.js.map +0 -1
- package/dist/cjs/components/jdi/JDIProcessing.js.map +0 -1
- package/dist/cjs/components/jdi/JDISuccess.js.map +0 -1
- package/dist/cjs/components/legal-consent/LegalConsentNode.js.map +0 -1
- package/dist/cjs/components/nfc-scan/BiometricSymbol.js.map +0 -1
- package/dist/cjs/components/nfc-scan/NfcChipGate.js.map +0 -1
- package/dist/cjs/components/nfc-scan/NfcFallbackSurvey.js.map +0 -1
- package/dist/cjs/components/nfc-scan/NfcOnboardingNotice.js.map +0 -1
- package/dist/cjs/components/nfc-scan/NfcScanNode.js.map +0 -1
- package/dist/cjs/components/nfc-scan/NfcSuccessAnimation.js.map +0 -1
- package/dist/cjs/components/nfc-scan/PuceCniSymbol.js.map +0 -1
- package/dist/cjs/components/selfie/SelfieConfirmation.js.map +0 -1
- package/dist/cjs/components/selfie/Video.css.js.map +0 -1
- package/dist/cjs/components/selfie/Video.js.map +0 -1
- package/dist/cjs/components/selfie/VideoFixes.css.js.map +0 -1
- package/dist/cjs/components/selfie/VideoResetStyles.js.map +0 -1
- package/dist/cjs/components/selfie/hooks/useLiveFrameCapture.js.map +0 -1
- package/dist/cjs/components/selfie/hooks/useVideoRecorderStyles.js.map +0 -1
- package/dist/cjs/components/selfie/selfie-flow/InstructionsSelfie.js.map +0 -1
- package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js.map +0 -1
- package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +0 -1
- package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js.map +0 -1
- package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js.map +0 -1
- package/dist/cjs/components/selfie/utils/selfieCaptureUtils.js.map +0 -1
- package/dist/cjs/components/selfie/utils/unisseyStrings.js.map +0 -1
- package/dist/cjs/components/selfie/utils/videoElementStyles.js.map +0 -1
- package/dist/cjs/components/session/DocumentCheck.js.map +0 -1
- package/dist/cjs/components/session/EndFlow.js.map +0 -1
- package/dist/cjs/components/session/MobileRedirect.js.map +0 -1
- package/dist/cjs/components/session/PdfGeneration.js.map +0 -1
- package/dist/cjs/components/session/Selfie.js.map +0 -1
- package/dist/cjs/components/session/SessionContent.js.map +0 -1
- package/dist/cjs/components/session/SessionExpired.js.map +0 -1
- package/dist/cjs/components/session/StartSession.js.map +0 -1
- package/dist/cjs/components/session/UserInputForm/AddressFields.js.map +0 -1
- package/dist/cjs/components/session/UserInputForm/ContactFields.js.map +0 -1
- package/dist/cjs/components/session/UserInputForm/CustomFormFields.js.map +0 -1
- package/dist/cjs/components/session/UserInputForm/DatePickerField.js.map +0 -1
- package/dist/cjs/components/session/UserInputForm/IdentityFields.js.map +0 -1
- package/dist/cjs/components/session/UserInputForm/LegalEntityFields.js.map +0 -1
- package/dist/cjs/components/session/UserInputForm/LegalRepFields.js.map +0 -1
- package/dist/cjs/components/session/UserInputForm/NationalityField.js.map +0 -1
- package/dist/cjs/components/session/UserInputForm.js.map +0 -1
- package/dist/cjs/components/session/VideoWorkInProgress.js.map +0 -1
- package/dist/cjs/components/session/controleJdiPolicy.js.map +0 -1
- package/dist/cjs/components/session/endScreenIcons.js.map +0 -1
- package/dist/cjs/components/signature-electronic/DocusealSignature.js.map +0 -1
- package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +0 -1
- package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js.map +0 -1
- package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js.map +0 -1
- package/dist/cjs/components/start-flow/CGU.js +0 -132
- package/dist/cjs/components/start-flow/CGU.js.map +0 -1
- package/dist/cjs/components/start-flow/Start.js.map +0 -1
- package/dist/cjs/components/states/ErrorState.js.map +0 -1
- package/dist/cjs/components/states/LoadingState.js.map +0 -1
- package/dist/cjs/components/states/NoSessionIdState.js.map +0 -1
- package/dist/cjs/components/template/ConditionNodeHandler.js.map +0 -1
- package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +0 -1
- package/dist/cjs/components/template/TemplateNodeRenderer.js.map +0 -1
- package/dist/cjs/components/template/conditionNodePolicy.js.map +0 -1
- package/dist/cjs/components/ui/Body.js.map +0 -1
- package/dist/cjs/components/ui/Button.js.map +0 -1
- package/dist/cjs/components/ui/ButtonDesktop.js.map +0 -1
- package/dist/cjs/components/ui/Card.js.map +0 -1
- package/dist/cjs/components/ui/LanguageSelector.js +0 -46
- package/dist/cjs/components/ui/LanguageSelector.js.map +0 -1
- package/dist/cjs/components/ui/MobilePageLayout.js.map +0 -1
- package/dist/cjs/components/ui/PDFPreview.js.map +0 -1
- package/dist/cjs/components/ui/PageActions.js.map +0 -1
- package/dist/cjs/components/ui/Paper.js.map +0 -1
- package/dist/cjs/components/ui/PoweredBy.js.map +0 -1
- package/dist/cjs/components/ui/QRCodeDisplay.js.map +0 -1
- package/dist/cjs/components/ui/SelectComponent.js.map +0 -1
- package/dist/cjs/components/ui/Subtitle.js.map +0 -1
- package/dist/cjs/components/ui/Title.js.map +0 -1
- package/dist/cjs/config/env.js.map +0 -1
- package/dist/cjs/constants/userInputForm.js.map +0 -1
- package/dist/cjs/context/ConfigContext.js.map +0 -1
- package/dist/cjs/context/DocumentContext.js.map +0 -1
- package/dist/cjs/context/SessionContext.js.map +0 -1
- package/dist/cjs/hooks/useClientInfo.js.map +0 -1
- package/dist/cjs/hooks/useCountryOptions.js.map +0 -1
- package/dist/cjs/hooks/useI18n.js.map +0 -1
- package/dist/cjs/hooks/useIsMobile.js.map +0 -1
- package/dist/cjs/hooks/useNfcSseStatus.js.map +0 -1
- package/dist/cjs/hooks/useRouteCSS.js.map +0 -1
- package/dist/cjs/hooks/useSession.js.map +0 -1
- package/dist/cjs/hooks/useSessionData.js.map +0 -1
- package/dist/cjs/hooks/useStepCSS.js.map +0 -1
- package/dist/cjs/hooks/useStepNavigation.js.map +0 -1
- package/dist/cjs/hooks/useTemplateLoader.js.map +0 -1
- package/dist/cjs/hooks/useUserInputForm.js.map +0 -1
- package/dist/cjs/i18n/country/country.en.json.js.map +0 -1
- package/dist/cjs/i18n/country/country.fr.json.js.map +0 -1
- package/dist/cjs/i18n/country/country.iso2.en.json.js.map +0 -1
- package/dist/cjs/i18n/country/country.iso2.fr.json.js.map +0 -1
- package/dist/cjs/i18n/documents/documents.en.json.js.map +0 -1
- package/dist/cjs/i18n/documents/documents.fr.json.js.map +0 -1
- package/dist/cjs/i18n/en.json.js.map +0 -1
- package/dist/cjs/i18n/es.json.js.map +0 -1
- package/dist/cjs/i18n/fr.json.js.map +0 -1
- package/dist/cjs/i18n/index.js.map +0 -1
- package/dist/cjs/index.css.js.map +0 -1
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/en-US.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js.map +0 -1
- package/dist/cjs/node_modules/date-fns/locale/fr.js.map +0 -1
- package/dist/cjs/node_modules/heic2any/dist/heic2any.js.map +0 -1
- package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.js.map +0 -1
- package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.worker.js.map +0 -1
- package/dist/cjs/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
- package/dist/cjs/node_modules/tslib/tslib.es6.js.map +0 -1
- package/dist/cjs/providers/I18nProvider.js.map +0 -1
- package/dist/cjs/services/analysis.js.map +0 -1
- package/dist/cjs/services/api.js.map +0 -1
- package/dist/cjs/services/auditTrailService.js.map +0 -1
- package/dist/cjs/services/cameraService.js.map +0 -1
- package/dist/cjs/services/documentEdgeDetectionService.js.map +0 -1
- package/dist/cjs/services/documentTemplate.js.map +0 -1
- package/dist/cjs/services/integrationService.js.map +0 -1
- package/dist/cjs/services/pollingService.js.map +0 -1
- package/dist/cjs/services/professionalImageQuality.js.map +0 -1
- package/dist/cjs/services/retryService.js.map +0 -1
- package/dist/cjs/services/sessionCredentials.js.map +0 -1
- package/dist/cjs/services/sessionMemoryStore.js.map +0 -1
- package/dist/cjs/services/sessionService.js.map +0 -1
- package/dist/cjs/services/utils.js.map +0 -1
- package/dist/cjs/types/session.js.map +0 -1
- package/dist/cjs/utils/analysisErrors.js.map +0 -1
- package/dist/cjs/utils/apiAnalysis.js.map +0 -1
- package/dist/cjs/utils/conditionEvaluator.js.map +0 -1
- package/dist/cjs/utils/countryFlags.js.map +0 -1
- package/dist/cjs/utils/cssLoader.js.map +0 -1
- package/dist/cjs/utils/customFieldIds.js.map +0 -1
- package/dist/cjs/utils/customFieldValidation.js.map +0 -1
- package/dist/cjs/utils/documentLabels.js.map +0 -1
- package/dist/cjs/utils/europeanCountries.js.map +0 -1
- package/dist/cjs/utils/fileConverter.js.map +0 -1
- package/dist/cjs/utils/imageConverter.js.map +0 -1
- package/dist/cjs/utils/imageProcessing.js.map +0 -1
- package/dist/cjs/utils/isMobileDevice.js.map +0 -1
- package/dist/cjs/utils/isoCountryCodes.js.map +0 -1
- package/dist/cjs/utils/jdiCodes.js.map +0 -1
- package/dist/cjs/utils/labelToKey.js.map +0 -1
- package/dist/cjs/utils/languageFlags.js +0 -46
- package/dist/cjs/utils/languageFlags.js.map +0 -1
- package/dist/cjs/utils/listFieldUtils.js.map +0 -1
- package/dist/cjs/utils/mimeTypes.js.map +0 -1
- package/dist/cjs/utils/navigation.js.map +0 -1
- package/dist/cjs/utils/renderInlineMarkdown.js.map +0 -1
- package/dist/cjs/utils/userInputForm.js.map +0 -1
- package/dist/cjs/utils/utils.js.map +0 -1
- package/dist/cjs/utils/validationUtils.js.map +0 -1
- package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/esm/_virtual/heic2any.js.map +0 -1
- package/dist/esm/_virtual/heic2any2.js.map +0 -1
- package/dist/esm/assets/Face Scan Square.svg.js.map +0 -1
- package/dist/esm/assets/Lightbulb.svg.js.map +0 -1
- package/dist/esm/assets/Monitor Camera.svg.js.map +0 -1
- package/dist/esm/assets/User Hands.svg.js.map +0 -1
- package/dist/esm/assets/before-document.png.js.map +0 -1
- package/dist/esm/assets/before-passport.png.js.map +0 -1
- package/dist/esm/assets/before-photo.png.js.map +0 -1
- package/dist/esm/assets/before-verso.png.js.map +0 -1
- package/dist/esm/assets/check.svg.js.map +0 -1
- package/dist/esm/assets/icons/shield_magic_link.svg.js.map +0 -1
- package/dist/esm/assets/selfietake.svg.js.map +0 -1
- package/dist/esm/components/DatakeenSession.js.map +0 -1
- package/dist/esm/components/document-collection/DocumentCollection.js.map +0 -1
- package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js.map +0 -1
- package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js.map +0 -1
- package/dist/esm/components/document-collection/DocumentCollectionSelection.js.map +0 -1
- package/dist/esm/components/document-collection/DocumentCollectionUpload.js.map +0 -1
- package/dist/esm/components/document-collection/DocumentError.js.map +0 -1
- package/dist/esm/components/document-collection/DocumentProcessing.js.map +0 -1
- package/dist/esm/components/document-collection/DocumentSuccess.js.map +0 -1
- package/dist/esm/components/document-video/DocumentVideoCapture.js.map +0 -1
- package/dist/esm/components/document-video/DocumentVideoConfirmation.js.map +0 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoFlow.js.map +0 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoInstructions.js.map +0 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +0 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoRecorder.js.map +0 -1
- package/dist/esm/components/icons/ElectronicIcon.js.map +0 -1
- package/dist/esm/components/icons/PoweredByIcon.js.map +0 -1
- package/dist/esm/components/icons/PreIntroIcon.js.map +0 -1
- package/dist/esm/components/icons/StartIcon.js.map +0 -1
- package/dist/esm/components/id-check/BeforePhoto.js.map +0 -1
- package/dist/esm/components/id-check/BeforeVersoPhoto.js.map +0 -1
- package/dist/esm/components/id-check/CameraError.js.map +0 -1
- package/dist/esm/components/id-check/CameraMask.js.map +0 -1
- package/dist/esm/components/id-check/OrientationToggle.js.map +0 -1
- package/dist/esm/components/id-check/Photo.js.map +0 -1
- package/dist/esm/components/id-check/PhotoConfirmation.js.map +0 -1
- package/dist/esm/components/id-check/PhotoPreview.js.map +0 -1
- package/dist/esm/components/jdi/JDDWorkInProgress.js.map +0 -1
- package/dist/esm/components/jdi/JDICountrySelection.js.map +0 -1
- package/dist/esm/components/jdi/JDIDocumentSelection.js.map +0 -1
- package/dist/esm/components/jdi/JDIDocumentUpload.js.map +0 -1
- package/dist/esm/components/jdi/JDIError.js.map +0 -1
- package/dist/esm/components/jdi/JDIPreIntroduction.js.map +0 -1
- package/dist/esm/components/jdi/JDIProcessing.js.map +0 -1
- package/dist/esm/components/jdi/JDISuccess.js.map +0 -1
- package/dist/esm/components/legal-consent/LegalConsentNode.js.map +0 -1
- package/dist/esm/components/nfc-scan/BiometricSymbol.js.map +0 -1
- package/dist/esm/components/nfc-scan/NfcChipGate.js.map +0 -1
- package/dist/esm/components/nfc-scan/NfcFallbackSurvey.js.map +0 -1
- package/dist/esm/components/nfc-scan/NfcOnboardingNotice.js.map +0 -1
- package/dist/esm/components/nfc-scan/NfcScanNode.js.map +0 -1
- package/dist/esm/components/nfc-scan/NfcSuccessAnimation.js.map +0 -1
- package/dist/esm/components/nfc-scan/PuceCniSymbol.js.map +0 -1
- package/dist/esm/components/selfie/SelfieConfirmation.js.map +0 -1
- package/dist/esm/components/selfie/Video.css.js.map +0 -1
- package/dist/esm/components/selfie/Video.js.map +0 -1
- package/dist/esm/components/selfie/VideoFixes.css.js.map +0 -1
- package/dist/esm/components/selfie/VideoResetStyles.js.map +0 -1
- package/dist/esm/components/selfie/hooks/useLiveFrameCapture.js.map +0 -1
- package/dist/esm/components/selfie/hooks/useVideoRecorderStyles.js.map +0 -1
- package/dist/esm/components/selfie/selfie-flow/InstructionsSelfie.js.map +0 -1
- package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js.map +0 -1
- package/dist/esm/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +0 -1
- package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js.map +0 -1
- package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js.map +0 -1
- package/dist/esm/components/selfie/utils/selfieCaptureUtils.js.map +0 -1
- package/dist/esm/components/selfie/utils/unisseyStrings.js.map +0 -1
- package/dist/esm/components/selfie/utils/videoElementStyles.js.map +0 -1
- package/dist/esm/components/session/DocumentCheck.js.map +0 -1
- package/dist/esm/components/session/EndFlow.js.map +0 -1
- package/dist/esm/components/session/MobileRedirect.js.map +0 -1
- package/dist/esm/components/session/PdfGeneration.js.map +0 -1
- package/dist/esm/components/session/Selfie.js.map +0 -1
- package/dist/esm/components/session/SessionContent.js.map +0 -1
- package/dist/esm/components/session/SessionExpired.js.map +0 -1
- package/dist/esm/components/session/StartSession.js.map +0 -1
- package/dist/esm/components/session/UserInputForm/AddressFields.js.map +0 -1
- package/dist/esm/components/session/UserInputForm/ContactFields.js.map +0 -1
- package/dist/esm/components/session/UserInputForm/CustomFormFields.js.map +0 -1
- package/dist/esm/components/session/UserInputForm/DatePickerField.js.map +0 -1
- package/dist/esm/components/session/UserInputForm/IdentityFields.js.map +0 -1
- package/dist/esm/components/session/UserInputForm/LegalEntityFields.js.map +0 -1
- package/dist/esm/components/session/UserInputForm/LegalRepFields.js.map +0 -1
- package/dist/esm/components/session/UserInputForm/NationalityField.js.map +0 -1
- package/dist/esm/components/session/UserInputForm.js.map +0 -1
- package/dist/esm/components/session/VideoWorkInProgress.js.map +0 -1
- package/dist/esm/components/session/controleJdiPolicy.js.map +0 -1
- package/dist/esm/components/session/endScreenIcons.js.map +0 -1
- package/dist/esm/components/signature-electronic/DocusealSignature.js.map +0 -1
- package/dist/esm/components/signature-electronic/SignatureElectronic.js.map +0 -1
- package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js.map +0 -1
- package/dist/esm/components/signature-electronic/SignedDocumentPreview.js.map +0 -1
- package/dist/esm/components/start-flow/CGU.js +0 -108
- package/dist/esm/components/start-flow/CGU.js.map +0 -1
- package/dist/esm/components/start-flow/Start.js.map +0 -1
- package/dist/esm/components/states/ErrorState.js.map +0 -1
- package/dist/esm/components/states/LoadingState.js.map +0 -1
- package/dist/esm/components/states/NoSessionIdState.js.map +0 -1
- package/dist/esm/components/template/ConditionNodeHandler.js.map +0 -1
- package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +0 -1
- package/dist/esm/components/template/TemplateNodeRenderer.js.map +0 -1
- package/dist/esm/components/template/conditionNodePolicy.js.map +0 -1
- package/dist/esm/components/ui/Body.js.map +0 -1
- package/dist/esm/components/ui/Button.js.map +0 -1
- package/dist/esm/components/ui/ButtonDesktop.js.map +0 -1
- package/dist/esm/components/ui/Card.js.map +0 -1
- package/dist/esm/components/ui/LanguageSelector.js +0 -42
- package/dist/esm/components/ui/LanguageSelector.js.map +0 -1
- package/dist/esm/components/ui/MobilePageLayout.js.map +0 -1
- package/dist/esm/components/ui/PDFPreview.js.map +0 -1
- package/dist/esm/components/ui/PageActions.js.map +0 -1
- package/dist/esm/components/ui/Paper.js.map +0 -1
- package/dist/esm/components/ui/PoweredBy.js.map +0 -1
- package/dist/esm/components/ui/QRCodeDisplay.js.map +0 -1
- package/dist/esm/components/ui/SelectComponent.js.map +0 -1
- package/dist/esm/components/ui/Subtitle.js.map +0 -1
- package/dist/esm/components/ui/Title.js.map +0 -1
- package/dist/esm/config/env.js.map +0 -1
- package/dist/esm/constants/userInputForm.js.map +0 -1
- package/dist/esm/context/ConfigContext.js.map +0 -1
- package/dist/esm/context/DocumentContext.js.map +0 -1
- package/dist/esm/context/SessionContext.js.map +0 -1
- package/dist/esm/hooks/useClientInfo.js.map +0 -1
- package/dist/esm/hooks/useCountryOptions.js.map +0 -1
- package/dist/esm/hooks/useI18n.js.map +0 -1
- package/dist/esm/hooks/useIsMobile.js.map +0 -1
- package/dist/esm/hooks/useNfcSseStatus.js.map +0 -1
- package/dist/esm/hooks/useRouteCSS.js.map +0 -1
- package/dist/esm/hooks/useSession.js.map +0 -1
- package/dist/esm/hooks/useSessionData.js.map +0 -1
- package/dist/esm/hooks/useStepCSS.js.map +0 -1
- package/dist/esm/hooks/useStepNavigation.js.map +0 -1
- package/dist/esm/hooks/useTemplateLoader.js.map +0 -1
- package/dist/esm/hooks/useUserInputForm.js.map +0 -1
- package/dist/esm/i18n/country/country.en.json.js.map +0 -1
- package/dist/esm/i18n/country/country.fr.json.js.map +0 -1
- package/dist/esm/i18n/country/country.iso2.en.json.js.map +0 -1
- package/dist/esm/i18n/country/country.iso2.fr.json.js.map +0 -1
- package/dist/esm/i18n/documents/documents.en.json.js.map +0 -1
- package/dist/esm/i18n/documents/documents.fr.json.js.map +0 -1
- package/dist/esm/i18n/en.json.js.map +0 -1
- package/dist/esm/i18n/es.json.js.map +0 -1
- package/dist/esm/i18n/fr.json.js.map +0 -1
- package/dist/esm/i18n/index.js.map +0 -1
- package/dist/esm/index.css.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/en-US.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js.map +0 -1
- package/dist/esm/node_modules/date-fns/locale/fr.js.map +0 -1
- package/dist/esm/node_modules/heic2any/dist/heic2any.js.map +0 -1
- package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.js.map +0 -1
- package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.worker.js.map +0 -1
- package/dist/esm/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
- package/dist/esm/node_modules/tslib/tslib.es6.js.map +0 -1
- package/dist/esm/providers/I18nProvider.js.map +0 -1
- package/dist/esm/services/analysis.js.map +0 -1
- package/dist/esm/services/api.js.map +0 -1
- package/dist/esm/services/auditTrailService.js.map +0 -1
- package/dist/esm/services/cameraService.js.map +0 -1
- package/dist/esm/services/documentEdgeDetectionService.js.map +0 -1
- package/dist/esm/services/documentTemplate.js.map +0 -1
- package/dist/esm/services/integrationService.js.map +0 -1
- package/dist/esm/services/pollingService.js.map +0 -1
- package/dist/esm/services/professionalImageQuality.js.map +0 -1
- package/dist/esm/services/retryService.js.map +0 -1
- package/dist/esm/services/sessionCredentials.js.map +0 -1
- package/dist/esm/services/sessionMemoryStore.js.map +0 -1
- package/dist/esm/services/sessionService.js.map +0 -1
- package/dist/esm/services/utils.js.map +0 -1
- package/dist/esm/types/session.js.map +0 -1
- package/dist/esm/utils/analysisErrors.js.map +0 -1
- package/dist/esm/utils/apiAnalysis.js.map +0 -1
- package/dist/esm/utils/conditionEvaluator.js.map +0 -1
- package/dist/esm/utils/countryFlags.js.map +0 -1
- package/dist/esm/utils/cssLoader.js.map +0 -1
- package/dist/esm/utils/customFieldIds.js.map +0 -1
- package/dist/esm/utils/customFieldValidation.js.map +0 -1
- package/dist/esm/utils/documentLabels.js.map +0 -1
- package/dist/esm/utils/europeanCountries.js.map +0 -1
- package/dist/esm/utils/fileConverter.js.map +0 -1
- package/dist/esm/utils/imageConverter.js.map +0 -1
- package/dist/esm/utils/imageProcessing.js.map +0 -1
- package/dist/esm/utils/isMobileDevice.js.map +0 -1
- package/dist/esm/utils/isoCountryCodes.js.map +0 -1
- package/dist/esm/utils/jdiCodes.js.map +0 -1
- package/dist/esm/utils/labelToKey.js.map +0 -1
- package/dist/esm/utils/languageFlags.js +0 -42
- package/dist/esm/utils/languageFlags.js.map +0 -1
- package/dist/esm/utils/listFieldUtils.js.map +0 -1
- package/dist/esm/utils/mimeTypes.js.map +0 -1
- package/dist/esm/utils/navigation.js.map +0 -1
- package/dist/esm/utils/renderInlineMarkdown.js.map +0 -1
- package/dist/esm/utils/userInputForm.js.map +0 -1
- package/dist/esm/utils/utils.js.map +0 -1
- package/dist/esm/utils/validationUtils.js.map +0 -1
- package/docs/GITLAB_BADGES_SETUP.md +0 -317
- package/docs/JOURNEY_NODE_BUILDER.md +0 -198
- package/docs/POLLING_SYSTEM.md +0 -695
- package/docs/README.md +0 -254
- package/docs/SESSION_TOKEN_MIGRATION.md +0 -52
- package/docs/condition-node.md +0 -651
- package/docs/configuration.md +0 -113
- package/docs/dynamic-configuration.md +0 -97
- package/docs/environment.md +0 -27
- package/docs/migration-guide.md +0 -120
- package/docs/multi-runs.md +0 -104
- package/docs/navigation-history.md +0 -155
- package/docs/sdk_integration_guide.md +0 -58
- package/eslint.config.js +0 -13
- package/examples/analysis-progress-example.tsx +0 -220
- package/examples/sdk-configuration.ts +0 -187
- package/examples/test-updated-urls.ts +0 -162
- package/examples/usage-example.tsx +0 -49
- package/jest.config.js +0 -32
- package/postcss.config.js +0 -6
- package/renovate.json +0 -242
- package/rollup.asset-url-plugin.js +0 -38
- package/rollup.dev.config.js +0 -65
- package/setupTests.js +0 -41
- package/tailwind.config.js +0 -11
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JDIDocumentSelection.js","sources":["../../../../../src/components/jdi/JDIDocumentSelection.tsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Select } from \"../ui/SelectComponent\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { AcceptedCountry } from \"../../types/session\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport NfcOnboardingNotice from \"../nfc-scan/NfcOnboardingNotice\";\n\nconst DOCUMENT_KEYS: Array<{\n key: keyof AcceptedCountry[\"documents\"];\n value: string;\n translationKey: string;\n fallbackLabel: string;\n}> = [\n {\n key: \"passport\",\n value: \"passport\",\n translationKey: \"documentTypes.Passport\",\n fallbackLabel: \"Passeport\",\n },\n {\n key: \"idCard\",\n value: \"idCard\",\n translationKey: \"documentTypes.IdCard\",\n fallbackLabel: \"Carte nationale d'identité\",\n },\n {\n key: \"driverLicense\",\n value: \"driverLicense\",\n translationKey: \"documentTypes.Driving_license\",\n fallbackLabel: \"Permis de conduire\",\n },\n {\n key: \"residencePermit\",\n value: \"residencePermit\",\n translationKey: \"documentTypes.Residence_permit\",\n fallbackLabel: \"Titre de séjour\",\n },\n {\n key: \"pinkDriverLicense\",\n value: \"pinkDriverLicense\",\n translationKey: \"documentTypes.Pink_driving_license\",\n fallbackLabel: \"Permis de conduire rose (ancien format)\",\n },\n ];\n\ninterface JDIDocumentSelectionProps {\n onDocumentSelect: (documentType: string) => void;\n onBack?: () => void;\n documentTypeId?: string; // ID du type de document (jdd, income-proof, etc.)\n sessionId?: string; // Session ID pour récupérer les options stockées\n chosenCountry?: AcceptedCountry; // Pays choisi par l'utilisateur\n documentSelectionTitle?: string;\n documentSelectionDescription?: string;\n nfcEnabled?: boolean; // Affiche l'onboarding NFC quand le parcours utilise la lecture sans contact\n}\n\nconst JDIDocumentSelection = ({\n onDocumentSelect,\n onBack,\n documentTypeId,\n sessionId,\n chosenCountry,\n documentSelectionTitle,\n documentSelectionDescription,\n nfcEnabled = false,\n}: JDIDocumentSelectionProps) => {\n const [selectedDocument, setSelectedDocument] = useState<string>(\"\");\n const [error, setError] = useState<string>(\"\");\n const [documentOptions, setDocumentOptions] = useState<\n { value: string; label: string }[]\n >([]);\n\n const { t } = useI18n();\n\n // Récupérer les options de documents spécifiques à la session\n useEffect(() => {\n console.log(\"Retrieving document options for session:\", sessionId);\n console.log(\"Chosen country:\", chosenCountry);\n if (chosenCountry?.documents) {\n const options = DOCUMENT_KEYS.filter(({ key }) => {\n const docs = chosenCountry.documents[key];\n return Array.isArray(docs) && docs.length > 0;\n }).map(({ value, translationKey, fallbackLabel }) => ({\n value,\n label: t(translationKey, fallbackLabel),\n }));\n console.log(\"Available document options:\", options);\n setDocumentOptions(options);\n } else {\n setDocumentOptions([]);\n }\n }, []);\n\n // SKIPPED if only one option, select it by default and skip to next step\n // useEffect(() => {\n // if (documentOptions.length === 1) {\n // setSelectedDocument(documentOptions[0].value);\n // setError(\"\");\n // onDocumentSelect(documentOptions[0].value);\n // }\n // }, [documentOptions, onDocumentSelect]);\n\n const handleContinue = () => {\n if (!selectedDocument) {\n setError(t(\"jdi.document_selection.error_select_document\"));\n return;\n }\n setError(\"\");\n\n onDocumentSelect(selectedDocument);\n };\n\n // Déterminer le titre en fonction du type de document\n const getTitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.title_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.title_income_proof\");\n default:\n return t(\"jdi.document_selection.title_identity\");\n }\n };\n\n const getSubtitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.subtitle_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.subtitle_income_proof\");\n default:\n return nfcEnabled\n ? t(\"jdi.document_selection.subtitle_identity_nfc\")\n : t(\"jdi.document_selection.subtitle_identity\");\n }\n };\n\n const getLabel = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.label_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.label_income_proof\");\n default:\n return t(\"jdi.document_selection.label_identity\");\n }\n };\n\n const getPlaceholder = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.placeholder_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.placeholder_income_proof\");\n default:\n return t(\"jdi.document_selection.placeholder_identity\");\n }\n };\n\n const getInstructions = () => {\n // Identity documents\n switch (selectedDocument) {\n case \"idCard\":\n return [\n t(\"jdi.document_selection.instructions.idCard.recto_verso\"),\n t(\"jdi.document_selection.instructions.idCard.readable\"),\n t(\"jdi.document_selection.instructions.idCard.valid\"),\n ];\n case \"passport\":\n return [\n t(\"jdi.document_selection.instructions.passport.photo_page\"),\n t(\"jdi.document_selection.instructions.passport.valid\"),\n t(\"jdi.document_selection.instructions.passport.readable\"),\n ];\n case \"driverLicense\":\n return [\n t(\"jdi.document_selection.instructions.driverLicense.recto_verso\"),\n t(\"jdi.document_selection.instructions.driverLicense.not_expired\"),\n t(\"jdi.document_selection.instructions.driverLicense.all_visible\"),\n ];\n case \"pinkDriverLicense\":\n return [\n t(\n \"jdi.document_selection.instructions.pinkDriverLicense.recto_verso\",\n \"Assurez-vous que le document soit visible\",\n ),\n t(\n \"jdi.document_selection.instructions.pinkDriverLicense.not_expired\",\n \"Vérifiez que le permis n'est pas expiré\",\n ),\n t(\n \"jdi.document_selection.instructions.pinkDriverLicense.all_visible\",\n \"Toutes les informations doivent être lisibles\",\n ),\n ];\n case \"residencePermit\":\n return [\n t(\"jdi.document_selection.instructions.residencePermit.recto_verso\"),\n t(\"jdi.document_selection.instructions.residencePermit.valid\"),\n t(\"jdi.document_selection.instructions.residencePermit.readable\"),\n ];\n default:\n return [\n t(\"jdi.document_selection.instructions.default.valid\"),\n t(\"jdi.document_selection.instructions.default.readable\"),\n ];\n }\n };\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinue} disabled={!selectedDocument}>\n {t(\"jdi.document_selection.continue\")}\n </Button>\n }\n secondary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.document_selection.back\")}\n </Button>\n ) : undefined}\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {documentSelectionTitle || getTitle()}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed whitespace-pre-line\">\n {documentSelectionDescription || getSubtitle()}\n </Subtitle>\n </div>\n\n {/* Document selection */}\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {getLabel()} *\n </label>\n <Select\n options={documentOptions}\n value={selectedDocument}\n onValueChange={(value) => {\n setSelectedDocument(value);\n setError(\"\");\n }}\n placeholder={getPlaceholder()}\n />\n {error && (\n <p className=\"mt-1 text-sm text-red-600 flex items-center\">\n <span className=\"mr-1\">⚠</span>\n {error}\n </p>\n )}\n </div>\n\n {/* Information about selected document — masqué en NFC (les instructions\n de téléversement ne s'appliquent pas, l'onboarding NFC les remplace) */}\n {selectedDocument && !nfcEnabled && (\n <div className=\"bg-gray-50 border border-gray-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-gray-900 mb-2\">\n {t(\"jdi.document_selection.info_title\")}\n </h3>\n <div className=\"text-sm text-gray-700 space-y-1\">\n {getInstructions().map((instruction, index) => (\n <p key={index}>{instruction}</p>\n ))}\n </div>\n </div>\n )}\n\n {/* NFC onboarding — affiché uniquement quand le parcours utilise la lecture sans contact */}\n {nfcEnabled && <NfcOnboardingNotice />}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIDocumentSelection;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JDIDocumentUpload.js","sources":["../../../../../src/components/jdi/JDIDocumentUpload.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from \"react\";\n\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Card } from \"../ui/Card\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport {\n convertFileToSupportedFormat,\n fileToBase64,\n isPDF,\n isValidFileType,\n isValidFileSize,\n isValidBase64Data,\n} from \"../../utils/fileConverter\";\nimport { requiresTwoSides } from \"../../utils/documentLabels\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport {\n logDocumentLoaded,\n logDocumentsValidated,\n} from \"../../services/auditTrailService\";\n\ninterface JDIDocumentUploadProps {\n documentType: string;\n onUpload: (files: onUploadFiles) => void;\n onBack?: () => void;\n documentTypeId?: string; // Pour identifier des types spécifiques comme jdd ou income-proof\n documentLabel?: string; // Le label lisible du document sélectionné (ex: \"Carte nationale d'identité\")\n initialFront?: string | null; // Base64 du recto déjà déposé (ex: après erreur 2.5)\n initialBack?: string | null; // Base64 du verso déjà déposé (ex: après erreur 2.5)\n sessionId?: string;\n}\n\nconst JDIDocumentUpload = ({\n documentType,\n onUpload,\n onBack,\n documentTypeId,\n documentLabel,\n initialFront = null,\n initialBack = null,\n sessionId,\n}: JDIDocumentUploadProps) => {\n const { t } = useI18n();\n\n // Helper functions for conditional text\n const getDropZoneText = () => {\n return t(\"jdi.document_upload.drop_zone\", {\n document: t(\"documentTypes.\" + documentType),\n });\n };\n\n const getUploadInstruction = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_upload.upload_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_upload.upload_income_proof\");\n default:\n return t(\"jdi.document_upload.upload_identity\", {\n document: t(\"documentTypes.\" + documentType),\n });\n }\n };\n\n const getValidateButtonText = () => {\n if (isUploading) {\n return t(\"jdi.document_upload.uploading\");\n }\n return documentTypeId === \"jdd\" || documentTypeId === \"income-proof\"\n ? t(\"jdi.document_upload.validate_single\")\n : t(\"jdi.document_upload.validate_multiple\");\n };\n // Ajout de logs pour le débogage\n useEffect(() => {\n // Vérifier si le document type est valide\n if (!documentType) {\n console.error(\"JDIDocumentUpload: documentType is missing or invalid\", {\n documentType,\n documentTypeId,\n });\n }\n }, [documentType, documentTypeId, documentLabel]);\n\n // Store File objects instead of base64 strings\n // initialFront/initialBack permettent de pré-remplir en cas de retry (ex: erreur 2.5)\n const [frontFile, setFrontFile] = useState<File | null>(null);\n const [backFile, setBackFile] = useState<File | null>(null);\n const [frontPreview, setFrontPreview] = useState<string | null>(initialFront ?? null);\n const [backPreview, setBackPreview] = useState<string | null>(initialBack ?? null);\n // Indique que le recto/verso vient d'un dépôt précédent (pas un File local)\n const [isFrontFromInitial, setIsFrontFromInitial] = useState<boolean>(!!initialFront);\n const [isBackFromInitial, setIsBackFromInitial] = useState<boolean>(!!initialBack);\n const [isUploading, setIsUploading] = useState(false);\n const [error, setError] = useState<string>(\"\");\n const [isDragging, setIsDragging] = useState(false);\n\n const frontInputRef = useRef<HTMLInputElement>(null);\n const multipleInputRef = useRef<HTMLInputElement>(null);\n const dropZoneRef = useRef<HTMLDivElement>(null);\n const twoSidesRequired = requiresTwoSides(documentType);\n\n // Nouvelle fonction pour gérer la sélection multiple de fichiers\n const handleMultipleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const files = event.target.files;\n if (!files) return;\n\n // Vérifier le nombre de fichiers - maximum 2 fichiers\n if (files.length > 2) {\n setError(t(\"jdi.document_upload.errors.max_files\"));\n return;\n } else if (files.length === 0) {\n setError(t(\"jdi.document_upload.errors.min_files\"));\n return;\n }\n\n setError(\"\");\n setFrontFile(null);\n setBackFile(null);\n setFrontPreview(null);\n setBackPreview(null);\n\n // Traiter chaque fichier\n for (let index = 0; index < files.length; index++) {\n let currentFile = files[index];\n\n try {\n currentFile = await convertFileToSupportedFormat(currentFile);\n } catch (conversionError) {\n console.error(\n \"handleMultipleFileChange: HEIC conversion failed\",\n conversionError,\n );\n setError(\n conversionError instanceof Error\n ? conversionError.message\n : t(\"jdi.document_upload.errors.heic_unsupported\"),\n );\n event.target.value = \"\";\n if (multipleInputRef.current) {\n multipleInputRef.current.value = \"\";\n }\n return;\n }\n\n // Valider le type de fichier\n if (!isValidFileType(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.invalid_file_type_indexed\", {\n index: index + 1,\n }),\n );\n event.target.value = \"\";\n if (multipleInputRef.current) {\n multipleInputRef.current.value = \"\";\n }\n return;\n }\n\n // Valider la taille du fichier\n if (!isValidFileSize(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.file_too_large_indexed\", {\n index: index + 1,\n }),\n );\n event.target.value = \"\";\n if (multipleInputRef.current) {\n multipleInputRef.current.value = \"\";\n }\n return;\n }\n\n if (index === 0) {\n // Premier fichier = recto\n setFrontFile(currentFile);\n } else if (index === 1 && twoSidesRequired) {\n // Deuxième fichier = verso (seulement si nécessaire)\n setBackFile(currentFile);\n }\n\n // Store File object and create preview\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n\n if (index === 0) {\n setFrontPreview(result);\n } else if (index === 1 && twoSidesRequired) {\n setBackPreview(result);\n }\n };\n reader.readAsDataURL(currentFile);\n }\n };\n\n const handleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>,\n side: \"front\" | \"back\",\n ) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n let processedFile = file;\n try {\n processedFile = await convertFileToSupportedFormat(file);\n } catch (conversionError) {\n console.error(\n \"handleFileChange: HEIC conversion failed\",\n conversionError,\n );\n setError(\n conversionError instanceof Error\n ? conversionError.message\n : t(\"jdi.document_upload.errors.heic_unsupported\"),\n );\n event.target.value = \"\";\n if (side === \"front\" && frontInputRef.current) {\n frontInputRef.current.value = \"\";\n }\n return;\n }\n\n // Validate file type\n if (!isValidFileType(processedFile)) {\n setError(t(\"jdi.document_upload.errors.invalid_file_type\"));\n event.target.value = \"\";\n return;\n }\n\n // Validate file size (max 10MB)\n if (!isValidFileSize(processedFile)) {\n setError(t(\"jdi.document_upload.errors.file_too_large\"));\n event.target.value = \"\";\n return;\n }\n\n setError(\"\");\n\n // Store File object and create preview\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n\n if (side === \"front\") {\n setFrontFile(processedFile);\n setFrontPreview(result);\n setIsFrontFromInitial(false);\n } else {\n setBackFile(processedFile);\n setBackPreview(result);\n setIsBackFromInitial(false);\n }\n };\n reader.readAsDataURL(processedFile);\n };\n\n const handleUpload = async () => {\n // Clear previous errors\n setError(\"\");\n\n // Validation : recto obligatoire (soit un File local, soit une valeur initiale)\n if (!frontFile && !isFrontFromInitial) {\n const errorKey =\n documentTypeId === \"jdd\"\n ? \"jdi.document_upload.errors.add_photo_jdd\"\n : documentTypeId === \"income-proof\"\n ? \"jdi.document_upload.errors.add_photo_income_proof\"\n : \"jdi.document_upload.errors.add_photo_identity\";\n\n setError(t(errorKey));\n return;\n }\n\n // Note: For two-sided documents, the back side is no longer mandatory\n // The user can choose to upload only the front side\n\n setIsUploading(true);\n\n try {\n // Recto : soit conversion d'un File, soit réutilisation de la base64 initiale\n let frontBase64: string;\n if (frontFile) {\n frontBase64 = await fileToBase64(frontFile);\n if (!isValidBase64Data(frontBase64)) {\n setError(t(\"jdi.document_upload.errors.front_corrupted\"));\n setIsUploading(false);\n return;\n }\n } else {\n // isFrontFromInitial === true : on réutilise la valeur initiale\n frontBase64 = initialFront!;\n }\n\n let backBase64: string | null = null;\n if (twoSidesRequired) {\n if (backFile) {\n backBase64 = await fileToBase64(backFile);\n if (!isValidBase64Data(backBase64)) {\n setError(t(\"jdi.document_upload.errors.back_corrupted\"));\n setIsUploading(false);\n return;\n }\n } else if (isBackFromInitial) {\n // On réutilise le verso initial\n backBase64 = initialBack!;\n }\n }\n\n const files = {\n front: frontBase64,\n back: twoSidesRequired ? backBase64 : null,\n };\n\n onUpload(files);\n } catch (err) {\n console.error(\"JDIDocumentUpload: Upload error:\", err);\n setError(t(\"jdi.document_upload.errors.upload_error\"));\n setIsUploading(false);\n }\n };\n\n const removeImage = (side: \"front\" | \"back\") => {\n if (side === \"front\") {\n setFrontFile(null);\n setFrontPreview(null);\n setIsFrontFromInitial(false);\n if (frontInputRef.current) frontInputRef.current.value = \"\";\n } else {\n setBackFile(null);\n setBackPreview(null);\n setIsBackFromInitial(false);\n }\n setError(\"\");\n };\n\n const removeAllImages = () => {\n setFrontFile(null);\n setBackFile(null);\n setFrontPreview(null);\n setBackPreview(null);\n setIsFrontFromInitial(false);\n setIsBackFromInitial(false);\n if (frontInputRef.current) frontInputRef.current.value = \"\";\n if (multipleInputRef.current) multipleInputRef.current.value = \"\";\n setError(\"\");\n };\n\n // Drag and Drop handlers\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n // Only set isDragging to false if we're leaving the drop zone entirely\n if (\n dropZoneRef.current &&\n !dropZoneRef.current.contains(e.relatedTarget as Node)\n ) {\n setIsDragging(false);\n }\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDrop = async (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n const droppedFiles = e.dataTransfer.files;\n if (!droppedFiles || droppedFiles.length === 0) return;\n\n // Vérifier le nombre de fichiers\n if (droppedFiles.length > 2) {\n setError(t(\"jdi.document_upload.errors.max_files\"));\n return;\n }\n\n // Détermine si on est en mode \"ajout au verso\" :\n // - 1 seul fichier déposé\n // - document recto/verso requis\n // - recto déjà présent via un dépôt utilisateur (pas uniquement via initialFront)\n // - verso pas encore présent\n const hasFrontFromUser = !!(frontFile || (!isFrontFromInitial && frontPreview));\n const hasBack = !!(backFile || isBackFromInitial || backPreview);\n const isAddingVerso =\n droppedFiles.length === 1 && twoSidesRequired && hasFrontFromUser && !hasBack;\n\n // Si on n'est pas en mode ajout verso, on repart de zéro\n if (!isAddingVerso) {\n setFrontFile(null);\n setBackFile(null);\n setFrontPreview(null);\n setBackPreview(null);\n setIsFrontFromInitial(false);\n setIsBackFromInitial(false);\n }\n\n setError(\"\");\n\n // Traiter chaque fichier\n for (let index = 0; index < droppedFiles.length; index++) {\n let currentFile = droppedFiles[index];\n\n try {\n currentFile = await convertFileToSupportedFormat(currentFile);\n } catch (conversionError) {\n console.error(\"handleDrop: HEIC conversion failed\", conversionError);\n setError(\n conversionError instanceof Error\n ? conversionError.message\n : t(\"jdi.document_upload.errors.heic_unsupported\"),\n );\n return;\n }\n\n // Valider le type de fichier\n if (!isValidFileType(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.invalid_file_type_indexed\", {\n index: index + 1,\n }),\n );\n return;\n }\n\n // Valider la taille du fichier\n if (!isValidFileSize(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.file_too_large_indexed\", {\n index: index + 1,\n }),\n );\n return;\n }\n\n // En mode ajout verso : le fichier unique devient le verso\n // Sinon : index 0 = recto, index 1 = verso\n const isVersoSlot = isAddingVerso || (index === 1 && twoSidesRequired);\n\n if (!isVersoSlot) {\n setFrontFile(currentFile);\n } else if (twoSidesRequired) {\n setBackFile(currentFile);\n }\n\n // Store File object and create preview\n const reader = new FileReader();\n reader.onload = (ev) => {\n const result = ev.target?.result as string;\n if (!isVersoSlot) {\n setFrontPreview(result);\n } else if (twoSidesRequired) {\n setBackPreview(result);\n }\n };\n reader.readAsDataURL(currentFile);\n }\n };\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleUpload}\n disabled={(!frontFile && !isFrontFromInitial) || isUploading}\n >\n {getValidateButtonText()}\n </Button>\n }\n secondary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack} disabled={isUploading}>\n {t(\"jdi.document_upload.back\")}\n </Button>\n ) : undefined}\n />\n }\n >\n {/* Main content */}\n <div className=\"flex-1 flex items-start justify-center md:items-center p-4\">\n <div className=\"w-full max-w-lg\">\n {/* Header */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {getDropZoneText()}\n </h1>\n <p className=\"text-gray-600\">{getUploadInstruction()}</p>\n </div>\n\n {/* Upload Card */}\n <Card\n ref={dropZoneRef}\n className={`border-2 border-dashed ${\n isDragging\n ? \"border-teal-500 bg-teal-100/50\"\n : \"border-teal-300 bg-teal-50/30\"\n } p-8 mb-6 transition-colors`}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <div className=\"text-center space-y-6\">\n {!frontPreview ? (\n <>\n <h3 className=\"text-lg font-semibold text-gray-900 mb-4\">\n {t(\"documentTypes.\" + documentType)}\n </h3>\n\n <div className=\"flex justify-center w-full\">\n <Button\n onClick={() => frontInputRef.current?.click()}\n className=\"border border-teal-300 text-teal-600 bg-transparent hover:bg-teal-50 px-4 py-2 rounded-lg font-medium text-sm mx-auto flex items-center\"\n disabled={isUploading}\n >\n <span>{t(\"jdi.document_upload.add_file\")}</span>\n </Button>\n </div>\n\n <p className=\"text-sm text-gray-500 italic\">\n {t(\n \"jdi.document_upload.drag_drop_hint\",\n \"ou glissez-déposez vos fichiers ici\",\n )}\n </p>\n\n <div className=\"text-sm text-gray-600 space-y-1\">\n <p>{t(\"jdi.document_upload.accepted_formats\")}</p>\n <p>\n {twoSidesRequired\n ? frontPreview\n ? t(\"jdi.document_upload.add_back_side\")\n : t(\"jdi.document_upload.multiple_files_info\")\n : t(\"jdi.document_upload.single_file_info\")}\n </p>\n </div>\n </>\n ) : (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-gray-900\">\n {twoSidesRequired && frontPreview && backPreview\n ? t(\"jdi.document_upload.documents_added\")\n : t(\"jdi.document_upload.document_added\")}\n </h3>\n\n {/* Preview du document recto */}\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <div className=\"mb-3\">\n <p className=\"text-sm font-medium text-gray-900 mb-1\">\n {twoSidesRequired && backPreview\n ? t(\"jdi.document_upload.front_side\")\n : t(\"documentTypes.\" + documentType)}\n </p>\n <p className=\"text-xs text-gray-500\">\n {isPDF(frontFile)\n ? t(\"jdi.document_upload.pdf_preview\")\n : t(\"jdi.document_upload.image_preview\")}\n </p>\n </div>\n {isPDF(frontFile) ? (\n <PDFPreview src={frontPreview} className=\"mb-3\" />\n ) : (\n <img\n src={frontPreview || \"/placeholder.svg\"}\n alt=\"Document\"\n className=\"w-full h-48 object-contain bg-gray-50 rounded-lg border mb-3\"\n />\n )}\n <div className=\"flex justify-end gap-2\">\n {twoSidesRequired && frontPreview && backPreview ? (\n <button\n onClick={removeAllImages}\n className=\"text-red-500 hover:text-red-700 p-1 text-sm\"\n disabled={isUploading}\n >\n {t(\"jdi.document_upload.restart\")}\n </button>\n ) : (\n <>\n <button\n onClick={() => frontInputRef.current?.click()}\n className=\"text-teal-600 hover:text-teal-700 p-1 text-sm\"\n disabled={isUploading}\n title=\"Changer le document\"\n >\n {t(\"jdi.document_upload.change\")}\n </button>\n <button\n onClick={() => removeImage(\"front\")}\n className=\"text-red-500 hover:text-red-700 p-1\"\n disabled={isUploading}\n title=\"Supprimer le document\"\n >\n <svg\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n </button>\n </>\n )}\n </div>\n </div>\n\n {/* Preview du document verso (si présent) */}\n {twoSidesRequired && backPreview && (\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <div className=\"mb-3\">\n <p className=\"text-sm font-medium text-gray-900 mb-1\">\n {t(\"jdi.document_upload.back_side\")}\n </p>\n <p className=\"text-xs text-gray-500\">\n {isPDF(frontFile)\n ? t(\"jdi.document_upload.pdf_preview\")\n : t(\"jdi.document_upload.image_preview\")}\n </p>\n </div>\n {isPDF(backFile) ? (\n <PDFPreview src={backPreview || \"\"} className=\"mb-3\" />\n ) : (\n <img\n src={backPreview || \"\"}\n alt=\"Verso\"\n className=\"w-full h-48 object-contain bg-gray-50 rounded-lg border mb-3\"\n />\n )}\n </div>\n )}\n\n {/* Bouton pour ajouter le verso si c'est un document recto/verso et qu'on n'a pas encore le verso */}\n {twoSidesRequired && !backPreview && (\n <div className=\"flex justify-center mt-4\">\n <Button\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*,.pdf\";\n input.onchange = (e) =>\n handleFileChange(e as any, \"back\");\n input.click();\n }}\n className=\"border border-teal-300 text-teal-600 bg-transparent hover:bg-teal-50 px-4 py-2 rounded-lg font-medium text-sm flex items-center\"\n disabled={isUploading}\n >\n <span>{t(\"jdi.document_upload.add_back\")}</span>\n </Button>\n </div>\n )}\n\n <div className=\"text-sm text-gray-600\">\n <p>\n {twoSidesRequired && backPreview\n ? t(\"jdi.document_upload.documents_ready\")\n : t(\"jdi.document_upload.document_ready\")}\n </p>\n </div>\n </div>\n )}\n </div>\n </Card>\n\n {/* Input pour un seul fichier */}\n <input\n ref={frontInputRef}\n type=\"file\"\n accept=\"image/*,.pdf\"\n onChange={(e) => handleFileChange(e, \"front\")}\n className=\"hidden\"\n />\n\n {/* Input pour plusieurs fichiers (recto/verso) */}\n <input\n ref={multipleInputRef}\n type=\"file\"\n accept=\"image/*,.pdf\"\n multiple={twoSidesRequired}\n onChange={handleMultipleFileChange}\n className=\"hidden\"\n />\n\n {/* Error message */}\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4 mb-6\">\n <p className=\"text-sm text-red-600 flex items-center\">\n <span className=\"mr-2\">⚠</span>\n {error}\n </p>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIDocumentUpload;\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JDIError.js","sources":["../../../../../src/components/jdi/JDIError.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport ButtonDesktop from \"../ui/ButtonDesktop\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { Prediction } from \"../../utils/apiAnalysis\";\nimport { getValidationPoints } from \"../../utils/validationUtils\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface JDIErrorProps {\n documentType: string;\n onRetry: () => void;\n /** Absent quand node.allowContinueOnFailure est à false : le bouton \"Continuer\n * quand même\" n'est alors jamais rendu, quel que soit isRetryAllowed. */\n onContinueAnyway?: () => void;\n onBackToUserInput?: () => void;\n retryCount?: number;\n predictions?: Prediction[]; // Nouvelles données de l'API\n errorCode?: string; // Error code from API response (e.g., \"2.1\", \"4.0\")\n allowResubmission?: boolean;\n maxResubmissionAttempts?: number;\n isRetryAllowed?: boolean;\n blockContinue?: boolean;\n}\n\nconst DEFAULT_PREDICTIONS: Prediction[] = [];\n\nconst JDIError = ({\n documentType,\n onRetry,\n onContinueAnyway,\n onBackToUserInput,\n retryCount = 0,\n predictions = DEFAULT_PREDICTIONS,\n errorCode,\n allowResubmission,\n maxResubmissionAttempts,\n isRetryAllowed = true,\n blockContinue = false,\n}: JDIErrorProps) => {\n const { t } = useI18n();\n const [validationPoints, setValidationPoints] = useState<string[]>([]);\n\n // Détail de mismatch d'identité (code 7.0), calculé côté backend et porté\n // par la première prédiction. Absent pour tous les autres codes.\n const mismatchDetails = predictions?.[0]?.mismatchDetails;\n\n useEffect(() => {\n // Use shared utility to get validation points\n setValidationPoints(\n getValidationPoints(errorCode, predictions, t, \"error\", mismatchDetails),\n );\n }, [predictions, errorCode, t, mismatchDetails]);\n\n // Get user guidance message if available\n const getUserGuidance = (): string | null => {\n if (!errorCode) return null;\n const guidance = t(`user_guidance.${errorCode}`, \"\");\n return guidance || null;\n };\n\n return (\n <MobilePageLayout\n footer={\n <div className=\"w-full max-w-md mx-auto\">\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {blockContinue ? (\n <Button onClick={onRetry} className=\"w-full py-3\">\n {t(\"errors.retry_verification\")}\n </Button>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop\n onClick={onBackToUserInput}\n type=\"back\"\n className=\"w-full text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.back_to_user_input\")}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop\n onClick={onContinueAnyway}\n type=\"back\"\n className=\"w-full text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.continue_anyway\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <Button onClick={onRetry} className=\"w-full py-3\">\n {t(\"errors.retry_verification\")}\n </Button>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <Button onClick={onContinueAnyway} className=\"w-full py-3\">\n {t(\"errors.continue_anyway\")}\n </Button>\n )}\n </>\n )}\n </div>\n <div className=\"hidden md:flex flex-col space-y-3\">\n <div className=\"flex justify-center space-x-3\">\n {blockContinue ? (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\"errors.retry_verification\")}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop\n onClick={onBackToUserInput}\n type=\"back\"\n className=\"text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.back_to_user_input\")}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop\n onClick={onContinueAnyway}\n type=\"back\"\n className=\"text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.continue_anyway\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\"errors.retry_verification\")}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop\n onClick={onContinueAnyway}\n type=\"continue\"\n >\n {t(\"errors.continue_anyway\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Error icon */}\n <div className=\"text-center\">\n <div className=\"mx-auto w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mb-4\">\n <div className=\"w-8 h-8 bg-red-500 rounded-full flex items-center justify-center\">\n <span className=\"text-white text-lg\">✕</span>\n </div>\n </div>\n </div>\n\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl text-red-600\">\n {blockContinue\n ? t(\"errors.upload_not_confirmed.title\")\n : t(\"errors.verification_failed\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {blockContinue\n ? t(\"errors.upload_not_confirmed.subtitle\")\n : isRetryAllowed\n ? t(\"errors.verification_failed_subtitle\", {\n documentType: \"document\",\n })\n : t(\"errors.verification_failed_subtitle_no_retry\", {\n documentType: \"document\",\n })}\n </Subtitle>\n </div>\n\n {/* Specimen warning */}\n {!blockContinue && errorCode?.startsWith(\"8\") && (\n <div className=\"bg-orange-50 border border-orange-200 rounded-lg p-4\">\n <p className=\"text-sm text-orange-800\">\n {t(\"errors.specimen_detected\")}\n </p>\n </div>\n )}\n\n {/* Error details - Validation Points */}\n {!blockContinue && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-red-900 mb-2\">\n {t(\"errors.problems_detected\")}\n </h3>\n <div className=\"text-sm text-red-800 space-y-1\">\n {validationPoints.map((point, index) => (\n <p key={index}>{point}</p>\n ))}\n </div>\n </div>\n )}\n\n {/* Resubmission limit message */}\n {!blockContinue && !isRetryAllowed && (\n <div className=\"bg-orange-50 border border-orange-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-orange-900 mb-2\">\n {t(\"errors.resubmission.max_attempts_reached\")}\n </h3>\n <p className=\"text-sm text-orange-800\">\n {maxResubmissionAttempts !== undefined\n ? t(\"errors.resubmission.max_attempts_reached_description\")\n : t(\"errors.resubmission.no_resubmission_allowed\")}\n </p>\n </div>\n )}\n\n {/* User guidance - specific advice based on error code */}\n {!blockContinue && getUserGuidance() && (\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-yellow-900 mb-2\">\n 💡 {t(\"errors.improvement_tips\")}\n </h3>\n <p className=\"text-sm text-yellow-800\">{getUserGuidance()}</p>\n </div>\n )}\n\n {/* Next steps */}\n {!blockContinue && isRetryAllowed && (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-blue-900 mb-2\">\n {t(\"errors.next_steps\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\"errors.next_steps_description\")}\n </p>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIError;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;AA0BA,IAAM,mBAAmB,GAAiB,EAAE;AAE5C,IAAM,QAAQ,GAAG,UAAC,EAYF,EAAA;;IAXF,EAAA,CAAA,YAAA,MACZ,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,gBAAgB,GAAA,EAAA,CAAA,gBAAA,EAChB,iBAAiB,GAAA,EAAA,CAAA,iBAAA,EACjB,EAAA,GAAA,EAAA,CAAA,UAAc,CAAA,CAAd,UAAU,GAAA,EAAA,KAAA,MAAA,GAAG,CAAC,KAAA,CAAA,CACd,EAAA,GAAA,EAAA,CAAA,WAAiC,CAAA,CAAjC,WAAW,GAAA,EAAA,KAAA,MAAA,GAAG,mBAAmB,KAAA,CAAA,CACjC,SAAS,eAAA,CAAA,qBACQ,CAAA,KACjB,uBAAuB,6BAAA,CAAA,CACvB,EAAA,GAAA,EAAA,CAAA,cAAqB,EAArB,cAAc,GAAA,EAAA,KAAA,MAAA,GAAG,IAAI,GAAA,EAAA,CAAA,CACrB,qBAAqB,CAAA,CAArB,aAAa,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA;AAEb,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAA0C,QAAQ,CAAW,EAAE,CAAC,EAA/D,gBAAgB,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,mBAAmB,GAAA,EAAA,CAAA,CAAA,CAA0B;;;AAItE,IAAA,IAAM,eAAe,GAAG,CAAA,EAAA,GAAA,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe;AAEzD,IAAA,SAAS,CAAC,YAAA;;AAER,QAAA,mBAAmB,CACjB,mBAAmB,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CACzE;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;;AAGhD,IAAA,IAAM,eAAe,GAAG,YAAA;AACtB,QAAA,IAAI,CAAC,SAAS;AAAE,YAAA,OAAO,IAAI;QAC3B,IAAM,QAAQ,GAAG,CAAC,CAAC,gBAAA,CAAA,MAAA,CAAiB,SAAS,CAAE,EAAE,EAAE,CAAC;QACpD,OAAO,QAAQ,IAAI,IAAI;AACzB,IAAA,CAAC;AAED,IAAA,QACEA,GAAA,CAAC,gBAAgB,EAAA,EACf,MAAM,EACJC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,aACtCD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAC/C,aAAa,IACZA,IAAC,MAAM,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,aAAa,YAC9C,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACxB,KAETC,4BACG,iBAAiB,KAChBD,GAAA,CAAC,aAAa,EAAA,EACZ,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,qEAAqE,EAAA,QAAA,EAE9E,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACjB,CACjB,EACA,UAAU,IAAI,CAAC,IAAI,cAAc,IAAI,gBAAgB,KACpDA,IAAC,aAAa,EAAA,EACZ,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,qEAAqE,EAAA,QAAA,EAE9E,CAAC,CAAC,wBAAwB,CAAC,EAAA,CACd,CACjB,EACA,cAAc,KACbA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,aAAa,EAAA,QAAA,EAC9C,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACxB,CACV,EACA,CAAC,cAAc,IAAI,gBAAgB,KAClCA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAC,aAAa,EAAA,QAAA,EACvD,CAAC,CAAC,wBAAwB,CAAC,EAAA,CACrB,CACV,IACA,CACJ,EAAA,CACG,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,YAChDA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAC3C,aAAa,IACZA,IAAC,aAAa,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,UAAU,EAAA,QAAA,EAC7C,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACjB,KAEhBC,4BACG,iBAAiB,KAChBD,GAAA,CAAC,aAAa,EAAA,EACZ,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,8DAA8D,YAEvE,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACjB,CACjB,EACA,UAAU,IAAI,CAAC,IAAI,cAAc,IAAI,gBAAgB,KACpDA,GAAA,CAAC,aAAa,EAAA,EACZ,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,8DAA8D,EAAA,QAAA,EAEvE,CAAC,CAAC,wBAAwB,CAAC,EAAA,CACd,CACjB,EACA,cAAc,KACbA,GAAA,CAAC,aAAa,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,UAAU,EAAA,QAAA,EAC7C,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACjB,CACjB,EACA,CAAC,cAAc,IAAI,gBAAgB,KAClCA,GAAA,CAAC,aAAa,EAAA,EACZ,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAC,UAAU,EAAA,QAAA,EAEd,CAAC,CAAC,wBAAwB,CAAC,EAAA,CACd,CACjB,CAAA,EAAA,CACA,CACJ,GACG,EAAA,CACF,CAAA,EAAA,CACF,YAGRA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC9CC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAEhDD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,aAAa,EAAA,QAAA,EAC1BA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iFAAiF,EAAA,QAAA,EAC9FA,aAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAC/EA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EAAA,CACzC,GACF,EAAA,CACF,EAGNC,cAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCD,IAAC,KAAK,EAAA,EAAC,SAAS,EAAC,8CAA8C,YAC5D;AACC,sCAAE,CAAC,CAAC,mCAAmC;AACvC,sCAAE,CAAC,CAAC,4BAA4B,CAAC,EAAA,CAC7B,EACRA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,uCAAuC,YACxD;AACC,sCAAE,CAAC,CAAC,sCAAsC;AAC1C,sCAAE;AACA,0CAAE,CAAC,CAAC,qCAAqC,EAAE;AACvC,4CAAA,YAAY,EAAE,UAAU;yCACzB;AACH,0CAAE,CAAC,CAAC,8CAA8C,EAAE;AAChD,4CAAA,YAAY,EAAE,UAAU;yCACzB,CAAC,EAAA,CACC,CAAA,EAAA,CACP,EAGL,CAAC,aAAa,KAAI,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,UAAU,CAAC,GAAG,CAAC,CAAA,KAC3CA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sDAAsD,EAAA,QAAA,EACnEA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,yBAAyB,YACnC,CAAC,CAAC,0BAA0B,CAAC,EAAA,CAC5B,EAAA,CACA,CACP,EAGA,CAAC,aAAa,KACbC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gDAAgD,EAAA,QAAA,EAAA,CAC7DD,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAC1C,CAAC,CAAC,0BAA0B,CAAC,EAAA,CAC3B,EACLA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAC5C,gBAAgB,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA,EAAK,QACtCA,qBAAgB,KAAK,EAAA,EAAb,KAAK,CAAa,EAC3B,CAFuC,CAEvC,CAAC,EAAA,CACE,CAAA,EAAA,CACF,CACP,EAGA,CAAC,aAAa,IAAI,CAAC,cAAc,KAChCC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sDAAsD,EAAA,QAAA,EAAA,CACnED,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAC7C,CAAC,CAAC,0CAA0C,CAAC,EAAA,CAC3C,EACLA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,yBAAyB,EAAA,QAAA,EACnC,uBAAuB,KAAK;AAC3B,sCAAE,CAAC,CAAC,sDAAsD;AAC1D,sCAAE,CAAC,CAAC,6CAA6C,CAAC,GAClD,CAAA,EAAA,CACA,CACP,EAGA,CAAC,aAAa,IAAI,eAAe,EAAE,KAClCC,cAAK,SAAS,EAAC,sDAAsD,EAAA,QAAA,EAAA,CACnEA,aAAI,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,CAAA,eAAA,EAC1C,CAAC,CAAC,yBAAyB,CAAC,CAAA,EAAA,CAC7B,EACLD,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAAE,eAAe,EAAE,EAAA,CAAK,CAAA,EAAA,CAC1D,CACP,EAGA,CAAC,aAAa,IAAI,cAAc,KAC/BC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kDAAkD,EAAA,QAAA,EAAA,CAC/DD,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gCAAgC,YAC3C,CAAC,CAAC,mBAAmB,CAAC,GACpB,EACLA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,YACjC,CAAC,CAAC,+BAA+B,CAAC,GACjC,CAAA,EAAA,CACA,CACP,IACG,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JDIPreIntroduction.js","sources":["../../../../../src/components/jdi/JDIPreIntroduction.tsx"],"sourcesContent":["import Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { MobilePageLayout } from \"../ui\";\nimport PreIntroIcon from \"../icons/PreIntroIcon\";\n\ninterface JDIPreIntroductionProps {\n onContinue: () => void;\n onBack?: () => void;\n documentTypeId?: string;\n introTitleText?: string;\n introDescText?: string;\n}\n\nconst JDIPreIntroduction = ({\n onContinue,\n onBack,\n documentTypeId,\n introTitleText,\n introDescText,\n}: JDIPreIntroductionProps) => {\n const { t } = useI18n();\n\n // Déterminer le contenu en fonction du type de document\n let title, subtitle;\n\n title = t(\"jdi.pre_introduction.title_identity\");\n subtitle = t(\"jdi.pre_introduction.subtitle_identity\");\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue}>\n {t(\"jdi.pre_introduction.button_mobile\")}\n </Button>\n }\n secondary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.country_selection.back\")}\n </Button>\n ) : undefined}\n />\n }\n >\n <div className=\"flex flex-col w-full items-center\">\n {/* Main content area */}\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8 w-full\">\n <div className=\"w-full max-w-md mx-auto space-y-8\">\n {/* Icon */}\n\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl font-semibold\">\n {introTitleText || title}\n </Title>\n <Subtitle className=\"text-xs md:text-xs text-gray-600 leading-relaxed px-4 whitespace-pre-line\">\n {introDescText || subtitle}\n </Subtitle>\n </div>\n <div className=\"flex justify-center h-full w-full md:overflow-hidden\">\n <div className=\"flex items-center justify-center h-full w-full\">\n <PreIntroIcon className=\"h-full w-full\" />\n </div>\n </div>\n\n {/* Information card */}\n\n {/* <p className=\"text-center space-y-4 text-xs text-gray-600 leading-relaxed px-4\">\n {t(\"jdi.pre_introduction.terms_acceptance\")}\n </p> */}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIPreIntroduction;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;AAgBA,IAAM,kBAAkB,GAAG,UAAC,EAMF,EAAA;AALxB,IAAA,IAAA,UAAU,GAAA,EAAA,CAAA,UAAA,CAAA,CACV,MAAM,GAAA,EAAA,CAAA,MAAA,CAAA,CACQ,EAAA,CAAA,cAAA,CAAA,KACd,cAAc,GAAA,EAAA,CAAA,cAAA,CAAA,CACd,aAAa,GAAA,EAAA,CAAA;AAEL,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;;IAGT,IAAI,KAAK,EAAE,QAAQ;AAEnB,IAAA,KAAK,GAAG,CAAC,CAAC,qCAAqC,CAAC;AAChD,IAAA,QAAQ,GAAG,CAAC,CAAC,wCAAwC,CAAC;IAEtD,QACEA,GAAA,CAAC,gBAAgB,EAAA,EACf,MAAM,EACJA,GAAA,CAAC,WAAW,EAAA,EACV,OAAO,EACLA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAE,UAAU,EAAA,QAAA,EACxB,CAAC,CAAC,oCAAoC,CAAC,EAAA,CACjC,EAEX,SAAS,EAAE,MAAM,IACfA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,EAAA,QAAA,EACxC,CAAC,CAAC,4BAA4B,CAAC,EAAA,CACzB,IACP,SAAS,EAAA,CACb,EAAA,QAAA,EAGJA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAEhDA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EACrDC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAIhDA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCD,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAC7D,cAAc,IAAI,KAAK,EAAA,CAClB,EACRA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,2EAA2E,EAAA,QAAA,EAC5F,aAAa,IAAI,QAAQ,EAAA,CACjB,CAAA,EAAA,CACP,EACNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sDAAsD,EAAA,QAAA,EACnEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gDAAgD,EAAA,QAAA,EAC7DA,GAAA,CAAC,YAAY,EAAA,EAAC,SAAS,EAAC,eAAe,EAAA,CAAG,EAAA,CACtC,EAAA,CACF,CAAA,EAAA,CAOF,EAAA,CACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JDIProcessing.js","sources":["../../../../../src/components/jdi/JDIProcessing.tsx"],"sourcesContent":["import { useEffect, useRef, useState, useMemo, useCallback, memo } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport type { ProcessingStep } from \"../../types/session\";\nimport type { Prediction } from \"../../utils/apiAnalysis\";\nimport type { JDIProcessingResult } from \"./types\";\nimport {\n analyzeFiles,\n uploadConvertedIdCardImage,\n} from \"../../services/analysis\";\nimport { getActiveSessionId } from \"../../services/sessionMemoryStore\";\nimport {\n convertPdfToPng,\n convertJpegToPng,\n dataUrlToFile,\n isPdf,\n isJpeg,\n isPng,\n} from \"../../utils/imageConverter\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { requiresTwoSides } from \"../../utils/documentLabels\";\nimport {\n isS3UploadNotConfirmedError,\n isQuotaExceededError,\n QUOTA_EXCEEDED_CODE,\n} from \"../../utils/analysisErrors\";\nimport { isBlockingCode } from \"../../utils/jdiCodes\";\n\ninterface JDIProcessingProps {\n onProcessingComplete: (\n success: boolean,\n retryCount?: number,\n analysisData?: Prediction[] | null,\n blockContinue?: boolean,\n ) => void;\n documentType: string;\n fileUploaded: onUploadFiles | null; // Fichiers uploadés\n documentTypeId: string; // ID du type de document (jdd, income-proof, etc.)\n retryCount?: number; // Nombre de tentatives de retry déjà effectuées\n documentTemplateId?: string; // ID du modèle de document associé\n nodeId: string; // ID du nœud associé\n /** Codes JDI exacts considérés comme bloquants pour ce nœud (cf. node.blockingCodes). Absent = liste par défaut. */\n blockingCodes?: string[];\n}\n\ninterface AnalysisProgress {\n progress: number;\n currentStep: string;\n message: string;\n}\n\n// Fonction pour obtenir les étapes de traitement traduites\nconst getProcessingSteps = (t: (key: string) => string): ProcessingStep[] => [\n {\n title: t(\"jdi.processing.steps.document_reception.title\"),\n subtitle: t(\"jdi.processing.steps.document_reception.subtitle\"),\n hasError: false,\n },\n {\n title: t(\"jdi.processing.steps.quality_analysis.title\"),\n subtitle: t(\"jdi.processing.steps.quality_analysis.subtitle\"),\n hasError: false,\n },\n {\n title: t(\"jdi.processing.steps.data_extraction.title\"),\n subtitle: t(\"jdi.processing.steps.data_extraction.subtitle\"),\n hasError: false,\n },\n {\n title: t(\"jdi.processing.steps.final_verification.title\"),\n subtitle: t(\"jdi.processing.steps.final_verification.subtitle\"),\n hasError: false,\n },\n];\n\nconst JDIProcessing = memo(\n ({\n onProcessingComplete,\n documentType,\n fileUploaded,\n documentTypeId,\n retryCount = 0,\n documentTemplateId,\n nodeId,\n blockingCodes,\n }: JDIProcessingProps) => {\n const { t } = useI18n();\n const [isProcessing, setIsProcessing] = useState(false);\n const [currentStep, setCurrentStep] = useState(0);\n const [processingSteps, setProcessingSteps] = useState<ProcessingStep[]>(\n () => getProcessingSteps(t),\n );\n const [isComplete, setIsComplete] = useState(false);\n const [analysisResult, setAnalysisResult] =\n useState<JDIProcessingResult | null>(null);\n const [analysisProgress, setAnalysisProgress] = useState<AnalysisProgress>({\n progress: 0,\n currentStep: \"\",\n message: \"\",\n });\n\n const processingStartedRef = useRef(false);\n const processedFilesRef = useRef<string | null>(null);\n\n // Créer une clé stable pour les fichiers uploadés\n const filesKey = useMemo(() => {\n if (!fileUploaded) return null;\n return `${fileUploaded.front?.substring(0, 50) || \"no-front\"}-${\n fileUploaded.back?.substring(0, 50) || \"no-back\"\n }`;\n }, [fileUploaded]);\n\n // Callback stable pour onProcessingComplete\n const stableOnProcessingComplete = useCallback(\n (\n success: boolean,\n retryCount?: number,\n analysisData?: Prediction[] | null,\n blockContinue?: boolean,\n ) => {\n if (blockContinue === true) {\n onProcessingComplete(success, retryCount, analysisData, true);\n } else {\n onProcessingComplete(success, retryCount, analysisData);\n }\n },\n [onProcessingComplete],\n );\n\n useEffect(() => {\n // Empêcher les appels multiples\n if (\n !fileUploaded ||\n !filesKey ||\n isProcessing ||\n processingStartedRef.current\n ) {\n return;\n }\n\n const sessionId = getActiveSessionId();\n if (!sessionId) {\n stableOnProcessingComplete(false);\n return;\n }\n\n // Vérifier si on a déjà traité ces mêmes fichiers\n if (processedFilesRef.current === filesKey) {\n return;\n }\n\n // Fonction pour gérer la conversion et l'upload des fichiers\n const handleFileConversionAndUpload = async (\n sessionId: string,\n fileUploaded: onUploadFiles,\n ) => {\n const frontImage = fileUploaded.front;\n if (!frontImage) return;\n\n try {\n if (isPdf(frontImage)) {\n const convertedFile = await convertPdfToPng(frontImage);\n await uploadConvertedIdCardImage(sessionId, convertedFile);\n } else if (isJpeg(frontImage)) {\n const convertedFile = await convertJpegToPng(frontImage);\n await uploadConvertedIdCardImage(sessionId, convertedFile);\n } else if (isPng(frontImage)) {\n const file = dataUrlToFile(frontImage, \"converted_id_card.png\");\n await uploadConvertedIdCardImage(sessionId, file);\n }\n } catch (error) {\n console.error(\"Erreur lors de la conversion/upload:\", error);\n // Ne pas bloquer le processus, continuer avec l'analyse normale\n }\n };\n\n const processFiles = async () => {\n try {\n // Marquer le début du traitement\n setIsProcessing(true);\n processingStartedRef.current = true;\n processedFilesRef.current = filesKey;\n\n // Animation des étapes avec appel API réel à la fin\n for (let i = 0; i < processingSteps.length; i++) {\n setCurrentStep(i);\n\n if (i < processingSteps.length - 1) {\n // Délai entre les étapes (sauf la dernière)\n await new Promise((resolve) => setTimeout(resolve, 800));\n } else {\n // Dernière étape : conversion et upload si nécessaire, puis appel API réel\n await handleFileConversionAndUpload(sessionId, fileUploaded);\n\n const response = await analyzeFiles(\n sessionId,\n nodeId,\n fileUploaded,\n documentTemplateId || \"\",\n {\n save: false, // don't save to session yet\n incrementAnalysis: false, // don't auto-progress session\n documentTypeKey: documentType,\n requiresTwoSides: requiresTwoSides(documentType),\n enablePolling: true, // Enable polling for progress\n pollingOptions: {\n interval: 2000, // Poll every 2 seconds (backend optimized timing)\n maxAttempts: 30, // 30 * 2s = max 60s polling duration\n timeout: 600000,\n onProgress: (status) => {\n // Update analysis progress state for display\n setAnalysisProgress({\n progress: status.progress,\n currentStep: status.currentStep,\n message: status.message,\n });\n\n // Update UI based on progress percentage\n // 50% = Analyzing (steps 0-2)\n // 100% = Completed (step 3)\n if (status.progress === 50) {\n // Analysis in progress - show steps 0-2 progressively\n const elapsed =\n Date.now() -\n (Date.parse(status.startedAt || \"\") || Date.now());\n const elapsedSeconds = elapsed / 1000;\n\n // Progress through first 3 steps based on elapsed time\n if (elapsedSeconds < 3) {\n setCurrentStep((prev) => Math.max(prev, 0));\n } else if (elapsedSeconds < 6) {\n setCurrentStep((prev) => Math.max(prev, 1));\n } else {\n setCurrentStep((prev) => Math.max(prev, 2));\n }\n } else if (status.progress === 100) {\n // Analysis complete - move to final step\n setCurrentStep(processingSteps.length - 1);\n }\n },\n onComplete: (status) => {\n // Update final progress state\n setAnalysisProgress({\n progress: status.progress,\n currentStep: status.currentStep,\n message: status.message,\n });\n\n // Ensure we're at the final step\n setCurrentStep(processingSteps.length - 1);\n\n // Mark the final step based on analysis result\n const isFailed =\n status.currentStep === \"failed\" ||\n status.currentStep === \"error\";\n\n if (isFailed) {\n setProcessingSteps((prev) =>\n prev.map((step, index) =>\n index === processingSteps.length - 1\n ? { ...step, hasError: true }\n : step,\n ),\n );\n }\n },\n onFailed: (status, error) => {\n console.error(\n \"❌ [JDIProcessing] Analysis polling failed:\",\n error,\n );\n\n // Update error state\n setAnalysisProgress({\n progress: 100,\n currentStep: \"failed\",\n message: `Analysis failed: ${error}`,\n });\n\n // Mark current step as error\n setProcessingSteps((prev) =>\n prev.map((step, index) =>\n index === currentStep\n ? { ...step, hasError: true }\n : step,\n ),\n );\n },\n },\n },\n );\n\n const extractedCode = String(response.code);\n const codeName = response?.codeName;\n const codeDescription = response?.codeDescription;\n const mismatchDetails = response?.mismatchDetails;\n\n // Construct predictions array from the response\n const predictions: Prediction[] = [];\n if (extractedCode && codeName) {\n predictions.push({\n code: extractedCode,\n codeName: codeName,\n codeDescription: codeDescription || \"\",\n type: \"document\",\n ...(mismatchDetails ? { mismatchDetails } : {}),\n });\n }\n\n // Determine success based on the node's configured blocking codes\n // (blockingCodes absent → DEFAULT_BLOCKING_CODES, legacy behavior\n // unchanged). Code 8.x (specimen) is always blocking.\n const isSuccess = !isBlockingCode(extractedCode, blockingCodes);\n const canRetry = isSuccess === false;\n\n setAnalysisResult({\n success: isSuccess,\n code: extractedCode,\n canRetry,\n data: response,\n predictions: predictions,\n });\n\n // Mark the final step based on analysis result\n if (!isSuccess) {\n setProcessingSteps((prev) =>\n prev.map((step, index) =>\n index === processingSteps.length - 1\n ? { ...step, hasError: true }\n : step,\n ),\n );\n }\n\n // délai pour voir le résultat\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n setCurrentStep(processingSteps.length);\n setIsComplete(true);\n } catch (error) {\n console.error(\"❌ Erreur lors de l'analyse des fichiers:\", error);\n\n // Determine which step failed\n let failedStepIndex = currentStep;\n\n // If error occurred during analysis, mark the final verification step as failed\n if (currentStep >= processingSteps.length - 1) {\n failedStepIndex = processingSteps.length - 1;\n }\n\n // Mark the failed step as error\n setProcessingSteps((prev) =>\n prev.map((step, index) =>\n index === failedStepIndex ? { ...step, hasError: true } : step,\n ),\n );\n\n // Move to the failed step to show error\n setCurrentStep(failedStepIndex);\n\n // Determine if retry is allowed based on error type\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n const isNetworkError =\n errorMessage.includes(\"network\") ||\n errorMessage.includes(\"CORS\") ||\n errorMessage.includes(\"timeout\");\n const isUploadNotConfirmed = isS3UploadNotConfirmedError(error);\n const isQuotaExceeded = isQuotaExceededError(error);\n const apiError = error as { code?: string; message?: string };\n\n setAnalysisResult({\n success: false,\n data: null,\n // Propage le code/message QUOTA_EXCEEDED pour que l'écran\n // d'erreur puisse afficher un message dédié (limité au cas\n // quota : les autres erreurs gardent leur comportement existant).\n predictions: isQuotaExceeded\n ? [\n {\n code: QUOTA_EXCEEDED_CODE,\n codeName: QUOTA_EXCEEDED_CODE,\n codeDescription: apiError?.message || \"\",\n type: \"document\",\n },\n ]\n : undefined,\n canRetry: isNetworkError || isUploadNotConfirmed || isQuotaExceeded,\n blockContinue: isUploadNotConfirmed,\n });\n setIsComplete(true);\n } finally {\n setIsProcessing(false);\n }\n };\n\n processFiles();\n }, [\n fileUploaded,\n filesKey,\n documentTypeId,\n documentTemplateId,\n documentType,\n isProcessing,\n stableOnProcessingComplete,\n processingSteps.length,\n currentStep,\n blockingCodes,\n ]);\n\n // Auto-complete when analysis is done\n useEffect(() => {\n if (isComplete && analysisResult) {\n setTimeout(() => {\n const allowRetry =\n analysisResult.success || analysisResult.canRetry === true;\n // Pass predictions array instead of raw data\n stableOnProcessingComplete(\n analysisResult.success,\n allowRetry ? retryCount : undefined,\n analysisResult.predictions || null,\n analysisResult.blockContinue,\n );\n }, 1000);\n }\n }, [isComplete, analysisResult, stableOnProcessingComplete, retryCount]);\n\n return (\n <div className=\"flex flex-col justify-between h-full w-full\">\n {/* Main content area */}\n <div className=\"flex-1 px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\"jdi.processing.title\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {t(\"jdi.processing.subtitle\", {\n document: t(\"documentTypes.\" + documentType),\n })}\n </Subtitle>\n </div>\n\n {/* Processing steps with status indicators */}\n <div className=\"w-full flex justify-center\">\n <div className=\"space-y-5\">\n {processingSteps.map((step, index: number) => (\n <div key={index} className=\"flex items-start\">\n {/* Status indicator */}\n <div className=\"mr-4 mt-1 flex-shrink-0\">\n {index < currentStep ? (\n step.hasError ? (\n // Error indicator - Red X\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-red-500 text-white text-xs\">\n ✕\n </div>\n ) : (\n // Success indicator - Green checkmark\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs\">\n ✓\n </div>\n )\n ) : index === currentStep ? (\n // Loading spinner only for the current step\n <div className=\"w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin\"></div>\n ) : (\n // Empty circle for future steps\n <div className=\"w-6 h-6 rounded-full border-2 border-gray-300\"></div>\n )}\n </div>\n\n {/* Step content */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-[#3C3C40] text-sm\">\n {step.title}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n {step.subtitle}\n </p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n },\n);\n\nJDIProcessing.displayName = \"JDIProcessing\";\n\nexport default JDIProcessing;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"JDISuccess.js","sources":["../../../../../src/components/jdi/JDISuccess.tsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { getValidationPoints } from \"../../utils/validationUtils\";\n\ninterface JDISuccessProps {\n documentType: string;\n onContinue: () => void;\n errorCode?: string; // Error code from API response (e.g., \"1.0\", \"4.0\")\n}\n\nconst JDISuccess = ({ documentType, onContinue, errorCode }: JDISuccessProps) => {\n const { t } = useI18n();\n const [validationPoints, setValidationPoints] = useState<string[]>([]);\n\n useEffect(() => {\n // Use shared utility to get validation points\n setValidationPoints(getValidationPoints(errorCode, null, t, 'success'));\n }, [errorCode, t]);\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue}>\n {t(\"jdi.success.continue\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Success icon */}\n <div className=\"text-center\">\n <div className=\"mx-auto w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mb-4\">\n <div className=\"w-8 h-8 bg-green-500 rounded-full flex items-center justify-center\">\n <span className=\"text-white text-lg\">✓</span>\n </div>\n </div>\n </div>\n\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl text-green-600\">\n {t(\"jdi.success.title\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {t(\"jdi.success.subtitle\", { document: t(\"documentTypes.\" + documentType) })}\n </Subtitle>\n </div>\n\n {/* Success details */}\n <div className=\"bg-green-50 border border-green-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-green-900 mb-2\">{t(\"jdi.success.validated_title\")}</h3>\n <div className=\"text-sm text-green-800 space-y-1\">\n {validationPoints.map((point, index) => (\n <p key={index}>{point}</p>\n ))}\n </div>\n </div>\n\n {/* Next steps */}\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-blue-900 mb-2\">\n {t(\"jdi.success.next_steps_title\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\"jdi.success.next_steps_description\")}\n </p>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDISuccess;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;AAeA,IAAM,UAAU,GAAG,UAAC,EAAwD,EAAA;AAAtD,IAAA,IAAA,YAAY,kBAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA;AAC/C,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAA0C,QAAQ,CAAW,EAAE,CAAC,EAA/D,gBAAgB,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,mBAAmB,GAAA,EAAA,CAAA,CAAA,CAA0B;AAEtE,IAAA,SAAS,CAAC,YAAA;;AAER,QAAA,mBAAmB,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACzE,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAElB,IAAA,QACEA,GAAA,CAAC,gBAAgB,IACf,MAAM,EACJA,IAAC,WAAW,EAAA,EACV,OAAO,EACLA,IAAC,MAAM,EAAA,EAAC,OAAO,EAAE,UAAU,YACxB,CAAC,CAAC,sBAAsB,CAAC,GACnB,EAAA,CAEX,EAAA,QAAA,EAGJA,aAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC9CC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,aAEhDD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,aAAa,EAAA,QAAA,EAC1BA,aAAK,SAAS,EAAC,mFAAmF,EAAA,QAAA,EAChGA,aAAK,SAAS,EAAC,oEAAoE,EAAA,QAAA,EACjFA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EAAA,CACzC,GACF,EAAA,CACF,EAGNC,cAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCD,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,gDAAgD,YAC9D,CAAC,CAAC,mBAAmB,CAAC,EAAA,CACjB,EACRA,GAAA,CAAC,QAAQ,IAAC,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACxD,CAAC,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,gBAAgB,GAAG,YAAY,CAAC,EAAE,CAAC,EAAA,CACnE,CAAA,EAAA,CACP,EAGNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oDAAoD,EAAA,QAAA,EAAA,CACjED,YAAI,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAAE,CAAC,CAAC,6BAA6B,CAAC,EAAA,CAAM,EACvFA,aAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAC9C,gBAAgB,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA,EAAK,QACtCA,GAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAgB,KAAK,EAAA,EAAb,KAAK,CAAa,EAC3B,CAFuC,CAEvC,CAAC,EAAA,CACE,IACF,EAGNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kDAAkD,aAC/DD,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAC3C,CAAC,CAAC,8BAA8B,CAAC,EAAA,CAC/B,EACLA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EACjC,CAAC,CAAC,oCAAoC,CAAC,EAAA,CACtC,CAAA,EAAA,CACA,IACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LegalConsentNode.js","sources":["../../../../../src/components/legal-consent/LegalConsentNode.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport Body from \"../ui/Body\";\nimport Title from \"../ui/Title\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { updateSessionUserInput } from \"../../services/sessionService\";\nimport { renderInlineMarkdown } from \"../../utils/renderInlineMarkdown\";\nimport type { SessionData, SessionTemplateNode, stepObject } from \"../../types/session\";\n\ninterface LegalConsentNodeProps {\n node: SessionTemplateNode;\n session: SessionData;\n sessionId: string;\n stepObject: stepObject;\n}\n\nconst LegalConsentNode = ({\n node,\n session,\n sessionId,\n stepObject,\n}: LegalConsentNodeProps) => {\n const { t } = useI18n();\n const [checked, setChecked] = useState(false);\n const [error, setError] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const isRequired = node.isRequired !== false; // true by default\n\n const handleCheckboxChange = (value: boolean) => {\n setChecked(value);\n setError(false);\n setSubmitError(null);\n };\n\n const handleContinue = async () => {\n if (isRequired && !checked) {\n setError(true);\n return;\n }\n\n setIsSubmitting(true);\n try {\n // Merge consent data with existing userInput (backend does full replacement)\n const existingUserInput = (session.userInput as Record<string, unknown>) ?? {};\n const merged = {\n ...existingUserInput,\n [node.id]: {\n accepted: checked,\n timestamp: new Date().toISOString(),\n },\n };\n await updateSessionUserInput(sessionId, merged);\n stepObject.goToNextStep(node.id, session.template);\n } catch (err) {\n console.error(t(\"LEGAL_CONSENT.error.console_update\"), err);\n setSubmitError(t(\"LEGAL_CONSENT.error.general\"));\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const pageTitle = node.pageTitle || t(\"LEGAL_CONSENT.default_title\");\n // Description unique au format Markdown (liens [libellé](url), gras).\n const description = node.consentDescription;\n // Rétrocompat : on n'affiche consentDescription2 que pour les anciens nœuds\n // qui n'ont pas de consentDescription (sinon doublon, le texte étant fusionné).\n const description2 = description ? undefined : node.consentDescription2;\n const checkboxLabel = node.checkboxText || t(\"LEGAL_CONSENT.default_checkbox\");\n\n return (\n <MobilePageLayout\n session={session}\n footer={\n <div className=\"w-full space-y-4\">\n {/* Error message */}\n {(error || submitError) && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-3\">\n <Body className=\"text-red-600 text-sm text-center\">\n {submitError\n ? submitError\n : t(\"LEGAL_CONSENT.error.required\")}\n </Body>\n </div>\n )}\n\n {/* Consent checkbox */}\n <div className=\"flex items-start gap-3 p-3 bg-gray-50 rounded-lg\">\n <CheckboxPrimitive.Root\n id={`legal-consent-checkbox-${node.id}`}\n checked={checked}\n onCheckedChange={(value) => handleCheckboxChange(!!value)}\n className={`mt-1 h-5 w-5 shrink-0 rounded border bg-white transition-colors\n data-[state=checked]:bg-[var(--dk-btn-bg)] data-[state=checked]:border-[var(--dk-btn-bg)]\n ${error\n ? \"border-red-500\"\n : \"border-gray-300 hover:border-gray-400\"\n }\n `}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-white\">\n <CheckIcon className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n <LabelPrimitive.Root\n htmlFor={`legal-consent-checkbox-${node.id}`}\n className=\"cursor-pointer\"\n >\n <Body\n className={`text-left text-sm leading-relaxed ${\n error ? \"text-red-600\" : \"text-gray-700\"\n }`}\n >\n {checkboxLabel}\n </Body>\n </LabelPrimitive.Root>\n </div>\n\n {/* Continue button */}\n <PageActions\n primary={\n <Button\n onClick={handleContinue}\n disabled={(isRequired && !checked) || isSubmitting}\n >\n {isSubmitting\n ? t(\"LEGAL_CONSENT.button.loading\")\n : t(\"LEGAL_CONSENT.button.continue\")}\n </Button>\n }\n />\n </div>\n }\n >\n <div className=\"px-4 py-8 md:px-8 flex flex-col\">\n <div className=\"w-full max-w-2xl mx-auto space-y-6\">\n <div className=\"text-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl mb-6\">\n {pageTitle}\n </Title>\n </div>\n\n {/* Consent content */}\n {(description || description2) && (\n <div className=\"bg-gray-50 rounded-lg p-4 md:p-6\">\n <Body className=\"text-left text-sm md:text-base leading-relaxed space-y-4\">\n {/* Descriptions au format Markdown : liens cliquables dans le texte. */}\n {description && renderInlineMarkdown(description)}\n {description2 && renderInlineMarkdown(description2)}\n </Body>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default LegalConsentNode;\n"],"names":["_jsx","_jsxs","LabelPrimitive"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BiometricSymbol.js","sources":["../../../../../src/components/nfc-scan/BiometricSymbol.tsx"],"sourcesContent":["interface BiometricSymbolProps {\n className?: string;\n}\n\n/**\n * Symbole international du document biométrique (puce électronique), repris de\n * assets/biometric.svg mais teinté avec la couleur primaire du SDK\n * (var(--uni-primary-color)) au lieu du violet d'origine, pour rester aligné\n * sur l'identité visuelle du parcours.\n *\n * C'est le pictogramme que l'utilisateur doit retrouver sur la couverture de son\n * passeport ou sur sa carte d'identité pour confirmer la présence de la puce.\n */\nconst BiometricSymbol = ({ className }: BiometricSymbolProps) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 120 80\"\n className={className}\n role=\"img\"\n aria-label=\"Symbole du document biométrique\"\n >\n <defs>\n <mask id=\"biometric-symbol-mask\">\n <rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" fill=\"white\" />\n <rect x=\"0\" y=\"36\" width=\"120\" height=\"8\" fill=\"black\" />\n <circle cx=\"60\" cy=\"40\" r=\"16\" fill=\"black\" />\n </mask>\n </defs>\n\n <g fill=\"var(--uni-primary-color, #11e5c5)\">\n <rect\n x=\"10\"\n y=\"15\"\n width=\"100\"\n height=\"50\"\n rx=\"3\"\n mask=\"url(#biometric-symbol-mask)\"\n />\n <circle cx=\"60\" cy=\"40\" r=\"9\" />\n </g>\n </svg>\n );\n};\n\nexport default BiometricSymbol;\n"],"names":["_jsxs","_jsx"],"mappings":";;AAIA;;;;;;;;AAQG;AACH,IAAM,eAAe,GAAG,UAAC,EAAmC,EAAA;AAAjC,IAAA,IAAA,SAAS,GAAA,EAAA,CAAA,SAAA;AAClC,IAAA,QACEA,IAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,4BAA4B,EAClC,OAAO,EAAC,YAAY,EACpB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAC,KAAK,EAAA,YAAA,EACC,sCAAiC,EAAA,QAAA,EAAA,CAE5CC,GAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EACED,eAAM,EAAE,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAC9BC,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAA,CAAG,EACzDA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,OAAO,EAAA,CAAG,EACzDA,GAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAA,CAAG,CAAA,EAAA,CACzC,EAAA,CACF,EAEPD,IAAA,CAAA,GAAA,EAAA,EAAG,IAAI,EAAC,mCAAmC,EAAA,QAAA,EAAA,CACzCC,GAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAC,IAAI,EACN,CAAC,EAAC,IAAI,EACN,KAAK,EAAC,KAAK,EACX,MAAM,EAAC,IAAI,EACX,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,6BAA6B,EAAA,CAClC,EACFA,GAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAA,CAAG,CAAA,EAAA,CAC9B,CAAA,EAAA,CACA;AAEV;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NfcChipGate.js","sources":["../../../../../src/components/nfc-scan/NfcChipGate.tsx"],"sourcesContent":["import React from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport BiometricSymbol from \"./BiometricSymbol\";\nimport PuceCniSymbol from \"./PuceCniSymbol\";\n\ninterface NfcChipGateProps {\n /** L'utilisateur confirme que son document porte le symbole → flux NFC */\n onConfirm: () => void;\n /** L'utilisateur n'a pas ce symbole → on saute le nœud (nœud suivant) */\n onNoChip: () => void;\n}\n\n/**\n * Écran d'entrée du nœud NFC, façon \"persona\".\n *\n * Affiche le symbole du document biométrique (teinté à la couleur primaire) et\n * demande à l'utilisateur s'il figure sur son passeport (couverture) ou sa carte\n * d'identité (recto/verso). Cela évite d'engager dans un parcours NFC un\n * utilisateur dont le document n'a pas de puce.\n *\n * - Oui → on poursuit le parcours NFC (onConfirm)\n * - Non → on passe au nœud suivant (onNoChip)\n */\nconst NfcChipGate = ({ onConfirm, onNoChip }: NfcChipGateProps) => {\n const { t } = useI18n();\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n className=\"flex-wrap justify-center!\"\n primary={\n <Button onClick={onConfirm}>\n {t(\"nfc_scan.chip_gate.confirm\", \"Oui\")}\n </Button>\n }\n secondary={\n <Button\n variant=\"secondary\"\n onClick={onNoChip}\n className=\"whitespace-nowrap\"\n >\n {t(\"nfc_scan.chip_gate.no_chip\", \"Non, je n'ai ni symbole ni puce\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-8\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\n \"nfc_scan.chip_gate.title\",\n \"Votre document possède-t-il ce symbole et/ou une puce électronique ?\",\n )}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed whitespace-pre-line\">\n {t(\n \"nfc_scan.chip_gate.subtitle\",\n \"Ce parcours lit la puce électronique sans contact de votre pièce d'identité. Repérez ce symbole ou une puce électronique sur votre document.\",\n )}\n </Subtitle>\n </div>\n\n {/* Symbole biométrique + puce CNI, côte à côte, aux couleurs du SDK */}\n <div className=\"flex items-center justify-center gap-6\">\n <BiometricSymbol className=\"h-auto w-50 md:w-32\" />\n <PuceCniSymbol className=\"h-auto w-50 md:w-32\" />\n </div>\n\n {/* Où chercher le symbole */}\n <div\n className=\"rounded-2xl border p-4 text-sm leading-relaxed text-gray-700\"\n style={{\n borderColor: \"var(--uni-light-color-variant-2, #b2ece5)\",\n backgroundColor: \"var(--uni-light-color-variant-1, #d0f7f2)\",\n }}\n >\n <p className=\"mb-1\">\n {t(\n \"nfc_scan.chip_gate.hint_passport\",\n \"Sur un passeport, ce symbole figure sur la couverture.\",\n )}\n </p>\n <p>\n {t(\n \"nfc_scan.chip_gate.hint_card\",\n \"Sur une carte d'identité ou un titre de séjour, repérez ce symbole ou une puce électronique au recto ou au verso.\",\n )}\n </p>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default NfcChipGate;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;AAiBA;;;;;;;;;;AAUG;AACH,IAAM,WAAW,GAAG,UAAC,EAAyC,EAAA;QAAvC,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,QAAA;AAChC,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;AAET,IAAA,QACEA,GAAA,CAAC,gBAAgB,EAAA,EACf,MAAM,EACJA,GAAA,CAAC,WAAW,EAAA,EACV,SAAS,EAAC,2BAA2B,EACrC,OAAO,EACLA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAE,SAAS,EAAA,QAAA,EACvB,CAAC,CAAC,4BAA4B,EAAE,KAAK,CAAC,GAChC,EAEX,SAAS,EACPA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAE5B,CAAC,CAAC,4BAA4B,EAAE,iCAAiC,CAAC,EAAA,CAC5D,EAAA,CAEX,EAAA,QAAA,EAGJA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC9CC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCD,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC/C,CAAC,CACA,0BAA0B,EAC1B,sEAAsE,CACvE,EAAA,CACK,EACRA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,2DAA2D,EAAA,QAAA,EAC5E,CAAC,CACA,6BAA6B,EAC7B,8IAA8I,CAC/I,EAAA,CACQ,CAAA,EAAA,CACP,EAGNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,CACrDD,GAAA,CAAC,eAAe,EAAA,EAAC,SAAS,EAAC,qBAAqB,EAAA,CAAG,EACnDA,GAAA,CAAC,aAAa,EAAA,EAAC,SAAS,EAAC,qBAAqB,EAAA,CAAG,CAAA,EAAA,CAC7C,EAGNC,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,8DAA8D,EACxE,KAAK,EAAE;AACL,4BAAA,WAAW,EAAE,2CAA2C;AACxD,4BAAA,eAAe,EAAE,2CAA2C;yBAC7D,EAAA,QAAA,EAAA,CAEDD,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,MAAM,EAAA,QAAA,EAChB,CAAC,CACA,kCAAkC,EAClC,wDAAwD,CACzD,EAAA,CACC,EACJA,qBACG,CAAC,CACA,8BAA8B,EAC9B,mHAAmH,CACpH,EAAA,CACC,CAAA,EAAA,CACA,CAAA,EAAA,CACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NfcFallbackSurvey.js","sources":["../../../../../src/components/nfc-scan/NfcFallbackSurvey.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\n\ninterface NfcFallbackSurveyProps {\n /**\n * Validation du questionnaire.\n * @param reason clé technique de la raison sélectionnée\n * @param label libellé lisible (traduit) — stocké tel quel côté backoffice\n * @param comment commentaire libre optionnel (uniquement si \"autre\")\n */\n onSubmit: (reason: string, label: string, comment?: string) => void;\n}\n\nconst REASON_KEYS = [\n \"reason_scan_failed\",\n \"reason_no_id\",\n \"reason_no_nfc\",\n \"reason_unknown_nfc\",\n \"reason_not_comfortable\",\n \"reason_other\",\n] as const;\n\ntype ReasonKey = (typeof REASON_KEYS)[number];\n\nconst REASON_FALLBACKS: Record<ReasonKey, string> = {\n reason_scan_failed: \"Le scan n'a pas fonctionné\",\n reason_no_id: \"Je n'ai pas ma pièce d'identité avec moi\",\n reason_no_nfc: \"Ma pièce d'identité n'a pas de puce\",\n reason_unknown_nfc: \"Je ne sais pas si ma pièce a une puce\",\n reason_not_comfortable: \"Je ne souhaite pas utiliser le scan sans contact\",\n reason_other: \"Autre raison\",\n};\n\n// Raisons pour lesquelles on propose un commentaire libre optionnel (\"nous en dire plus\").\nconst REASONS_WITH_COMMENT: ReasonKey[] = [\"reason_scan_failed\", \"reason_other\"];\n\n/**\n * Questionnaire de fallback affiché lorsqu'un utilisateur déclare ne pas pouvoir\n * utiliser le scan NFC (écran NfcChipGate → \"Non\"). À la manière de Persona, on\n * recueille la raison pour aider les reviewers côté backoffice avant de poursuivre.\n *\n * La sélection d'une raison est obligatoire ; un commentaire libre optionnel\n * apparaît lorsque \"Autre raison\" est choisi.\n */\nconst NfcFallbackSurvey = ({ onSubmit }: NfcFallbackSurveyProps) => {\n const { t } = useI18n();\n const [selectedReason, setSelectedReason] = useState<ReasonKey | null>(null);\n const [comment, setComment] = useState(\"\");\n\n const handleSubmit = () => {\n if (!selectedReason) return;\n const label = t(\n `nfc_scan.fallback.${selectedReason}`,\n REASON_FALLBACKS[selectedReason],\n );\n const trimmedComment = comment.trim();\n onSubmit(\n selectedReason,\n label,\n REASONS_WITH_COMMENT.includes(selectedReason) && trimmedComment\n ? trimmedComment\n : undefined,\n );\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleSubmit} disabled={!selectedReason}>\n {t(\"nfc_scan.fallback.continue\", \"Continuer\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\"nfc_scan.fallback.title\", \"Aidez-nous à comprendre\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed whitespace-pre-line\">\n {t(\n \"nfc_scan.fallback.subtitle\",\n \"Pour quelle raison ne pouvez-vous pas utiliser le scan sans contact ?\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"space-y-3\">\n {REASON_KEYS.map((reasonKey) => {\n const isSelected = selectedReason === reasonKey;\n return (\n <button\n key={reasonKey}\n type=\"button\"\n onClick={() => setSelectedReason(reasonKey)}\n aria-pressed={isSelected}\n className=\"flex w-full items-center gap-3 rounded-xl border-2 p-4 text-left transition-colors\"\n style={{\n borderColor: isSelected\n ? \"var(--uni-primary-color, #11e5c5)\"\n : \"#e5e7eb\",\n backgroundColor: isSelected\n ? \"var(--uni-light-color-variant-1, #d0f7f2)\"\n : \"#ffffff\",\n }}\n >\n <span\n className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full border-2\"\n style={{\n borderColor: isSelected\n ? \"var(--uni-primary-color, #11e5c5)\"\n : \"#d1d5db\",\n }}\n >\n {isSelected && (\n <span\n className=\"h-2.5 w-2.5 rounded-full\"\n style={{\n backgroundColor: \"var(--uni-primary-color, #11e5c5)\",\n }}\n />\n )}\n </span>\n <span className=\"text-sm font-medium text-gray-900\">\n {t(\n `nfc_scan.fallback.${reasonKey}`,\n REASON_FALLBACKS[reasonKey],\n )}\n </span>\n </button>\n );\n })}\n </div>\n\n {selectedReason && REASONS_WITH_COMMENT.includes(selectedReason) && (\n <textarea\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n maxLength={1000}\n rows={3}\n placeholder={t(\n \"nfc_scan.fallback.comment_placeholder\",\n \"Précisez votre raison (optionnel)\",\n )}\n className=\"w-full resize-none rounded-xl border-2 border-gray-200 p-3 text-sm text-gray-900 focus:outline-none\"\n />\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default NfcFallbackSurvey;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NfcOnboardingNotice.js","sources":["../../../../../src/components/nfc-scan/NfcOnboardingNotice.tsx"],"sourcesContent":["import React from \"react\";\nimport { Wallet, QrCode, Smartphone } from \"lucide-react\";\nimport { useI18n } from \"../../hooks/useI18n\";\n\n/**\n * Encart pédagogique affiché sur la page de choix de document lorsque le parcours\n * utilise l'option NFC. Il prépare l'utilisateur aux étapes inhabituelles à venir\n * (document physique en main, scan d'un QR code, ouverture d'une application externe)\n * afin de limiter la rupture de flux et l'abandon.\n *\n * Affiché uniquement quand `nfcEnabled` est vrai côté nœud — sinon la page de choix\n * de document conserve son affichage classique.\n */\nconst NfcOnboardingNotice: React.FC = () => {\n const { t } = useI18n();\n\n const steps = [\n {\n Icon: Wallet,\n title: t(\n \"nfc_scan.onboarding.step_document_title\",\n \"Préparez votre document\",\n ),\n description: t(\n \"nfc_scan.onboarding.step_document_description\",\n \"Sortez votre document d'identité physique, vous en aurez besoin pour la lecture de la puce électronique.\",\n ),\n },\n {\n Icon: QrCode,\n title: t(\"nfc_scan.onboarding.step_qr_title\", \"Scannez un QR code\"),\n description: t(\n \"nfc_scan.onboarding.step_qr_description\",\n \"Après votre choix, un QR code s'affichera : scannez-le avec votre smartphone.\",\n ),\n },\n {\n Icon: Smartphone,\n title: t(\n \"nfc_scan.onboarding.step_app_title\",\n \"Ouvrez l'application sécurisée\",\n ),\n description: t(\n \"nfc_scan.onboarding.step_app_description\",\n \"Le QR code ouvre une application externe dédiée pour scanner et lire la puce électronique de votre document.\",\n ),\n },\n ];\n\n return (\n <div className=\"rounded-2xl border border-teal-200 bg-teal-50 p-4 md:p-5\">\n <h3 className=\"mb-3 flex items-center gap-2 text-sm font-semibold text-teal-900\">\n <QrCode size={18} aria-hidden=\"true\" className=\"shrink-0\" />\n {t(\"nfc_scan.onboarding.title\", \"Lecture sans contact (NFC)\")}\n </h3>\n <p className=\"mb-4 text-sm leading-relaxed text-teal-800\">\n {t(\n \"nfc_scan.onboarding.intro\",\n \"Ce parcours utilise la lecture sans contact de la puce électronique de votre document. Voici les étapes à venir :\",\n )}\n </p>\n <ol className=\"space-y-3\">\n {steps.map(({ Icon, title, description }, index) => (\n <li key={index} className=\"flex items-start gap-3\">\n <span className=\"mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-white text-teal-600 shadow-sm\">\n <Icon size={18} aria-hidden=\"true\" />\n </span>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-gray-900\">{title}</p>\n <p className=\"text-sm leading-relaxed text-gray-600\">\n {description}\n </p>\n </div>\n </li>\n ))}\n </ol>\n </div>\n );\n};\n\nexport default NfcOnboardingNotice;\n"],"names":["_jsxs","_jsx"],"mappings":";;;;AAIA;;;;;;;;AAQG;AACH,IAAM,mBAAmB,GAAa,YAAA;AAC5B,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;AAET,IAAA,IAAM,KAAK,GAAG;AACZ,QAAA;AACE,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,CAAC,CACN,yCAAyC,EACzC,yBAAyB,CAC1B;AACD,YAAA,WAAW,EAAE,CAAC,CACZ,+CAA+C,EAC/C,0GAA0G,CAC3G;AACF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,CAAC,CAAC,mCAAmC,EAAE,oBAAoB,CAAC;AACnE,YAAA,WAAW,EAAE,CAAC,CACZ,yCAAyC,EACzC,+EAA+E,CAChF;AACF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,CAAC,CACN,oCAAoC,EACpC,gCAAgC,CACjC;AACD,YAAA,WAAW,EAAE,CAAC,CACZ,0CAA0C,EAC1C,8GAA8G,CAC/G;AACF,SAAA;KACF;IAED,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0DAA0D,EAAA,QAAA,EAAA,CACvEA,IAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC9EC,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,aAAA,EAAc,MAAM,EAAC,SAAS,EAAC,UAAU,EAAA,CAAG,EAC3D,CAAC,CAAC,2BAA2B,EAAE,4BAA4B,CAAC,CAAA,EAAA,CAC1D,EACLA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4CAA4C,EAAA,QAAA,EACtD,CAAC,CACA,2BAA2B,EAC3B,mHAAmH,CACpH,EAAA,CACC,EACJA,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EACtB,KAAK,CAAC,GAAG,CAAC,UAAC,EAA4B,EAAE,KAAK,EAAA;AAAjC,oBAAA,IAAA,IAAI,UAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,WAAW,GAAA,EAAA,CAAA,WAAA;oBAAc,QAClDD,aAAgB,SAAS,EAAC,wBAAwB,EAAA,QAAA,EAAA,CAChDC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,wGAAwG,YACtHA,GAAA,CAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAA,aAAA,EAAc,MAAM,EAAA,CAAG,EAAA,CAChC,EACPD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,SAAS,aACtBC,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAE,KAAK,EAAA,CAAK,EAC5DA,WAAG,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACjD,WAAW,GACV,CAAA,EAAA,CACA,CAAA,EAAA,EATC,KAAK,CAUT;AAX6C,gBAAA,CAYnD,CAAC,EAAA,CACC,CAAA,EAAA,CACD;AAEV;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NfcScanNode.js","sources":["../../../../../src/components/nfc-scan/NfcScanNode.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport QRCode from \"qrcode\";\nimport type { SessionTemplate, stepObject } from \"../../types/session\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { useNfcSseStatus } from \"../../hooks/useNfcSseStatus\";\nimport { getBaseURL } from \"../../services/api\";\nimport { resetNfcScan } from \"../../services/sessionService\";\nimport { isMobileDevice } from \"../../utils/isMobileDevice\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport NfcSuccessAnimation from \"./NfcSuccessAnimation\";\n\ninterface NfcScanStepProps {\n sessionId: string;\n nodeId: string;\n stepObject: stepObject;\n template?: SessionTemplate;\n pageTitle?: string;\n pageDescription?: string;\n /** Retour vers la sélection du document (pour corriger un mauvais choix). */\n onBack?: () => void;\n /**\n * Fallback \"poursuivre sans puce\" proposé sur l'échec définitif (nfcStatus 'failed'). Ouvre le\n * questionnaire de raison côté web (NfcFallbackSurvey) ; la reprise (photo/API ou saut de nœud)\n * est décidée par l'orchestrateur selon nfcMode. Absent = bouton masqué.\n */\n onContinueWithoutChip?: () => void;\n}\n\nconst NfcScanStep: React.FC<NfcScanStepProps> = ({\n sessionId,\n nodeId,\n stepObject,\n template,\n pageTitle,\n pageDescription,\n onBack,\n onContinueWithoutChip,\n}) => {\n const { t } = useI18n();\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [qrError, setQrError] = useState<string | null>(null);\n const [resetError, setResetError] = useState<string | null>(null);\n const [isResetting, setIsResetting] = useState(false);\n // Sur mobile, on ouvre directement l'app de scan au lieu d'afficher un QR code inutile.\n const isMobile = useMemo(() => isMobileDevice(), []);\n\n const nfcUrl = useMemo(() => {\n const origin = typeof window !== \"undefined\" ? window.location.origin : \"\";\n return `${origin}/scan/${sessionId}`;\n }, [sessionId]);\n\n const apiBaseUrl = useMemo(() => getBaseURL(), []);\n\n const { status } = useNfcSseStatus({\n sessionId,\n apiBaseUrl,\n onCompleted: () => {\n if (template) {\n stepObject.goToNextStep(nodeId, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n },\n });\n\n const title =\n pageTitle || t(\"nfc_scan.page_title\", \"Scan NFC de votre document\");\n const subtitle =\n pageDescription ||\n t(\n \"nfc_scan.page_description\",\n \"Scannez le QR code ci-dessous avec votre smartphone pour lire la puce électronique de votre document d'identité.\"\n );\n\n // Sur mobile : ouvrir directement l'application de scan (pas de QR à se scanner soi-même).\n // Une seule fois, tant que le scan n'a pas progressé. Le SSE reste actif pour faire avancer\n // le parcours quand la lecture est terminée.\n const hasRedirectedRef = useRef(false);\n useEffect(() => {\n if (!isMobile || status !== \"pending\" || hasRedirectedRef.current) return;\n hasRedirectedRef.current = true;\n window.location.assign(nfcUrl);\n }, [isMobile, status, nfcUrl]);\n\n useEffect(() => {\n if (isMobile) return; // pas de QR sur mobile (redirection directe)\n if (status !== \"pending\") return;\n\n const generate = async () => {\n if (!canvasRef.current) return;\n setQrError(null);\n\n try {\n const dataUrl = await QRCode.toDataURL(nfcUrl, {\n width: 256,\n margin: 2,\n color: { dark: \"#000000\", light: \"#FFFFFF\" },\n });\n const canvas = canvasRef.current;\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n const img = new Image();\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n }\n } catch {\n setQrError(t(\"qr_code.generation_failed\", \"Erreur de génération du QR code\"));\n }\n };\n\n generate();\n }, [nfcUrl, status, t, isMobile]);\n\n const handleBack = async () => {\n if (!onBack) return;\n\n if (status !== \"failed\") {\n onBack();\n return;\n }\n\n setResetError(null);\n setIsResetting(true);\n try {\n await resetNfcScan(sessionId);\n onBack();\n } catch {\n setResetError(\n t(\n \"nfc_scan.reset_failed\",\n \"Impossible de réinitialiser le scan NFC. Veuillez réessayer.\",\n ),\n );\n } finally {\n setIsResetting(false);\n }\n };\n\n // Footer : sur l'échec définitif ('failed'), les actions dédiées (revenir au choix / poursuivre\n // sans puce) sont rendues via PageActions, comme les autres écrans NFC (NfcChipGate). Sinon, un\n // simple \"Retour\" tant que le scan n'a pas commencé/abouti.\n const canGoBack = !!onBack && (status === \"pending\" || status === \"opened\");\n const footer =\n status === \"failed\" ? (\n <PageActions\n primary={\n onBack ? (\n <Button onClick={() => void handleBack()} disabled={isResetting}>\n {t(\"nfc_scan.failed_back_to_selection\", \"Revenir au choix du document\")}\n </Button>\n ) : null\n }\n secondary={\n onContinueWithoutChip ? (\n <Button variant=\"secondary\" onClick={onContinueWithoutChip}>\n {t(\"nfc_scan.failed_continue_without_chip\", \"Poursuivre sans puce\")}\n </Button>\n ) : null\n }\n />\n ) : canGoBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"common.back\", \"Retour\")}\n </Button>\n ) : null;\n\n return (\n <MobilePageLayout footer={footer}>\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4 mt-16 md:mt-20\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">{title}</Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {subtitle}\n </Subtitle>\n </div>\n\n <div className=\"flex-1 flex flex-col justify-center items-center gap-4\">\n {status === \"success\" ? (\n <NfcSuccessAnimation />\n ) : status === \"completed\" ? (\n <div className=\"flex flex-col items-center gap-4 p-8\">\n <div className=\"animate-spin w-10 h-10 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\n <p className=\"text-sm text-gray-600\">\n {t(\"nfc_scan.verifying\", \"Vérification en cours…\")}\n </p>\n </div>\n ) : status === \"failed\" ? (\n <div className=\"flex flex-col items-center gap-2 p-8 text-center\">\n <p className=\"text-base font-semibold text-red-600\">\n {t(\"nfc_scan.failed_title\", \"Le scan n'a pas pu être vérifié\")}\n </p>\n <p className=\"text-sm text-gray-600 leading-relaxed\">\n {t(\n \"nfc_scan.failed_description\",\n \"Après plusieurs tentatives, la lecture de votre document n'a pas pu être validée.\"\n )}\n </p>\n {resetError && (\n <p className=\"text-sm text-red-600\" role=\"alert\">\n {resetError}\n </p>\n )}\n </div>\n ) : (\n // Contenu principal QR/mobile — reste monté pour \"pending\" ET \"opened\", pour ne\n // jamais démonter le canvas déjà généré.\n <>\n {qrError ? (\n <div className=\"text-red-500 text-center p-4\">{qrError}</div>\n ) : isMobile ? (\n <div className=\"flex flex-col items-center gap-4 p-8 text-center\">\n <div className=\"animate-spin w-10 h-10 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\n <p className=\"text-sm text-gray-600\">\n {t(\"nfc_scan.opening_app\", \"Ouverture de l'application…\")}\n </p>\n <a\n href={nfcUrl}\n className=\"text-sm font-medium text-blue-600 underline\"\n >\n {t(\"nfc_scan.open_app_link\", \"Ouvrir l'application\")}\n </a>\n </div>\n ) : (\n <div className=\"bg-white p-4 rounded-lg shadow-lg border-2 border-gray-200\">\n <canvas ref={canvasRef} />\n </div>\n )}\n\n {status === \"opened\" && (\n <div className=\"text-center space-y-1\">\n <p\n className=\"text-sm font-semibold\"\n style={{ color: \"var(--uni-secondary-color, #0a9983)\" }}\n >\n {t(\"nfc_scan.qr_opened_title\", \"QR code scanné\")}\n </p>\n <p className=\"text-xs text-gray-500 leading-relaxed\">\n {t(\n \"nfc_scan.qr_opened_description\",\n \"L'expérience NFC est ouverte sur votre smartphone. Continuez le scan sur votre téléphone.\"\n )}\n </p>\n <div className=\"flex items-center justify-center gap-2 text-xs text-gray-500 pt-1\">\n <span\n className=\"h-2 w-2 rounded-full animate-pulse\"\n style={{ backgroundColor: \"var(--uni-primary-color, #11e5c5)\" }}\n />\n {t(\"nfc_scan.waiting_completion\", \"En attente de la lecture NFC\")}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default NfcScanStep;\n"],"names":["_jsx","_jsxs","_Fragment"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NfcSuccessAnimation.js","sources":["../../../../../src/components/nfc-scan/NfcSuccessAnimation.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useI18n } from \"../../hooks/useI18n\";\n\nconst NfcSuccessAnimation: React.FC = () => {\n const { t } = useI18n();\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n // Déclenche l'animation au prochain frame pour permettre la transition CSS\n const id = requestAnimationFrame(() => setVisible(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n return (\n <div\n className=\"flex flex-col items-center gap-6 p-8\"\n style={{\n opacity: visible ? 1 : 0,\n transform: visible ? \"scale(1)\" : \"scale(0.85)\",\n transition: \"opacity 0.4s ease, transform 0.4s ease\",\n }}\n >\n <div style={{ position: \"relative\", width: 72, height: 72, flexShrink: 0 }}>\n {/* Halo pulsant en arrière-plan */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n borderRadius: \"50%\",\n backgroundColor: \"var(--uni-primary-color, #11e5c5)\",\n transformOrigin: \"center center\",\n animation: \"nfc-pulse 1.6s ease-out infinite\",\n pointerEvents: \"none\",\n }}\n />\n\n {/* Cercle + check SVG animé */}\n <svg\n width={72}\n height={72}\n viewBox=\"0 0 72 72\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n {/* Cercle de fond rempli */}\n <circle\n cx={36}\n cy={36}\n r={34}\n fill=\"var(--uni-primary-color, #11e5c5)\"\n style={{\n opacity: visible ? 1 : 0,\n transition: \"opacity 0.3s ease 0.1s\",\n }}\n />\n {/* Trait du check — strokeDashoffset animé */}\n <polyline\n points=\"20,37 30,47 52,25\"\n stroke=\"#ffffff\"\n strokeWidth={5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n style={{\n strokeDasharray: 50,\n strokeDashoffset: visible ? 0 : 50,\n transition: \"stroke-dashoffset 0.45s cubic-bezier(0.4, 0, 0.2, 1) 0.35s\",\n }}\n />\n </svg>\n </div>\n\n <div className=\"text-center space-y-1\">\n <p\n className=\"font-semibold text-base\"\n style={{ color: \"var(--uni-secondary-color, #0a9983)\" }}\n >\n {t(\"nfc_scan.success_title\", \"Documents validés\")}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\"nfc_scan.success_subtitle\", \"Lecture NFC confirmée avec succès\")}\n </p>\n </div>\n\n <style>{`\n @keyframes nfc-pulse {\n 0% { transform: scale(1); opacity: 0.25; }\n 70% { transform: scale(1.65); opacity: 0.05; }\n 100% { transform: scale(1.65); opacity: 0; }\n }\n `}</style>\n </div>\n );\n};\n\nexport default NfcSuccessAnimation;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PuceCniSymbol.js","sources":["../../../../../src/components/nfc-scan/PuceCniSymbol.tsx"],"sourcesContent":["interface PuceCniSymbolProps {\n className?: string;\n}\n\n/**\n * Pictogramme de la puce de contact d'une carte d'identité (contacts dorés type\n * carte bancaire), repris de assets/puce-cni.svg mais teinté avec la couleur\n * primaire du SDK (var(--uni-primary-color)) pour rester aligné sur l'identité\n * visuelle, en cohérence avec BiometricSymbol.\n *\n * Affiché à côté du symbole biométrique pour aider l'utilisateur à reconnaître la\n * puce sur sa carte d'identité.\n */\nconst PuceCniSymbol = ({ className }: PuceCniSymbolProps) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 200 125\"\n className={className}\n role=\"img\"\n aria-label=\"Puce d'une carte d'identité\"\n fill=\"none\"\n stroke=\"var(--uni-primary-color, #11e5c5)\"\n strokeWidth=\"4\"\n >\n <rect x=\"10\" y=\"10\" width=\"180\" height=\"105\" rx=\"10\" ry=\"10\" />\n\n <g transform=\"translate(30, 45)\">\n <rect\n width=\"35\"\n height=\"30\"\n rx=\"4\"\n ry=\"4\"\n fill=\"var(--uni-primary-color, #11e5c5)\"\n fillOpacity=\"0.12\"\n strokeWidth=\"2.5\"\n />\n <path\n d=\"M0 10h35M0 20h35M12 0v30M23 0v30\"\n strokeWidth=\"1\"\n strokeOpacity=\"0.6\"\n />\n </g>\n </svg>\n );\n};\n\nexport default PuceCniSymbol;\n"],"names":["_jsxs","_jsx"],"mappings":";;AAIA;;;;;;;;AAQG;AACH,IAAM,aAAa,GAAG,UAAC,EAAiC,EAAA;AAA/B,IAAA,IAAA,SAAS,GAAA,EAAA,CAAA,SAAA;IAChC,QACEA,IAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,4BAA4B,EAClC,OAAO,EAAC,aAAa,EACrB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAC,KAAK,EAAA,YAAA,EACC,kCAA6B,EACxC,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,mCAAmC,EAC1C,WAAW,EAAC,GAAG,EAAA,QAAA,EAAA,CAEfC,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,EAE/DD,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAC9BC,GAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,mCAAmC,EACxC,WAAW,EAAC,MAAM,EAClB,WAAW,EAAC,KAAK,EAAA,CACjB,EACFA,GAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAC,kCAAkC,EACpC,WAAW,EAAC,GAAG,EACf,aAAa,EAAC,KAAK,EAAA,CACnB,CAAA,EAAA,CACA,CAAA,EAAA,CACA;AAEV;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SelfieConfirmation.js","sources":["../../../../../src/components/selfie/SelfieConfirmation.tsx"],"sourcesContent":["/**\n * SelfieConfirmation component\n *\n * Displays the captured selfie and allows the user to confirm or retake it.\n *\n * @param {Object} props - Component props\n * @param {SelfieCaptureData} props.selfieData - The captured selfie data containing media blob and metadata\n * @param {Function} props.onConfirm - Function called when user confirms the selfie\n * @param {Function} props.onRetake - Function called when user wants to retake the selfie\n * @returns {JSX.Element} The selfie confirmation UI component\n */\n\nimport { useEffect, useRef, useState } from \"react\";\nimport type { SelfieCaptureData } from \"../../types/selfie\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\n\ninterface SelfieConfirmationProps {\n selfieData: SelfieCaptureData;\n setSelfiePhoto: (photo: string) => void;\n onConfirm: () => void;\n onRetake: () => void;\n}\n\nconst SelfieConfirmation = ({\n selfieData,\n setSelfiePhoto,\n onConfirm,\n onRetake,\n}: SelfieConfirmationProps) => {\n const { t } = useI18n();\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [imageUrl, setImageUrl] = useState<string | null>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n setIsLoading(true);\n setError(null);\n\n if (!selfieData?.media) {\n setError(t(\"selfie.confirmation.errors.no_data\", \"Aucune donnée de selfie disponible\"));\n setIsLoading(false);\n return;\n }\n\n // Use pre-captured thumbnail from live video stream\n if (selfieData.thumbnail) {\n setImageUrl(selfieData.thumbnail);\n setSelfiePhoto(selfieData.thumbnail);\n setIsLoading(false);\n return;\n }\n\n // No thumbnail available (should not happen)\n setError(t(\"selfie.confirmation.errors.no_preview\", \"Aucune preview disponible\"));\n setIsLoading(false);\n }, [selfieData, setSelfiePhoto]);\n\n if (isLoading) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full bg-white\">\n <div className=\"text-center p-6\">\n <div className=\"mb-4 text-gray-700\">\n {t(\"selfie.confirmation.loading\", \"Traitement de votre selfie...\")}\n </div>\n <div className=\"w-12 h-12 border-4 border-[#11E5C5] border-t-transparent rounded-full animate-spin mx-auto\"></div>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full bg-white\">\n <div className=\"text-center p-6 max-w-md mx-auto\">\n <div className=\"w-16 h-16 mx-auto mb-4 text-red-500\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line>\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>\n </svg>\n </div>\n <Title className=\"text-xl mb-2\">{t(\"selfie.confirmation.error_title\", \"Une erreur est survenue\")}</Title>\n <p className=\"mb-6 text-sm text-gray-600\">{error}</p>\n <Button variant=\"secondary\" onClick={onRetake} className=\"md:max-w-xs mx-auto\">\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </Button>\n </div>\n </div>\n );\n }\n\n if (!imageUrl) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full bg-white\">\n <div className=\"text-center p-6 max-w-md mx-auto\">\n <div className=\"w-16 h-16 mx-auto mb-4 text-yellow-500\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n </div>\n <Title className=\"text-xl mb-2\">{t(\"selfie.confirmation.no_display_title\", \"Impossible d'afficher le selfie\")}</Title>\n <p className=\"mb-6 text-sm text-gray-600\">{t(\"selfie.confirmation.no_display_desc\", \"Nous n'avons pas pu traiter correctement votre selfie.\")}</p>\n <Button variant=\"secondary\" onClick={onRetake} className=\"md:max-w-xs mx-auto\">\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <MobilePageLayout\n header={\n <div className=\"p-4 text-center bg-white border-b border-gray-100\">\n <Title className=\"text-xl md:text-2xl\">{t(\"selfie.confirmation.title\", \"Confirmez votre selfie\")}</Title>\n <Subtitle className=\"text-xs text-gray-600 mt-2 md:text-sm\">{t(\"selfie.confirmation.subtitle\", \"Vérifiez que votre visage est clairement visible\")}</Subtitle>\n </div>\n }\n footer={\n <PageActions\n primary={\n <Button onClick={onConfirm}>\n {t(\"selfie.confirmation.confirm\", \"Confirmer\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </Button>\n }\n />\n }\n className=\"bg-white\"\n >\n <div className=\"px-4 py-6 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Selfie display with frame */}\n <div className=\"w-full bg-white rounded-lg shadow-md\">\n <div className=\"relative rounded-lg border-2 border-[#11E5C5] flex items-center justify-center bg-white\">\n <img\n src={imageUrl}\n alt=\"Selfie capturé\"\n className=\"w-full h-auto object-contain rounded-lg\"\n style={{ maxHeight: \"50vh\" }}\n onError={() => {\n setError(\"Impossible d'afficher l'image du selfie\");\n }}\n />\n {/* Overlay pour améliorer la lisibilité */}\n <div className=\"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/30 to-transparent p-3\">\n <p className=\"text-white text-xs text-center\">{t(\"selfie.confirmation.overlay_success\", \"Selfie capturé avec succès\")}</p>\n </div>\n </div>\n </div>\n\n {/* Checklist de confirmation */}\n <div className=\"bg-gray-50 p-4 rounded-lg\">\n <h3 className=\"font-medium text-sm mb-3\">{t(\"selfie.confirmation.checklist_title\", \"Vérifiez que :\")}</h3>\n <ul className=\"space-y-2 text-xs text-gray-700\">\n <li className=\"flex items-start\">\n <svg\n className=\"w-4 h-4 text-green-500 mr-2 mt-0.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M5 13l4 4L19 7\"\n ></path>\n </svg>\n {t(\"selfie.confirmation.check_visible\", \"Votre visage est bien visible et occupe la majeure partie de l'image\")}\n </li>\n <li className=\"flex items-start\">\n <svg\n className=\"w-4 h-4 text-green-500 mr-2 mt-0.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M5 13l4 4L19 7\"\n ></path>\n </svg>\n {t(\"selfie.confirmation.check_well_lit\", \"L'image est nette et bien éclairée\")}\n </li>\n <li className=\"flex items-start\">\n <svg\n className=\"w-4 h-4 text-green-500 mr-2 mt-0.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M5 13l4 4L19 7\"\n ></path>\n </svg>\n {t(\"selfie.confirmation.check_no_object\", \"Aucun objet ne cache votre visage (lunettes de soleil, masque, etc.)\")}\n </li>\n </ul>\n </div>\n\n {/* Canvas caché utilisé pour le traitement des images */}\n <canvas ref={canvasRef} style={{ display: \"none\" }} />\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default SelfieConfirmation;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Video.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Video.js","sources":["../../../../../src/components/selfie/Video.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { SelfieCaptureData } from \"../../types/selfie\";\nimport \"./Video.css\";\nimport \"./VideoFixes.css\";\nimport SelfieFlow from \"./selfie-flow/SelfieFlow\";\nimport VideoResetStyles from \"./VideoResetStyles\";\n\ninterface VideoProps {\n setSelfieData: (selfieData: SelfieCaptureData) => void;\n setStep: (step: number) => void;\n btnBg?: string;\n btnText?: string;\n}\n\nconst Video = ({ setSelfieData, setStep, btnBg, btnText }: VideoProps) => {\n // Effet pour ajouter la classe au body lorsque le composant est monté\n useEffect(() => {\n // Empêcher le scroll sur le body lorsque la capture est active\n document.body.classList.add(\"selfie-active\");\n\n // Ajouter une classe pour gérer le plein écran sur mobile\n document.documentElement.classList.add(\"selfie-fullscreen\");\n\n return () => {\n // Nettoyer en enlevant les classes lors du démontage\n document.body.classList.remove(\"selfie-active\");\n document.documentElement.classList.remove(\"selfie-fullscreen\");\n };\n }, []);\n\n const handleSelfie = (e: Event) => {\n const data = (e as CustomEvent<SelfieCaptureData>).detail;\n\n // Attendre un court instant avant de passer à l'écran de confirmation\n // pour donner le temps à l'utilisateur de voir que la capture est terminée\n setTimeout(() => {\n setSelfieData(data);\n setStep(1); // Move to the next step after selfie capture\n }, 300);\n };\n\n return (\n <div className=\"w-full h-full overflow-hidden flex flex-col\">\n <VideoResetStyles />\n <SelfieFlow handleSelfie={handleSelfie} btnBg={btnBg} btnText={btnText} />\n </div>\n );\n};\n\nexport default Video;\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;AAcA,IAAM,KAAK,GAAG,UAAC,EAAsD,EAAA;QAApD,aAAa,GAAA,EAAA,CAAA,aAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA;;AAErD,IAAA,SAAS,CAAC,YAAA;;QAER,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;;QAG5C,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAE3D,OAAO,YAAA;;YAEL,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;YAC/C,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC;AAChE,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,IAAM,YAAY,GAAG,UAAC,CAAQ,EAAA;AAC5B,QAAA,IAAM,IAAI,GAAI,CAAoC,CAAC,MAAM;;;AAIzD,QAAA,UAAU,CAAC,YAAA;YACT,aAAa,CAAC,IAAI,CAAC;AACnB,YAAA,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,EAAE,GAAG,CAAC;AACT,IAAA,CAAC;IAED,QACEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAAA,CAC1DC,GAAA,CAAC,gBAAgB,EAAA,EAAA,CAAG,EACpBA,GAAA,CAAC,UAAU,EAAA,EAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAA,CAAI,CAAA,EAAA,CACtE;AAEV;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VideoFixes.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"VideoResetStyles.js","sources":["../../../../../src/components/selfie/VideoResetStyles.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\n/**\n * Composant qui injecte des styles CSS globaux pour réinitialiser\n * tous les styles potentiellement problématiques du VideoRecorder\n */\nconst VideoResetStyles = () => {\n useEffect(() => {\n // Créer un élément style pour les styles de réinitialisation globaux\n const resetStyle = document.createElement(\"style\");\n resetStyle.id = \"video-reset-global-styles\";\n\n // Réinitialiser tous les styles potentiellement problématiques\n resetStyle.textContent = `\n /* Réinitialiser les styles globaux qui pourraient affecter l'affichage de la vidéo */\n .selfie {\n --uni-primary-color: #11e5c5;\n --uni-secondary-color: #0a9983;\n --uni-primary-color-lighter: #37a998;\n --uni-secondary-color-lighter: #1cbeaa;\n --uni-alt-color: #086e5f;\n --uni-alt-color-lighter: #0d9485;\n --uni-light-color-variant-1: #d0f7f2;\n --uni-light-color-variant-2: #b2ece5;\n --uni-light-color: #fff;\n --uni-dark-color: #202020;\n --uni-error-color: #f44336;\n\n --uni-btn-padding: 10px 15px;\n --uni-btn-border: solid 0px;\n --uni-btn-border-radius: 0px;\n --uni-btn-font-size: 16px;\n --uni-btn-text-transform: normal;\n --uni-btn-border-outlined: solid 1px;\n --uni-btn-label-margin: 10px 0px;\n --uni-btn-disabled-bg-color: #eee;\n\n --uni-card-bg-color: transparent;\n }\n \n /* Forcer tous les éléments vidéo à avoir le bon style */\n uni-video-recorder,\n uni-video-recorder::shadow-root *,\n uni-video-recorder::part(*),\n video-js,\n .video-js,\n .vjs-default-skin,\n .vjs-big-play-button,\n .vjs-control-bar {\n border-radius: 0 !important;\n background-color: transparent !important;\n overflow: hidden !important;\n }\n \n /* Cibler spécifiquement le conteneur vidéo */\n .video-container video,\n .video-container canvas {\n border-radius: 0 !important;\n width: 100% !important;\n height: 100% !important;\n object-fit: cover !important;\n }\n \n /* Forcer l'élimination de tous les fonds noirs (hors boutons et éléments UI) */\n .selfie *:not(button):not(.selfie-button):not([class*=\"btn\"]) {\n background-color: transparent !important;\n }\n \n /* S'assurer que le composant VideoRecorder prend tout l'espace */\n .selfie .video-container uni-video-recorder {\n width: 100% !important;\n height: 100% !important;\n max-width: 100% !important;\n max-height: 100% !important;\n }\n `;\n\n // Ajouter l'élément style au head du document\n document.head.appendChild(resetStyle);\n\n // Nettoyer en supprimant l'élément style lors du démontage du composant\n return () => {\n const existingStyle = document.getElementById(\n \"video-reset-global-styles\"\n );\n if (existingStyle) {\n document.head.removeChild(existingStyle);\n }\n };\n }, []);\n\n // Ce composant ne rend rien dans le DOM\n return null;\n};\n\nexport default VideoResetStyles;\n"],"names":[],"mappings":";;AAEA;;;AAGG;AACH,IAAM,gBAAgB,GAAG,YAAA;AACvB,IAAA,SAAS,CAAC,YAAA;;QAER,IAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAClD,QAAA,UAAU,CAAC,EAAE,GAAG,2BAA2B;;AAG3C,QAAA,UAAU,CAAC,WAAW,GAAG,8rEA8DxB;;AAGD,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;;QAGrC,OAAO,YAAA;YACL,IAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAC3C,2BAA2B,CAC5B;YACD,IAAI,aAAa,EAAE;AACjB,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;YAC1C;AACF,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;;AAGN,IAAA,OAAO,IAAI;AACb;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useLiveFrameCapture.js","sources":["../../../../../../src/components/selfie/hooks/useLiveFrameCapture.ts"],"sourcesContent":["import { useRef, useCallback } from 'react';\n\n/**\n * Hook to capture a frame from a live video element during recording.\n * This approach works better on Firefox Mobile than extracting from recorded blob.\n */\nexport const useLiveFrameCapture = () => {\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n\n const captureFrame = useCallback((videoElement: HTMLVideoElement | null): string | null => {\n if (!videoElement) return null;\n\n try {\n // Create canvas if not exists\n if (!canvasRef.current) {\n canvasRef.current = document.createElement('canvas');\n }\n\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d', { willReadFrequently: false });\n\n if (!ctx) return null;\n\n // Set canvas dimensions to match video\n canvas.width = videoElement.videoWidth || 640;\n canvas.height = videoElement.videoHeight || 480;\n\n // Draw current video frame to canvas\n ctx.drawImage(videoElement, 0, 0, canvas.width, canvas.height);\n\n // Convert to base64 JPEG\n return canvas.toDataURL('image/jpeg', 0.85);\n } catch (error) {\n console.error('Failed to capture frame:', error);\n return null;\n }\n }, []);\n\n const cleanup = useCallback(() => {\n canvasRef.current = null;\n }, []);\n\n return { captureFrame, cleanup };\n};\n"],"names":[],"mappings":";;AAEA;;;AAGG;AACI,IAAM,mBAAmB,GAAG,YAAA;AACjC,IAAA,IAAM,SAAS,GAAG,MAAM,CAA2B,IAAI,CAAC;AAExD,IAAA,IAAM,YAAY,GAAG,WAAW,CAAC,UAAC,YAAqC,EAAA;AACrE,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI;AAE9B,QAAA,IAAI;;AAEF,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;gBACtB,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;YACtD;AAEA,YAAA,IAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AAChC,YAAA,IAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;AAElE,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,IAAI;;YAGrB,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,UAAU,IAAI,GAAG;YAC7C,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,WAAW,IAAI,GAAG;;AAG/C,YAAA,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;;YAG9D,OAAO,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;QAC7C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,YAAA,OAAO,IAAI;QACb;IACF,CAAC,EAAE,EAAE,CAAC;IAEN,IAAM,OAAO,GAAG,WAAW,CAAC,YAAA;AAC1B,QAAA,SAAS,CAAC,OAAO,GAAG,IAAI;IAC1B,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,OAAO,EAAE,YAAY,EAAA,YAAA,EAAE,OAAO,EAAA,OAAA,EAAE;AAClC;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useVideoRecorderStyles.js","sources":["../../../../../../src/components/selfie/hooks/useVideoRecorderStyles.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\n/**\n * Hook personnalisé pour injecter des styles CSS globaux qui ciblent spécifiquement\n * le composant VideoRecorder d'Unissey et éliminent les bords arrondis et les fonds noirs.\n */\nconst useVideoRecorderStyles = (btnBg?: string, btnText?: string) => {\n const resolvedBtnBg = btnBg ?? \"#11E5C5\";\n const resolvedBtnText = btnText ?? \"#3C3C40\";\n\n useEffect(() => {\n // Créer un élément style pour injecter des règles CSS\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"video-recorder-custom-styles\";\n\n // Définir les règles CSS nécessaires pour éliminer les bords arrondis et les fonds noirs\n styleElement.textContent = `\n /* Cibler le composant VideoRecorder et tous ses éléments internes */\n uni-video-recorder,\n uni-video-recorder::shadow-root,\n uni-video-recorder::part(*),\n uni-video-recorder *,\n uni-video-recorder video,\n uni-video-recorder canvas,\n uni-video-recorder div {\n border-radius: 0 !important;\n -webkit-border-radius: 0 !important;\n -moz-border-radius: 0 !important;\n background: transparent !important;\n overflow: hidden !important;\n }\n\n /* Assurer que la vidéo prend tout l'espace disponible */\n uni-video-recorder video,\n uni-video-recorder canvas {\n width: 100% !important;\n height: 100% !important;\n object-fit: cover !important;\n max-height: none !important;\n }\n\n /* iOS-specific fixes for getUserMedia black screen */\n @supports (-webkit-touch-callout: none) {\n uni-video-recorder video {\n -webkit-playsinline: true !important;\n playsinline: true !important;\n autoplay: true !important;\n muted: true !important;\n }\n }\n\n /* Variables CSS globales que le composant pourrait utiliser */\n :root {\n --uni-video-border-radius: 0 !important;\n --uni-border-radius: 0 !important;\n --uni-component-border-radius: 0 !important;\n --uni-video-background: transparent !important;\n --uni-background: transparent !important;\n }\n\n /* Sélecteurs très spécifiques pour garantir que les styles s'appliquent */\n .video-container,\n .video-container > div,\n .video-container > div > uni-video-recorder,\n .video-container uni-video-recorder,\n .selfie .video-container,\n .selfie .video-container > div,\n .selfie .video-container uni-video-recorder {\n border-radius: 0 !important;\n background: transparent !important;\n overflow: hidden !important;\n }\n\n /* Préserver les styles des boutons */\n .selfie button.selfie-button,\n button.selfie-button,\n .selfie-button {\n background-color: ${resolvedBtnBg} !important;\n color: ${resolvedBtnText} !important;\n border-radius: 12px !important;\n }\n\n .selfie button.selfie-button:hover,\n button.selfie-button:hover,\n .selfie-button:hover {\n background-color: ${resolvedBtnBg} !important;\n filter: brightness(1.1);\n }\n\n .selfie button.selfie-button:disabled,\n button.selfie-button:disabled,\n .selfie-button:disabled {\n background-color: #e2e8f0 !important;\n opacity: 0.6 !important;\n }\n `;\n\n // Ajouter l'élément style au head du document\n document.head.appendChild(styleElement);\n\n // Nettoyer en supprimant l'élément style lors du démontage du composant\n return () => {\n const existingStyle = document.getElementById(\n \"video-recorder-custom-styles\"\n );\n if (existingStyle) {\n document.head.removeChild(existingStyle);\n }\n };\n }, [resolvedBtnBg, resolvedBtnText]);\n};\n\nexport default useVideoRecorderStyles;\n"],"names":[],"mappings":";;AAEA;;;AAGG;AACH,IAAM,sBAAsB,GAAG,UAAC,KAAc,EAAE,OAAgB,EAAA;IAC9D,IAAM,aAAa,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,SAAS;IACxC,IAAM,eAAe,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,SAAS;AAE5C,IAAA,SAAS,CAAC,YAAA;;QAER,IAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACpD,QAAA,YAAY,CAAC,EAAE,GAAG,8BAA8B;;QAGhD,YAAY,CAAC,WAAW,GAAG,mpEAAA,CAAA,MAAA,CA6DH,aAAa,0CACxB,eAAe,EAAA,0MAAA,CAAA,CAAA,MAAA,CAOJ,aAAa,EAAA,gRAAA,CAUpC;;AAGD,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;;QAGvC,OAAO,YAAA;YACL,IAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAC3C,8BAA8B,CAC/B;YACD,IAAI,aAAa,EAAE;AACjB,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;YAC1C;AACF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AACtC;;;;"}
|