datakeen-session-react 1.1.181 → 1.1.183

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.
Files changed (97) hide show
  1. package/.gitlab-ci.yml +115 -46
  2. package/dist/cjs/components/document-collection/DocumentCollection.js +4 -2
  3. package/dist/cjs/components/document-collection/DocumentCollection.js.map +1 -1
  4. package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js +1 -1
  5. package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js.map +1 -1
  6. package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js +1 -1
  7. package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js.map +1 -1
  8. package/dist/cjs/components/document-collection/DocumentCollectionSelection.js +1 -1
  9. package/dist/cjs/components/document-collection/DocumentCollectionSelection.js.map +1 -1
  10. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js +1 -1
  11. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js.map +1 -1
  12. package/dist/cjs/components/document-collection/DocumentError.js +1 -1
  13. package/dist/cjs/components/document-collection/DocumentError.js.map +1 -1
  14. package/dist/cjs/components/jdi/JDICountrySelection.js +1 -1
  15. package/dist/cjs/components/jdi/JDICountrySelection.js.map +1 -1
  16. package/dist/cjs/components/jdi/JDIDocumentSelection.js +1 -1
  17. package/dist/cjs/components/jdi/JDIDocumentSelection.js.map +1 -1
  18. package/dist/cjs/components/jdi/JDIDocumentUpload.js +1 -1
  19. package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +1 -1
  20. package/dist/cjs/components/jdi/JDIError.js +1 -1
  21. package/dist/cjs/components/jdi/JDIError.js.map +1 -1
  22. package/dist/cjs/components/jdi/JDIPreIntroduction.js +1 -1
  23. package/dist/cjs/components/jdi/JDIPreIntroduction.js.map +1 -1
  24. package/dist/cjs/components/selfie/Video.js +2 -2
  25. package/dist/cjs/components/selfie/Video.js.map +1 -1
  26. package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js +2 -11
  27. package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js.map +1 -1
  28. package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +1 -1
  29. package/dist/cjs/components/session/DocumentCheck.js +4 -2
  30. package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
  31. package/dist/cjs/components/session/Selfie.js +6 -18
  32. package/dist/cjs/components/session/Selfie.js.map +1 -1
  33. package/dist/cjs/components/session/UserInputForm/LegalRepFields.js +5 -1
  34. package/dist/cjs/components/session/UserInputForm/LegalRepFields.js.map +1 -1
  35. package/dist/cjs/components/session/UserInputForm.js +1 -7
  36. package/dist/cjs/components/session/UserInputForm.js.map +1 -1
  37. package/dist/cjs/components/signature-electronic/SignatureElectronic.js +1 -1
  38. package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +1 -1
  39. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js +2 -2
  40. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js.map +1 -1
  41. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +74 -36
  42. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  43. package/dist/cjs/constants/userInputForm.js.map +1 -1
  44. package/dist/cjs/hooks/useStepNavigation.js +60 -12
  45. package/dist/cjs/hooks/useStepNavigation.js.map +1 -1
  46. package/dist/cjs/hooks/useUserInputForm.js +12 -3
  47. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  48. package/dist/cjs/types/session.js.map +1 -1
  49. package/dist/esm/components/document-collection/DocumentCollection.js +4 -2
  50. package/dist/esm/components/document-collection/DocumentCollection.js.map +1 -1
  51. package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js +1 -1
  52. package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js.map +1 -1
  53. package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js +1 -1
  54. package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js.map +1 -1
  55. package/dist/esm/components/document-collection/DocumentCollectionSelection.js +1 -1
  56. package/dist/esm/components/document-collection/DocumentCollectionSelection.js.map +1 -1
  57. package/dist/esm/components/document-collection/DocumentCollectionUpload.js +1 -1
  58. package/dist/esm/components/document-collection/DocumentCollectionUpload.js.map +1 -1
  59. package/dist/esm/components/document-collection/DocumentError.js +1 -1
  60. package/dist/esm/components/document-collection/DocumentError.js.map +1 -1
  61. package/dist/esm/components/jdi/JDICountrySelection.js +1 -1
  62. package/dist/esm/components/jdi/JDICountrySelection.js.map +1 -1
  63. package/dist/esm/components/jdi/JDIDocumentSelection.js +1 -1
  64. package/dist/esm/components/jdi/JDIDocumentSelection.js.map +1 -1
  65. package/dist/esm/components/jdi/JDIDocumentUpload.js +1 -1
  66. package/dist/esm/components/jdi/JDIDocumentUpload.js.map +1 -1
  67. package/dist/esm/components/jdi/JDIError.js +1 -1
  68. package/dist/esm/components/jdi/JDIError.js.map +1 -1
  69. package/dist/esm/components/jdi/JDIPreIntroduction.js +1 -1
  70. package/dist/esm/components/jdi/JDIPreIntroduction.js.map +1 -1
  71. package/dist/esm/components/selfie/Video.js +2 -2
  72. package/dist/esm/components/selfie/Video.js.map +1 -1
  73. package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js +2 -11
  74. package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js.map +1 -1
  75. package/dist/esm/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +1 -1
  76. package/dist/esm/components/session/DocumentCheck.js +4 -2
  77. package/dist/esm/components/session/DocumentCheck.js.map +1 -1
  78. package/dist/esm/components/session/Selfie.js +6 -18
  79. package/dist/esm/components/session/Selfie.js.map +1 -1
  80. package/dist/esm/components/session/UserInputForm/LegalRepFields.js +5 -1
  81. package/dist/esm/components/session/UserInputForm/LegalRepFields.js.map +1 -1
  82. package/dist/esm/components/session/UserInputForm.js +1 -7
  83. package/dist/esm/components/session/UserInputForm.js.map +1 -1
  84. package/dist/esm/components/signature-electronic/SignatureElectronic.js +1 -1
  85. package/dist/esm/components/signature-electronic/SignatureElectronic.js.map +1 -1
  86. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js +2 -2
  87. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js.map +1 -1
  88. package/dist/esm/components/template/ExternalVerificationNodeHandler.js +75 -37
  89. package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  90. package/dist/esm/constants/userInputForm.js.map +1 -1
  91. package/dist/esm/hooks/useStepNavigation.js +60 -12
  92. package/dist/esm/hooks/useStepNavigation.js.map +1 -1
  93. package/dist/esm/hooks/useUserInputForm.js +12 -3
  94. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  95. package/dist/esm/types/session.js.map +1 -1
  96. package/docs/navigation-history.md +18 -1
  97. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentCollectionUpload.js","sources":["../../../../../src/components/document-collection/DocumentCollectionUpload.tsx"],"sourcesContent":["import React, { useState, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\nimport {\n logDocumentLoaded,\n logDocumentsValidated,\n} from \"../../services/auditTrailService\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionUploadProps {\n onUpload: (files: onUploadFiles) => void;\n onBack: () => void;\n selectedDocumentType: string;\n allowedDocumentTypes: AllowedDocumentType[];\n documentSelection?: {\n title?: string;\n description?: string;\n };\n sessionId?: string;\n}\n\nconst DocumentCollectionUpload = ({\n onUpload,\n onBack,\n selectedDocumentType,\n allowedDocumentTypes,\n documentSelection,\n sessionId,\n}: DocumentCollectionUploadProps) => {\n const { t } = useI18n();\n const [frontImage, setFrontImage] = useState<string | null>(null);\n const [backImage, setBackImage] = useState<string | null>(null);\n const [frontIsPDF, setFrontIsPDF] = useState<boolean>(false);\n const [backIsPDF, setBackIsPDF] = useState<boolean>(false);\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\n const requiresTwoSides = (): boolean => {\n const selected = allowedDocumentTypes.find(\n (d) => d.id === selectedDocumentType,\n );\n return selected?.side === \"RECTO_VERSO\";\n };\n\n const getSelectedDocumentName = () => {\n const selectedDoc = allowedDocumentTypes.find(\n (doc) => doc.id === selectedDocumentType,\n );\n if (!selectedDoc) return \"document\";\n return t(selectedDoc.name) || selectedDoc.name;\n };\n\n const handleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n side: \"front\" | \"back\" = \"front\",\n ) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n\n setError(\"\");\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (side === \"front\") {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n };\n\n const handleMultipleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const files = event.target.files;\n if (!files) return;\n const maxFiles = requiresTwoSides() ? 2 : 1;\n if (files.length > maxFiles) {\n setError(t(\"document_upload.errors.max_files\"));\n return;\n }\n setError(\"\");\n Array.from(files).forEach((file, index) => {\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (index === 0) {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else if (index === 1 && requiresTwoSides()) {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n });\n };\n\n const handleUpload = async () => {\n setError(\"\");\n if (!frontImage) {\n setError(t(\"jdi.document_upload.errors.add_photo_identity\"));\n return;\n }\n\n setIsUploading(true);\n try {\n const files = {\n front: frontImage,\n back: requiresTwoSides() ? backImage : null,\n };\n if (sessionId) {\n logDocumentLoaded(sessionId, \"recto\");\n if (requiresTwoSides() && backImage) {\n logDocumentLoaded(sessionId, \"verso\");\n }\n logDocumentsValidated(sessionId);\n }\n onUpload(files);\n } catch (err) {\n setError(t(\"document_upload.errors.upload_error\"));\n setIsUploading(false);\n }\n };\n\n const removeImage = (side: \"front\" | \"back\" = \"front\") => {\n if (side === \"front\") {\n setFrontImage(null);\n setFrontIsPDF(false);\n } else {\n setBackImage(null);\n setBackIsPDF(false);\n }\n setError(\"\");\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleUpload}\n disabled={!frontImage || isUploading}\n >\n {isUploading\n ? t(\"jdi.processing.download\")\n : requiresTwoSides()\n ? t(\"jdi.document_upload.validate_multiple\")\n : t(\"jdi.document_upload.validate_single\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack} disabled={isUploading}>\n {t(\"buttons.back\")}\n </Button>\n }\n />\n }\n >\n <div className=\"flex-1 flex items-start justify-center md:items-center p-4\">\n <div className=\"w-full max-w-lg\">\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {t(\"document_upload.upload_title\")}\n </h1>\n <p className=\"text-gray-600\">\n {t(\"document_upload.upload_description\")}\n </p>\n </div>\n\n {error && (\n <div className=\"mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700\">\n {error}\n </div>\n )}\n\n <Card\n className=\"border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center\"\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n const files = e.dataTransfer.files;\n if (files.length > 0) {\n const syntheticEvent = { target: { files } } as any;\n requiresTwoSides() ? handleMultipleFileChange(syntheticEvent) : handleFileChange(syntheticEvent);\n }\n }}\n >\n {!frontImage ? (\n <div className=\"space-y-6\">\n <h3 className=\"text-lg font-semibold text-gray-900\">{getSelectedDocumentName()}</h3>\n <Button\n onClick={() => requiresTwoSides() ? multipleInputRef.current?.click() : frontInputRef.current?.click()}\n className=\"bg-teal-600 text-white hover:bg-teal-700 px-6 py-2 rounded-lg font-medium mx-auto flex items-center gap-2\"\n disabled={isUploading}\n >\n <Upload size={18} />\n <span>{t(\"document_upload.browse_files\")}</span>\n </Button>\n <div className=\"text-xs text-gray-500 space-y-1\">\n <p>{t(\"document_upload.accepted_formats\")}</p>\n <p>{requiresTwoSides() ? t(\"document_upload.multiple_files_info\") : t(\"document_upload.single_file_info\")}</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{frontIsPDF ? t(\"document_upload.pdf_preview\") : t(\"document_upload.image_preview\")}</p>\n {frontIsPDF ? <PDFPreview src={frontImage} /> : <img src={frontImage} alt={t(\"document_upload.front_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"front\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n {requiresTwoSides() && backImage && (\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{t(\"document_upload.back_side\")} {backIsPDF ? \"PDF\" : \"\"}</p>\n {backIsPDF ? <PDFPreview src={backImage} /> : <img src={backImage} alt={t(\"document_upload.back_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"back\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n )}\n {requiresTwoSides() && !backImage && (\n <Button\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*,.pdf\";\n input.onchange = (e) => handleFileChange(e as any, \"back\");\n input.click();\n }}\n className=\"text-teal-600 border border-teal-600 bg-transparent hover:bg-teal-50 w-full\"\n >\n {t(\"document_upload.add_back\")}\n </Button>\n )}\n </div>\n )}\n </Card>\n\n <input ref={frontInputRef} type=\"file\" accept=\"image/*,.pdf\" onChange={(e) => handleFileChange(e, \"front\")} className=\"hidden\" />\n <input ref={multipleInputRef} type=\"file\" accept=\"image/*,.pdf\" multiple={true} onChange={handleMultipleFileChange} className=\"hidden\" />\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionUpload;\n"],"names":["useI18n","useState","useRef","__awaiter","logDocumentLoaded","logDocumentsValidated","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Card","Upload","PDFPreview"],"mappings":"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"}
1
+ {"version":3,"file":"DocumentCollectionUpload.js","sources":["../../../../../src/components/document-collection/DocumentCollectionUpload.tsx"],"sourcesContent":["import React, { useState, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\nimport {\n logDocumentLoaded,\n logDocumentsValidated,\n} from \"../../services/auditTrailService\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionUploadProps {\n onUpload: (files: onUploadFiles) => void;\n onBack?: () => void;\n selectedDocumentType: string;\n allowedDocumentTypes: AllowedDocumentType[];\n documentSelection?: {\n title?: string;\n description?: string;\n };\n sessionId?: string;\n}\n\nconst DocumentCollectionUpload = ({\n onUpload,\n onBack,\n selectedDocumentType,\n allowedDocumentTypes,\n documentSelection,\n sessionId,\n}: DocumentCollectionUploadProps) => {\n const { t } = useI18n();\n const [frontImage, setFrontImage] = useState<string | null>(null);\n const [backImage, setBackImage] = useState<string | null>(null);\n const [frontIsPDF, setFrontIsPDF] = useState<boolean>(false);\n const [backIsPDF, setBackIsPDF] = useState<boolean>(false);\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\n const requiresTwoSides = (): boolean => {\n const selected = allowedDocumentTypes.find(\n (d) => d.id === selectedDocumentType,\n );\n return selected?.side === \"RECTO_VERSO\";\n };\n\n const getSelectedDocumentName = () => {\n const selectedDoc = allowedDocumentTypes.find(\n (doc) => doc.id === selectedDocumentType,\n );\n if (!selectedDoc) return \"document\";\n return t(selectedDoc.name) || selectedDoc.name;\n };\n\n const handleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n side: \"front\" | \"back\" = \"front\",\n ) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n\n setError(\"\");\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (side === \"front\") {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n };\n\n const handleMultipleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const files = event.target.files;\n if (!files) return;\n const maxFiles = requiresTwoSides() ? 2 : 1;\n if (files.length > maxFiles) {\n setError(t(\"document_upload.errors.max_files\"));\n return;\n }\n setError(\"\");\n Array.from(files).forEach((file, index) => {\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (index === 0) {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else if (index === 1 && requiresTwoSides()) {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n });\n };\n\n const handleUpload = async () => {\n setError(\"\");\n if (!frontImage) {\n setError(t(\"jdi.document_upload.errors.add_photo_identity\"));\n return;\n }\n\n setIsUploading(true);\n try {\n const files = {\n front: frontImage,\n back: requiresTwoSides() ? backImage : null,\n };\n if (sessionId) {\n logDocumentLoaded(sessionId, \"recto\");\n if (requiresTwoSides() && backImage) {\n logDocumentLoaded(sessionId, \"verso\");\n }\n logDocumentsValidated(sessionId);\n }\n onUpload(files);\n } catch (err) {\n setError(t(\"document_upload.errors.upload_error\"));\n setIsUploading(false);\n }\n };\n\n const removeImage = (side: \"front\" | \"back\" = \"front\") => {\n if (side === \"front\") {\n setFrontImage(null);\n setFrontIsPDF(false);\n } else {\n setBackImage(null);\n setBackIsPDF(false);\n }\n setError(\"\");\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleUpload}\n disabled={!frontImage || isUploading}\n >\n {isUploading\n ? t(\"jdi.processing.download\")\n : requiresTwoSides()\n ? t(\"jdi.document_upload.validate_multiple\")\n : t(\"jdi.document_upload.validate_single\")}\n </Button>\n }\n secondary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack} disabled={isUploading}>\n {t(\"buttons.back\")}\n </Button>\n ) : undefined}\n />\n }\n >\n <div className=\"flex-1 flex items-start justify-center md:items-center p-4\">\n <div className=\"w-full max-w-lg\">\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {t(\"document_upload.upload_title\")}\n </h1>\n <p className=\"text-gray-600\">\n {t(\"document_upload.upload_description\")}\n </p>\n </div>\n\n {error && (\n <div className=\"mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700\">\n {error}\n </div>\n )}\n\n <Card\n className=\"border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center\"\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n const files = e.dataTransfer.files;\n if (files.length > 0) {\n const syntheticEvent = { target: { files } } as any;\n requiresTwoSides() ? handleMultipleFileChange(syntheticEvent) : handleFileChange(syntheticEvent);\n }\n }}\n >\n {!frontImage ? (\n <div className=\"space-y-6\">\n <h3 className=\"text-lg font-semibold text-gray-900\">{getSelectedDocumentName()}</h3>\n <Button\n onClick={() => requiresTwoSides() ? multipleInputRef.current?.click() : frontInputRef.current?.click()}\n className=\"bg-teal-600 text-white hover:bg-teal-700 px-6 py-2 rounded-lg font-medium mx-auto flex items-center gap-2\"\n disabled={isUploading}\n >\n <Upload size={18} />\n <span>{t(\"document_upload.browse_files\")}</span>\n </Button>\n <div className=\"text-xs text-gray-500 space-y-1\">\n <p>{t(\"document_upload.accepted_formats\")}</p>\n <p>{requiresTwoSides() ? t(\"document_upload.multiple_files_info\") : t(\"document_upload.single_file_info\")}</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{frontIsPDF ? t(\"document_upload.pdf_preview\") : t(\"document_upload.image_preview\")}</p>\n {frontIsPDF ? <PDFPreview src={frontImage} /> : <img src={frontImage} alt={t(\"document_upload.front_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"front\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n {requiresTwoSides() && backImage && (\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{t(\"document_upload.back_side\")} {backIsPDF ? \"PDF\" : \"\"}</p>\n {backIsPDF ? <PDFPreview src={backImage} /> : <img src={backImage} alt={t(\"document_upload.back_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"back\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n )}\n {requiresTwoSides() && !backImage && (\n <Button\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*,.pdf\";\n input.onchange = (e) => handleFileChange(e as any, \"back\");\n input.click();\n }}\n className=\"text-teal-600 border border-teal-600 bg-transparent hover:bg-teal-50 w-full\"\n >\n {t(\"document_upload.add_back\")}\n </Button>\n )}\n </div>\n )}\n </Card>\n\n <input ref={frontInputRef} type=\"file\" accept=\"image/*,.pdf\" onChange={(e) => handleFileChange(e, \"front\")} className=\"hidden\" />\n <input ref={multipleInputRef} type=\"file\" accept=\"image/*,.pdf\" multiple={true} onChange={handleMultipleFileChange} className=\"hidden\" />\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionUpload;\n"],"names":["useI18n","useState","useRef","__awaiter","logDocumentLoaded","logDocumentsValidated","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Card","Upload","PDFPreview"],"mappings":";;;;;;;;;;;;;;;;AAmCA,IAAM,wBAAwB,GAAG,UAAC,EAOF,EAAA;AAN5B,IAAA,IAAA,QAAQ,GAAA,EAAA,CAAA,QAAA,CAAA,CACR,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,oBAAoB,GAAA,EAAA,CAAA,oBAAA,CAAA,CACpB,oBAAoB,0BAAA,CAAA,CACH,EAAA,CAAA,iBAAA,CAAA,KACjB,SAAS,GAAA,EAAA,CAAA;AAED,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAA8BC,cAAQ,CAAgB,IAAI,CAAC,EAA1D,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAAiC;IAC3D,IAAA,EAAA,GAA4BA,cAAQ,CAAgB,IAAI,CAAC,EAAxD,SAAS,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,YAAY,GAAA,EAAA,CAAA,CAAA,CAAiC;IACzD,IAAA,EAAA,GAA8BA,cAAQ,CAAU,KAAK,CAAC,EAArD,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAA4B;IACtD,IAAA,EAAA,GAA4BA,cAAQ,CAAU,KAAK,CAAC,EAAnD,SAAS,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,YAAY,GAAA,EAAA,CAAA,CAAA,CAA4B;IACpD,IAAA,EAAA,GAAgCA,cAAQ,CAAC,KAAK,CAAC,EAA9C,WAAW,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,cAAc,GAAA,EAAA,CAAA,CAAA,CAAmB;IAC/C,IAAA,EAAA,GAAoBA,cAAQ,CAAS,EAAE,CAAC,EAAvC,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAwB;IACxC,IAAA,EAAA,GAA8BA,cAAQ,CAAC,KAAK,CAAC,CAAA,CAAlC,EAAA,CAAA,CAAA,CAAA,CAAA,CAAe,EAAA,CAAA,CAAA;AAEhC,IAAA,IAAM,aAAa,GAAGC,YAAM,CAAmB,IAAI,CAAC;AACpD,IAAA,IAAM,gBAAgB,GAAGA,YAAM,CAAmB,IAAI,CAAC;AACvD,IAAoBA,YAAM,CAAiB,IAAI;AAE/C,IAAA,IAAM,gBAAgB,GAAG,YAAA;AACrB,QAAA,IAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CACtC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAA,CAA7B,CAA6B,CACvC;QACD,OAAO,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,IAAI,MAAK,aAAa;AAC3C,IAAA,CAAC;AAED,IAAA,IAAM,uBAAuB,GAAG,YAAA;AAC5B,QAAA,IAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CACzC,UAAC,GAAG,EAAA,EAAK,OAAA,GAAG,CAAC,EAAE,KAAK,oBAAoB,CAAA,CAA/B,CAA+B,CAC3C;AACD,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,UAAU;QACnC,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI;AAClD,IAAA,CAAC;AAED,IAAA,IAAM,gBAAgB,GAAG,UACrB,KAA0C,EAC1C,IAAgC,EAAA;;AAAhC,QAAA,IAAA,IAAA,KAAA,MAAA,EAAA,EAAA,IAAA,GAAA,OAAgC,CAAA,CAAA;QAEhC,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,IACI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAC1C;AACE,YAAA,QAAQ,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC;YACvD;QACJ;QACA,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE;AAC9B,YAAA,QAAQ,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC;YACpD;QACJ;QAEA,QAAQ,CAAC,EAAE,CAAC;AACZ,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,iBAAiB;AACjD,QAAA,IAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,MAAM,GAAG,UAAC,CAAC,EAAA;;YACd,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAgB;AACzC,YAAA,IAAI,IAAI,KAAK,OAAO,EAAE;gBAClB,aAAa,CAAC,MAAM,CAAC;gBACrB,aAAa,CAAC,SAAS,CAAC;YAC5B;iBAAO;gBACH,YAAY,CAAC,MAAM,CAAC;gBACpB,YAAY,CAAC,SAAS,CAAC;YAC3B;AACJ,QAAA,CAAC;AACD,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC9B,IAAA,CAAC;IAED,IAAM,wBAAwB,GAAG,UAC7B,KAA0C,EAAA;AAE1C,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AAChC,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,IAAM,QAAQ,GAAG,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE;AACzB,YAAA,QAAQ,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;YAC/C;QACJ;QACA,QAAQ,CAAC,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,KAAK,EAAA;YAClC,IACI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAC1C;AACE,gBAAA,QAAQ,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC;gBACvD;YACJ;YACA,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE;AAC9B,gBAAA,QAAQ,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC;gBACpD;YACJ;AACA,YAAA,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,iBAAiB;AACjD,YAAA,IAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,MAAM,GAAG,UAAC,CAAC,EAAA;;gBACd,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAgB;AACzC,gBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;oBACb,aAAa,CAAC,MAAM,CAAC;oBACrB,aAAa,CAAC,SAAS,CAAC;gBAC5B;AAAO,qBAAA,IAAI,KAAK,KAAK,CAAC,IAAI,gBAAgB,EAAE,EAAE;oBAC1C,YAAY,CAAC,MAAM,CAAC;oBACpB,YAAY,CAAC,SAAS,CAAC;gBAC3B;AACJ,YAAA,CAAC;AACD,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC9B,QAAA,CAAC,CAAC;AACN,IAAA,CAAC;AAED,IAAA,IAAM,YAAY,GAAG,YAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;YACjB,QAAQ,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,UAAU,EAAE;AACb,gBAAA,QAAQ,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC;gBAC5D,OAAA,CAAA,CAAA,YAAA;YACJ;YAEA,cAAc,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI;AACM,gBAAA,KAAK,GAAG;AACV,oBAAA,KAAK,EAAE,UAAU;oBACjB,IAAI,EAAE,gBAAgB,EAAE,GAAG,SAAS,GAAG,IAAI;iBAC9C;gBACD,IAAI,SAAS,EAAE;AACX,oBAAAC,mCAAiB,CAAC,SAAS,EAAE,OAAO,CAAC;AACrC,oBAAA,IAAI,gBAAgB,EAAE,IAAI,SAAS,EAAE;AACjC,wBAAAA,mCAAiB,CAAC,SAAS,EAAE,OAAO,CAAC;oBACzC;oBACAC,uCAAqB,CAAC,SAAS,CAAC;gBACpC;gBACA,QAAQ,CAAC,KAAK,CAAC;YACnB;YAAE,OAAO,GAAG,EAAE;AACV,gBAAA,QAAQ,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;gBAClD,cAAc,CAAC,KAAK,CAAC;YACzB;;;SACH;IAED,IAAM,WAAW,GAAG,UAAC,IAAgC,EAAA;AAAhC,QAAA,IAAA,IAAA,KAAA,MAAA,EAAA,EAAA,IAAA,GAAA,OAAgC,CAAA,CAAA;AACjD,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;YAClB,aAAa,CAAC,IAAI,CAAC;YACnB,aAAa,CAAC,KAAK,CAAC;QACxB;aAAO;YACH,YAAY,CAAC,IAAI,CAAC;YAClB,YAAY,CAAC,KAAK,CAAC;QACvB;QACA,QAAQ,CAAC,EAAE,CAAC;AAChB,IAAA,CAAC;IAED,QACIC,cAAA,CAACC,wBAAgB,EAAA,EACb,MAAM,EACFD,cAAA,CAACE,mBAAW,EAAA,EACJ,OAAO,EACHF,cAAA,CAACG,cAAM,EAAA,EACH,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,CAAC,UAAU,IAAI,WAAW,EAAA,QAAA,EAEnC;AACG,sBAAE,CAAC,CAAC,yBAAyB;sBAC3B,gBAAgB;AACd,0BAAE,CAAC,CAAC,uCAAuC;0BACzC,CAAC,CAAC,qCAAqC,CAAC,GAC7C,EAEb,SAAS,EAAE,MAAM,IACbH,cAAA,CAACG,cAAM,EAAA,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAA,QAAA,EAC7D,CAAC,CAAC,cAAc,CAAC,EAAA,CACb,IACT,SAAS,EAAA,CACf,EAAA,QAAA,EAGVH,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4DAA4D,EAAA,QAAA,EACvEI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC5BA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CAC7BJ,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAC5D,CAAC,CAAC,8BAA8B,CAAC,EAAA,CACjC,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,eAAe,YACvB,CAAC,CAAC,oCAAoC,CAAC,EAAA,CACxC,CAAA,EAAA,CACF,EAEL,KAAK,KACFA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0EAA0E,YACpF,KAAK,EAAA,CACJ,CACT,EAEDA,cAAA,CAACK,SAAI,EAAA,EACD,SAAS,EAAC,2EAA2E,EACrF,UAAU,EAAE,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,cAAc,EAAE,CAAA,CAAlB,CAAkB,EACrC,MAAM,EAAE,UAAC,CAAC,EAAA;4BACN,CAAC,CAAC,cAAc,EAAE;AAClB,4BAAA,IAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK;AAClC,4BAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gCAClB,IAAM,cAAc,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAA,KAAA,EAAE,EAAS;AACnD,gCAAA,gBAAgB,EAAE,GAAG,wBAAwB,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAAC,cAAc,CAAC;4BACpG;AACJ,wBAAA,CAAC,EAAA,QAAA,EAEA,CAAC,UAAU,IACRD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACtBJ,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,qCAAqC,EAAA,QAAA,EAAE,uBAAuB,EAAE,EAAA,CAAM,EACpFI,eAAA,CAACD,cAAM,EAAA,EACH,OAAO,EAAE,YAAA,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAM,OAAA,gBAAgB,EAAE,GAAG,CAAA,EAAA,GAAA,gBAAgB,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,GAAG,CAAA,EAAA,GAAA,aAAa,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,CAAA,CAAA,CAAA,EACtG,SAAS,EAAC,2GAA2G,EACrH,QAAQ,EAAE,WAAW,EAAA,QAAA,EAAA,CAErBH,cAAA,CAACM,kBAAM,IAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EACpBN,cAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,CAAC,CAAC,8BAA8B,CAAC,EAAA,CAAQ,CAAA,EAAA,CAC3C,EACTI,yBAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAAA,CAC5CJ,cAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAI,CAAC,CAAC,kCAAkC,CAAC,EAAA,CAAK,EAC9CA,cAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAI,gBAAgB,EAAE,GAAG,CAAC,CAAC,qCAAqC,CAAC,GAAG,CAAC,CAAC,kCAAkC,CAAC,EAAA,CAAK,CAAA,EAAA,CAC5G,CAAA,EAAA,CACJ,KAENI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACtBA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAC1DJ,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAAE,UAAU,GAAG,CAAC,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC,+BAA+B,CAAC,EAAA,CAAK,EAC/H,UAAU,GAAGA,eAACO,kBAAU,EAAA,EAAC,GAAG,EAAE,UAAU,EAAA,CAAI,GAAGP,cAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,4BAA4B,CAAC,EAAE,SAAS,EAAC,kBAAkB,EAAA,CAAG,EAC3IA,2BAAQ,OAAO,EAAE,YAAA,EAAM,OAAA,WAAW,CAAC,OAAO,CAAC,EAApB,CAAoB,EAAE,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAAA,QAAA,EAAA,CAAW,CAAA,EAAA,CACxH,EACL,gBAAgB,EAAE,IAAI,SAAS,KAC5BI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAC1DA,eAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAAA,CAAE,CAAC,CAAC,2BAA2B,CAAC,EAAA,GAAA,EAAG,SAAS,GAAG,KAAK,GAAG,EAAE,CAAA,EAAA,CAAK,EACpG,SAAS,GAAGJ,cAAA,CAACO,kBAAU,EAAA,EAAC,GAAG,EAAE,SAAS,EAAA,CAAI,GAAGP,wBAAK,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,2BAA2B,CAAC,EAAE,SAAS,EAAC,kBAAkB,EAAA,CAAG,EACvIA,cAAA,CAAA,QAAA,EAAA,EAAQ,OAAO,EAAE,YAAA,EAAM,OAAA,WAAW,CAAC,MAAM,CAAC,CAAA,CAAnB,CAAmB,EAAE,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAAA,QAAA,EAAA,CAAW,CAAA,EAAA,CACvH,CACT,EACA,gBAAgB,EAAE,IAAI,CAAC,SAAS,KAC7BA,cAAA,CAACG,cAAM,EAAA,EACH,OAAO,EAAE,YAAA;wCACL,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,wCAAA,KAAK,CAAC,IAAI,GAAG,MAAM;AACnB,wCAAA,KAAK,CAAC,MAAM,GAAG,cAAc;AAC7B,wCAAA,KAAK,CAAC,QAAQ,GAAG,UAAC,CAAC,EAAA,EAAK,OAAA,gBAAgB,CAAC,CAAQ,EAAE,MAAM,CAAC,CAAA,CAAlC,CAAkC;wCAC1D,KAAK,CAAC,KAAK,EAAE;AACjB,oCAAA,CAAC,EACD,SAAS,EAAC,6EAA6E,EAAA,QAAA,EAEtF,CAAC,CAAC,0BAA0B,CAAC,EAAA,CACzB,CACZ,CAAA,EAAA,CACC,CACT,EAAA,CACE,EAEPH,0BAAO,GAAG,EAAE,aAAa,EAAE,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,QAAQ,EAAE,UAAC,CAAC,EAAA,EAAK,OAAA,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,EAA5B,CAA4B,EAAE,SAAS,EAAC,QAAQ,EAAA,CAAG,EACjIA,cAAA,CAAA,OAAA,EAAA,EAAO,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,wBAAwB,EAAE,SAAS,EAAC,QAAQ,EAAA,CAAG,IACvI,EAAA,CACJ,EAAA,CACS;AAE3B;;;;"}
@@ -58,7 +58,7 @@ var DocumentError = function (_a) {
58
58
  defaultValue: "Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous.",
59
59
  }) })] }), !blockContinue && (jsxRuntime.jsxs("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-red-900 mb-2", children: t("errors.problems_detected", "Problèmes détectés") }), jsxRuntime.jsx("div", { className: "text-sm text-red-800 space-y-1", children: validationPoints.map(function (point, index) { return (jsxRuntime.jsx("p", { children: point }, index)); }) })] })), !blockContinue && !isRetryAllowed && (jsxRuntime.jsxs("div", { className: "bg-orange-50 border border-orange-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-orange-900 mb-2", children: t("errors.resubmission.max_attempts_reached", "Nombre maximum de tentatives atteint") }), jsxRuntime.jsx("p", { className: "text-sm text-orange-800", children: maxResubmissionAttempts !== undefined
60
60
  ? t("errors.resubmission.max_attempts_reached_description")
61
- : t("errors.resubmission.no_resubmission_allowed") })] })), !blockContinue && getUserGuidance() && (jsxRuntime.jsxs("div", { className: "bg-yellow-50 border border-yellow-200 rounded-lg p-4", children: [jsxRuntime.jsxs("h3", { className: "font-medium text-yellow-900 mb-2", children: ["\uD83D\uDCA1 ", t("errors.improvement_tips", "Conseils d'amélioration")] }), jsxRuntime.jsx("p", { className: "text-sm text-yellow-800", children: getUserGuidance() })] })), !blockContinue && isRetryAllowed && (jsxRuntime.jsxs("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-blue-900 mb-2", children: t("errors.next_steps", "Prochaines étapes") }), jsxRuntime.jsx("p", { className: "text-sm text-blue-800", children: t("errors.next_steps_description", "Veuillez reprendre les photos de votre document en suivant les conseils d'amélioration pour une meilleure qualité.") })] }))] }) }), jsxRuntime.jsx("div", { className: "sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto", children: [jsxRuntime.jsx("div", { className: "flex flex-col space-y-3 md:hidden", children: blockContinue ? (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [onBackToUserInput && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onBackToUserInput, type: "back", children: t("errors.back_to_user_input", "Retour aux informations d'identité") })), retryCount >= 1 && isRetryAllowed && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") })), isRetryAllowed && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })), !isRetryAllowed && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") }))] })) }), jsxRuntime.jsx("div", { className: "hidden md:flex flex-col space-y-3", children: jsxRuntime.jsx("div", { className: "flex justify-center space-x-3", children: blockContinue ? (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [onBackToUserInput && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onBackToUserInput, type: "back", children: t("errors.back_to_user_input", "Retour aux informations d'identité") })), retryCount >= 1 && isRetryAllowed && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") })), isRetryAllowed && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })), !isRetryAllowed && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onContinueAnyway, type: "continue", children: t("errors.continue_anyway", "Poursuivre tout de même") }))] })) }) })] }) })] }));
61
+ : t("errors.resubmission.no_resubmission_allowed") })] })), !blockContinue && getUserGuidance() && (jsxRuntime.jsxs("div", { className: "bg-yellow-50 border border-yellow-200 rounded-lg p-4", children: [jsxRuntime.jsxs("h3", { className: "font-medium text-yellow-900 mb-2", children: ["\uD83D\uDCA1 ", t("errors.improvement_tips", "Conseils d'amélioration")] }), jsxRuntime.jsx("p", { className: "text-sm text-yellow-800", children: getUserGuidance() })] })), !blockContinue && isRetryAllowed && (jsxRuntime.jsxs("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-blue-900 mb-2", children: t("errors.next_steps", "Prochaines étapes") }), jsxRuntime.jsx("p", { className: "text-sm text-blue-800", children: t("errors.next_steps_description", "Veuillez reprendre les photos de votre document en suivant les conseils d'amélioration pour une meilleure qualité.") })] }))] }) }), jsxRuntime.jsx("div", { className: "sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto", children: [jsxRuntime.jsx("div", { className: "flex flex-col space-y-3 md:hidden", children: blockContinue ? (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [onBackToUserInput && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onBackToUserInput, type: "back", children: t("errors.back_to_user_input", "Retour aux informations d'identité") })), retryCount >= 1 && isRetryAllowed && onContinueAnyway && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") })), isRetryAllowed && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })), !isRetryAllowed && onContinueAnyway && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") }))] })) }), jsxRuntime.jsx("div", { className: "hidden md:flex flex-col space-y-3", children: jsxRuntime.jsx("div", { className: "flex justify-center space-x-3", children: blockContinue ? (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [onBackToUserInput && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onBackToUserInput, type: "back", children: t("errors.back_to_user_input", "Retour aux informations d'identité") })), retryCount >= 1 && isRetryAllowed && onContinueAnyway && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") })), isRetryAllowed && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })), !isRetryAllowed && onContinueAnyway && (jsxRuntime.jsx(ButtonDesktop.default, { onClick: onContinueAnyway, type: "continue", children: t("errors.continue_anyway", "Poursuivre tout de même") }))] })) }) })] }) })] }));
62
62
  };
63
63
 
64
64
  exports.default = DocumentError;
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentError.js","sources":["../../../../../src/components/document-collection/DocumentError.tsx"],"sourcesContent":["import React, { 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 { getValidationPoints } from \"../../utils/validationUtils\";\nimport type { DocumentErrorProps } from \"./types\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst DocumentError: React.FC<DocumentErrorProps> = ({\n documentType,\n documentTypeLabel,\n onRetry,\n onContinueAnyway,\n onBackToUserInput,\n retryCount = 0,\n predictions = [],\n errorDetails,\n allowResubmission,\n maxResubmissionAttempts,\n isRetryAllowed = true,\n errorCode,\n blockContinue = false,\n}) => {\n const { t } = useI18n();\n const [validationPoints, setValidationPoints] = useState<string[]>([]);\n\n useEffect(() => {\n // Use shared utility to get validation points\n setValidationPoints(\n getValidationPoints(errorCode, predictions, t, \"error\"),\n );\n }, [predictions, errorCode, t]);\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 const getDocumentLabel = (documentType: string): string => {\n if (documentTypeLabel) return documentTypeLabel;\n\n const translated = t(documentType);\n // If no translation, use default fallbacks\n if (translated === documentType) {\n switch (documentType) {\n case \"national_id\":\n return t(\"documentTypes.idCard\", \"carte nationale d'identité\");\n case \"passport\":\n return t(\"documentTypes.passport\", \"passeport\");\n case \"driving_license\":\n return t(\"documentTypes.driving_license\", \"permis de conduire\");\n default:\n return t(\"documentTypes.document\", \"document\");\n }\n }\n return translated;\n };\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 {/* 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\", \"Vérification échouée\")}\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: getDocumentLabel(documentType),\n defaultValue:\n \"Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous et réessayer.\",\n })\n : t(\"errors.verification_failed_subtitle_no_retry\", {\n documentType: getDocumentLabel(documentType),\n defaultValue:\n \"Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous.\",\n })}\n </Subtitle>\n </div>\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\", \"Problèmes détectés\")}\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(\n \"errors.resubmission.max_attempts_reached\",\n \"Nombre maximum de tentatives atteint\",\n )}\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\", \"Conseils d'amélioration\")}\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\", \"Prochaines étapes\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\n \"errors.next_steps_description\",\n \"Veuillez reprendre les photos de votre document en suivant les conseils d'amélioration pour une meilleure qualité.\",\n )}\n </p>\n </div>\n )}\n </div>\n </div>\n\n {/* Footer with buttons */}\n <div className=\"sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Mobile layout */}\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {blockContinue ? (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\"errors.retry_verification\", \"Recommencer la vérification\")}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop onClick={onBackToUserInput} type=\"back\">\n {t(\n \"errors.back_to_user_input\",\n \"Retour aux informations d'identité\",\n )}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n\n {/* Desktop layout */}\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(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop onClick={onBackToUserInput} type=\"back\">\n {t(\n \"errors.back_to_user_input\",\n \"Retour aux informations d'identité\",\n )}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"continue\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default DocumentError;\nexport type { DocumentErrorProps };\n"],"names":["useI18n","useState","useEffect","getValidationPoints","_jsxs","_jsx","Title","Subtitle","ButtonDesktop","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"DocumentError.js","sources":["../../../../../src/components/document-collection/DocumentError.tsx"],"sourcesContent":["import React, { 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 { getValidationPoints } from \"../../utils/validationUtils\";\nimport type { DocumentErrorProps } from \"./types\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst DocumentError: React.FC<DocumentErrorProps> = ({\n documentType,\n documentTypeLabel,\n onRetry,\n onContinueAnyway,\n onBackToUserInput,\n retryCount = 0,\n predictions = [],\n errorDetails,\n allowResubmission,\n maxResubmissionAttempts,\n isRetryAllowed = true,\n errorCode,\n blockContinue = false,\n}) => {\n const { t } = useI18n();\n const [validationPoints, setValidationPoints] = useState<string[]>([]);\n\n useEffect(() => {\n // Use shared utility to get validation points\n setValidationPoints(\n getValidationPoints(errorCode, predictions, t, \"error\"),\n );\n }, [predictions, errorCode, t]);\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 const getDocumentLabel = (documentType: string): string => {\n if (documentTypeLabel) return documentTypeLabel;\n\n const translated = t(documentType);\n // If no translation, use default fallbacks\n if (translated === documentType) {\n switch (documentType) {\n case \"national_id\":\n return t(\"documentTypes.idCard\", \"carte nationale d'identité\");\n case \"passport\":\n return t(\"documentTypes.passport\", \"passeport\");\n case \"driving_license\":\n return t(\"documentTypes.driving_license\", \"permis de conduire\");\n default:\n return t(\"documentTypes.document\", \"document\");\n }\n }\n return translated;\n };\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 {/* 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\", \"Vérification échouée\")}\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: getDocumentLabel(documentType),\n defaultValue:\n \"Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous et réessayer.\",\n })\n : t(\"errors.verification_failed_subtitle_no_retry\", {\n documentType: getDocumentLabel(documentType),\n defaultValue:\n \"Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous.\",\n })}\n </Subtitle>\n </div>\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\", \"Problèmes détectés\")}\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(\n \"errors.resubmission.max_attempts_reached\",\n \"Nombre maximum de tentatives atteint\",\n )}\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\", \"Conseils d'amélioration\")}\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\", \"Prochaines étapes\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\n \"errors.next_steps_description\",\n \"Veuillez reprendre les photos de votre document en suivant les conseils d'amélioration pour une meilleure qualité.\",\n )}\n </p>\n </div>\n )}\n </div>\n </div>\n\n {/* Footer with buttons */}\n <div className=\"sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Mobile layout */}\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {blockContinue ? (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\"errors.retry_verification\", \"Recommencer la vérification\")}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop onClick={onBackToUserInput} type=\"back\">\n {t(\n \"errors.back_to_user_input\",\n \"Retour aux informations d'identité\",\n )}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n\n {/* Desktop layout */}\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(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop onClick={onBackToUserInput} type=\"back\">\n {t(\n \"errors.back_to_user_input\",\n \"Retour aux informations d'identité\",\n )}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"continue\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default DocumentError;\nexport type { DocumentErrorProps };\n"],"names":["useI18n","useState","useEffect","getValidationPoints","_jsxs","_jsx","Title","Subtitle","ButtonDesktop","_Fragment"],"mappings":";;;;;;;;;;;;AAUA,IAAM,aAAa,GAAiC,UAAC,EAcpD,EAAA;QAbC,YAAY,GAAA,EAAA,CAAA,YAAA,CAAA,CACZ,iBAAiB,GAAA,EAAA,CAAA,iBAAA,CAAA,CACjB,OAAO,GAAA,EAAA,CAAA,OAAA,CAAA,CACP,gBAAgB,GAAA,EAAA,CAAA,gBAAA,CAAA,CAChB,iBAAiB,uBAAA,CAAA,CACjB,EAAA,GAAA,EAAA,CAAA,UAAc,CAAA,CAAd,UAAU,GAAA,EAAA,KAAA,MAAA,GAAG,CAAC,KAAA,CAAA,CACd,EAAA,GAAA,EAAA,CAAA,WAAgB,CAAA,CAAhB,WAAW,GAAA,EAAA,KAAA,MAAA,GAAG,EAAE,KAAA,CAAA,CACJ,EAAA,CAAA,YAAA,CAAA,CACK,EAAA,CAAA,iBAAA,MACjB,uBAAuB,GAAA,EAAA,CAAA,uBAAA,CAAA,CACvB,EAAA,GAAA,EAAA,CAAA,cAAqB,CAAA,CAArB,cAAc,mBAAG,IAAI,GAAA,EAAA,CAAA,CACrB,SAAS,GAAA,EAAA,CAAA,SAAA,CAAA,CACT,qBAAqB,CAAA,CAArB,aAAa,GAAA,EAAA,KAAA,MAAA,GAAG,KAAK,GAAA;AAEb,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAA0CC,cAAQ,CAAW,EAAE,CAAC,EAA/D,gBAAgB,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,mBAAmB,GAAA,EAAA,CAAA,CAAA,CAA0B;AAEtE,IAAAC,eAAS,CAAC,YAAA;;AAER,QAAA,mBAAmB,CACjBC,mCAAmB,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC,CACxD;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;;AAG/B,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;IAED,IAAM,gBAAgB,GAAG,UAAC,YAAoB,EAAA;AAC5C,QAAA,IAAI,iBAAiB;AAAE,YAAA,OAAO,iBAAiB;AAE/C,QAAA,IAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAAC;;AAElC,QAAA,IAAI,UAAU,KAAK,YAAY,EAAE;YAC/B,QAAQ,YAAY;AAClB,gBAAA,KAAK,aAAa;AAChB,oBAAA,OAAO,CAAC,CAAC,sBAAsB,EAAE,4BAA4B,CAAC;AAChE,gBAAA,KAAK,UAAU;AACb,oBAAA,OAAO,CAAC,CAAC,wBAAwB,EAAE,WAAW,CAAC;AACjD,gBAAA,KAAK,iBAAiB;AACpB,oBAAA,OAAO,CAAC,CAAC,+BAA+B,EAAE,oBAAoB,CAAC;AACjE,gBAAA;AACE,oBAAA,OAAO,CAAC,CAAC,wBAAwB,EAAE,UAAU,CAAC;;QAEpD;AACA,QAAA,OAAO,UAAU;AACnB,IAAA,CAAC;IAED,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6CAA6C,aAE1DC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EACrDD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAEhDC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,aAAa,EAAA,QAAA,EAC1BA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iFAAiF,EAAA,QAAA,EAC9FA,wBAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAC/EA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EAAA,CACzC,EAAA,CACF,EAAA,CACF,EAGND,yBAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCC,cAAA,CAACC,aAAK,IAAC,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAC5D;AACC,0CAAE,CAAC,CAAC,mCAAmC;AACvC,0CAAE,CAAC,CAAC,4BAA4B,EAAE,sBAAsB,CAAC,EAAA,CACrD,EACRD,cAAA,CAACE,gBAAQ,EAAA,EAAC,SAAS,EAAC,uCAAuC,YACxD;AACC,0CAAE,CAAC,CAAC,sCAAsC;AAC1C,0CAAE;AACA,8CAAE,CAAC,CAAC,qCAAqC,EAAE;AACzC,gDAAA,YAAY,EAAE,gBAAgB,CAAC,YAAY,CAAC;AAC5C,gDAAA,YAAY,EACV,2GAA2G;6CAC9G;AACD,8CAAE,CAAC,CAAC,8CAA8C,EAAE;AAClD,gDAAA,YAAY,EAAE,gBAAgB,CAAC,YAAY,CAAC;AAC5C,gDAAA,YAAY,EACV,8FAA8F;AACjG,6CAAA,CAAC,GACG,CAAA,EAAA,CACP,EAGL,CAAC,aAAa,KACbH,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gDAAgD,aAC7DC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAC1C,CAAC,CAAC,0BAA0B,EAAE,oBAAoB,CAAC,EAAA,CACjD,EACLA,wBAAK,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAC5C,gBAAgB,CAAC,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA,EAAK,QACtCA,cAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAgB,KAAK,EAAA,EAAb,KAAK,CAAa,EAC3B,CAFuC,CAEvC,CAAC,EAAA,CACE,IACF,CACP,EAGA,CAAC,aAAa,IAAI,CAAC,cAAc,KAChCD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sDAAsD,EAAA,QAAA,EAAA,CACnEC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,kCAAkC,YAC7C,CAAC,CACA,0CAA0C,EAC1C,sCAAsC,CACvC,EAAA,CACE,EACLA,sBAAG,SAAS,EAAC,yBAAyB,EAAA,QAAA,EACnC,uBAAuB,KAAK;AAC3B,0CAAE,CAAC,CAAC,sDAAsD;0CACxD,CAAC,CAAC,6CAA6C,CAAC,EAAA,CAClD,CAAA,EAAA,CACA,CACP,EAGA,CAAC,aAAa,IAAI,eAAe,EAAE,KAClCD,yBAAK,SAAS,EAAC,sDAAsD,EAAA,QAAA,EAAA,CACnEA,eAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,kCAAkC,8BAC1C,CAAC,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAA,EAAA,CACxD,EACLC,sBAAG,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAAE,eAAe,EAAE,EAAA,CAAK,CAAA,EAAA,CAC1D,CACP,EAGA,CAAC,aAAa,IAAI,cAAc,KAC/BD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kDAAkD,aAC/DC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAC3C,CAAC,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,GACzC,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,YACjC,CAAC,CACA,+BAA+B,EAC/B,oHAAoH,CACrH,EAAA,CACC,CAAA,EAAA,CACA,CACP,CAAA,EAAA,CACG,EAAA,CACF,EAGNA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8EAA8E,EAAA,QAAA,EAC3FD,yBAAK,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAAA,CAEtCC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,YAC/C,aAAa,IACZA,eAACG,qBAAa,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,UAAU,EAAA,QAAA,EAC7C,CAAC,CAAC,2BAA2B,EAAE,6BAA6B,CAAC,EAAA,CAChD,KAEhBJ,eAAA,CAAAK,mBAAA,EAAA,EAAA,QAAA,EAAA,CACG,iBAAiB,KAChBJ,eAACG,qBAAa,EAAA,EAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAC,MAAM,EAAA,QAAA,EACnD,CAAC,CACA,2BAA2B,EAC3B,oCAAoC,CACrC,EAAA,CACa,CACjB,EACA,UAAU,IAAI,CAAC,IAAI,cAAc,IAAI,gBAAgB,KACpDH,cAAA,CAACG,qBAAa,EAAA,EAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAC,MAAM,YAClD,CAAC,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,EAAA,CACzC,CACjB,EACA,cAAc,KACbH,cAAA,CAACG,qBAAa,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,UAAU,EAAA,QAAA,EAC7C,CAAC,CACA,2BAA2B,EAC3B,6BAA6B,CAC9B,GACa,CACjB,EACA,CAAC,cAAc,IAAI,gBAAgB,KAClCH,eAACG,qBAAa,EAAA,EAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAC,MAAM,EAAA,QAAA,EAClD,CAAC,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,EAAA,CACzC,CACjB,CAAA,EAAA,CACA,CACJ,GACG,EAGNH,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,YAChDA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAC3C,aAAa,IACZA,cAAA,CAACG,qBAAa,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,UAAU,YAC7C,CAAC,CACA,2BAA2B,EAC3B,6BAA6B,CAC9B,EAAA,CACa,KAEhBJ,eAAA,CAAAK,mBAAA,EAAA,EAAA,QAAA,EAAA,CACG,iBAAiB,KAChBJ,cAAA,CAACG,qBAAa,EAAA,EAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAC,MAAM,YACnD,CAAC,CACA,2BAA2B,EAC3B,oCAAoC,CACrC,EAAA,CACa,CACjB,EACA,UAAU,IAAI,CAAC,IAAI,cAAc,IAAI,gBAAgB,KACpDH,cAAA,CAACG,qBAAa,IAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAC,MAAM,EAAA,QAAA,EAClD,CAAC,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GACzC,CACjB,EACA,cAAc,KACbH,eAACG,qBAAa,EAAA,EAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,UAAU,EAAA,QAAA,EAC7C,CAAC,CACA,2BAA2B,EAC3B,6BAA6B,CAC9B,EAAA,CACa,CACjB,EACA,CAAC,cAAc,IAAI,gBAAgB,KAClCH,cAAA,CAACG,qBAAa,EAAA,EAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAC,UAAU,YACtD,CAAC,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,EAAA,CACzC,CACjB,IACA,CACJ,EAAA,CACG,GACF,CAAA,EAAA,CACF,EAAA,CACF,CAAA,EAAA,CACF;AAEV;;;;"}
@@ -71,7 +71,7 @@ var JDICountrySelection = function (_a) {
71
71
  return t("jdi.country_selection.subtitle_identity");
72
72
  }
73
73
  };
74
- return (jsxRuntime.jsx(MobilePageLayout.default, { footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: handleContinue, disabled: !selectedCountry, children: t("jdi.country_selection.continue") }), secondary: jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: onBack, children: t("jdi.country_selection.back") }) }), children: jsxRuntime.jsx("div", { className: "px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: countryIntroText || getTitle() }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed", children: countryDescText || getSubtitle() })] }), jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsxs("div", { className: "space-y-2", children: [jsxRuntime.jsx("label", { className: "block text-sm font-medium text-gray-700", children: t("jdi.country_selection.country_label") }), jsxRuntime.jsx(SelectComponent.Select, { value: selectedCountry, onValueChange: function (value) {
74
+ return (jsxRuntime.jsx(MobilePageLayout.default, { footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: handleContinue, disabled: !selectedCountry, children: t("jdi.country_selection.continue") }), secondary: onBack ? (jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: onBack, children: t("jdi.country_selection.back") })) : undefined }), children: jsxRuntime.jsx("div", { className: "px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: countryIntroText || getTitle() }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed", children: countryDescText || getSubtitle() })] }), jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsxs("div", { className: "space-y-2", children: [jsxRuntime.jsx("label", { className: "block text-sm font-medium text-gray-700", children: t("jdi.country_selection.country_label") }), jsxRuntime.jsx(SelectComponent.Select, { value: selectedCountry, onValueChange: function (value) {
75
75
  setSelectedCountry(value);
76
76
  setError("");
77
77
  }, placeholder: t("jdi.country_selection.country_placeholder"), options: countries ? countries : [], allowCustomValue: true }), error && jsxRuntime.jsx("p", { className: "text-sm text-red-600 mt-1", children: error })] }), jsxRuntime.jsxs("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-blue-900 mb-2", children: t("jdi.country_selection.info_title") }), jsxRuntime.jsx("p", { className: "text-sm text-blue-800", children: t("jdi.country_selection.info_description") })] })] })] }) }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"JDICountrySelection.js","sources":["../../../../../src/components/jdi/JDICountrySelection.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } 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 { getCountryInfo } from \"../../utils/jdiCountry\";\nimport { ISO_COUNTRY_CODES } from \"../../utils/isoCountryCodes\";\nimport { getCountryFlag } from \"../../utils/countryFlags\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst DEFAULT_COUNTRIES = [\n { value: \"FR\", label: \"France\" },\n { value: \"ES\", label: \"Espagne\" },\n { value: \"PT\", label: \"Portugal\" },\n { value: \"DE\", label: \"Allemagne\" },\n { value: \"IT\", label: \"Italie\" },\n { value: \"BE\", label: \"Belgique\" },\n { value: \"NL\", label: \"Pays-Bas\" },\n { value: \"CH\", label: \"Suisse\" },\n { value: \"LU\", label: \"Luxembourg\" },\n { value: \"AT\", label: \"Autriche\" },\n];\n\nconst INTERNATIONAL_COUNTRY = {\n value: \"INT\",\n labelKey: \"jdi.countrySelection.international\",\n fallbackLabel: \"International\",\n};\n\ninterface JDICountrySelectionProps {\n onCountrySelect: (countryId: string) => void;\n onBack: () => void;\n documentTypeId?: string;\n acceptedCountries?: AcceptedCountry[];\n countryIntroText?: string;\n countryDescText?: string;\n}\n\nconst JDICountrySelection = ({\n onCountrySelect,\n onBack,\n documentTypeId,\n acceptedCountries,\n countryIntroText,\n countryDescText,\n}: JDICountrySelectionProps) => {\n const [selectedCountry, setSelectedCountry] = useState<string>(\"\");\n const [error, setError] = useState<string>(\"\");\n const { t } = useI18n();\n\n const countries = useMemo(() => {\n if (acceptedCountries && acceptedCountries.length > 0) {\n const countries = acceptedCountries\n .filter((country) => country.code)\n .map((country) => ({\n value: country.code,\n label: t(country.code),\n flag: getCountryFlag(country.code),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return countries;\n }\n }, [acceptedCountries, t]);\n\n useEffect(() => {\n if (!countries?.length) {\n return;\n }\n\n const hasSelectedCountry = countries.some(\n (country) => country.value === selectedCountry\n );\n\n if (!hasSelectedCountry) {\n const initialCountry = countries.length === 1 ? countries[0].value : \"\";\n setSelectedCountry(initialCountry);\n setError(\"\");\n }\n }, [countries, selectedCountry]);\n\n const handleContinue = () => {\n if (!selectedCountry) {\n setError(t(\"jdi.country_selection.error_select_country\"));\n return;\n }\n setError(\"\");\n onCountrySelect(selectedCountry);\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.country_selection.title_jdd\");\n case \"income-proof\":\n return t(\"jdi.country_selection.title_income_proof\");\n default:\n return t(\"jdi.country_selection.title_identity\");\n }\n };\n\n const getSubtitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.country_selection.subtitle_jdd\");\n case \"income-proof\":\n return t(\"jdi.country_selection.subtitle_income_proof\");\n default:\n return t(\"jdi.country_selection.subtitle_identity\");\n }\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinue} disabled={!selectedCountry}>\n {t(\"jdi.country_selection.continue\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.country_selection.back\")}\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 {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {countryIntroText || getTitle()}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {countryDescText || getSubtitle()}\n </Subtitle>\n </div>\n\n {/* Country selection */}\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"block text-sm font-medium text-gray-700\">\n {t(\"jdi.country_selection.country_label\")}\n </label>\n <Select\n value={selectedCountry}\n onValueChange={(value: string) => {\n setSelectedCountry(value);\n setError(\"\");\n }}\n placeholder={t(\"jdi.country_selection.country_placeholder\")}\n options={countries ? countries : []}\n allowCustomValue={true}\n />\n {error && <p className=\"text-sm text-red-600 mt-1\">{error}</p>}\n </div>\n\n {/* Information card */}\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.country_selection.info_title\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\"jdi.country_selection.info_description\")}\n </p>\n </div>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDICountrySelection;\n"],"names":["useState","useI18n","useMemo","getCountryFlag","useEffect","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Title","Subtitle","Select"],"mappings":"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"}
1
+ {"version":3,"file":"JDICountrySelection.js","sources":["../../../../../src/components/jdi/JDICountrySelection.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } 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 { getCountryInfo } from \"../../utils/jdiCountry\";\nimport { ISO_COUNTRY_CODES } from \"../../utils/isoCountryCodes\";\nimport { getCountryFlag } from \"../../utils/countryFlags\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst DEFAULT_COUNTRIES = [\n { value: \"FR\", label: \"France\" },\n { value: \"ES\", label: \"Espagne\" },\n { value: \"PT\", label: \"Portugal\" },\n { value: \"DE\", label: \"Allemagne\" },\n { value: \"IT\", label: \"Italie\" },\n { value: \"BE\", label: \"Belgique\" },\n { value: \"NL\", label: \"Pays-Bas\" },\n { value: \"CH\", label: \"Suisse\" },\n { value: \"LU\", label: \"Luxembourg\" },\n { value: \"AT\", label: \"Autriche\" },\n];\n\nconst INTERNATIONAL_COUNTRY = {\n value: \"INT\",\n labelKey: \"jdi.countrySelection.international\",\n fallbackLabel: \"International\",\n};\n\ninterface JDICountrySelectionProps {\n onCountrySelect: (countryId: string) => void;\n onBack?: () => void;\n documentTypeId?: string;\n acceptedCountries?: AcceptedCountry[];\n countryIntroText?: string;\n countryDescText?: string;\n}\n\nconst JDICountrySelection = ({\n onCountrySelect,\n onBack,\n documentTypeId,\n acceptedCountries,\n countryIntroText,\n countryDescText,\n}: JDICountrySelectionProps) => {\n const [selectedCountry, setSelectedCountry] = useState<string>(\"\");\n const [error, setError] = useState<string>(\"\");\n const { t } = useI18n();\n\n const countries = useMemo(() => {\n if (acceptedCountries && acceptedCountries.length > 0) {\n const countries = acceptedCountries\n .filter((country) => country.code)\n .map((country) => ({\n value: country.code,\n label: t(country.code),\n flag: getCountryFlag(country.code),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return countries;\n }\n }, [acceptedCountries, t]);\n\n useEffect(() => {\n if (!countries?.length) {\n return;\n }\n\n const hasSelectedCountry = countries.some(\n (country) => country.value === selectedCountry\n );\n\n if (!hasSelectedCountry) {\n const initialCountry = countries.length === 1 ? countries[0].value : \"\";\n setSelectedCountry(initialCountry);\n setError(\"\");\n }\n }, [countries, selectedCountry]);\n\n const handleContinue = () => {\n if (!selectedCountry) {\n setError(t(\"jdi.country_selection.error_select_country\"));\n return;\n }\n setError(\"\");\n onCountrySelect(selectedCountry);\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.country_selection.title_jdd\");\n case \"income-proof\":\n return t(\"jdi.country_selection.title_income_proof\");\n default:\n return t(\"jdi.country_selection.title_identity\");\n }\n };\n\n const getSubtitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.country_selection.subtitle_jdd\");\n case \"income-proof\":\n return t(\"jdi.country_selection.subtitle_income_proof\");\n default:\n return t(\"jdi.country_selection.subtitle_identity\");\n }\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinue} disabled={!selectedCountry}>\n {t(\"jdi.country_selection.continue\")}\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=\"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 {countryIntroText || getTitle()}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {countryDescText || getSubtitle()}\n </Subtitle>\n </div>\n\n {/* Country selection */}\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"block text-sm font-medium text-gray-700\">\n {t(\"jdi.country_selection.country_label\")}\n </label>\n <Select\n value={selectedCountry}\n onValueChange={(value: string) => {\n setSelectedCountry(value);\n setError(\"\");\n }}\n placeholder={t(\"jdi.country_selection.country_placeholder\")}\n options={countries ? countries : []}\n allowCustomValue={true}\n />\n {error && <p className=\"text-sm text-red-600 mt-1\">{error}</p>}\n </div>\n\n {/* Information card */}\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.country_selection.info_title\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\"jdi.country_selection.info_description\")}\n </p>\n </div>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDICountrySelection;\n"],"names":["useState","useI18n","useMemo","getCountryFlag","useEffect","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Title","Subtitle","Select"],"mappings":"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"}
@@ -173,7 +173,7 @@ var JDIDocumentSelection = function (_a) {
173
173
  ];
174
174
  }
175
175
  };
176
- return (jsxRuntime.jsx(MobilePageLayout.default, { contentClassName: "h-full", footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: handleContinue, disabled: !selectedDocument, children: t("jdi.document_selection.continue") }), secondary: jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: onBack, children: t("jdi.document_selection.back") }) }), children: jsxRuntime.jsx("div", { className: "px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: documentSelectionTitle || getTitle() }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed whitespace-pre-line", children: documentSelectionDescription || getSubtitle() })] }), jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: [getLabel(), " *"] }), jsxRuntime.jsx(SelectComponent.Select, { options: documentOptions, value: selectedDocument, onValueChange: function (value) {
176
+ return (jsxRuntime.jsx(MobilePageLayout.default, { contentClassName: "h-full", footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: handleContinue, disabled: !selectedDocument, children: t("jdi.document_selection.continue") }), secondary: onBack ? (jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: onBack, children: t("jdi.document_selection.back") })) : undefined }), children: jsxRuntime.jsx("div", { className: "px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: documentSelectionTitle || getTitle() }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed whitespace-pre-line", children: documentSelectionDescription || getSubtitle() })] }), jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: [getLabel(), " *"] }), jsxRuntime.jsx(SelectComponent.Select, { options: documentOptions, value: selectedDocument, onValueChange: function (value) {
177
177
  setSelectedDocument(value);
178
178
  setError("");
179
179
  }, placeholder: getPlaceholder() }), error && (jsxRuntime.jsxs("p", { className: "mt-1 text-sm text-red-600 flex items-center", children: [jsxRuntime.jsx("span", { className: "mr-1", children: "\u26A0" }), error] }))] }), selectedDocument && !nfcEnabled && (jsxRuntime.jsxs("div", { className: "bg-gray-50 border border-gray-200 rounded-lg p-4", children: [jsxRuntime.jsx("h3", { className: "font-medium text-gray-900 mb-2", children: t("jdi.document_selection.info_title") }), jsxRuntime.jsx("div", { className: "text-sm text-gray-700 space-y-1", children: getInstructions().map(function (instruction, index) { return (jsxRuntime.jsx("p", { children: instruction }, index)); }) })] })), nfcEnabled && jsxRuntime.jsx(NfcOnboardingNotice.default, {})] })] }) }) }));
@@ -1 +1 @@
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={\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.document_selection.back\")}\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 {/* 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":["useState","useI18n","useEffect","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Title","Subtitle","Select","NfcOnboardingNotice"],"mappings":"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"}
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":["useState","useI18n","useEffect","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Title","Subtitle","Select","NfcOnboardingNotice"],"mappings":"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"}
@@ -462,7 +462,7 @@ var JDIDocumentUpload = function (_a) {
462
462
  }
463
463
  });
464
464
  }); };
465
- return (jsxRuntime.jsx(MobilePageLayout.default, { contentClassName: "h-full", footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: handleUpload, disabled: (!frontFile && !isFrontFromInitial) || isUploading, children: getValidateButtonText() }), secondary: jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: onBack, disabled: isUploading, children: t("jdi.document_upload.back") }) }), children: jsxRuntime.jsx("div", { className: "flex-1 flex items-start justify-center md:items-center p-4", children: jsxRuntime.jsxs("div", { className: "w-full max-w-lg", children: [jsxRuntime.jsxs("div", { className: "text-center mb-8", children: [jsxRuntime.jsx("h1", { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: getDropZoneText() }), jsxRuntime.jsx("p", { className: "text-gray-600", children: getUploadInstruction() })] }), jsxRuntime.jsx(Card.Card, { ref: dropZoneRef, className: "border-2 border-dashed ".concat(isDragging
465
+ return (jsxRuntime.jsx(MobilePageLayout.default, { contentClassName: "h-full", footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: handleUpload, disabled: (!frontFile && !isFrontFromInitial) || isUploading, children: getValidateButtonText() }), secondary: onBack ? (jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: onBack, disabled: isUploading, children: t("jdi.document_upload.back") })) : undefined }), children: jsxRuntime.jsx("div", { className: "flex-1 flex items-start justify-center md:items-center p-4", children: jsxRuntime.jsxs("div", { className: "w-full max-w-lg", children: [jsxRuntime.jsxs("div", { className: "text-center mb-8", children: [jsxRuntime.jsx("h1", { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: getDropZoneText() }), jsxRuntime.jsx("p", { className: "text-gray-600", children: getUploadInstruction() })] }), jsxRuntime.jsx(Card.Card, { ref: dropZoneRef, className: "border-2 border-dashed ".concat(isDragging
466
466
  ? "border-teal-500 bg-teal-100/50"
467
467
  : "border-teal-300 bg-teal-50/30", " p-8 mb-6 transition-colors"), onDragEnter: handleDragEnter, onDragLeave: handleDragLeave, onDragOver: handleDragOver, onDrop: handleDrop, children: jsxRuntime.jsx("div", { className: "text-center space-y-6", children: !frontPreview ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("h3", { className: "text-lg font-semibold text-gray-900 mb-4", children: t("documentTypes." + documentType) }), jsxRuntime.jsx("div", { className: "flex justify-center w-full", children: jsxRuntime.jsx(Button.default, { onClick: function () { var _a; return (_a = frontInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, 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", disabled: isUploading, children: jsxRuntime.jsx("span", { children: t("jdi.document_upload.add_file") }) }) }), jsxRuntime.jsx("p", { className: "text-sm text-gray-500 italic", children: t("jdi.document_upload.drag_drop_hint", "ou glissez-déposez vos fichiers ici") }), jsxRuntime.jsxs("div", { className: "text-sm text-gray-600 space-y-1", children: [jsxRuntime.jsx("p", { children: t("jdi.document_upload.accepted_formats") }), jsxRuntime.jsx("p", { children: twoSidesRequired
468
468
  ? frontPreview