datakeen-session-react 1.1.199-rc.2 → 1.1.199-rc.3

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 (879) hide show
  1. package/LICENSE +218 -0
  2. package/README.md +1 -17
  3. package/dist/cjs/_virtual/_commonjsHelpers.js +0 -1
  4. package/dist/cjs/_virtual/heic2any.js +0 -1
  5. package/dist/cjs/_virtual/heic2any2.js +0 -1
  6. package/dist/cjs/assets/Face Scan Square.svg.js +0 -1
  7. package/dist/cjs/assets/Lightbulb.svg.js +0 -1
  8. package/dist/cjs/assets/Monitor Camera.svg.js +0 -1
  9. package/dist/cjs/assets/User Hands.svg.js +0 -1
  10. package/dist/cjs/assets/before-document.png.js +0 -1
  11. package/dist/cjs/assets/before-passport.png.js +0 -1
  12. package/dist/cjs/assets/before-photo.png.js +0 -1
  13. package/dist/cjs/assets/before-verso.png.js +0 -1
  14. package/dist/cjs/assets/check.svg.js +0 -1
  15. package/dist/cjs/assets/icons/shield_magic_link.svg.js +0 -1
  16. package/dist/cjs/assets/selfietake.svg.js +0 -1
  17. package/dist/cjs/components/DatakeenSession.js +0 -1
  18. package/dist/cjs/components/document-collection/DocumentCollection.js +0 -1
  19. package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js +0 -1
  20. package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js +0 -1
  21. package/dist/cjs/components/document-collection/DocumentCollectionSelection.js +0 -1
  22. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js +0 -1
  23. package/dist/cjs/components/document-collection/DocumentError.js +0 -1
  24. package/dist/cjs/components/document-collection/DocumentProcessing.js +0 -1
  25. package/dist/cjs/components/document-collection/DocumentSuccess.js +0 -1
  26. package/dist/cjs/components/document-video/DocumentVideoCapture.js +0 -1
  27. package/dist/cjs/components/document-video/DocumentVideoConfirmation.js +0 -1
  28. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoFlow.js +0 -1
  29. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoInstructions.js +0 -1
  30. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js +0 -1
  31. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoRecorder.js +0 -1
  32. package/dist/cjs/components/icons/ElectronicIcon.js +0 -1
  33. package/dist/cjs/components/icons/PoweredByIcon.js +0 -1
  34. package/dist/cjs/components/icons/PreIntroIcon.js +0 -1
  35. package/dist/cjs/components/icons/StartIcon.js +0 -1
  36. package/dist/cjs/components/id-check/BeforePhoto.js +0 -1
  37. package/dist/cjs/components/id-check/BeforeVersoPhoto.js +0 -1
  38. package/dist/cjs/components/id-check/CameraError.js +0 -1
  39. package/dist/cjs/components/id-check/CameraMask.js +0 -1
  40. package/dist/cjs/components/id-check/OrientationToggle.js +0 -1
  41. package/dist/cjs/components/id-check/Photo.js +0 -1
  42. package/dist/cjs/components/id-check/PhotoConfirmation.js +0 -1
  43. package/dist/cjs/components/id-check/PhotoPreview.js +0 -1
  44. package/dist/cjs/components/jdi/JDDWorkInProgress.js +0 -1
  45. package/dist/cjs/components/jdi/JDICountrySelection.js +0 -1
  46. package/dist/cjs/components/jdi/JDIDocumentSelection.js +0 -1
  47. package/dist/cjs/components/jdi/JDIDocumentUpload.js +0 -1
  48. package/dist/cjs/components/jdi/JDIError.js +0 -1
  49. package/dist/cjs/components/jdi/JDIPreIntroduction.js +0 -1
  50. package/dist/cjs/components/jdi/JDIProcessing.js +0 -1
  51. package/dist/cjs/components/jdi/JDISuccess.js +0 -1
  52. package/dist/cjs/components/legal-consent/LegalConsentNode.js +0 -1
  53. package/dist/cjs/components/nfc-scan/BiometricSymbol.js +0 -1
  54. package/dist/cjs/components/nfc-scan/NfcChipGate.js +0 -1
  55. package/dist/cjs/components/nfc-scan/NfcFallbackSurvey.js +0 -1
  56. package/dist/cjs/components/nfc-scan/NfcOnboardingNotice.js +0 -1
  57. package/dist/cjs/components/nfc-scan/NfcScanNode.js +0 -1
  58. package/dist/cjs/components/nfc-scan/NfcSuccessAnimation.js +0 -1
  59. package/dist/cjs/components/nfc-scan/PuceCniSymbol.js +0 -1
  60. package/dist/cjs/components/selfie/SelfieConfirmation.js +0 -1
  61. package/dist/cjs/components/selfie/Video.css.js +0 -1
  62. package/dist/cjs/components/selfie/Video.js +0 -1
  63. package/dist/cjs/components/selfie/VideoFixes.css.js +0 -1
  64. package/dist/cjs/components/selfie/VideoResetStyles.js +0 -1
  65. package/dist/cjs/components/selfie/hooks/useLiveFrameCapture.js +0 -1
  66. package/dist/cjs/components/selfie/hooks/useVideoRecorderStyles.js +0 -1
  67. package/dist/cjs/components/selfie/selfie-flow/InstructionsSelfie.js +0 -1
  68. package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js +0 -1
  69. package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js +0 -1
  70. package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js +0 -1
  71. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js +0 -1
  72. package/dist/cjs/components/selfie/utils/selfieCaptureUtils.js +0 -1
  73. package/dist/cjs/components/selfie/utils/unisseyStrings.js +0 -1
  74. package/dist/cjs/components/selfie/utils/videoElementStyles.js +0 -1
  75. package/dist/cjs/components/session/DocumentCheck.js +0 -1
  76. package/dist/cjs/components/session/EndFlow.js +0 -1
  77. package/dist/cjs/components/session/MobileRedirect.js +0 -1
  78. package/dist/cjs/components/session/PdfGeneration.js +0 -1
  79. package/dist/cjs/components/session/Selfie.js +0 -1
  80. package/dist/cjs/components/session/SessionContent.js +0 -1
  81. package/dist/cjs/components/session/SessionExpired.js +0 -1
  82. package/dist/cjs/components/session/StartSession.js +0 -1
  83. package/dist/cjs/components/session/UserInputForm/AddressFields.js +0 -1
  84. package/dist/cjs/components/session/UserInputForm/ContactFields.js +0 -1
  85. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js +0 -1
  86. package/dist/cjs/components/session/UserInputForm/DatePickerField.js +0 -1
  87. package/dist/cjs/components/session/UserInputForm/IdentityFields.js +0 -1
  88. package/dist/cjs/components/session/UserInputForm/LegalEntityFields.js +0 -1
  89. package/dist/cjs/components/session/UserInputForm/LegalRepFields.js +0 -1
  90. package/dist/cjs/components/session/UserInputForm/NationalityField.js +0 -1
  91. package/dist/cjs/components/session/UserInputForm.js +0 -1
  92. package/dist/cjs/components/session/VideoWorkInProgress.js +0 -1
  93. package/dist/cjs/components/session/controleJdiPolicy.js +0 -1
  94. package/dist/cjs/components/session/endScreenIcons.js +0 -1
  95. package/dist/cjs/components/signature-electronic/DocusealSignature.js +0 -1
  96. package/dist/cjs/components/signature-electronic/SignatureElectronic.js +0 -1
  97. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js +0 -1
  98. package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js +0 -1
  99. package/dist/cjs/components/start-flow/Start.js +0 -1
  100. package/dist/cjs/components/states/ErrorState.js +0 -1
  101. package/dist/cjs/components/states/LoadingState.js +0 -1
  102. package/dist/cjs/components/states/NoSessionIdState.js +0 -1
  103. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js +0 -1
  104. package/dist/cjs/components/template/ConditionNodeHandler.js +0 -1
  105. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +0 -1
  106. package/dist/cjs/components/template/TemplateNodeRenderer.js +0 -1
  107. package/dist/cjs/components/template/conditionNodePolicy.js +0 -1
  108. package/dist/cjs/components/ui/Body.js +0 -1
  109. package/dist/cjs/components/ui/Button.js +0 -1
  110. package/dist/cjs/components/ui/ButtonDesktop.js +0 -1
  111. package/dist/cjs/components/ui/Card.js +0 -1
  112. package/dist/cjs/components/ui/MobilePageLayout.js +0 -1
  113. package/dist/cjs/components/ui/PDFPreview.js +0 -1
  114. package/dist/cjs/components/ui/PageActions.js +0 -1
  115. package/dist/cjs/components/ui/Paper.js +0 -1
  116. package/dist/cjs/components/ui/PoweredBy.js +0 -1
  117. package/dist/cjs/components/ui/QRCodeDisplay.js +0 -1
  118. package/dist/cjs/components/ui/SelectComponent.js +0 -1
  119. package/dist/cjs/components/ui/Subtitle.js +0 -1
  120. package/dist/cjs/components/ui/Title.js +0 -1
  121. package/dist/cjs/config/env.js +0 -1
  122. package/dist/cjs/constants/userInputForm.js +0 -1
  123. package/dist/cjs/context/ConfigContext.js +0 -1
  124. package/dist/cjs/context/DocumentContext.js +0 -1
  125. package/dist/cjs/context/SessionContext.js +0 -1
  126. package/dist/cjs/hooks/useClientInfo.js +0 -1
  127. package/dist/cjs/hooks/useCountryOptions.js +0 -1
  128. package/dist/cjs/hooks/useI18n.js +0 -1
  129. package/dist/cjs/hooks/useIsMobile.js +0 -1
  130. package/dist/cjs/hooks/useNfcSseStatus.js +0 -1
  131. package/dist/cjs/hooks/useRouteCSS.js +0 -1
  132. package/dist/cjs/hooks/useSession.js +0 -1
  133. package/dist/cjs/hooks/useSessionData.js +0 -1
  134. package/dist/cjs/hooks/useStepCSS.js +0 -1
  135. package/dist/cjs/hooks/useStepNavigation.js +0 -1
  136. package/dist/cjs/hooks/useTemplateLoader.js +0 -1
  137. package/dist/cjs/hooks/useUserInputForm.js +0 -1
  138. package/dist/cjs/i18n/country/country.en.json.js +0 -1
  139. package/dist/cjs/i18n/country/country.fr.json.js +0 -1
  140. package/dist/cjs/i18n/country/country.iso2.en.json.js +0 -1
  141. package/dist/cjs/i18n/country/country.iso2.fr.json.js +0 -1
  142. package/dist/cjs/i18n/documents/documents.en.json.js +0 -1
  143. package/dist/cjs/i18n/documents/documents.fr.json.js +0 -1
  144. package/dist/cjs/i18n/en.json.js +0 -1
  145. package/dist/cjs/i18n/es.json.js +0 -1
  146. package/dist/cjs/i18n/fr.json.js +0 -1
  147. package/dist/cjs/i18n/index.js +0 -1
  148. package/dist/cjs/index.css.js +0 -1
  149. package/dist/cjs/index.js +0 -1
  150. package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +0 -1
  151. package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +0 -1
  152. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js +0 -1
  153. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +0 -1
  154. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +0 -1
  155. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js +0 -1
  156. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +0 -1
  157. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js +0 -1
  158. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js +0 -1
  159. package/dist/cjs/node_modules/date-fns/locale/en-US.js +0 -1
  160. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js +0 -1
  161. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js +0 -1
  162. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js +0 -1
  163. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js +0 -1
  164. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js +0 -1
  165. package/dist/cjs/node_modules/date-fns/locale/fr.js +0 -1
  166. package/dist/cjs/node_modules/heic2any/dist/heic2any.js +0 -1
  167. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.js +0 -1
  168. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
  169. package/dist/cjs/node_modules/style-inject/dist/style-inject.es.js +0 -1
  170. package/dist/cjs/node_modules/tslib/tslib.es6.js +0 -1
  171. package/dist/cjs/providers/I18nProvider.js +0 -1
  172. package/dist/cjs/services/analysis.js +0 -1
  173. package/dist/cjs/services/api.js +0 -1
  174. package/dist/cjs/services/auditTrailService.js +0 -1
  175. package/dist/cjs/services/cameraService.js +0 -1
  176. package/dist/cjs/services/documentEdgeDetectionService.js +0 -1
  177. package/dist/cjs/services/documentTemplate.js +0 -1
  178. package/dist/cjs/services/iadService.js +0 -1
  179. package/dist/cjs/services/integrationService.js +0 -1
  180. package/dist/cjs/services/pollingService.js +0 -1
  181. package/dist/cjs/services/professionalImageQuality.js +0 -1
  182. package/dist/cjs/services/retryService.js +0 -1
  183. package/dist/cjs/services/sessionCredentials.js +0 -1
  184. package/dist/cjs/services/sessionMemoryStore.js +0 -1
  185. package/dist/cjs/services/sessionService.js +0 -1
  186. package/dist/cjs/services/utils.js +0 -1
  187. package/dist/cjs/types/session.js +0 -1
  188. package/dist/cjs/utils/analysisErrors.js +0 -1
  189. package/dist/cjs/utils/apiAnalysis.js +0 -1
  190. package/dist/cjs/utils/conditionEvaluator.js +0 -1
  191. package/dist/cjs/utils/countryFlags.js +0 -1
  192. package/dist/cjs/utils/cssLoader.js +0 -1
  193. package/dist/cjs/utils/customFieldIds.js +0 -1
  194. package/dist/cjs/utils/customFieldValidation.js +0 -1
  195. package/dist/cjs/utils/documentLabels.js +0 -1
  196. package/dist/cjs/utils/europeanCountries.js +0 -1
  197. package/dist/cjs/utils/fileConverter.js +0 -1
  198. package/dist/cjs/utils/imageConverter.js +0 -1
  199. package/dist/cjs/utils/imageProcessing.js +0 -1
  200. package/dist/cjs/utils/isMobileDevice.js +0 -1
  201. package/dist/cjs/utils/isoCountryCodes.js +0 -1
  202. package/dist/cjs/utils/jdiCodes.js +0 -1
  203. package/dist/cjs/utils/labelToKey.js +0 -1
  204. package/dist/cjs/utils/listFieldUtils.js +0 -1
  205. package/dist/cjs/utils/mimeTypes.js +0 -1
  206. package/dist/cjs/utils/navigation.js +0 -1
  207. package/dist/cjs/utils/renderInlineMarkdown.js +0 -1
  208. package/dist/cjs/utils/sessionStatus.js +0 -1
  209. package/dist/cjs/utils/userInputForm.js +0 -1
  210. package/dist/cjs/utils/utils.js +0 -1
  211. package/dist/cjs/utils/validationUtils.js +0 -1
  212. package/dist/esm/_virtual/_commonjsHelpers.js +0 -1
  213. package/dist/esm/_virtual/heic2any.js +0 -1
  214. package/dist/esm/_virtual/heic2any2.js +0 -1
  215. package/dist/esm/assets/Face Scan Square.svg.js +0 -1
  216. package/dist/esm/assets/Lightbulb.svg.js +0 -1
  217. package/dist/esm/assets/Monitor Camera.svg.js +0 -1
  218. package/dist/esm/assets/User Hands.svg.js +0 -1
  219. package/dist/esm/assets/before-document.png.js +0 -1
  220. package/dist/esm/assets/before-passport.png.js +0 -1
  221. package/dist/esm/assets/before-photo.png.js +0 -1
  222. package/dist/esm/assets/before-verso.png.js +0 -1
  223. package/dist/esm/assets/check.svg.js +0 -1
  224. package/dist/esm/assets/icons/shield_magic_link.svg.js +0 -1
  225. package/dist/esm/assets/selfietake.svg.js +0 -1
  226. package/dist/esm/components/DatakeenSession.js +0 -1
  227. package/dist/esm/components/document-collection/DocumentCollection.js +0 -1
  228. package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js +0 -1
  229. package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js +0 -1
  230. package/dist/esm/components/document-collection/DocumentCollectionSelection.js +0 -1
  231. package/dist/esm/components/document-collection/DocumentCollectionUpload.js +0 -1
  232. package/dist/esm/components/document-collection/DocumentError.js +0 -1
  233. package/dist/esm/components/document-collection/DocumentProcessing.js +0 -1
  234. package/dist/esm/components/document-collection/DocumentSuccess.js +0 -1
  235. package/dist/esm/components/document-video/DocumentVideoCapture.js +0 -1
  236. package/dist/esm/components/document-video/DocumentVideoConfirmation.js +0 -1
  237. package/dist/esm/components/document-video/document-video-flow/DocumentVideoFlow.js +0 -1
  238. package/dist/esm/components/document-video/document-video-flow/DocumentVideoInstructions.js +0 -1
  239. package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js +0 -1
  240. package/dist/esm/components/document-video/document-video-flow/DocumentVideoRecorder.js +0 -1
  241. package/dist/esm/components/icons/ElectronicIcon.js +0 -1
  242. package/dist/esm/components/icons/PoweredByIcon.js +0 -1
  243. package/dist/esm/components/icons/PreIntroIcon.js +0 -1
  244. package/dist/esm/components/icons/StartIcon.js +0 -1
  245. package/dist/esm/components/id-check/BeforePhoto.js +0 -1
  246. package/dist/esm/components/id-check/BeforeVersoPhoto.js +0 -1
  247. package/dist/esm/components/id-check/CameraError.js +0 -1
  248. package/dist/esm/components/id-check/CameraMask.js +0 -1
  249. package/dist/esm/components/id-check/OrientationToggle.js +0 -1
  250. package/dist/esm/components/id-check/Photo.js +0 -1
  251. package/dist/esm/components/id-check/PhotoConfirmation.js +0 -1
  252. package/dist/esm/components/id-check/PhotoPreview.js +0 -1
  253. package/dist/esm/components/jdi/JDDWorkInProgress.js +0 -1
  254. package/dist/esm/components/jdi/JDICountrySelection.js +0 -1
  255. package/dist/esm/components/jdi/JDIDocumentSelection.js +0 -1
  256. package/dist/esm/components/jdi/JDIDocumentUpload.js +0 -1
  257. package/dist/esm/components/jdi/JDIError.js +0 -1
  258. package/dist/esm/components/jdi/JDIPreIntroduction.js +0 -1
  259. package/dist/esm/components/jdi/JDIProcessing.js +0 -1
  260. package/dist/esm/components/jdi/JDISuccess.js +0 -1
  261. package/dist/esm/components/legal-consent/LegalConsentNode.js +0 -1
  262. package/dist/esm/components/nfc-scan/BiometricSymbol.js +0 -1
  263. package/dist/esm/components/nfc-scan/NfcChipGate.js +0 -1
  264. package/dist/esm/components/nfc-scan/NfcFallbackSurvey.js +0 -1
  265. package/dist/esm/components/nfc-scan/NfcOnboardingNotice.js +0 -1
  266. package/dist/esm/components/nfc-scan/NfcScanNode.js +0 -1
  267. package/dist/esm/components/nfc-scan/NfcSuccessAnimation.js +0 -1
  268. package/dist/esm/components/nfc-scan/PuceCniSymbol.js +0 -1
  269. package/dist/esm/components/selfie/SelfieConfirmation.js +0 -1
  270. package/dist/esm/components/selfie/Video.css.js +0 -1
  271. package/dist/esm/components/selfie/Video.js +0 -1
  272. package/dist/esm/components/selfie/VideoFixes.css.js +0 -1
  273. package/dist/esm/components/selfie/VideoResetStyles.js +0 -1
  274. package/dist/esm/components/selfie/hooks/useLiveFrameCapture.js +0 -1
  275. package/dist/esm/components/selfie/hooks/useVideoRecorderStyles.js +0 -1
  276. package/dist/esm/components/selfie/selfie-flow/InstructionsSelfie.js +0 -1
  277. package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js +0 -1
  278. package/dist/esm/components/selfie/selfie-flow/SelfiePreIntroduction.js +0 -1
  279. package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js +0 -1
  280. package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js +0 -1
  281. package/dist/esm/components/selfie/utils/selfieCaptureUtils.js +0 -1
  282. package/dist/esm/components/selfie/utils/unisseyStrings.js +0 -1
  283. package/dist/esm/components/selfie/utils/videoElementStyles.js +0 -1
  284. package/dist/esm/components/session/DocumentCheck.js +0 -1
  285. package/dist/esm/components/session/EndFlow.js +0 -1
  286. package/dist/esm/components/session/MobileRedirect.js +0 -1
  287. package/dist/esm/components/session/PdfGeneration.js +0 -1
  288. package/dist/esm/components/session/Selfie.js +0 -1
  289. package/dist/esm/components/session/SessionContent.js +0 -1
  290. package/dist/esm/components/session/SessionExpired.js +0 -1
  291. package/dist/esm/components/session/StartSession.js +0 -1
  292. package/dist/esm/components/session/UserInputForm/AddressFields.js +0 -1
  293. package/dist/esm/components/session/UserInputForm/ContactFields.js +0 -1
  294. package/dist/esm/components/session/UserInputForm/CustomFormFields.js +0 -1
  295. package/dist/esm/components/session/UserInputForm/DatePickerField.js +0 -1
  296. package/dist/esm/components/session/UserInputForm/IdentityFields.js +0 -1
  297. package/dist/esm/components/session/UserInputForm/LegalEntityFields.js +0 -1
  298. package/dist/esm/components/session/UserInputForm/LegalRepFields.js +0 -1
  299. package/dist/esm/components/session/UserInputForm/NationalityField.js +0 -1
  300. package/dist/esm/components/session/UserInputForm.js +0 -1
  301. package/dist/esm/components/session/VideoWorkInProgress.js +0 -1
  302. package/dist/esm/components/session/controleJdiPolicy.js +0 -1
  303. package/dist/esm/components/session/endScreenIcons.js +0 -1
  304. package/dist/esm/components/signature-electronic/DocusealSignature.js +0 -1
  305. package/dist/esm/components/signature-electronic/SignatureElectronic.js +0 -1
  306. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js +0 -1
  307. package/dist/esm/components/signature-electronic/SignedDocumentPreview.js +0 -1
  308. package/dist/esm/components/start-flow/Start.js +0 -1
  309. package/dist/esm/components/states/ErrorState.js +0 -1
  310. package/dist/esm/components/states/LoadingState.js +0 -1
  311. package/dist/esm/components/states/NoSessionIdState.js +0 -1
  312. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js +0 -1
  313. package/dist/esm/components/template/ConditionNodeHandler.js +0 -1
  314. package/dist/esm/components/template/ExternalVerificationNodeHandler.js +0 -1
  315. package/dist/esm/components/template/TemplateNodeRenderer.js +0 -1
  316. package/dist/esm/components/template/conditionNodePolicy.js +0 -1
  317. package/dist/esm/components/ui/Body.js +0 -1
  318. package/dist/esm/components/ui/Button.js +0 -1
  319. package/dist/esm/components/ui/ButtonDesktop.js +0 -1
  320. package/dist/esm/components/ui/Card.js +0 -1
  321. package/dist/esm/components/ui/MobilePageLayout.js +0 -1
  322. package/dist/esm/components/ui/PDFPreview.js +0 -1
  323. package/dist/esm/components/ui/PageActions.js +0 -1
  324. package/dist/esm/components/ui/Paper.js +0 -1
  325. package/dist/esm/components/ui/PoweredBy.js +0 -1
  326. package/dist/esm/components/ui/QRCodeDisplay.js +0 -1
  327. package/dist/esm/components/ui/SelectComponent.js +0 -1
  328. package/dist/esm/components/ui/Subtitle.js +0 -1
  329. package/dist/esm/components/ui/Title.js +0 -1
  330. package/dist/esm/config/env.js +0 -1
  331. package/dist/esm/constants/userInputForm.js +0 -1
  332. package/dist/esm/context/ConfigContext.js +0 -1
  333. package/dist/esm/context/DocumentContext.js +0 -1
  334. package/dist/esm/context/SessionContext.js +0 -1
  335. package/dist/esm/hooks/useClientInfo.js +0 -1
  336. package/dist/esm/hooks/useCountryOptions.js +0 -1
  337. package/dist/esm/hooks/useI18n.js +0 -1
  338. package/dist/esm/hooks/useIsMobile.js +0 -1
  339. package/dist/esm/hooks/useNfcSseStatus.js +0 -1
  340. package/dist/esm/hooks/useRouteCSS.js +0 -1
  341. package/dist/esm/hooks/useSession.js +0 -1
  342. package/dist/esm/hooks/useSessionData.js +0 -1
  343. package/dist/esm/hooks/useStepCSS.js +0 -1
  344. package/dist/esm/hooks/useStepNavigation.js +0 -1
  345. package/dist/esm/hooks/useTemplateLoader.js +0 -1
  346. package/dist/esm/hooks/useUserInputForm.js +0 -1
  347. package/dist/esm/i18n/country/country.en.json.js +0 -1
  348. package/dist/esm/i18n/country/country.fr.json.js +0 -1
  349. package/dist/esm/i18n/country/country.iso2.en.json.js +0 -1
  350. package/dist/esm/i18n/country/country.iso2.fr.json.js +0 -1
  351. package/dist/esm/i18n/documents/documents.en.json.js +0 -1
  352. package/dist/esm/i18n/documents/documents.fr.json.js +0 -1
  353. package/dist/esm/i18n/en.json.js +0 -1
  354. package/dist/esm/i18n/es.json.js +0 -1
  355. package/dist/esm/i18n/fr.json.js +0 -1
  356. package/dist/esm/i18n/index.js +0 -1
  357. package/dist/esm/index.css.js +0 -1
  358. package/dist/esm/index.js +0 -1
  359. package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +0 -1
  360. package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +0 -1
  361. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js +0 -1
  362. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +0 -1
  363. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +0 -1
  364. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js +0 -1
  365. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +0 -1
  366. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js +0 -1
  367. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js +0 -1
  368. package/dist/esm/node_modules/date-fns/locale/en-US.js +0 -1
  369. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js +0 -1
  370. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js +0 -1
  371. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js +0 -1
  372. package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js +0 -1
  373. package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js +0 -1
  374. package/dist/esm/node_modules/date-fns/locale/fr.js +0 -1
  375. package/dist/esm/node_modules/heic2any/dist/heic2any.js +0 -1
  376. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.js +0 -1
  377. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
  378. package/dist/esm/node_modules/style-inject/dist/style-inject.es.js +0 -1
  379. package/dist/esm/node_modules/tslib/tslib.es6.js +0 -1
  380. package/dist/esm/providers/I18nProvider.js +0 -1
  381. package/dist/esm/services/analysis.js +0 -1
  382. package/dist/esm/services/api.js +0 -1
  383. package/dist/esm/services/auditTrailService.js +0 -1
  384. package/dist/esm/services/cameraService.js +0 -1
  385. package/dist/esm/services/documentEdgeDetectionService.js +0 -1
  386. package/dist/esm/services/documentTemplate.js +0 -1
  387. package/dist/esm/services/iadService.js +0 -1
  388. package/dist/esm/services/integrationService.js +0 -1
  389. package/dist/esm/services/pollingService.js +0 -1
  390. package/dist/esm/services/professionalImageQuality.js +0 -1
  391. package/dist/esm/services/retryService.js +0 -1
  392. package/dist/esm/services/sessionCredentials.js +0 -1
  393. package/dist/esm/services/sessionMemoryStore.js +0 -1
  394. package/dist/esm/services/sessionService.js +0 -1
  395. package/dist/esm/services/utils.js +0 -1
  396. package/dist/esm/types/session.js +0 -1
  397. package/dist/esm/utils/analysisErrors.js +0 -1
  398. package/dist/esm/utils/apiAnalysis.js +0 -1
  399. package/dist/esm/utils/conditionEvaluator.js +0 -1
  400. package/dist/esm/utils/countryFlags.js +0 -1
  401. package/dist/esm/utils/cssLoader.js +0 -1
  402. package/dist/esm/utils/customFieldIds.js +0 -1
  403. package/dist/esm/utils/customFieldValidation.js +0 -1
  404. package/dist/esm/utils/documentLabels.js +0 -1
  405. package/dist/esm/utils/europeanCountries.js +0 -1
  406. package/dist/esm/utils/fileConverter.js +0 -1
  407. package/dist/esm/utils/imageConverter.js +0 -1
  408. package/dist/esm/utils/imageProcessing.js +0 -1
  409. package/dist/esm/utils/isMobileDevice.js +0 -1
  410. package/dist/esm/utils/isoCountryCodes.js +0 -1
  411. package/dist/esm/utils/jdiCodes.js +0 -1
  412. package/dist/esm/utils/labelToKey.js +0 -1
  413. package/dist/esm/utils/listFieldUtils.js +0 -1
  414. package/dist/esm/utils/mimeTypes.js +0 -1
  415. package/dist/esm/utils/navigation.js +0 -1
  416. package/dist/esm/utils/renderInlineMarkdown.js +0 -1
  417. package/dist/esm/utils/sessionStatus.js +0 -1
  418. package/dist/esm/utils/userInputForm.js +0 -1
  419. package/dist/esm/utils/utils.js +0 -1
  420. package/dist/esm/utils/validationUtils.js +0 -1
  421. package/package.json +9 -2
  422. package/.gitlab/issue_templates/bug.md +0 -14
  423. package/.gitlab/issue_templates/feature.md +0 -11
  424. package/.gitlab/issue_templates/task.md +0 -11
  425. package/.gitlab/merge_request_templates/default.md +0 -15
  426. package/.gitlab/merge_request_templates/hotfix.md +0 -15
  427. package/.gitlab-ci.yml +0 -290
  428. package/CLAUDE.md +0 -233
  429. package/__mocks__/@unissey-web/sdk-react.js +0 -17
  430. package/__mocks__/fileMock.js +0 -1
  431. package/__mocks__/pdfjs-dist/legacy/build/pdf.js +0 -5
  432. package/__mocks__/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
  433. package/assets/logo.svg +0 -56
  434. package/axios.install.md +0 -2
  435. package/babel.config.js +0 -15
  436. package/dist/cjs/_virtual/_commonjsHelpers.js.map +0 -1
  437. package/dist/cjs/_virtual/heic2any.js.map +0 -1
  438. package/dist/cjs/_virtual/heic2any2.js.map +0 -1
  439. package/dist/cjs/assets/Face Scan Square.svg.js.map +0 -1
  440. package/dist/cjs/assets/Lightbulb.svg.js.map +0 -1
  441. package/dist/cjs/assets/Monitor Camera.svg.js.map +0 -1
  442. package/dist/cjs/assets/User Hands.svg.js.map +0 -1
  443. package/dist/cjs/assets/before-document.png.js.map +0 -1
  444. package/dist/cjs/assets/before-passport.png.js.map +0 -1
  445. package/dist/cjs/assets/before-photo.png.js.map +0 -1
  446. package/dist/cjs/assets/before-verso.png.js.map +0 -1
  447. package/dist/cjs/assets/check.svg.js.map +0 -1
  448. package/dist/cjs/assets/icons/shield_magic_link.svg.js.map +0 -1
  449. package/dist/cjs/assets/selfietake.svg.js.map +0 -1
  450. package/dist/cjs/components/DatakeenSession.js.map +0 -1
  451. package/dist/cjs/components/document-collection/DocumentCollection.js.map +0 -1
  452. package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js.map +0 -1
  453. package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js.map +0 -1
  454. package/dist/cjs/components/document-collection/DocumentCollectionSelection.js.map +0 -1
  455. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js.map +0 -1
  456. package/dist/cjs/components/document-collection/DocumentError.js.map +0 -1
  457. package/dist/cjs/components/document-collection/DocumentProcessing.js.map +0 -1
  458. package/dist/cjs/components/document-collection/DocumentSuccess.js.map +0 -1
  459. package/dist/cjs/components/document-video/DocumentVideoCapture.js.map +0 -1
  460. package/dist/cjs/components/document-video/DocumentVideoConfirmation.js.map +0 -1
  461. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoFlow.js.map +0 -1
  462. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoInstructions.js.map +0 -1
  463. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +0 -1
  464. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoRecorder.js.map +0 -1
  465. package/dist/cjs/components/icons/ElectronicIcon.js.map +0 -1
  466. package/dist/cjs/components/icons/PoweredByIcon.js.map +0 -1
  467. package/dist/cjs/components/icons/PreIntroIcon.js.map +0 -1
  468. package/dist/cjs/components/icons/StartIcon.js.map +0 -1
  469. package/dist/cjs/components/id-check/BeforePhoto.js.map +0 -1
  470. package/dist/cjs/components/id-check/BeforeVersoPhoto.js.map +0 -1
  471. package/dist/cjs/components/id-check/CameraError.js.map +0 -1
  472. package/dist/cjs/components/id-check/CameraMask.js.map +0 -1
  473. package/dist/cjs/components/id-check/OrientationToggle.js.map +0 -1
  474. package/dist/cjs/components/id-check/Photo.js.map +0 -1
  475. package/dist/cjs/components/id-check/PhotoConfirmation.js.map +0 -1
  476. package/dist/cjs/components/id-check/PhotoPreview.js.map +0 -1
  477. package/dist/cjs/components/jdi/JDDWorkInProgress.js.map +0 -1
  478. package/dist/cjs/components/jdi/JDICountrySelection.js.map +0 -1
  479. package/dist/cjs/components/jdi/JDIDocumentSelection.js.map +0 -1
  480. package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +0 -1
  481. package/dist/cjs/components/jdi/JDIError.js.map +0 -1
  482. package/dist/cjs/components/jdi/JDIPreIntroduction.js.map +0 -1
  483. package/dist/cjs/components/jdi/JDIProcessing.js.map +0 -1
  484. package/dist/cjs/components/jdi/JDISuccess.js.map +0 -1
  485. package/dist/cjs/components/legal-consent/LegalConsentNode.js.map +0 -1
  486. package/dist/cjs/components/nfc-scan/BiometricSymbol.js.map +0 -1
  487. package/dist/cjs/components/nfc-scan/NfcChipGate.js.map +0 -1
  488. package/dist/cjs/components/nfc-scan/NfcFallbackSurvey.js.map +0 -1
  489. package/dist/cjs/components/nfc-scan/NfcOnboardingNotice.js.map +0 -1
  490. package/dist/cjs/components/nfc-scan/NfcScanNode.js.map +0 -1
  491. package/dist/cjs/components/nfc-scan/NfcSuccessAnimation.js.map +0 -1
  492. package/dist/cjs/components/nfc-scan/PuceCniSymbol.js.map +0 -1
  493. package/dist/cjs/components/selfie/SelfieConfirmation.js.map +0 -1
  494. package/dist/cjs/components/selfie/Video.css.js.map +0 -1
  495. package/dist/cjs/components/selfie/Video.js.map +0 -1
  496. package/dist/cjs/components/selfie/VideoFixes.css.js.map +0 -1
  497. package/dist/cjs/components/selfie/VideoResetStyles.js.map +0 -1
  498. package/dist/cjs/components/selfie/hooks/useLiveFrameCapture.js.map +0 -1
  499. package/dist/cjs/components/selfie/hooks/useVideoRecorderStyles.js.map +0 -1
  500. package/dist/cjs/components/selfie/selfie-flow/InstructionsSelfie.js.map +0 -1
  501. package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js.map +0 -1
  502. package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +0 -1
  503. package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js.map +0 -1
  504. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js.map +0 -1
  505. package/dist/cjs/components/selfie/utils/selfieCaptureUtils.js.map +0 -1
  506. package/dist/cjs/components/selfie/utils/unisseyStrings.js.map +0 -1
  507. package/dist/cjs/components/selfie/utils/videoElementStyles.js.map +0 -1
  508. package/dist/cjs/components/session/DocumentCheck.js.map +0 -1
  509. package/dist/cjs/components/session/EndFlow.js.map +0 -1
  510. package/dist/cjs/components/session/MobileRedirect.js.map +0 -1
  511. package/dist/cjs/components/session/PdfGeneration.js.map +0 -1
  512. package/dist/cjs/components/session/Selfie.js.map +0 -1
  513. package/dist/cjs/components/session/SessionContent.js.map +0 -1
  514. package/dist/cjs/components/session/SessionExpired.js.map +0 -1
  515. package/dist/cjs/components/session/StartSession.js.map +0 -1
  516. package/dist/cjs/components/session/UserInputForm/AddressFields.js.map +0 -1
  517. package/dist/cjs/components/session/UserInputForm/ContactFields.js.map +0 -1
  518. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js.map +0 -1
  519. package/dist/cjs/components/session/UserInputForm/DatePickerField.js.map +0 -1
  520. package/dist/cjs/components/session/UserInputForm/IdentityFields.js.map +0 -1
  521. package/dist/cjs/components/session/UserInputForm/LegalEntityFields.js.map +0 -1
  522. package/dist/cjs/components/session/UserInputForm/LegalRepFields.js.map +0 -1
  523. package/dist/cjs/components/session/UserInputForm/NationalityField.js.map +0 -1
  524. package/dist/cjs/components/session/UserInputForm.js.map +0 -1
  525. package/dist/cjs/components/session/VideoWorkInProgress.js.map +0 -1
  526. package/dist/cjs/components/session/controleJdiPolicy.js.map +0 -1
  527. package/dist/cjs/components/session/endScreenIcons.js.map +0 -1
  528. package/dist/cjs/components/signature-electronic/DocusealSignature.js.map +0 -1
  529. package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +0 -1
  530. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js.map +0 -1
  531. package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js.map +0 -1
  532. package/dist/cjs/components/start-flow/Start.js.map +0 -1
  533. package/dist/cjs/components/states/ErrorState.js.map +0 -1
  534. package/dist/cjs/components/states/LoadingState.js.map +0 -1
  535. package/dist/cjs/components/states/NoSessionIdState.js.map +0 -1
  536. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js.map +0 -1
  537. package/dist/cjs/components/template/ConditionNodeHandler.js.map +0 -1
  538. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +0 -1
  539. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +0 -1
  540. package/dist/cjs/components/template/conditionNodePolicy.js.map +0 -1
  541. package/dist/cjs/components/ui/Body.js.map +0 -1
  542. package/dist/cjs/components/ui/Button.js.map +0 -1
  543. package/dist/cjs/components/ui/ButtonDesktop.js.map +0 -1
  544. package/dist/cjs/components/ui/Card.js.map +0 -1
  545. package/dist/cjs/components/ui/MobilePageLayout.js.map +0 -1
  546. package/dist/cjs/components/ui/PDFPreview.js.map +0 -1
  547. package/dist/cjs/components/ui/PageActions.js.map +0 -1
  548. package/dist/cjs/components/ui/Paper.js.map +0 -1
  549. package/dist/cjs/components/ui/PoweredBy.js.map +0 -1
  550. package/dist/cjs/components/ui/QRCodeDisplay.js.map +0 -1
  551. package/dist/cjs/components/ui/SelectComponent.js.map +0 -1
  552. package/dist/cjs/components/ui/Subtitle.js.map +0 -1
  553. package/dist/cjs/components/ui/Title.js.map +0 -1
  554. package/dist/cjs/config/env.js.map +0 -1
  555. package/dist/cjs/constants/userInputForm.js.map +0 -1
  556. package/dist/cjs/context/ConfigContext.js.map +0 -1
  557. package/dist/cjs/context/DocumentContext.js.map +0 -1
  558. package/dist/cjs/context/SessionContext.js.map +0 -1
  559. package/dist/cjs/hooks/useClientInfo.js.map +0 -1
  560. package/dist/cjs/hooks/useCountryOptions.js.map +0 -1
  561. package/dist/cjs/hooks/useI18n.js.map +0 -1
  562. package/dist/cjs/hooks/useIsMobile.js.map +0 -1
  563. package/dist/cjs/hooks/useNfcSseStatus.js.map +0 -1
  564. package/dist/cjs/hooks/useRouteCSS.js.map +0 -1
  565. package/dist/cjs/hooks/useSession.js.map +0 -1
  566. package/dist/cjs/hooks/useSessionData.js.map +0 -1
  567. package/dist/cjs/hooks/useStepCSS.js.map +0 -1
  568. package/dist/cjs/hooks/useStepNavigation.js.map +0 -1
  569. package/dist/cjs/hooks/useTemplateLoader.js.map +0 -1
  570. package/dist/cjs/hooks/useUserInputForm.js.map +0 -1
  571. package/dist/cjs/i18n/country/country.en.json.js.map +0 -1
  572. package/dist/cjs/i18n/country/country.fr.json.js.map +0 -1
  573. package/dist/cjs/i18n/country/country.iso2.en.json.js.map +0 -1
  574. package/dist/cjs/i18n/country/country.iso2.fr.json.js.map +0 -1
  575. package/dist/cjs/i18n/documents/documents.en.json.js.map +0 -1
  576. package/dist/cjs/i18n/documents/documents.fr.json.js.map +0 -1
  577. package/dist/cjs/i18n/en.json.js.map +0 -1
  578. package/dist/cjs/i18n/es.json.js.map +0 -1
  579. package/dist/cjs/i18n/fr.json.js.map +0 -1
  580. package/dist/cjs/i18n/index.js.map +0 -1
  581. package/dist/cjs/index.css.js.map +0 -1
  582. package/dist/cjs/index.js.map +0 -1
  583. package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +0 -1
  584. package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +0 -1
  585. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +0 -1
  586. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +0 -1
  587. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +0 -1
  588. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +0 -1
  589. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +0 -1
  590. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js.map +0 -1
  591. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js.map +0 -1
  592. package/dist/cjs/node_modules/date-fns/locale/en-US.js.map +0 -1
  593. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +0 -1
  594. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +0 -1
  595. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +0 -1
  596. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js.map +0 -1
  597. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js.map +0 -1
  598. package/dist/cjs/node_modules/date-fns/locale/fr.js.map +0 -1
  599. package/dist/cjs/node_modules/heic2any/dist/heic2any.js.map +0 -1
  600. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.js.map +0 -1
  601. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.worker.js.map +0 -1
  602. package/dist/cjs/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
  603. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +0 -1
  604. package/dist/cjs/providers/I18nProvider.js.map +0 -1
  605. package/dist/cjs/services/analysis.js.map +0 -1
  606. package/dist/cjs/services/api.js.map +0 -1
  607. package/dist/cjs/services/auditTrailService.js.map +0 -1
  608. package/dist/cjs/services/cameraService.js.map +0 -1
  609. package/dist/cjs/services/documentEdgeDetectionService.js.map +0 -1
  610. package/dist/cjs/services/documentTemplate.js.map +0 -1
  611. package/dist/cjs/services/iadService.js.map +0 -1
  612. package/dist/cjs/services/integrationService.js.map +0 -1
  613. package/dist/cjs/services/pollingService.js.map +0 -1
  614. package/dist/cjs/services/professionalImageQuality.js.map +0 -1
  615. package/dist/cjs/services/retryService.js.map +0 -1
  616. package/dist/cjs/services/sessionCredentials.js.map +0 -1
  617. package/dist/cjs/services/sessionMemoryStore.js.map +0 -1
  618. package/dist/cjs/services/sessionService.js.map +0 -1
  619. package/dist/cjs/services/utils.js.map +0 -1
  620. package/dist/cjs/types/session.js.map +0 -1
  621. package/dist/cjs/utils/analysisErrors.js.map +0 -1
  622. package/dist/cjs/utils/apiAnalysis.js.map +0 -1
  623. package/dist/cjs/utils/conditionEvaluator.js.map +0 -1
  624. package/dist/cjs/utils/countryFlags.js.map +0 -1
  625. package/dist/cjs/utils/cssLoader.js.map +0 -1
  626. package/dist/cjs/utils/customFieldIds.js.map +0 -1
  627. package/dist/cjs/utils/customFieldValidation.js.map +0 -1
  628. package/dist/cjs/utils/documentLabels.js.map +0 -1
  629. package/dist/cjs/utils/europeanCountries.js.map +0 -1
  630. package/dist/cjs/utils/fileConverter.js.map +0 -1
  631. package/dist/cjs/utils/imageConverter.js.map +0 -1
  632. package/dist/cjs/utils/imageProcessing.js.map +0 -1
  633. package/dist/cjs/utils/isMobileDevice.js.map +0 -1
  634. package/dist/cjs/utils/isoCountryCodes.js.map +0 -1
  635. package/dist/cjs/utils/jdiCodes.js.map +0 -1
  636. package/dist/cjs/utils/labelToKey.js.map +0 -1
  637. package/dist/cjs/utils/listFieldUtils.js.map +0 -1
  638. package/dist/cjs/utils/mimeTypes.js.map +0 -1
  639. package/dist/cjs/utils/navigation.js.map +0 -1
  640. package/dist/cjs/utils/renderInlineMarkdown.js.map +0 -1
  641. package/dist/cjs/utils/sessionStatus.js.map +0 -1
  642. package/dist/cjs/utils/userInputForm.js.map +0 -1
  643. package/dist/cjs/utils/utils.js.map +0 -1
  644. package/dist/cjs/utils/validationUtils.js.map +0 -1
  645. package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
  646. package/dist/esm/_virtual/heic2any.js.map +0 -1
  647. package/dist/esm/_virtual/heic2any2.js.map +0 -1
  648. package/dist/esm/assets/Face Scan Square.svg.js.map +0 -1
  649. package/dist/esm/assets/Lightbulb.svg.js.map +0 -1
  650. package/dist/esm/assets/Monitor Camera.svg.js.map +0 -1
  651. package/dist/esm/assets/User Hands.svg.js.map +0 -1
  652. package/dist/esm/assets/before-document.png.js.map +0 -1
  653. package/dist/esm/assets/before-passport.png.js.map +0 -1
  654. package/dist/esm/assets/before-photo.png.js.map +0 -1
  655. package/dist/esm/assets/before-verso.png.js.map +0 -1
  656. package/dist/esm/assets/check.svg.js.map +0 -1
  657. package/dist/esm/assets/icons/shield_magic_link.svg.js.map +0 -1
  658. package/dist/esm/assets/selfietake.svg.js.map +0 -1
  659. package/dist/esm/components/DatakeenSession.js.map +0 -1
  660. package/dist/esm/components/document-collection/DocumentCollection.js.map +0 -1
  661. package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js.map +0 -1
  662. package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js.map +0 -1
  663. package/dist/esm/components/document-collection/DocumentCollectionSelection.js.map +0 -1
  664. package/dist/esm/components/document-collection/DocumentCollectionUpload.js.map +0 -1
  665. package/dist/esm/components/document-collection/DocumentError.js.map +0 -1
  666. package/dist/esm/components/document-collection/DocumentProcessing.js.map +0 -1
  667. package/dist/esm/components/document-collection/DocumentSuccess.js.map +0 -1
  668. package/dist/esm/components/document-video/DocumentVideoCapture.js.map +0 -1
  669. package/dist/esm/components/document-video/DocumentVideoConfirmation.js.map +0 -1
  670. package/dist/esm/components/document-video/document-video-flow/DocumentVideoFlow.js.map +0 -1
  671. package/dist/esm/components/document-video/document-video-flow/DocumentVideoInstructions.js.map +0 -1
  672. package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +0 -1
  673. package/dist/esm/components/document-video/document-video-flow/DocumentVideoRecorder.js.map +0 -1
  674. package/dist/esm/components/icons/ElectronicIcon.js.map +0 -1
  675. package/dist/esm/components/icons/PoweredByIcon.js.map +0 -1
  676. package/dist/esm/components/icons/PreIntroIcon.js.map +0 -1
  677. package/dist/esm/components/icons/StartIcon.js.map +0 -1
  678. package/dist/esm/components/id-check/BeforePhoto.js.map +0 -1
  679. package/dist/esm/components/id-check/BeforeVersoPhoto.js.map +0 -1
  680. package/dist/esm/components/id-check/CameraError.js.map +0 -1
  681. package/dist/esm/components/id-check/CameraMask.js.map +0 -1
  682. package/dist/esm/components/id-check/OrientationToggle.js.map +0 -1
  683. package/dist/esm/components/id-check/Photo.js.map +0 -1
  684. package/dist/esm/components/id-check/PhotoConfirmation.js.map +0 -1
  685. package/dist/esm/components/id-check/PhotoPreview.js.map +0 -1
  686. package/dist/esm/components/jdi/JDDWorkInProgress.js.map +0 -1
  687. package/dist/esm/components/jdi/JDICountrySelection.js.map +0 -1
  688. package/dist/esm/components/jdi/JDIDocumentSelection.js.map +0 -1
  689. package/dist/esm/components/jdi/JDIDocumentUpload.js.map +0 -1
  690. package/dist/esm/components/jdi/JDIError.js.map +0 -1
  691. package/dist/esm/components/jdi/JDIPreIntroduction.js.map +0 -1
  692. package/dist/esm/components/jdi/JDIProcessing.js.map +0 -1
  693. package/dist/esm/components/jdi/JDISuccess.js.map +0 -1
  694. package/dist/esm/components/legal-consent/LegalConsentNode.js.map +0 -1
  695. package/dist/esm/components/nfc-scan/BiometricSymbol.js.map +0 -1
  696. package/dist/esm/components/nfc-scan/NfcChipGate.js.map +0 -1
  697. package/dist/esm/components/nfc-scan/NfcFallbackSurvey.js.map +0 -1
  698. package/dist/esm/components/nfc-scan/NfcOnboardingNotice.js.map +0 -1
  699. package/dist/esm/components/nfc-scan/NfcScanNode.js.map +0 -1
  700. package/dist/esm/components/nfc-scan/NfcSuccessAnimation.js.map +0 -1
  701. package/dist/esm/components/nfc-scan/PuceCniSymbol.js.map +0 -1
  702. package/dist/esm/components/selfie/SelfieConfirmation.js.map +0 -1
  703. package/dist/esm/components/selfie/Video.css.js.map +0 -1
  704. package/dist/esm/components/selfie/Video.js.map +0 -1
  705. package/dist/esm/components/selfie/VideoFixes.css.js.map +0 -1
  706. package/dist/esm/components/selfie/VideoResetStyles.js.map +0 -1
  707. package/dist/esm/components/selfie/hooks/useLiveFrameCapture.js.map +0 -1
  708. package/dist/esm/components/selfie/hooks/useVideoRecorderStyles.js.map +0 -1
  709. package/dist/esm/components/selfie/selfie-flow/InstructionsSelfie.js.map +0 -1
  710. package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js.map +0 -1
  711. package/dist/esm/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +0 -1
  712. package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js.map +0 -1
  713. package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js.map +0 -1
  714. package/dist/esm/components/selfie/utils/selfieCaptureUtils.js.map +0 -1
  715. package/dist/esm/components/selfie/utils/unisseyStrings.js.map +0 -1
  716. package/dist/esm/components/selfie/utils/videoElementStyles.js.map +0 -1
  717. package/dist/esm/components/session/DocumentCheck.js.map +0 -1
  718. package/dist/esm/components/session/EndFlow.js.map +0 -1
  719. package/dist/esm/components/session/MobileRedirect.js.map +0 -1
  720. package/dist/esm/components/session/PdfGeneration.js.map +0 -1
  721. package/dist/esm/components/session/Selfie.js.map +0 -1
  722. package/dist/esm/components/session/SessionContent.js.map +0 -1
  723. package/dist/esm/components/session/SessionExpired.js.map +0 -1
  724. package/dist/esm/components/session/StartSession.js.map +0 -1
  725. package/dist/esm/components/session/UserInputForm/AddressFields.js.map +0 -1
  726. package/dist/esm/components/session/UserInputForm/ContactFields.js.map +0 -1
  727. package/dist/esm/components/session/UserInputForm/CustomFormFields.js.map +0 -1
  728. package/dist/esm/components/session/UserInputForm/DatePickerField.js.map +0 -1
  729. package/dist/esm/components/session/UserInputForm/IdentityFields.js.map +0 -1
  730. package/dist/esm/components/session/UserInputForm/LegalEntityFields.js.map +0 -1
  731. package/dist/esm/components/session/UserInputForm/LegalRepFields.js.map +0 -1
  732. package/dist/esm/components/session/UserInputForm/NationalityField.js.map +0 -1
  733. package/dist/esm/components/session/UserInputForm.js.map +0 -1
  734. package/dist/esm/components/session/VideoWorkInProgress.js.map +0 -1
  735. package/dist/esm/components/session/controleJdiPolicy.js.map +0 -1
  736. package/dist/esm/components/session/endScreenIcons.js.map +0 -1
  737. package/dist/esm/components/signature-electronic/DocusealSignature.js.map +0 -1
  738. package/dist/esm/components/signature-electronic/SignatureElectronic.js.map +0 -1
  739. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js.map +0 -1
  740. package/dist/esm/components/signature-electronic/SignedDocumentPreview.js.map +0 -1
  741. package/dist/esm/components/start-flow/Start.js.map +0 -1
  742. package/dist/esm/components/states/ErrorState.js.map +0 -1
  743. package/dist/esm/components/states/LoadingState.js.map +0 -1
  744. package/dist/esm/components/states/NoSessionIdState.js.map +0 -1
  745. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js.map +0 -1
  746. package/dist/esm/components/template/ConditionNodeHandler.js.map +0 -1
  747. package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +0 -1
  748. package/dist/esm/components/template/TemplateNodeRenderer.js.map +0 -1
  749. package/dist/esm/components/template/conditionNodePolicy.js.map +0 -1
  750. package/dist/esm/components/ui/Body.js.map +0 -1
  751. package/dist/esm/components/ui/Button.js.map +0 -1
  752. package/dist/esm/components/ui/ButtonDesktop.js.map +0 -1
  753. package/dist/esm/components/ui/Card.js.map +0 -1
  754. package/dist/esm/components/ui/MobilePageLayout.js.map +0 -1
  755. package/dist/esm/components/ui/PDFPreview.js.map +0 -1
  756. package/dist/esm/components/ui/PageActions.js.map +0 -1
  757. package/dist/esm/components/ui/Paper.js.map +0 -1
  758. package/dist/esm/components/ui/PoweredBy.js.map +0 -1
  759. package/dist/esm/components/ui/QRCodeDisplay.js.map +0 -1
  760. package/dist/esm/components/ui/SelectComponent.js.map +0 -1
  761. package/dist/esm/components/ui/Subtitle.js.map +0 -1
  762. package/dist/esm/components/ui/Title.js.map +0 -1
  763. package/dist/esm/config/env.js.map +0 -1
  764. package/dist/esm/constants/userInputForm.js.map +0 -1
  765. package/dist/esm/context/ConfigContext.js.map +0 -1
  766. package/dist/esm/context/DocumentContext.js.map +0 -1
  767. package/dist/esm/context/SessionContext.js.map +0 -1
  768. package/dist/esm/hooks/useClientInfo.js.map +0 -1
  769. package/dist/esm/hooks/useCountryOptions.js.map +0 -1
  770. package/dist/esm/hooks/useI18n.js.map +0 -1
  771. package/dist/esm/hooks/useIsMobile.js.map +0 -1
  772. package/dist/esm/hooks/useNfcSseStatus.js.map +0 -1
  773. package/dist/esm/hooks/useRouteCSS.js.map +0 -1
  774. package/dist/esm/hooks/useSession.js.map +0 -1
  775. package/dist/esm/hooks/useSessionData.js.map +0 -1
  776. package/dist/esm/hooks/useStepCSS.js.map +0 -1
  777. package/dist/esm/hooks/useStepNavigation.js.map +0 -1
  778. package/dist/esm/hooks/useTemplateLoader.js.map +0 -1
  779. package/dist/esm/hooks/useUserInputForm.js.map +0 -1
  780. package/dist/esm/i18n/country/country.en.json.js.map +0 -1
  781. package/dist/esm/i18n/country/country.fr.json.js.map +0 -1
  782. package/dist/esm/i18n/country/country.iso2.en.json.js.map +0 -1
  783. package/dist/esm/i18n/country/country.iso2.fr.json.js.map +0 -1
  784. package/dist/esm/i18n/documents/documents.en.json.js.map +0 -1
  785. package/dist/esm/i18n/documents/documents.fr.json.js.map +0 -1
  786. package/dist/esm/i18n/en.json.js.map +0 -1
  787. package/dist/esm/i18n/es.json.js.map +0 -1
  788. package/dist/esm/i18n/fr.json.js.map +0 -1
  789. package/dist/esm/i18n/index.js.map +0 -1
  790. package/dist/esm/index.css.js.map +0 -1
  791. package/dist/esm/index.js.map +0 -1
  792. package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +0 -1
  793. package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +0 -1
  794. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +0 -1
  795. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +0 -1
  796. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +0 -1
  797. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +0 -1
  798. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +0 -1
  799. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js.map +0 -1
  800. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js.map +0 -1
  801. package/dist/esm/node_modules/date-fns/locale/en-US.js.map +0 -1
  802. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +0 -1
  803. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +0 -1
  804. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +0 -1
  805. package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js.map +0 -1
  806. package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js.map +0 -1
  807. package/dist/esm/node_modules/date-fns/locale/fr.js.map +0 -1
  808. package/dist/esm/node_modules/heic2any/dist/heic2any.js.map +0 -1
  809. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.js.map +0 -1
  810. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.worker.js.map +0 -1
  811. package/dist/esm/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
  812. package/dist/esm/node_modules/tslib/tslib.es6.js.map +0 -1
  813. package/dist/esm/providers/I18nProvider.js.map +0 -1
  814. package/dist/esm/services/analysis.js.map +0 -1
  815. package/dist/esm/services/api.js.map +0 -1
  816. package/dist/esm/services/auditTrailService.js.map +0 -1
  817. package/dist/esm/services/cameraService.js.map +0 -1
  818. package/dist/esm/services/documentEdgeDetectionService.js.map +0 -1
  819. package/dist/esm/services/documentTemplate.js.map +0 -1
  820. package/dist/esm/services/iadService.js.map +0 -1
  821. package/dist/esm/services/integrationService.js.map +0 -1
  822. package/dist/esm/services/pollingService.js.map +0 -1
  823. package/dist/esm/services/professionalImageQuality.js.map +0 -1
  824. package/dist/esm/services/retryService.js.map +0 -1
  825. package/dist/esm/services/sessionCredentials.js.map +0 -1
  826. package/dist/esm/services/sessionMemoryStore.js.map +0 -1
  827. package/dist/esm/services/sessionService.js.map +0 -1
  828. package/dist/esm/services/utils.js.map +0 -1
  829. package/dist/esm/types/session.js.map +0 -1
  830. package/dist/esm/utils/analysisErrors.js.map +0 -1
  831. package/dist/esm/utils/apiAnalysis.js.map +0 -1
  832. package/dist/esm/utils/conditionEvaluator.js.map +0 -1
  833. package/dist/esm/utils/countryFlags.js.map +0 -1
  834. package/dist/esm/utils/cssLoader.js.map +0 -1
  835. package/dist/esm/utils/customFieldIds.js.map +0 -1
  836. package/dist/esm/utils/customFieldValidation.js.map +0 -1
  837. package/dist/esm/utils/documentLabels.js.map +0 -1
  838. package/dist/esm/utils/europeanCountries.js.map +0 -1
  839. package/dist/esm/utils/fileConverter.js.map +0 -1
  840. package/dist/esm/utils/imageConverter.js.map +0 -1
  841. package/dist/esm/utils/imageProcessing.js.map +0 -1
  842. package/dist/esm/utils/isMobileDevice.js.map +0 -1
  843. package/dist/esm/utils/isoCountryCodes.js.map +0 -1
  844. package/dist/esm/utils/jdiCodes.js.map +0 -1
  845. package/dist/esm/utils/labelToKey.js.map +0 -1
  846. package/dist/esm/utils/listFieldUtils.js.map +0 -1
  847. package/dist/esm/utils/mimeTypes.js.map +0 -1
  848. package/dist/esm/utils/navigation.js.map +0 -1
  849. package/dist/esm/utils/renderInlineMarkdown.js.map +0 -1
  850. package/dist/esm/utils/sessionStatus.js.map +0 -1
  851. package/dist/esm/utils/userInputForm.js.map +0 -1
  852. package/dist/esm/utils/utils.js.map +0 -1
  853. package/dist/esm/utils/validationUtils.js.map +0 -1
  854. package/docs/COMPLEMENTARY_MANDATE.md +0 -22
  855. package/docs/GITLAB_BADGES_SETUP.md +0 -317
  856. package/docs/JOURNEY_NODE_BUILDER.md +0 -222
  857. package/docs/POLLING_SYSTEM.md +0 -699
  858. package/docs/README.md +0 -254
  859. package/docs/SESSION_TOKEN_MIGRATION.md +0 -52
  860. package/docs/condition-node.md +0 -651
  861. package/docs/configuration.md +0 -113
  862. package/docs/dynamic-configuration.md +0 -97
  863. package/docs/environment.md +0 -27
  864. package/docs/migration-guide.md +0 -120
  865. package/docs/multi-runs.md +0 -111
  866. package/docs/navigation-history.md +0 -163
  867. package/docs/sdk_integration_guide.md +0 -58
  868. package/eslint.config.js +0 -13
  869. package/examples/analysis-progress-example.tsx +0 -220
  870. package/examples/sdk-configuration.ts +0 -187
  871. package/examples/test-updated-urls.ts +0 -162
  872. package/examples/usage-example.tsx +0 -49
  873. package/jest.config.js +0 -32
  874. package/postcss.config.js +0 -6
  875. package/renovate.json +0 -242
  876. package/rollup.asset-url-plugin.js +0 -38
  877. package/rollup.dev.config.js +0 -65
  878. package/setupTests.js +0 -41
  879. package/tailwind.config.js +0 -11
@@ -1 +0,0 @@
1
- {"version":3,"file":"JDIProcessing.js","sources":["../../../../../src/components/jdi/JDIProcessing.tsx"],"sourcesContent":["import { useEffect, useRef, useState, useMemo, useCallback, memo } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport type { ProcessingStep } from \"../../types/session\";\nimport type { Prediction } from \"../../utils/apiAnalysis\";\nimport type { JDIProcessingResult } from \"./types\";\nimport {\n analyzeFiles,\n uploadConvertedIdCardImage,\n} from \"../../services/analysis\";\nimport { getActiveSessionId } from \"../../services/sessionMemoryStore\";\nimport {\n convertPdfToPng,\n convertJpegToPng,\n dataUrlToFile,\n isPdf,\n isJpeg,\n isPng,\n} from \"../../utils/imageConverter\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { requiresTwoSides } from \"../../utils/documentLabels\";\nimport {\n isS3UploadNotConfirmedError,\n getServiceErrorCode,\n getServiceErrorCodeFromCodeName,\n} from \"../../utils/analysisErrors\";\nimport { isBlockingCode } from \"../../utils/jdiCodes\";\n\ninterface JDIProcessingProps {\n onProcessingComplete: (\n success: boolean,\n retryCount?: number,\n analysisData?: Prediction[] | null,\n blockContinue?: boolean,\n ) => void;\n documentType: string;\n fileUploaded: onUploadFiles | null; // Fichiers uploadés\n documentTypeId: string; // ID du type de document (jdd, income-proof, etc.)\n retryCount?: number; // Nombre de tentatives de retry déjà effectuées\n documentTemplateId?: string; // ID du modèle de document associé\n nodeId: string; // ID du nœud associé\n /** Codes JDI exacts considérés comme bloquants pour ce nœud (cf. node.blockingCodes). Absent = liste par défaut. */\n blockingCodes?: string[];\n}\n\ninterface AnalysisProgress {\n progress: number;\n currentStep: string;\n message: string;\n}\n\n// Fonction pour obtenir les étapes de traitement traduites\nconst getProcessingSteps = (t: (key: string) => string): ProcessingStep[] => [\n {\n title: t(\"jdi.processing.steps.document_reception.title\"),\n subtitle: t(\"jdi.processing.steps.document_reception.subtitle\"),\n hasError: false,\n },\n {\n title: t(\"jdi.processing.steps.quality_analysis.title\"),\n subtitle: t(\"jdi.processing.steps.quality_analysis.subtitle\"),\n hasError: false,\n },\n {\n title: t(\"jdi.processing.steps.data_extraction.title\"),\n subtitle: t(\"jdi.processing.steps.data_extraction.subtitle\"),\n hasError: false,\n },\n {\n title: t(\"jdi.processing.steps.final_verification.title\"),\n subtitle: t(\"jdi.processing.steps.final_verification.subtitle\"),\n hasError: false,\n },\n];\n\nconst JDIProcessing = memo(\n ({\n onProcessingComplete,\n documentType,\n fileUploaded,\n documentTypeId,\n retryCount = 0,\n documentTemplateId,\n nodeId,\n blockingCodes,\n }: JDIProcessingProps) => {\n const { t } = useI18n();\n const [isProcessing, setIsProcessing] = useState(false);\n const [currentStep, setCurrentStep] = useState(0);\n const [processingSteps, setProcessingSteps] = useState<ProcessingStep[]>(\n () => getProcessingSteps(t),\n );\n const [isComplete, setIsComplete] = useState(false);\n const [analysisResult, setAnalysisResult] =\n useState<JDIProcessingResult | null>(null);\n const [analysisProgress, setAnalysisProgress] = useState<AnalysisProgress>({\n progress: 0,\n currentStep: \"\",\n message: \"\",\n });\n\n const processingStartedRef = useRef(false);\n const processedFilesRef = useRef<string | null>(null);\n\n // Créer une clé stable pour les fichiers uploadés\n const filesKey = useMemo(() => {\n if (!fileUploaded) return null;\n return `${fileUploaded.front?.substring(0, 50) || \"no-front\"}-${\n fileUploaded.back?.substring(0, 50) || \"no-back\"\n }`;\n }, [fileUploaded]);\n\n // Callback stable pour onProcessingComplete\n const stableOnProcessingComplete = useCallback(\n (\n success: boolean,\n retryCount?: number,\n analysisData?: Prediction[] | null,\n blockContinue?: boolean,\n ) => {\n if (blockContinue === true) {\n onProcessingComplete(success, retryCount, analysisData, true);\n } else {\n onProcessingComplete(success, retryCount, analysisData);\n }\n },\n [onProcessingComplete],\n );\n\n useEffect(() => {\n // Empêcher les appels multiples\n if (\n !fileUploaded ||\n !filesKey ||\n isProcessing ||\n processingStartedRef.current\n ) {\n return;\n }\n\n const sessionId = getActiveSessionId();\n if (!sessionId) {\n stableOnProcessingComplete(false);\n return;\n }\n\n // Vérifier si on a déjà traité ces mêmes fichiers\n if (processedFilesRef.current === filesKey) {\n return;\n }\n\n // Fonction pour gérer la conversion et l'upload des fichiers\n const handleFileConversionAndUpload = async (\n sessionId: string,\n fileUploaded: onUploadFiles,\n ) => {\n const frontImage = fileUploaded.front;\n if (!frontImage) return;\n\n try {\n if (isPdf(frontImage)) {\n const convertedFile = await convertPdfToPng(frontImage);\n await uploadConvertedIdCardImage(sessionId, convertedFile, nodeId);\n } else if (isJpeg(frontImage)) {\n const convertedFile = await convertJpegToPng(frontImage);\n await uploadConvertedIdCardImage(sessionId, convertedFile, nodeId);\n } else if (isPng(frontImage)) {\n const file = dataUrlToFile(frontImage, \"converted_id_card.png\");\n await uploadConvertedIdCardImage(sessionId, file, nodeId);\n }\n } catch (error) {\n console.error(\"Erreur lors de la conversion/upload:\", error);\n // Ne pas bloquer le processus, continuer avec l'analyse normale\n }\n };\n\n const processFiles = async () => {\n try {\n // Marquer le début du traitement\n setIsProcessing(true);\n processingStartedRef.current = true;\n processedFilesRef.current = filesKey;\n\n // Animation des étapes avec appel API réel à la fin\n for (let i = 0; i < processingSteps.length; i++) {\n setCurrentStep(i);\n\n if (i < processingSteps.length - 1) {\n // Délai entre les étapes (sauf la dernière)\n await new Promise((resolve) => setTimeout(resolve, 800));\n } else {\n // Dernière étape : conversion et upload si nécessaire, puis appel API réel\n await handleFileConversionAndUpload(sessionId, fileUploaded);\n\n const response = await analyzeFiles(\n sessionId,\n nodeId,\n fileUploaded,\n documentTemplateId || \"\",\n {\n save: false, // don't save to session yet\n incrementAnalysis: false, // don't auto-progress session\n documentTypeKey: documentType,\n requiresTwoSides: requiresTwoSides(documentType),\n enablePolling: true, // Enable polling for progress\n pollingOptions: {\n interval: 2000, // Poll every 2 seconds (backend optimized timing)\n maxAttempts: 30, // 30 * 2s = max 60s polling duration\n timeout: 600000,\n onProgress: (status) => {\n // Update analysis progress state for display\n setAnalysisProgress({\n progress: status.progress,\n currentStep: status.currentStep,\n message: status.message,\n });\n\n // Update UI based on progress percentage\n // 50% = Analyzing (steps 0-2)\n // 100% = Completed (step 3)\n if (status.progress === 50) {\n // Analysis in progress - show steps 0-2 progressively\n const elapsed =\n Date.now() -\n (Date.parse(status.startedAt || \"\") || Date.now());\n const elapsedSeconds = elapsed / 1000;\n\n // Progress through first 3 steps based on elapsed time\n if (elapsedSeconds < 3) {\n setCurrentStep((prev) => Math.max(prev, 0));\n } else if (elapsedSeconds < 6) {\n setCurrentStep((prev) => Math.max(prev, 1));\n } else {\n setCurrentStep((prev) => Math.max(prev, 2));\n }\n } else if (status.progress === 100) {\n // Analysis complete - move to final step\n setCurrentStep(processingSteps.length - 1);\n }\n },\n onComplete: (status) => {\n // Update final progress state\n setAnalysisProgress({\n progress: status.progress,\n currentStep: status.currentStep,\n message: status.message,\n });\n\n // Ensure we're at the final step\n setCurrentStep(processingSteps.length - 1);\n\n // Mark the final step based on analysis result\n const isFailed =\n status.currentStep === \"failed\" ||\n status.currentStep === \"error\";\n\n if (isFailed) {\n setProcessingSteps((prev) =>\n prev.map((step, index) =>\n index === processingSteps.length - 1\n ? { ...step, hasError: true }\n : step,\n ),\n );\n }\n },\n onFailed: (status, error) => {\n console.error(\n \"❌ [JDIProcessing] Analysis polling failed:\",\n error,\n );\n\n // Update error state\n setAnalysisProgress({\n progress: 100,\n currentStep: \"failed\",\n message: `Analysis failed: ${error}`,\n });\n\n // Mark current step as error\n setProcessingSteps((prev) =>\n prev.map((step, index) =>\n index === currentStep\n ? { ...step, hasError: true }\n : step,\n ),\n );\n },\n },\n },\n );\n\n // Refused async analysis (quota / no credits): show its SDK code.\n const serviceErrorCode = getServiceErrorCodeFromCodeName(\n response?.codeName,\n );\n const extractedCode = serviceErrorCode || String(response.code);\n const codeName = response?.codeName;\n const codeDescription = response?.codeDescription;\n const mismatchDetails = response?.mismatchDetails;\n\n // Construct predictions array from the response\n const predictions: Prediction[] = [];\n if (extractedCode && codeName) {\n predictions.push({\n code: extractedCode,\n codeName: codeName,\n codeDescription: codeDescription || \"\",\n type: \"document\",\n ...(mismatchDetails ? { mismatchDetails } : {}),\n });\n }\n\n // Determine success based on the node's configured blocking codes\n // (blockingCodes absent → DEFAULT_BLOCKING_CODES, legacy behavior\n // unchanged). Code 8.x (specimen) is always blocking.\n const isSuccess =\n !serviceErrorCode && !isBlockingCode(extractedCode, blockingCodes);\n const canRetry = isSuccess === false;\n\n setAnalysisResult({\n success: isSuccess,\n code: extractedCode,\n canRetry,\n data: response,\n predictions: predictions,\n });\n\n // Mark the final step based on analysis result\n if (!isSuccess) {\n setProcessingSteps((prev) =>\n prev.map((step, index) =>\n index === processingSteps.length - 1\n ? { ...step, hasError: true }\n : step,\n ),\n );\n }\n\n // délai pour voir le résultat\n await new Promise((resolve) => setTimeout(resolve, 500));\n }\n }\n\n setCurrentStep(processingSteps.length);\n setIsComplete(true);\n } catch (error) {\n console.error(\"❌ Erreur lors de l'analyse des fichiers:\", error);\n\n // Determine which step failed\n let failedStepIndex = currentStep;\n\n // If error occurred during analysis, mark the final verification step as failed\n if (currentStep >= processingSteps.length - 1) {\n failedStepIndex = processingSteps.length - 1;\n }\n\n // Mark the failed step as error\n setProcessingSteps((prev) =>\n prev.map((step, index) =>\n index === failedStepIndex ? { ...step, hasError: true } : step,\n ),\n );\n\n // Move to the failed step to show error\n setCurrentStep(failedStepIndex);\n\n // Determine if retry is allowed based on error type\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n const isNetworkError =\n errorMessage.includes(\"network\") ||\n errorMessage.includes(\"CORS\") ||\n errorMessage.includes(\"timeout\");\n const isUploadNotConfirmed = isS3UploadNotConfirmedError(error);\n const serviceErrorCode = getServiceErrorCode(error);\n const apiError = error as { code?: string; message?: string };\n\n setAnalysisResult({\n success: false,\n data: null,\n // Propage le code QUOTA_EXCEEDED / INSUFFICIENT_CREDITS pour que\n // l'écran d'erreur affiche un message dédié (les autres erreurs\n // gardent leur comportement existant).\n predictions: serviceErrorCode\n ? [\n {\n code: serviceErrorCode,\n codeName: serviceErrorCode,\n codeDescription: apiError?.message || \"\",\n type: \"document\",\n },\n ]\n : undefined,\n canRetry: isNetworkError || isUploadNotConfirmed || !!serviceErrorCode,\n blockContinue: isUploadNotConfirmed,\n });\n setIsComplete(true);\n } finally {\n setIsProcessing(false);\n }\n };\n\n processFiles();\n }, [\n fileUploaded,\n filesKey,\n documentTypeId,\n documentTemplateId,\n documentType,\n isProcessing,\n stableOnProcessingComplete,\n processingSteps.length,\n currentStep,\n blockingCodes,\n ]);\n\n // Auto-complete when analysis is done\n useEffect(() => {\n if (isComplete && analysisResult) {\n setTimeout(() => {\n const allowRetry =\n analysisResult.success || analysisResult.canRetry === true;\n // Pass predictions array instead of raw data\n stableOnProcessingComplete(\n analysisResult.success,\n allowRetry ? retryCount : undefined,\n analysisResult.predictions || null,\n analysisResult.blockContinue,\n );\n }, 1000);\n }\n }, [isComplete, analysisResult, stableOnProcessingComplete, retryCount]);\n\n return (\n <div className=\"flex flex-col justify-between h-full w-full\">\n {/* Main content area */}\n <div className=\"flex-1 px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\"jdi.processing.title\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {t(\"jdi.processing.subtitle\", {\n document: t(\"documentTypes.\" + documentType),\n })}\n </Subtitle>\n </div>\n\n {/* Processing steps with status indicators */}\n <div className=\"w-full flex justify-center\">\n <div className=\"space-y-5\">\n {processingSteps.map((step, index: number) => (\n <div key={index} className=\"flex items-start\">\n {/* Status indicator */}\n <div className=\"mr-4 mt-1 flex-shrink-0\">\n {index < currentStep ? (\n step.hasError ? (\n // Error indicator - Red X\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-red-500 text-white text-xs\">\n ✕\n </div>\n ) : (\n // Success indicator - Green checkmark\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs\">\n ✓\n </div>\n )\n ) : index === currentStep ? (\n // Loading spinner only for the current step\n <div className=\"w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin\"></div>\n ) : (\n // Empty circle for future steps\n <div className=\"w-6 h-6 rounded-full border-2 border-gray-300\"></div>\n )}\n </div>\n\n {/* Step content */}\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-[#3C3C40] text-sm\">\n {step.title}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n {step.subtitle}\n </p>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n },\n);\n\nJDIProcessing.displayName = \"JDIProcessing\";\n\nexport default JDIProcessing;\n"],"names":["memo","useI18n","useState","useRef","useMemo","useCallback","useEffect","getActiveSessionId","__awaiter","isPdf","convertPdfToPng","uploadConvertedIdCardImage","isJpeg","convertJpegToPng","isPng","dataUrlToFile","analyzeFiles","requiresTwoSides","__assign","getServiceErrorCodeFromCodeName","isBlockingCode","isS3UploadNotConfirmedError","getServiceErrorCode","_jsx","_jsxs","Title","Subtitle"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"JDISuccess.js","sources":["../../../../../src/components/jdi/JDISuccess.tsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { getValidationPoints } from \"../../utils/validationUtils\";\n\ninterface JDISuccessProps {\n documentType: string;\n onContinue: () => void;\n errorCode?: string; // Error code from API response (e.g., \"1.0\", \"4.0\")\n}\n\nconst JDISuccess = ({ documentType, onContinue, errorCode }: JDISuccessProps) => {\n const { t } = useI18n();\n const [validationPoints, setValidationPoints] = useState<string[]>([]);\n\n useEffect(() => {\n // Use shared utility to get validation points\n setValidationPoints(getValidationPoints(errorCode, null, t, 'success'));\n }, [errorCode, t]);\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue}>\n {t(\"jdi.success.continue\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Success icon */}\n <div className=\"text-center\">\n <div className=\"mx-auto w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mb-4\">\n <div className=\"w-8 h-8 bg-green-500 rounded-full flex items-center justify-center\">\n <span className=\"text-white text-lg\">✓</span>\n </div>\n </div>\n </div>\n\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl text-green-600\">\n {t(\"jdi.success.title\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {t(\"jdi.success.subtitle\", { document: t(\"documentTypes.\" + documentType) })}\n </Subtitle>\n </div>\n\n {/* Success details */}\n <div className=\"bg-green-50 border border-green-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-green-900 mb-2\">{t(\"jdi.success.validated_title\")}</h3>\n <div className=\"text-sm text-green-800 space-y-1\">\n {validationPoints.map((point, index) => (\n <p key={index}>{point}</p>\n ))}\n </div>\n </div>\n\n {/* Next steps */}\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-blue-900 mb-2\">\n {t(\"jdi.success.next_steps_title\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\"jdi.success.next_steps_description\")}\n </p>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDISuccess;\n"],"names":["useI18n","useState","useEffect","getValidationPoints","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Title","Subtitle"],"mappings":";;;;;;;;;;;;;;AAeA,IAAM,UAAU,GAAG,UAAC,EAAwD,EAAA;AAAtD,IAAA,IAAA,YAAY,kBAAA,EAAE,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA;AAC/C,IAAA,IAAA,CAAC,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,CAACC,mCAAmB,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACzE,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAElB,IAAA,QACEC,cAAA,CAACC,wBAAgB,IACf,MAAM,EACJD,eAACE,mBAAW,EAAA,EACV,OAAO,EACLF,eAACG,cAAM,EAAA,EAAC,OAAO,EAAE,UAAU,YACxB,CAAC,CAAC,sBAAsB,CAAC,GACnB,EAAA,CAEX,EAAA,QAAA,EAGJH,wBAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC9CI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,aAEhDJ,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,aAAa,EAAA,QAAA,EAC1BA,wBAAK,SAAS,EAAC,mFAAmF,EAAA,QAAA,EAChGA,wBAAK,SAAS,EAAC,oEAAoE,EAAA,QAAA,EACjFA,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EAAA,CACzC,GACF,EAAA,CACF,EAGNI,yBAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCJ,cAAA,CAACK,aAAK,EAAA,EAAC,SAAS,EAAC,gDAAgD,YAC9D,CAAC,CAAC,mBAAmB,CAAC,EAAA,CACjB,EACRL,cAAA,CAACM,gBAAQ,IAAC,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACxD,CAAC,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,gBAAgB,GAAG,YAAY,CAAC,EAAE,CAAC,EAAA,CACnE,CAAA,EAAA,CACP,EAGNF,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oDAAoD,EAAA,QAAA,EAAA,CACjEJ,uBAAI,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAAE,CAAC,CAAC,6BAA6B,CAAC,EAAA,CAAM,EACvFA,wBAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAC9C,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,EAGNI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kDAAkD,aAC/DJ,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAC3C,CAAC,CAAC,8BAA8B,CAAC,EAAA,CAC/B,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EACjC,CAAC,CAAC,oCAAoC,CAAC,EAAA,CACtC,CAAA,EAAA,CACA,IACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"LegalConsentNode.js","sources":["../../../../../src/components/legal-consent/LegalConsentNode.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport Body from \"../ui/Body\";\nimport Title from \"../ui/Title\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { updateSessionUserInput } from \"../../services/sessionService\";\nimport { renderInlineMarkdown } from \"../../utils/renderInlineMarkdown\";\nimport type { SessionData, SessionTemplateNode, stepObject } from \"../../types/session\";\n\ninterface LegalConsentNodeProps {\n node: SessionTemplateNode;\n session: SessionData;\n sessionId: string;\n stepObject: stepObject;\n}\n\nconst LegalConsentNode = ({\n node,\n session,\n sessionId,\n stepObject,\n}: LegalConsentNodeProps) => {\n const { t } = useI18n();\n const [checked, setChecked] = useState(false);\n const [error, setError] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const isRequired = node.isRequired !== false; // true by default\n\n const handleCheckboxChange = (value: boolean) => {\n setChecked(value);\n setError(false);\n setSubmitError(null);\n };\n\n const handleContinue = async () => {\n if (isRequired && !checked) {\n setError(true);\n return;\n }\n\n setIsSubmitting(true);\n try {\n // Merge consent data with existing userInput (backend does full replacement)\n const existingUserInput = (session.userInput as Record<string, unknown>) ?? {};\n const merged = {\n ...existingUserInput,\n [node.id]: {\n accepted: checked,\n timestamp: new Date().toISOString(),\n },\n };\n await updateSessionUserInput(sessionId, merged);\n stepObject.goToNextStep(node.id, session.template);\n } catch (err) {\n console.error(t(\"LEGAL_CONSENT.error.console_update\"), err);\n setSubmitError(t(\"LEGAL_CONSENT.error.general\"));\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const pageTitle = node.pageTitle || t(\"LEGAL_CONSENT.default_title\");\n // Description unique au format Markdown (liens [libellé](url), gras).\n const description = node.consentDescription;\n // Rétrocompat : on n'affiche consentDescription2 que pour les anciens nœuds\n // qui n'ont pas de consentDescription (sinon doublon, le texte étant fusionné).\n const description2 = description ? undefined : node.consentDescription2;\n const checkboxLabel = node.checkboxText || t(\"LEGAL_CONSENT.default_checkbox\");\n\n return (\n <MobilePageLayout\n session={session}\n footer={\n <div className=\"w-full space-y-4\">\n {/* Error message */}\n {(error || submitError) && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-3\">\n <Body className=\"text-red-600 text-sm text-center\">\n {submitError\n ? submitError\n : t(\"LEGAL_CONSENT.error.required\")}\n </Body>\n </div>\n )}\n\n {/* Consent checkbox */}\n <div className=\"flex items-start gap-3 p-3 bg-gray-50 rounded-lg\">\n <CheckboxPrimitive.Root\n id={`legal-consent-checkbox-${node.id}`}\n checked={checked}\n onCheckedChange={(value) => handleCheckboxChange(!!value)}\n className={`mt-1 h-5 w-5 shrink-0 rounded border bg-white transition-colors\n data-[state=checked]:bg-[var(--dk-btn-bg)] data-[state=checked]:border-[var(--dk-btn-bg)]\n ${error\n ? \"border-red-500\"\n : \"border-gray-300 hover:border-gray-400\"\n }\n `}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-white\">\n <CheckIcon className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n <LabelPrimitive.Root\n htmlFor={`legal-consent-checkbox-${node.id}`}\n className=\"cursor-pointer\"\n >\n <Body\n className={`text-left text-sm leading-relaxed ${\n error ? \"text-red-600\" : \"text-gray-700\"\n }`}\n >\n {checkboxLabel}\n </Body>\n </LabelPrimitive.Root>\n </div>\n\n {/* Continue button */}\n <PageActions\n primary={\n <Button\n onClick={handleContinue}\n disabled={(isRequired && !checked) || isSubmitting}\n >\n {isSubmitting\n ? t(\"LEGAL_CONSENT.button.loading\")\n : t(\"LEGAL_CONSENT.button.continue\")}\n </Button>\n }\n />\n </div>\n }\n >\n <div className=\"px-4 py-8 md:px-8 flex flex-col\">\n <div className=\"w-full max-w-2xl mx-auto space-y-6\">\n <div className=\"text-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl mb-6\">\n {pageTitle}\n </Title>\n </div>\n\n {/* Consent content */}\n {(description || description2) && (\n <div className=\"bg-gray-50 rounded-lg p-4 md:p-6\">\n <Body className=\"text-left text-sm md:text-base leading-relaxed space-y-4\">\n {/* Descriptions au format Markdown : liens cliquables dans le texte. */}\n {description && renderInlineMarkdown(description)}\n {description2 && renderInlineMarkdown(description2)}\n </Body>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default LegalConsentNode;\n"],"names":["useI18n","useState","__awaiter","updateSessionUserInput","_jsx","MobilePageLayout","_jsxs","Body","CheckboxPrimitive","CheckIcon","LabelPrimitive","PageActions","Button","Title","renderInlineMarkdown"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"BiometricSymbol.js","sources":["../../../../../src/components/nfc-scan/BiometricSymbol.tsx"],"sourcesContent":["interface BiometricSymbolProps {\n className?: string;\n}\n\n/**\n * Symbole international du document biométrique (puce électronique), repris de\n * assets/biometric.svg mais teinté avec la couleur primaire du SDK\n * (var(--uni-primary-color)) au lieu du violet d'origine, pour rester aligné\n * sur l'identité visuelle du parcours.\n *\n * C'est le pictogramme que l'utilisateur doit retrouver sur la couverture de son\n * passeport ou sur sa carte d'identité pour confirmer la présence de la puce.\n */\nconst BiometricSymbol = ({ className }: BiometricSymbolProps) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 120 80\"\n className={className}\n role=\"img\"\n aria-label=\"Symbole du document biométrique\"\n >\n <defs>\n <mask id=\"biometric-symbol-mask\">\n <rect x=\"0\" y=\"0\" width=\"120\" height=\"80\" fill=\"white\" />\n <rect x=\"0\" y=\"36\" width=\"120\" height=\"8\" fill=\"black\" />\n <circle cx=\"60\" cy=\"40\" r=\"16\" fill=\"black\" />\n </mask>\n </defs>\n\n <g fill=\"var(--uni-primary-color, #11e5c5)\">\n <rect\n x=\"10\"\n y=\"15\"\n width=\"100\"\n height=\"50\"\n rx=\"3\"\n mask=\"url(#biometric-symbol-mask)\"\n />\n <circle cx=\"60\" cy=\"40\" r=\"9\" />\n </g>\n </svg>\n );\n};\n\nexport default BiometricSymbol;\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAIA;;;;;;;;AAQG;AACH,IAAM,eAAe,GAAG,UAAC,EAAmC,EAAA;AAAjC,IAAA,IAAA,SAAS,GAAA,EAAA,CAAA,SAAA;AAClC,IAAA,QACEA,eAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,4BAA4B,EAClC,OAAO,EAAC,YAAY,EACpB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAC,KAAK,EAAA,YAAA,EACC,sCAAiC,EAAA,QAAA,EAAA,CAE5CC,cAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EACED,0BAAM,EAAE,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAC9BC,cAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAA,CAAG,EACzDA,cAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,OAAO,EAAA,CAAG,EACzDA,cAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAA,CAAG,CAAA,EAAA,CACzC,EAAA,CACF,EAEPD,eAAA,CAAA,GAAA,EAAA,EAAG,IAAI,EAAC,mCAAmC,EAAA,QAAA,EAAA,CACzCC,cAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAC,IAAI,EACN,CAAC,EAAC,IAAI,EACN,KAAK,EAAC,KAAK,EACX,MAAM,EAAC,IAAI,EACX,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,6BAA6B,EAAA,CAClC,EACFA,cAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAA,CAAG,CAAA,EAAA,CAC9B,CAAA,EAAA,CACA;AAEV;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NfcChipGate.js","sources":["../../../../../src/components/nfc-scan/NfcChipGate.tsx"],"sourcesContent":["import React from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport BiometricSymbol from \"./BiometricSymbol\";\nimport PuceCniSymbol from \"./PuceCniSymbol\";\n\ninterface NfcChipGateProps {\n /** L'utilisateur confirme que son document porte le symbole → flux NFC */\n onConfirm: () => void;\n /** L'utilisateur n'a pas ce symbole → on saute le nœud (nœud suivant) */\n onNoChip: () => void;\n}\n\n/**\n * Écran d'entrée du nœud NFC, façon \"persona\".\n *\n * Affiche le symbole du document biométrique (teinté à la couleur primaire) et\n * demande à l'utilisateur s'il figure sur son passeport (couverture) ou sa carte\n * d'identité (recto/verso). Cela évite d'engager dans un parcours NFC un\n * utilisateur dont le document n'a pas de puce.\n *\n * - Oui → on poursuit le parcours NFC (onConfirm)\n * - Non → on passe au nœud suivant (onNoChip)\n */\nconst NfcChipGate = ({ onConfirm, onNoChip }: NfcChipGateProps) => {\n const { t } = useI18n();\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n className=\"flex-wrap justify-center!\"\n primary={\n <Button onClick={onConfirm}>\n {t(\"nfc_scan.chip_gate.confirm\", \"Oui\")}\n </Button>\n }\n secondary={\n <Button\n variant=\"secondary\"\n onClick={onNoChip}\n className=\"whitespace-nowrap\"\n >\n {t(\"nfc_scan.chip_gate.no_chip\", \"Non, je n'ai ni symbole ni puce\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-8\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\n \"nfc_scan.chip_gate.title\",\n \"Votre document possède-t-il ce symbole et/ou une puce électronique ?\",\n )}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed whitespace-pre-line\">\n {t(\n \"nfc_scan.chip_gate.subtitle\",\n \"Ce parcours lit la puce électronique sans contact de votre pièce d'identité. Repérez ce symbole ou une puce électronique sur votre document.\",\n )}\n </Subtitle>\n </div>\n\n {/* Symbole biométrique + puce CNI, côte à côte, aux couleurs du SDK */}\n <div className=\"flex items-center justify-center gap-6\">\n <BiometricSymbol className=\"h-auto w-50 md:w-32\" />\n <PuceCniSymbol className=\"h-auto w-50 md:w-32\" />\n </div>\n\n {/* Où chercher le symbole */}\n <div\n className=\"rounded-2xl border p-4 text-sm leading-relaxed text-gray-700\"\n style={{\n borderColor: \"var(--uni-light-color-variant-2, #b2ece5)\",\n backgroundColor: \"var(--uni-light-color-variant-1, #d0f7f2)\",\n }}\n >\n <p className=\"mb-1\">\n {t(\n \"nfc_scan.chip_gate.hint_passport\",\n \"Sur un passeport, ce symbole figure sur la couverture.\",\n )}\n </p>\n <p>\n {t(\n \"nfc_scan.chip_gate.hint_card\",\n \"Sur une carte d'identité ou un titre de séjour, repérez ce symbole ou une puce électronique au recto ou au verso.\",\n )}\n </p>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default NfcChipGate;\n"],"names":["useI18n","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Title","Subtitle","BiometricSymbol","PuceCniSymbol"],"mappings":";;;;;;;;;;;;;;AAiBA;;;;;;;;;;AAUG;AACH,IAAM,WAAW,GAAG,UAAC,EAAyC,EAAA;QAAvC,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,QAAA;AAChC,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;AAET,IAAA,QACEC,cAAA,CAACC,wBAAgB,EAAA,EACf,MAAM,EACJD,cAAA,CAACE,mBAAW,EAAA,EACV,SAAS,EAAC,2BAA2B,EACrC,OAAO,EACLF,cAAA,CAACG,cAAM,EAAA,EAAC,OAAO,EAAE,SAAS,EAAA,QAAA,EACvB,CAAC,CAAC,4BAA4B,EAAE,KAAK,CAAC,GAChC,EAEX,SAAS,EACPH,cAAA,CAACG,cAAM,EAAA,EACL,OAAO,EAAC,WAAW,EACnB,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAE5B,CAAC,CAAC,4BAA4B,EAAE,iCAAiC,CAAC,EAAA,CAC5D,EAAA,CAEX,EAAA,QAAA,EAGJH,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC9CI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCJ,cAAA,CAACK,aAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC/C,CAAC,CACA,0BAA0B,EAC1B,sEAAsE,CACvE,EAAA,CACK,EACRL,cAAA,CAACM,gBAAQ,EAAA,EAAC,SAAS,EAAC,2DAA2D,EAAA,QAAA,EAC5E,CAAC,CACA,6BAA6B,EAC7B,8IAA8I,CAC/I,EAAA,CACQ,CAAA,EAAA,CACP,EAGNF,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,CACrDJ,cAAA,CAACO,uBAAe,EAAA,EAAC,SAAS,EAAC,qBAAqB,EAAA,CAAG,EACnDP,cAAA,CAACQ,qBAAa,EAAA,EAAC,SAAS,EAAC,qBAAqB,EAAA,CAAG,CAAA,EAAA,CAC7C,EAGNJ,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,8DAA8D,EACxE,KAAK,EAAE;AACL,4BAAA,WAAW,EAAE,2CAA2C;AACxD,4BAAA,eAAe,EAAE,2CAA2C;yBAC7D,EAAA,QAAA,EAAA,CAEDJ,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,MAAM,EAAA,QAAA,EAChB,CAAC,CACA,kCAAkC,EAClC,wDAAwD,CACzD,EAAA,CACC,EACJA,gCACG,CAAC,CACA,8BAA8B,EAC9B,mHAAmH,CACpH,EAAA,CACC,CAAA,EAAA,CACA,CAAA,EAAA,CACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NfcFallbackSurvey.js","sources":["../../../../../src/components/nfc-scan/NfcFallbackSurvey.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\n\ninterface NfcFallbackSurveyProps {\n /**\n * Validation du questionnaire.\n * @param reason clé technique de la raison sélectionnée\n * @param label libellé lisible (traduit) — stocké tel quel côté backoffice\n * @param comment commentaire libre optionnel (uniquement si \"autre\")\n */\n onSubmit: (reason: string, label: string, comment?: string) => void;\n}\n\nconst REASON_KEYS = [\n \"reason_scan_failed\",\n \"reason_no_id\",\n \"reason_no_nfc\",\n \"reason_unknown_nfc\",\n \"reason_not_comfortable\",\n \"reason_other\",\n] as const;\n\ntype ReasonKey = (typeof REASON_KEYS)[number];\n\nconst REASON_FALLBACKS: Record<ReasonKey, string> = {\n reason_scan_failed: \"Le scan n'a pas fonctionné\",\n reason_no_id: \"Je n'ai pas ma pièce d'identité avec moi\",\n reason_no_nfc: \"Ma pièce d'identité n'a pas de puce\",\n reason_unknown_nfc: \"Je ne sais pas si ma pièce a une puce\",\n reason_not_comfortable: \"Je ne souhaite pas utiliser le scan sans contact\",\n reason_other: \"Autre raison\",\n};\n\n// Raisons pour lesquelles on propose un commentaire libre optionnel (\"nous en dire plus\").\nconst REASONS_WITH_COMMENT: ReasonKey[] = [\"reason_scan_failed\", \"reason_other\"];\n\n/**\n * Questionnaire de fallback affiché lorsqu'un utilisateur déclare ne pas pouvoir\n * utiliser le scan NFC (écran NfcChipGate → \"Non\"). À la manière de Persona, on\n * recueille la raison pour aider les reviewers côté backoffice avant de poursuivre.\n *\n * La sélection d'une raison est obligatoire ; un commentaire libre optionnel\n * apparaît lorsque \"Autre raison\" est choisi.\n */\nconst NfcFallbackSurvey = ({ onSubmit }: NfcFallbackSurveyProps) => {\n const { t } = useI18n();\n const [selectedReason, setSelectedReason] = useState<ReasonKey | null>(null);\n const [comment, setComment] = useState(\"\");\n\n const handleSubmit = () => {\n if (!selectedReason) return;\n const label = t(\n `nfc_scan.fallback.${selectedReason}`,\n REASON_FALLBACKS[selectedReason],\n );\n const trimmedComment = comment.trim();\n onSubmit(\n selectedReason,\n label,\n REASONS_WITH_COMMENT.includes(selectedReason) && trimmedComment\n ? trimmedComment\n : undefined,\n );\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleSubmit} disabled={!selectedReason}>\n {t(\"nfc_scan.fallback.continue\", \"Continuer\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\"nfc_scan.fallback.title\", \"Aidez-nous à comprendre\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed whitespace-pre-line\">\n {t(\n \"nfc_scan.fallback.subtitle\",\n \"Pour quelle raison ne pouvez-vous pas utiliser le scan sans contact ?\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"space-y-3\">\n {REASON_KEYS.map((reasonKey) => {\n const isSelected = selectedReason === reasonKey;\n return (\n <button\n key={reasonKey}\n type=\"button\"\n onClick={() => setSelectedReason(reasonKey)}\n aria-pressed={isSelected}\n className=\"flex w-full items-center gap-3 rounded-xl border-2 p-4 text-left transition-colors\"\n style={{\n borderColor: isSelected\n ? \"var(--uni-primary-color, #11e5c5)\"\n : \"#e5e7eb\",\n backgroundColor: isSelected\n ? \"var(--uni-light-color-variant-1, #d0f7f2)\"\n : \"#ffffff\",\n }}\n >\n <span\n className=\"flex h-5 w-5 shrink-0 items-center justify-center rounded-full border-2\"\n style={{\n borderColor: isSelected\n ? \"var(--uni-primary-color, #11e5c5)\"\n : \"#d1d5db\",\n }}\n >\n {isSelected && (\n <span\n className=\"h-2.5 w-2.5 rounded-full\"\n style={{\n backgroundColor: \"var(--uni-primary-color, #11e5c5)\",\n }}\n />\n )}\n </span>\n <span className=\"text-sm font-medium text-gray-900\">\n {t(\n `nfc_scan.fallback.${reasonKey}`,\n REASON_FALLBACKS[reasonKey],\n )}\n </span>\n </button>\n );\n })}\n </div>\n\n {selectedReason && REASONS_WITH_COMMENT.includes(selectedReason) && (\n <textarea\n value={comment}\n onChange={(e) => setComment(e.target.value)}\n maxLength={1000}\n rows={3}\n placeholder={t(\n \"nfc_scan.fallback.comment_placeholder\",\n \"Précisez votre raison (optionnel)\",\n )}\n className=\"w-full resize-none rounded-xl border-2 border-gray-200 p-3 text-sm text-gray-900 focus:outline-none\"\n />\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default NfcFallbackSurvey;\n"],"names":["useI18n","useState","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Title","Subtitle"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NfcOnboardingNotice.js","sources":["../../../../../src/components/nfc-scan/NfcOnboardingNotice.tsx"],"sourcesContent":["import React from \"react\";\nimport { Wallet, QrCode, Smartphone } from \"lucide-react\";\nimport { useI18n } from \"../../hooks/useI18n\";\n\n/**\n * Encart pédagogique affiché sur la page de choix de document lorsque le parcours\n * utilise l'option NFC. Il prépare l'utilisateur aux étapes inhabituelles à venir\n * (document physique en main, scan d'un QR code, ouverture d'une application externe)\n * afin de limiter la rupture de flux et l'abandon.\n *\n * Affiché uniquement quand `nfcEnabled` est vrai côté nœud — sinon la page de choix\n * de document conserve son affichage classique.\n */\nconst NfcOnboardingNotice: React.FC = () => {\n const { t } = useI18n();\n\n const steps = [\n {\n Icon: Wallet,\n title: t(\n \"nfc_scan.onboarding.step_document_title\",\n \"Préparez votre document\",\n ),\n description: t(\n \"nfc_scan.onboarding.step_document_description\",\n \"Sortez votre document d'identité physique, vous en aurez besoin pour la lecture de la puce électronique.\",\n ),\n },\n {\n Icon: QrCode,\n title: t(\"nfc_scan.onboarding.step_qr_title\", \"Scannez un QR code\"),\n description: t(\n \"nfc_scan.onboarding.step_qr_description\",\n \"Après votre choix, un QR code s'affichera : scannez-le avec votre smartphone.\",\n ),\n },\n {\n Icon: Smartphone,\n title: t(\n \"nfc_scan.onboarding.step_app_title\",\n \"Ouvrez l'application sécurisée\",\n ),\n description: t(\n \"nfc_scan.onboarding.step_app_description\",\n \"Le QR code ouvre une application externe dédiée pour scanner et lire la puce électronique de votre document.\",\n ),\n },\n ];\n\n return (\n <div className=\"rounded-2xl border border-teal-200 bg-teal-50 p-4 md:p-5\">\n <h3 className=\"mb-3 flex items-center gap-2 text-sm font-semibold text-teal-900\">\n <QrCode size={18} aria-hidden=\"true\" className=\"shrink-0\" />\n {t(\"nfc_scan.onboarding.title\", \"Lecture sans contact (NFC)\")}\n </h3>\n <p className=\"mb-4 text-sm leading-relaxed text-teal-800\">\n {t(\n \"nfc_scan.onboarding.intro\",\n \"Ce parcours utilise la lecture sans contact de la puce électronique de votre document. Voici les étapes à venir :\",\n )}\n </p>\n <ol className=\"space-y-3\">\n {steps.map(({ Icon, title, description }, index) => (\n <li key={index} className=\"flex items-start gap-3\">\n <span className=\"mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-white text-teal-600 shadow-sm\">\n <Icon size={18} aria-hidden=\"true\" />\n </span>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-gray-900\">{title}</p>\n <p className=\"text-sm leading-relaxed text-gray-600\">\n {description}\n </p>\n </div>\n </li>\n ))}\n </ol>\n </div>\n );\n};\n\nexport default NfcOnboardingNotice;\n"],"names":["useI18n","Wallet","QrCode","Smartphone","_jsxs","_jsx"],"mappings":";;;;;;;;AAIA;;;;;;;;AAQG;AACH,IAAM,mBAAmB,GAAa,YAAA;AAC5B,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;AAET,IAAA,IAAM,KAAK,GAAG;AACZ,QAAA;AACE,YAAA,IAAI,EAAEC,kBAAM;AACZ,YAAA,KAAK,EAAE,CAAC,CACN,yCAAyC,EACzC,yBAAyB,CAC1B;AACD,YAAA,WAAW,EAAE,CAAC,CACZ,+CAA+C,EAC/C,0GAA0G,CAC3G;AACF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAEC,kBAAM;AACZ,YAAA,KAAK,EAAE,CAAC,CAAC,mCAAmC,EAAE,oBAAoB,CAAC;AACnE,YAAA,WAAW,EAAE,CAAC,CACZ,yCAAyC,EACzC,+EAA+E,CAChF;AACF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAEC,sBAAU;AAChB,YAAA,KAAK,EAAE,CAAC,CACN,oCAAoC,EACpC,gCAAgC,CACjC;AACD,YAAA,WAAW,EAAE,CAAC,CACZ,0CAA0C,EAC1C,8GAA8G,CAC/G;AACF,SAAA;KACF;IAED,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0DAA0D,EAAA,QAAA,EAAA,CACvEA,eAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC9EC,cAAA,CAACH,kBAAM,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,aAAA,EAAc,MAAM,EAAC,SAAS,EAAC,UAAU,EAAA,CAAG,EAC3D,CAAC,CAAC,2BAA2B,EAAE,4BAA4B,CAAC,CAAA,EAAA,CAC1D,EACLG,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4CAA4C,EAAA,QAAA,EACtD,CAAC,CACA,2BAA2B,EAC3B,mHAAmH,CACpH,EAAA,CACC,EACJA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,WAAW,EAAA,QAAA,EACtB,KAAK,CAAC,GAAG,CAAC,UAAC,EAA4B,EAAE,KAAK,EAAA;AAAjC,oBAAA,IAAA,IAAI,UAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,WAAW,GAAA,EAAA,CAAA,WAAA;oBAAc,QAClDD,wBAAgB,SAAS,EAAC,wBAAwB,EAAA,QAAA,EAAA,CAChDC,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,wGAAwG,YACtHA,cAAA,CAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAA,aAAA,EAAc,MAAM,EAAA,CAAG,EAAA,CAChC,EACPD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,SAAS,aACtBC,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAE,KAAK,EAAA,CAAK,EAC5DA,sBAAG,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACjD,WAAW,GACV,CAAA,EAAA,CACA,CAAA,EAAA,EATC,KAAK,CAUT;AAX6C,gBAAA,CAYnD,CAAC,EAAA,CACC,CAAA,EAAA,CACD;AAEV;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NfcScanNode.js","sources":["../../../../../src/components/nfc-scan/NfcScanNode.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport QRCode from \"qrcode\";\nimport type { SessionTemplate, stepObject } from \"../../types/session\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { useNfcSseStatus } from \"../../hooks/useNfcSseStatus\";\nimport { getBaseURL } from \"../../services/api\";\nimport { resetNfcScan } from \"../../services/sessionService\";\nimport { isMobileDevice } from \"../../utils/isMobileDevice\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport NfcSuccessAnimation from \"./NfcSuccessAnimation\";\n\ninterface NfcScanStepProps {\n sessionId: string;\n nodeId: string;\n stepObject: stepObject;\n template?: SessionTemplate;\n pageTitle?: string;\n pageDescription?: string;\n /** Retour vers la sélection du document (pour corriger un mauvais choix). */\n onBack?: () => void;\n /**\n * Fallback \"poursuivre sans puce\" proposé sur l'échec définitif (nfcStatus 'failed'). Ouvre le\n * questionnaire de raison côté web (NfcFallbackSurvey) ; la reprise (photo/API ou saut de nœud)\n * est décidée par l'orchestrateur selon nfcMode. Absent = bouton masqué.\n */\n onContinueWithoutChip?: () => void;\n}\n\nconst NfcScanStep: React.FC<NfcScanStepProps> = ({\n sessionId,\n nodeId,\n stepObject,\n template,\n pageTitle,\n pageDescription,\n onBack,\n onContinueWithoutChip,\n}) => {\n const { t } = useI18n();\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [qrError, setQrError] = useState<string | null>(null);\n const [resetError, setResetError] = useState<string | null>(null);\n const [isResetting, setIsResetting] = useState(false);\n // Sur mobile, on ouvre directement l'app de scan au lieu d'afficher un QR code inutile.\n const isMobile = useMemo(() => isMobileDevice(), []);\n\n const nfcUrl = useMemo(() => {\n const origin = typeof window !== \"undefined\" ? window.location.origin : \"\";\n return `${origin}/scan/${sessionId}`;\n }, [sessionId]);\n\n const apiBaseUrl = useMemo(() => getBaseURL(), []);\n\n const { status } = useNfcSseStatus({\n sessionId,\n apiBaseUrl,\n onCompleted: () => {\n if (template) {\n stepObject.goToNextStep(nodeId, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n },\n });\n\n const title =\n pageTitle || t(\"nfc_scan.page_title\", \"Scan NFC de votre document\");\n const subtitle =\n pageDescription ||\n t(\n \"nfc_scan.page_description\",\n \"Scannez le QR code ci-dessous avec votre smartphone pour lire la puce électronique de votre document d'identité.\"\n );\n\n // Sur mobile : ouvrir directement l'application de scan (pas de QR à se scanner soi-même).\n // Une seule fois, tant que le scan n'a pas progressé. Le SSE reste actif pour faire avancer\n // le parcours quand la lecture est terminée.\n const hasRedirectedRef = useRef(false);\n useEffect(() => {\n if (!isMobile || status !== \"pending\" || hasRedirectedRef.current) return;\n hasRedirectedRef.current = true;\n window.location.assign(nfcUrl);\n }, [isMobile, status, nfcUrl]);\n\n useEffect(() => {\n if (isMobile) return; // pas de QR sur mobile (redirection directe)\n if (status !== \"pending\") return;\n\n const generate = async () => {\n if (!canvasRef.current) return;\n setQrError(null);\n\n try {\n const dataUrl = await QRCode.toDataURL(nfcUrl, {\n width: 256,\n margin: 2,\n color: { dark: \"#000000\", light: \"#FFFFFF\" },\n });\n const canvas = canvasRef.current;\n const ctx = canvas.getContext(\"2d\");\n if (ctx) {\n const img = new Image();\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0);\n };\n img.src = dataUrl;\n }\n } catch {\n setQrError(t(\"qr_code.generation_failed\", \"Erreur de génération du QR code\"));\n }\n };\n\n generate();\n }, [nfcUrl, status, t, isMobile]);\n\n const handleBack = async () => {\n if (!onBack) return;\n\n if (status !== \"failed\") {\n onBack();\n return;\n }\n\n setResetError(null);\n setIsResetting(true);\n try {\n await resetNfcScan(sessionId);\n onBack();\n } catch {\n setResetError(\n t(\n \"nfc_scan.reset_failed\",\n \"Impossible de réinitialiser le scan NFC. Veuillez réessayer.\",\n ),\n );\n } finally {\n setIsResetting(false);\n }\n };\n\n // Footer : sur l'échec définitif ('failed'), les actions dédiées (revenir au choix / poursuivre\n // sans puce) sont rendues via PageActions, comme les autres écrans NFC (NfcChipGate). Sinon, un\n // simple \"Retour\" tant que le scan n'a pas commencé/abouti.\n const canGoBack = !!onBack && (status === \"pending\" || status === \"opened\");\n const footer =\n status === \"failed\" ? (\n <PageActions\n primary={\n onBack ? (\n <Button onClick={() => void handleBack()} disabled={isResetting}>\n {t(\"nfc_scan.failed_back_to_selection\", \"Revenir au choix du document\")}\n </Button>\n ) : null\n }\n secondary={\n onContinueWithoutChip ? (\n <Button variant=\"secondary\" onClick={onContinueWithoutChip}>\n {t(\"nfc_scan.failed_continue_without_chip\", \"Poursuivre sans puce\")}\n </Button>\n ) : null\n }\n />\n ) : canGoBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"common.back\", \"Retour\")}\n </Button>\n ) : null;\n\n return (\n <MobilePageLayout footer={footer}>\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4 mt-16 md:mt-20\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">{title}</Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {subtitle}\n </Subtitle>\n </div>\n\n <div className=\"flex-1 flex flex-col justify-center items-center gap-4\">\n {status === \"success\" ? (\n <NfcSuccessAnimation />\n ) : status === \"completed\" ? (\n <div className=\"flex flex-col items-center gap-4 p-8\">\n <div className=\"animate-spin w-10 h-10 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\n <p className=\"text-sm text-gray-600\">\n {t(\"nfc_scan.verifying\", \"Vérification en cours…\")}\n </p>\n </div>\n ) : status === \"failed\" ? (\n <div className=\"flex flex-col items-center gap-2 p-8 text-center\">\n <p className=\"text-base font-semibold text-red-600\">\n {t(\"nfc_scan.failed_title\", \"Le scan n'a pas pu être vérifié\")}\n </p>\n <p className=\"text-sm text-gray-600 leading-relaxed\">\n {t(\n \"nfc_scan.failed_description\",\n \"Après plusieurs tentatives, la lecture de votre document n'a pas pu être validée.\"\n )}\n </p>\n {resetError && (\n <p className=\"text-sm text-red-600\" role=\"alert\">\n {resetError}\n </p>\n )}\n </div>\n ) : (\n // Contenu principal QR/mobile — reste monté pour \"pending\" ET \"opened\", pour ne\n // jamais démonter le canvas déjà généré.\n <>\n {qrError ? (\n <div className=\"text-red-500 text-center p-4\">{qrError}</div>\n ) : isMobile ? (\n <div className=\"flex flex-col items-center gap-4 p-8 text-center\">\n <div className=\"animate-spin w-10 h-10 border-2 border-gray-300 border-t-blue-500 rounded-full\" />\n <p className=\"text-sm text-gray-600\">\n {t(\"nfc_scan.opening_app\", \"Ouverture de l'application…\")}\n </p>\n <a\n href={nfcUrl}\n className=\"text-sm font-medium text-blue-600 underline\"\n >\n {t(\"nfc_scan.open_app_link\", \"Ouvrir l'application\")}\n </a>\n </div>\n ) : (\n <div className=\"bg-white p-4 rounded-lg shadow-lg border-2 border-gray-200\">\n <canvas ref={canvasRef} />\n </div>\n )}\n\n {status === \"opened\" && (\n <div className=\"text-center space-y-1\">\n <p\n className=\"text-sm font-semibold\"\n style={{ color: \"var(--uni-secondary-color, #0a9983)\" }}\n >\n {t(\"nfc_scan.qr_opened_title\", \"QR code scanné\")}\n </p>\n <p className=\"text-xs text-gray-500 leading-relaxed\">\n {t(\n \"nfc_scan.qr_opened_description\",\n \"L'expérience NFC est ouverte sur votre smartphone. Continuez le scan sur votre téléphone.\"\n )}\n </p>\n <div className=\"flex items-center justify-center gap-2 text-xs text-gray-500 pt-1\">\n <span\n className=\"h-2 w-2 rounded-full animate-pulse\"\n style={{ backgroundColor: \"var(--uni-primary-color, #11e5c5)\" }}\n />\n {t(\"nfc_scan.waiting_completion\", \"En attente de la lecture NFC\")}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default NfcScanStep;\n"],"names":["useI18n","useRef","useState","useMemo","isMobileDevice","getBaseURL","useNfcSseStatus","useEffect","__awaiter","resetNfcScan","_jsx","PageActions","Button","MobilePageLayout","_jsxs","Title","Subtitle","NfcSuccessAnimation","_Fragment"],"mappings":";;;;;;;;;;;;;;;;;;;;AAgCA,IAAM,WAAW,GAA+B,UAAC,EAShD,EAAA;QARC,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,qBAAqB,GAAA,EAAA,CAAA,qBAAA;AAEb,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;AACT,IAAA,IAAM,SAAS,GAAGC,YAAM,CAAoB,IAAI,CAAC;IAC3C,IAAA,EAAA,GAAwBC,cAAQ,CAAgB,IAAI,CAAC,EAApD,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAiC;IACrD,IAAA,EAAA,GAA8BA,cAAQ,CAAgB,IAAI,CAAC,EAA1D,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAAiC;IAC3D,IAAA,EAAA,GAAgCA,cAAQ,CAAC,KAAK,CAAC,EAA9C,WAAW,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,cAAc,GAAA,EAAA,CAAA,CAAA,CAAmB;;AAErD,IAAA,IAAM,QAAQ,GAAGC,aAAO,CAAC,YAAA,EAAM,OAAAC,6BAAc,EAAE,CAAA,CAAhB,CAAgB,EAAE,EAAE,CAAC;IAEpD,IAAM,MAAM,GAAGD,aAAO,CAAC,YAAA;AACrB,QAAA,IAAM,MAAM,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;AAC1E,QAAA,OAAO,EAAA,CAAA,MAAA,CAAG,MAAM,EAAA,QAAA,CAAA,CAAA,MAAA,CAAS,SAAS,CAAE;AACtC,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAEf,IAAA,IAAM,UAAU,GAAGA,aAAO,CAAC,YAAA,EAAM,OAAAE,cAAU,EAAE,CAAA,CAAZ,CAAY,EAAE,EAAE,CAAC;IAE1C,IAAA,MAAM,GAAKC,+BAAe,CAAC;AACjC,QAAA,SAAS,EAAA,SAAA;AACT,QAAA,UAAU,EAAA,UAAA;AACV,QAAA,WAAW,EAAE,YAAA;YACX,IAAI,QAAQ,EAAE;AACZ,gBAAA,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;YAC3C;iBAAO;gBACL,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;YACzC;QACF,CAAC;AACF,KAAA,CAAC,OAVY;IAYd,IAAM,KAAK,GACT,SAAS,IAAI,CAAC,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;IACrE,IAAM,QAAQ,GACZ,eAAe;AACf,QAAA,CAAC,CACC,2BAA2B,EAC3B,kHAAkH,CACnH;;;;AAKH,IAAA,IAAM,gBAAgB,GAAGL,YAAM,CAAC,KAAK,CAAC;AACtC,IAAAM,eAAS,CAAC,YAAA;QACR,IAAI,CAAC,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,gBAAgB,CAAC,OAAO;YAAE;AACnE,QAAA,gBAAgB,CAAC,OAAO,GAAG,IAAI;AAC/B,QAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAChC,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9B,IAAAA,eAAS,CAAC,YAAA;AACR,QAAA,IAAI,QAAQ;AAAE,YAAA,OAAO;QACrB,IAAI,MAAM,KAAK,SAAS;YAAE;AAE1B,QAAA,IAAM,QAAQ,GAAG,YAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;wBACf,IAAI,CAAC,SAAS,CAAC,OAAO;4BAAE,OAAA,CAAA,CAAA,YAAA;wBACxB,UAAU,CAAC,IAAI,CAAC;;;;AAGE,wBAAA,OAAA,CAAA,CAAA,YAAM,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE;AAC7C,gCAAA,KAAK,EAAE,GAAG;AACV,gCAAA,MAAM,EAAE,CAAC;gCACT,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;AAC7C,6BAAA,CAAC,CAAA;;AAJI,wBAAA,OAAO,GAAG,EAAA,CAAA,IAAA,EAId;wBACI,QAAA,GAAS,SAAS,CAAC,OAAO;AAC1B,wBAAA,KAAA,GAAM,QAAM,CAAC,UAAU,CAAC,IAAI,CAAC;wBACnC,IAAI,KAAG,EAAE;4BACD,KAAA,GAAM,IAAI,KAAK,EAAE;4BACvB,KAAG,CAAC,MAAM,GAAG,YAAA;AACX,gCAAA,QAAM,CAAC,KAAK,GAAG,KAAG,CAAC,KAAK;AACxB,gCAAA,QAAM,CAAC,MAAM,GAAG,KAAG,CAAC,MAAM;gCAC1B,KAAG,CAAC,SAAS,CAAC,KAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1B,4BAAA,CAAC;AACD,4BAAA,KAAG,CAAC,GAAG,GAAG,OAAO;wBACnB;;;;wBAEA,UAAU,CAAC,CAAC,CAAC,2BAA2B,EAAE,iCAAiC,CAAC,CAAC;;;;;aAEhF;AAED,QAAA,QAAQ,EAAE;IACZ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEjC,IAAA,IAAM,UAAU,GAAG,YAAA,EAAA,OAAAA,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;AACjB,oBAAA,IAAI,CAAC,MAAM;wBAAE,OAAA,CAAA,CAAA,YAAA;AAEb,oBAAA,IAAI,MAAM,KAAK,QAAQ,EAAE;AACvB,wBAAA,MAAM,EAAE;wBACR,OAAA,CAAA,CAAA,YAAA;oBACF;oBAEA,aAAa,CAAC,IAAI,CAAC;oBACnB,cAAc,CAAC,IAAI,CAAC;;;;AAElB,oBAAA,OAAA,CAAA,CAAA,YAAMC,2BAAY,CAAC,SAAS,CAAC,CAAA;;AAA7B,oBAAA,EAAA,CAAA,IAAA,EAA6B;AAC7B,oBAAA,MAAM,EAAE;;;;oBAER,aAAa,CACX,CAAC,CACC,uBAAuB,EACvB,8DAA8D,CAC/D,CACF;;;oBAED,cAAc,CAAC,KAAK,CAAC;;;;;SAExB;;;;AAKD,IAAA,IAAM,SAAS,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,QAAQ,CAAC;IAC3E,IAAM,MAAM,GACV,MAAM,KAAK,QAAQ,IACjBC,cAAA,CAACC,mBAAW,EAAA,EACV,OAAO,EACL,MAAM,IACJD,cAAA,CAACE,cAAM,EAAA,EAAC,OAAO,EAAE,YAAA,EAAM,OAAA,KAAK,UAAU,EAAE,CAAA,CAAjB,CAAiB,EAAE,QAAQ,EAAE,WAAW,EAAA,QAAA,EAC5D,CAAC,CAAC,mCAAmC,EAAE,8BAA8B,CAAC,EAAA,CAChE,IACP,IAAI,EAEV,SAAS,EACP,qBAAqB,IACnBF,eAACE,cAAM,EAAA,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,qBAAqB,EAAA,QAAA,EACvD,CAAC,CAAC,uCAAuC,EAAE,sBAAsB,CAAC,EAAA,CAC5D,IACP,IAAI,EAAA,CAEV,IACA,SAAS,IACXF,cAAA,CAACE,cAAM,EAAA,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,YACxC,CAAC,CAAC,aAAa,EAAE,QAAQ,CAAC,EAAA,CACpB,IACP,IAAI;AAEV,IAAA,QACEF,cAAA,CAACG,wBAAgB,EAAA,EAAC,MAAM,EAAE,MAAM,EAAA,QAAA,EAC9BH,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC9CI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sCAAsC,EAAA,QAAA,EAAA,CACnDJ,cAAA,CAACK,aAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,YAAE,KAAK,EAAA,CAAS,EAClEL,cAAA,CAACM,gBAAQ,EAAA,EAAC,SAAS,EAAC,wEAAwE,YACzF,QAAQ,EAAA,CACA,CAAA,EAAA,CACP,EAENN,wBAAK,SAAS,EAAC,wDAAwD,EAAA,QAAA,EACpE,MAAM,KAAK,SAAS,IACnBA,cAAA,CAACO,2BAAmB,EAAA,EAAA,CAAG,IACrB,MAAM,KAAK,WAAW,IACxBH,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sCAAsC,aACnDJ,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gFAAgF,GAAG,EAClGA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EACjC,CAAC,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,EAAA,CAChD,CAAA,EAAA,CACA,IACJ,MAAM,KAAK,QAAQ,IACrBI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kDAAkD,aAC/DJ,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,sCAAsC,YAChD,CAAC,CAAC,uBAAuB,EAAE,iCAAiC,CAAC,EAAA,CAC5D,EACJA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACjD,CAAC,CACA,6BAA6B,EAC7B,mFAAmF,CACpF,GACC,EACH,UAAU,KACTA,sBAAG,SAAS,EAAC,sBAAsB,EAAC,IAAI,EAAC,OAAO,EAAA,QAAA,EAC7C,UAAU,GACT,CACL,CAAA,EAAA,CACG;;;AAIN,wBAAAI,eAAA,CAAAI,mBAAA,EAAA,EAAA,QAAA,EAAA,CACG,OAAO,IACNR,wBAAK,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAAE,OAAO,EAAA,CAAO,IAC3D,QAAQ,IACVI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kDAAkD,aAC/DJ,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gFAAgF,GAAG,EAClGA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EACjC,CAAC,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,EAAA,CACvD,EACJA,sBACE,IAAI,EAAE,MAAM,EACZ,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAEtD,CAAC,CAAC,wBAAwB,EAAE,sBAAsB,CAAC,GAClD,CAAA,EAAA,CACA,KAENA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4DAA4D,EAAA,QAAA,EACzEA,cAAA,CAAA,QAAA,EAAA,EAAQ,GAAG,EAAE,SAAS,GAAI,EAAA,CACtB,CACP,EAEA,MAAM,KAAK,QAAQ,KAClBI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCJ,cAAA,CAAA,GAAA,EAAA,EACE,SAAS,EAAC,uBAAuB,EACjC,KAAK,EAAE,EAAE,KAAK,EAAE,qCAAqC,EAAE,EAAA,QAAA,EAEtD,CAAC,CAAC,0BAA0B,EAAE,gBAAgB,CAAC,EAAA,CAC9C,EACJA,sBAAG,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACjD,CAAC,CACA,gCAAgC,EAChC,2FAA2F,CAC5F,GACC,EACJI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mEAAmE,EAAA,QAAA,EAAA,CAChFJ,cAAA,CAAA,MAAA,EAAA,EACE,SAAS,EAAC,oCAAoC,EAC9C,KAAK,EAAE,EAAE,eAAe,EAAE,mCAAmC,EAAE,EAAA,CAC/D,EACD,CAAC,CAAC,6BAA6B,EAAE,8BAA8B,CAAC,CAAA,EAAA,CAC7D,CAAA,EAAA,CACF,CACP,IACA,CACJ,EAAA,CACG,IACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NfcSuccessAnimation.js","sources":["../../../../../src/components/nfc-scan/NfcSuccessAnimation.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useI18n } from \"../../hooks/useI18n\";\n\nconst NfcSuccessAnimation: React.FC = () => {\n const { t } = useI18n();\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n // Déclenche l'animation au prochain frame pour permettre la transition CSS\n const id = requestAnimationFrame(() => setVisible(true));\n return () => cancelAnimationFrame(id);\n }, []);\n\n return (\n <div\n className=\"flex flex-col items-center gap-6 p-8\"\n style={{\n opacity: visible ? 1 : 0,\n transform: visible ? \"scale(1)\" : \"scale(0.85)\",\n transition: \"opacity 0.4s ease, transform 0.4s ease\",\n }}\n >\n <div style={{ position: \"relative\", width: 72, height: 72, flexShrink: 0 }}>\n {/* Halo pulsant en arrière-plan */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n borderRadius: \"50%\",\n backgroundColor: \"var(--uni-primary-color, #11e5c5)\",\n transformOrigin: \"center center\",\n animation: \"nfc-pulse 1.6s ease-out infinite\",\n pointerEvents: \"none\",\n }}\n />\n\n {/* Cercle + check SVG animé */}\n <svg\n width={72}\n height={72}\n viewBox=\"0 0 72 72\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n {/* Cercle de fond rempli */}\n <circle\n cx={36}\n cy={36}\n r={34}\n fill=\"var(--uni-primary-color, #11e5c5)\"\n style={{\n opacity: visible ? 1 : 0,\n transition: \"opacity 0.3s ease 0.1s\",\n }}\n />\n {/* Trait du check — strokeDashoffset animé */}\n <polyline\n points=\"20,37 30,47 52,25\"\n stroke=\"#ffffff\"\n strokeWidth={5}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n fill=\"none\"\n style={{\n strokeDasharray: 50,\n strokeDashoffset: visible ? 0 : 50,\n transition: \"stroke-dashoffset 0.45s cubic-bezier(0.4, 0, 0.2, 1) 0.35s\",\n }}\n />\n </svg>\n </div>\n\n <div className=\"text-center space-y-1\">\n <p\n className=\"font-semibold text-base\"\n style={{ color: \"var(--uni-secondary-color, #0a9983)\" }}\n >\n {t(\"nfc_scan.success_title\", \"Documents validés\")}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\"nfc_scan.success_subtitle\", \"Lecture NFC confirmée avec succès\")}\n </p>\n </div>\n\n <style>{`\n @keyframes nfc-pulse {\n 0% { transform: scale(1); opacity: 0.25; }\n 70% { transform: scale(1.65); opacity: 0.05; }\n 100% { transform: scale(1.65); opacity: 0; }\n }\n `}</style>\n </div>\n );\n};\n\nexport default NfcSuccessAnimation;\n"],"names":["useI18n","useState","useEffect","_jsxs","_jsx"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PuceCniSymbol.js","sources":["../../../../../src/components/nfc-scan/PuceCniSymbol.tsx"],"sourcesContent":["interface PuceCniSymbolProps {\n className?: string;\n}\n\n/**\n * Pictogramme de la puce de contact d'une carte d'identité (contacts dorés type\n * carte bancaire), repris de assets/puce-cni.svg mais teinté avec la couleur\n * primaire du SDK (var(--uni-primary-color)) pour rester aligné sur l'identité\n * visuelle, en cohérence avec BiometricSymbol.\n *\n * Affiché à côté du symbole biométrique pour aider l'utilisateur à reconnaître la\n * puce sur sa carte d'identité.\n */\nconst PuceCniSymbol = ({ className }: PuceCniSymbolProps) => {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 200 125\"\n className={className}\n role=\"img\"\n aria-label=\"Puce d'une carte d'identité\"\n fill=\"none\"\n stroke=\"var(--uni-primary-color, #11e5c5)\"\n strokeWidth=\"4\"\n >\n <rect x=\"10\" y=\"10\" width=\"180\" height=\"105\" rx=\"10\" ry=\"10\" />\n\n <g transform=\"translate(30, 45)\">\n <rect\n width=\"35\"\n height=\"30\"\n rx=\"4\"\n ry=\"4\"\n fill=\"var(--uni-primary-color, #11e5c5)\"\n fillOpacity=\"0.12\"\n strokeWidth=\"2.5\"\n />\n <path\n d=\"M0 10h35M0 20h35M12 0v30M23 0v30\"\n strokeWidth=\"1\"\n strokeOpacity=\"0.6\"\n />\n </g>\n </svg>\n );\n};\n\nexport default PuceCniSymbol;\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAIA;;;;;;;;AAQG;AACH,IAAM,aAAa,GAAG,UAAC,EAAiC,EAAA;AAA/B,IAAA,IAAA,SAAS,GAAA,EAAA,CAAA,SAAA;IAChC,QACEA,eAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAC,4BAA4B,EAClC,OAAO,EAAC,aAAa,EACrB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAC,KAAK,EAAA,YAAA,EACC,kCAA6B,EACxC,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,mCAAmC,EAC1C,WAAW,EAAC,GAAG,EAAA,QAAA,EAAA,CAEfC,cAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,KAAK,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,EAE/DD,eAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,mBAAmB,EAAA,QAAA,EAAA,CAC9BC,cAAA,CAAA,MAAA,EAAA,EACE,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,EAAE,EAAC,GAAG,EACN,EAAE,EAAC,GAAG,EACN,IAAI,EAAC,mCAAmC,EACxC,WAAW,EAAC,MAAM,EAClB,WAAW,EAAC,KAAK,EAAA,CACjB,EACFA,cAAA,CAAA,MAAA,EAAA,EACE,CAAC,EAAC,kCAAkC,EACpC,WAAW,EAAC,GAAG,EACf,aAAa,EAAC,KAAK,EAAA,CACnB,CAAA,EAAA,CACA,CAAA,EAAA,CACA;AAEV;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelfieConfirmation.js","sources":["../../../../../src/components/selfie/SelfieConfirmation.tsx"],"sourcesContent":["/**\n * SelfieConfirmation component\n *\n * Displays the captured selfie and allows the user to confirm or retake it.\n *\n * @param {Object} props - Component props\n * @param {SelfieCaptureData} props.selfieData - The captured selfie data containing media blob and metadata\n * @param {Function} props.onConfirm - Function called when user confirms the selfie\n * @param {Function} props.onRetake - Function called when user wants to retake the selfie\n * @returns {JSX.Element} The selfie confirmation UI component\n */\n\nimport { useEffect, useRef, useState } from \"react\";\nimport type { SelfieCaptureData } from \"../../types/selfie\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\n\ninterface SelfieConfirmationProps {\n selfieData: SelfieCaptureData;\n setSelfiePhoto: (photo: string) => void;\n onConfirm: () => void;\n onRetake: () => void;\n}\n\nconst SelfieConfirmation = ({\n selfieData,\n setSelfiePhoto,\n onConfirm,\n onRetake,\n}: SelfieConfirmationProps) => {\n const { t } = useI18n();\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [imageUrl, setImageUrl] = useState<string | null>(null);\n const canvasRef = useRef<HTMLCanvasElement>(null);\n\n useEffect(() => {\n setIsLoading(true);\n setError(null);\n\n if (!selfieData?.media) {\n setError(t(\"selfie.confirmation.errors.no_data\", \"Aucune donnée de selfie disponible\"));\n setIsLoading(false);\n return;\n }\n\n // Use pre-captured thumbnail from live video stream\n if (selfieData.thumbnail) {\n setImageUrl(selfieData.thumbnail);\n setSelfiePhoto(selfieData.thumbnail);\n setIsLoading(false);\n return;\n }\n\n // No thumbnail available (should not happen)\n setError(t(\"selfie.confirmation.errors.no_preview\", \"Aucune preview disponible\"));\n setIsLoading(false);\n }, [selfieData, setSelfiePhoto]);\n\n if (isLoading) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full bg-white\">\n <div className=\"text-center p-6\">\n <div className=\"mb-4 text-gray-700\">\n {t(\"selfie.confirmation.loading\", \"Traitement de votre selfie...\")}\n </div>\n <div className=\"w-12 h-12 border-4 border-[#11E5C5] border-t-transparent rounded-full animate-spin mx-auto\"></div>\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full bg-white\">\n <div className=\"text-center p-6 max-w-md mx-auto\">\n <div className=\"w-16 h-16 mx-auto mb-4 text-red-500\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line>\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>\n </svg>\n </div>\n <Title className=\"text-xl mb-2\">{t(\"selfie.confirmation.error_title\", \"Une erreur est survenue\")}</Title>\n <p className=\"mb-6 text-sm text-gray-600\">{error}</p>\n <Button variant=\"secondary\" onClick={onRetake} className=\"md:max-w-xs mx-auto\">\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </Button>\n </div>\n </div>\n );\n }\n\n if (!imageUrl) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full bg-white\">\n <div className=\"text-center p-6 max-w-md mx-auto\">\n <div className=\"w-16 h-16 mx-auto mb-4 text-yellow-500\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"></line>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"></line>\n </svg>\n </div>\n <Title className=\"text-xl mb-2\">{t(\"selfie.confirmation.no_display_title\", \"Impossible d'afficher le selfie\")}</Title>\n <p className=\"mb-6 text-sm text-gray-600\">{t(\"selfie.confirmation.no_display_desc\", \"Nous n'avons pas pu traiter correctement votre selfie.\")}</p>\n <Button variant=\"secondary\" onClick={onRetake} className=\"md:max-w-xs mx-auto\">\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <MobilePageLayout\n header={\n <div className=\"p-4 text-center bg-white border-b border-gray-100\">\n <Title className=\"text-xl md:text-2xl\">{t(\"selfie.confirmation.title\", \"Confirmez votre selfie\")}</Title>\n <Subtitle className=\"text-xs text-gray-600 mt-2 md:text-sm\">{t(\"selfie.confirmation.subtitle\", \"Vérifiez que votre visage est clairement visible\")}</Subtitle>\n </div>\n }\n footer={\n <PageActions\n primary={\n <Button onClick={onConfirm}>\n {t(\"selfie.confirmation.confirm\", \"Confirmer\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </Button>\n }\n />\n }\n className=\"bg-white\"\n >\n <div className=\"px-4 py-6 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Selfie display with frame */}\n <div className=\"w-full bg-white rounded-lg shadow-md\">\n <div className=\"relative rounded-lg border-2 border-[#11E5C5] flex items-center justify-center bg-white\">\n <img\n src={imageUrl}\n alt=\"Selfie capturé\"\n className=\"w-full h-auto object-contain rounded-lg\"\n style={{ maxHeight: \"50vh\" }}\n onError={() => {\n setError(\"Impossible d'afficher l'image du selfie\");\n }}\n />\n {/* Overlay pour améliorer la lisibilité */}\n <div className=\"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-black/30 to-transparent p-3\">\n <p className=\"text-white text-xs text-center\">{t(\"selfie.confirmation.overlay_success\", \"Selfie capturé avec succès\")}</p>\n </div>\n </div>\n </div>\n\n {/* Checklist de confirmation */}\n <div className=\"bg-gray-50 p-4 rounded-lg\">\n <h3 className=\"font-medium text-sm mb-3\">{t(\"selfie.confirmation.checklist_title\", \"Vérifiez que :\")}</h3>\n <ul className=\"space-y-2 text-xs text-gray-700\">\n <li className=\"flex items-start\">\n <svg\n className=\"w-4 h-4 text-green-500 mr-2 mt-0.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M5 13l4 4L19 7\"\n ></path>\n </svg>\n {t(\"selfie.confirmation.check_visible\", \"Votre visage est bien visible et occupe la majeure partie de l'image\")}\n </li>\n <li className=\"flex items-start\">\n <svg\n className=\"w-4 h-4 text-green-500 mr-2 mt-0.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M5 13l4 4L19 7\"\n ></path>\n </svg>\n {t(\"selfie.confirmation.check_well_lit\", \"L'image est nette et bien éclairée\")}\n </li>\n <li className=\"flex items-start\">\n <svg\n className=\"w-4 h-4 text-green-500 mr-2 mt-0.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth=\"2\"\n d=\"M5 13l4 4L19 7\"\n ></path>\n </svg>\n {t(\"selfie.confirmation.check_no_object\", \"Aucun objet ne cache votre visage (lunettes de soleil, masque, etc.)\")}\n </li>\n </ul>\n </div>\n\n {/* Canvas caché utilisé pour le traitement des images */}\n <canvas ref={canvasRef} style={{ display: \"none\" }} />\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default SelfieConfirmation;\n"],"names":["useI18n","useState","useRef","useEffect","_jsx","_jsxs","Title","Button","MobilePageLayout","Subtitle","PageActions"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Video.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Video.js","sources":["../../../../../src/components/selfie/Video.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { SelfieCaptureData } from \"../../types/selfie\";\nimport \"./Video.css\";\nimport \"./VideoFixes.css\";\nimport SelfieFlow from \"./selfie-flow/SelfieFlow\";\nimport VideoResetStyles from \"./VideoResetStyles\";\n\ninterface VideoProps {\n setSelfieData: (selfieData: SelfieCaptureData) => void;\n setStep: (step: number) => void;\n sessionId?: string;\n iad?: { enabled: boolean; level?: \"basic\" | \"reinforced\" };\n btnBg?: string;\n btnText?: string;\n}\n\nconst Video = ({ setSelfieData, setStep, sessionId, iad, btnBg, btnText }: VideoProps) => {\n // Effet pour ajouter la classe au body lorsque le composant est monté\n useEffect(() => {\n // Empêcher le scroll sur le body lorsque la capture est active\n document.body.classList.add(\"selfie-active\");\n\n // Ajouter une classe pour gérer le plein écran sur mobile\n document.documentElement.classList.add(\"selfie-fullscreen\");\n\n return () => {\n // Nettoyer en enlevant les classes lors du démontage\n document.body.classList.remove(\"selfie-active\");\n document.documentElement.classList.remove(\"selfie-fullscreen\");\n };\n }, []);\n\n const handleSelfie = (e: Event) => {\n const data = (e as CustomEvent<SelfieCaptureData>).detail;\n\n // Attendre un court instant avant de passer à l'écran de confirmation\n // pour donner le temps à l'utilisateur de voir que la capture est terminée\n setTimeout(() => {\n setSelfieData(data);\n setStep(1); // Move to the next step after selfie capture\n }, 300);\n };\n\n return (\n <div className=\"w-full h-full overflow-hidden flex flex-col\">\n <VideoResetStyles />\n <SelfieFlow\n handleSelfie={handleSelfie}\n sessionId={sessionId}\n iad={iad}\n btnBg={btnBg}\n btnText={btnText}\n />\n </div>\n );\n};\n\nexport default Video;\n"],"names":["useEffect","_jsxs","_jsx","VideoResetStyles","SelfieFlow"],"mappings":";;;;;;;;;;;AAgBA,IAAM,KAAK,GAAG,UAAC,EAAsE,EAAA;AAApE,IAAA,IAAA,aAAa,GAAA,EAAA,CAAA,aAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,GAAG,SAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA;;AAErE,IAAAA,eAAS,CAAC,YAAA;;QAER,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;;QAG5C,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAE3D,OAAO,YAAA;;YAEL,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC;YAC/C,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,CAAC;AAChE,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;IAEN,IAAM,YAAY,GAAG,UAAC,CAAQ,EAAA;AAC5B,QAAA,IAAM,IAAI,GAAI,CAAoC,CAAC,MAAM;;;AAIzD,QAAA,UAAU,CAAC,YAAA;YACT,aAAa,CAAC,IAAI,CAAC;AACnB,YAAA,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,EAAE,GAAG,CAAC;AACT,IAAA,CAAC;AAED,IAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAAA,CAC1DC,cAAA,CAACC,wBAAgB,EAAA,EAAA,CAAG,EACpBD,cAAA,CAACE,kBAAU,EAAA,EACT,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAAA,CAChB,CAAA,EAAA,CACE;AAEV;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"VideoFixes.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"VideoResetStyles.js","sources":["../../../../../src/components/selfie/VideoResetStyles.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\n/**\n * Composant qui injecte des styles CSS globaux pour réinitialiser\n * tous les styles potentiellement problématiques du VideoRecorder\n */\nconst VideoResetStyles = () => {\n useEffect(() => {\n // Créer un élément style pour les styles de réinitialisation globaux\n const resetStyle = document.createElement(\"style\");\n resetStyle.id = \"video-reset-global-styles\";\n\n // Réinitialiser tous les styles potentiellement problématiques\n resetStyle.textContent = `\n /* Réinitialiser les styles globaux qui pourraient affecter l'affichage de la vidéo */\n .selfie {\n --uni-primary-color: #11e5c5;\n --uni-secondary-color: #0a9983;\n --uni-primary-color-lighter: #37a998;\n --uni-secondary-color-lighter: #1cbeaa;\n --uni-alt-color: #086e5f;\n --uni-alt-color-lighter: #0d9485;\n --uni-light-color-variant-1: #d0f7f2;\n --uni-light-color-variant-2: #b2ece5;\n --uni-light-color: #fff;\n --uni-dark-color: #202020;\n --uni-error-color: #f44336;\n\n --uni-btn-padding: 10px 15px;\n --uni-btn-border: solid 0px;\n --uni-btn-border-radius: 0px;\n --uni-btn-font-size: 16px;\n --uni-btn-text-transform: normal;\n --uni-btn-border-outlined: solid 1px;\n --uni-btn-label-margin: 10px 0px;\n --uni-btn-disabled-bg-color: #eee;\n\n --uni-card-bg-color: transparent;\n }\n \n /* Forcer tous les éléments vidéo à avoir le bon style */\n uni-video-recorder,\n uni-video-recorder::shadow-root *,\n uni-video-recorder::part(*),\n video-js,\n .video-js,\n .vjs-default-skin,\n .vjs-big-play-button,\n .vjs-control-bar {\n border-radius: 0 !important;\n background-color: transparent !important;\n overflow: hidden !important;\n }\n \n /* Cibler spécifiquement le conteneur vidéo */\n .video-container video,\n .video-container canvas {\n border-radius: 0 !important;\n width: 100% !important;\n height: 100% !important;\n object-fit: cover !important;\n }\n \n /* Forcer l'élimination de tous les fonds noirs (hors boutons et éléments UI) */\n .selfie *:not(button):not(.selfie-button):not([class*=\"btn\"]) {\n background-color: transparent !important;\n }\n \n /* S'assurer que le composant VideoRecorder prend tout l'espace */\n .selfie .video-container uni-video-recorder {\n width: 100% !important;\n height: 100% !important;\n max-width: 100% !important;\n max-height: 100% !important;\n }\n `;\n\n // Ajouter l'élément style au head du document\n document.head.appendChild(resetStyle);\n\n // Nettoyer en supprimant l'élément style lors du démontage du composant\n return () => {\n const existingStyle = document.getElementById(\n \"video-reset-global-styles\"\n );\n if (existingStyle) {\n document.head.removeChild(existingStyle);\n }\n };\n }, []);\n\n // Ce composant ne rend rien dans le DOM\n return null;\n};\n\nexport default VideoResetStyles;\n"],"names":["useEffect"],"mappings":";;;;;;AAEA;;;AAGG;AACH,IAAM,gBAAgB,GAAG,YAAA;AACvB,IAAAA,eAAS,CAAC,YAAA;;QAER,IAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAClD,QAAA,UAAU,CAAC,EAAE,GAAG,2BAA2B;;AAG3C,QAAA,UAAU,CAAC,WAAW,GAAG,8rEA8DxB;;AAGD,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;;QAGrC,OAAO,YAAA;YACL,IAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAC3C,2BAA2B,CAC5B;YACD,IAAI,aAAa,EAAE;AACjB,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;YAC1C;AACF,QAAA,CAAC;IACH,CAAC,EAAE,EAAE,CAAC;;AAGN,IAAA,OAAO,IAAI;AACb;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useLiveFrameCapture.js","sources":["../../../../../../src/components/selfie/hooks/useLiveFrameCapture.ts"],"sourcesContent":["import { useRef, useCallback } from 'react';\n\n/**\n * Hook to capture a frame from a live video element during recording.\n * This approach works better on Firefox Mobile than extracting from recorded blob.\n */\nexport const useLiveFrameCapture = () => {\n const canvasRef = useRef<HTMLCanvasElement | null>(null);\n\n const captureFrame = useCallback((videoElement: HTMLVideoElement | null): string | null => {\n if (!videoElement) return null;\n\n try {\n // Create canvas if not exists\n if (!canvasRef.current) {\n canvasRef.current = document.createElement('canvas');\n }\n\n const canvas = canvasRef.current;\n const ctx = canvas.getContext('2d', { willReadFrequently: false });\n\n if (!ctx) return null;\n\n // Set canvas dimensions to match video\n canvas.width = videoElement.videoWidth || 640;\n canvas.height = videoElement.videoHeight || 480;\n\n // Draw current video frame to canvas\n ctx.drawImage(videoElement, 0, 0, canvas.width, canvas.height);\n\n // Convert to base64 JPEG\n return canvas.toDataURL('image/jpeg', 0.85);\n } catch (error) {\n console.error('Failed to capture frame:', error);\n return null;\n }\n }, []);\n\n const cleanup = useCallback(() => {\n canvasRef.current = null;\n }, []);\n\n return { captureFrame, cleanup };\n};\n"],"names":["useRef","useCallback"],"mappings":";;;;AAEA;;;AAGG;AACI,IAAM,mBAAmB,GAAG,YAAA;AACjC,IAAA,IAAM,SAAS,GAAGA,YAAM,CAA2B,IAAI,CAAC;AAExD,IAAA,IAAM,YAAY,GAAGC,iBAAW,CAAC,UAAC,YAAqC,EAAA;AACrE,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,IAAI;AAE9B,QAAA,IAAI;;AAEF,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE;gBACtB,SAAS,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;YACtD;AAEA,YAAA,IAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AAChC,YAAA,IAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;AAElE,YAAA,IAAI,CAAC,GAAG;AAAE,gBAAA,OAAO,IAAI;;YAGrB,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC,UAAU,IAAI,GAAG;YAC7C,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC,WAAW,IAAI,GAAG;;AAG/C,YAAA,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;;YAG9D,OAAO,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC;QAC7C;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AAChD,YAAA,OAAO,IAAI;QACb;IACF,CAAC,EAAE,EAAE,CAAC;IAEN,IAAM,OAAO,GAAGA,iBAAW,CAAC,YAAA;AAC1B,QAAA,SAAS,CAAC,OAAO,GAAG,IAAI;IAC1B,CAAC,EAAE,EAAE,CAAC;AAEN,IAAA,OAAO,EAAE,YAAY,EAAA,YAAA,EAAE,OAAO,EAAA,OAAA,EAAE;AAClC;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"useVideoRecorderStyles.js","sources":["../../../../../../src/components/selfie/hooks/useVideoRecorderStyles.tsx"],"sourcesContent":["import { useEffect } from \"react\";\n\n/**\n * Hook personnalisé pour injecter des styles CSS globaux qui ciblent spécifiquement\n * le composant VideoRecorder d'Unissey et éliminent les bords arrondis et les fonds noirs.\n */\nconst useVideoRecorderStyles = (btnBg?: string, btnText?: string) => {\n const resolvedBtnBg = btnBg ?? \"#11E5C5\";\n const resolvedBtnText = btnText ?? \"#3C3C40\";\n\n useEffect(() => {\n // Créer un élément style pour injecter des règles CSS\n const styleElement = document.createElement(\"style\");\n styleElement.id = \"video-recorder-custom-styles\";\n\n // Définir les règles CSS nécessaires pour éliminer les bords arrondis et les fonds noirs\n styleElement.textContent = `\n /* Cibler le composant VideoRecorder et tous ses éléments internes */\n uni-video-recorder,\n uni-video-recorder::shadow-root,\n uni-video-recorder::part(*),\n uni-video-recorder *,\n uni-video-recorder video,\n uni-video-recorder canvas,\n uni-video-recorder div {\n border-radius: 0 !important;\n -webkit-border-radius: 0 !important;\n -moz-border-radius: 0 !important;\n background: transparent !important;\n overflow: hidden !important;\n }\n\n /* Assurer que la vidéo prend tout l'espace disponible */\n uni-video-recorder video,\n uni-video-recorder canvas {\n width: 100% !important;\n height: 100% !important;\n object-fit: cover !important;\n max-height: none !important;\n }\n\n /* iOS-specific fixes for getUserMedia black screen */\n @supports (-webkit-touch-callout: none) {\n uni-video-recorder video {\n -webkit-playsinline: true !important;\n playsinline: true !important;\n autoplay: true !important;\n muted: true !important;\n }\n }\n\n /* Variables CSS globales que le composant pourrait utiliser */\n :root {\n --uni-video-border-radius: 0 !important;\n --uni-border-radius: 0 !important;\n --uni-component-border-radius: 0 !important;\n --uni-video-background: transparent !important;\n --uni-background: transparent !important;\n }\n\n /* Sélecteurs très spécifiques pour garantir que les styles s'appliquent */\n .video-container,\n .video-container > div,\n .video-container > div > uni-video-recorder,\n .video-container uni-video-recorder,\n .selfie .video-container,\n .selfie .video-container > div,\n .selfie .video-container uni-video-recorder {\n border-radius: 0 !important;\n background: transparent !important;\n overflow: hidden !important;\n }\n\n /* Préserver les styles des boutons */\n .selfie button.selfie-button,\n button.selfie-button,\n .selfie-button {\n background-color: ${resolvedBtnBg} !important;\n color: ${resolvedBtnText} !important;\n border-radius: 12px !important;\n }\n\n .selfie button.selfie-button:hover,\n button.selfie-button:hover,\n .selfie-button:hover {\n background-color: ${resolvedBtnBg} !important;\n filter: brightness(1.1);\n }\n\n .selfie button.selfie-button:disabled,\n button.selfie-button:disabled,\n .selfie-button:disabled {\n background-color: #e2e8f0 !important;\n opacity: 0.6 !important;\n }\n `;\n\n // Ajouter l'élément style au head du document\n document.head.appendChild(styleElement);\n\n // Nettoyer en supprimant l'élément style lors du démontage du composant\n return () => {\n const existingStyle = document.getElementById(\n \"video-recorder-custom-styles\"\n );\n if (existingStyle) {\n document.head.removeChild(existingStyle);\n }\n };\n }, [resolvedBtnBg, resolvedBtnText]);\n};\n\nexport default useVideoRecorderStyles;\n"],"names":["useEffect"],"mappings":";;;;;;AAEA;;;AAGG;AACH,IAAM,sBAAsB,GAAG,UAAC,KAAc,EAAE,OAAgB,EAAA;IAC9D,IAAM,aAAa,GAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,SAAS;IACxC,IAAM,eAAe,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,SAAS;AAE5C,IAAAA,eAAS,CAAC,YAAA;;QAER,IAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AACpD,QAAA,YAAY,CAAC,EAAE,GAAG,8BAA8B;;QAGhD,YAAY,CAAC,WAAW,GAAG,mpEAAA,CAAA,MAAA,CA6DH,aAAa,0CACxB,eAAe,EAAA,0MAAA,CAAA,CAAA,MAAA,CAOJ,aAAa,EAAA,gRAAA,CAUpC;;AAGD,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;;QAGvC,OAAO,YAAA;YACL,IAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAC3C,8BAA8B,CAC/B;YACD,IAAI,aAAa,EAAE;AACjB,gBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;YAC1C;AACF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AACtC;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"InstructionsSelfie.js","sources":["../../../../../../src/components/selfie/selfie-flow/InstructionsSelfie.tsx"],"sourcesContent":["import \"../Video.css\";\nimport Button from \"../../ui/Button\";\nimport PageActions from \"../../ui/PageActions\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport UserHandsIcon from \"../../../assets/User Hands.svg\";\nimport FaceScanSquareIcon from \"../../../assets/Face Scan Square.svg\";\nimport LightbulbIcon from \"../../../assets/Lightbulb.svg\";\nimport MonitorCameraIcon from \"../../../assets/Monitor Camera.svg\";\nimport MobilePageLayout from \"../../ui/MobilePageLayout\";\nimport { useI18n } from \"../../../hooks/useI18n\";\n\ninterface InstructionsSelfieProps {\n setStep: (step: number) => void;\n onBack?: () => void;\n}\n\nconst InstructionsSelfie = ({ setStep, onBack }: InstructionsSelfieProps) => {\n const { t } = useI18n();\n const goOnNextStep = () => {\n setStep(1); // Move to the next step after showing instructions\n };\n\n const handleBack = () => {\n if (onBack) {\n onBack();\n }\n };\n\n return (\n <MobilePageLayout\n header={\n <div className=\"p-4 text-center bg-white border-b border-gray-100\">\n <Title className=\"text-xl md:text-2xl\">{t(\"selfie.instructions.title\",\"Vérification par selfie\")}</Title>\n <Subtitle className=\"text-xs text-gray-600 mt-2 md:text-sm\">\n {t(\"selfie.instructions.subtitle\",\"Nous avons besoin de confirmer votre identité\")}\n </Subtitle>\n </div>\n }\n footer={\n <PageActions\n primary={\n <Button onClick={goOnNextStep}>\n {t(\"selfie.instructions.ready\", \"Je suis prêt(e)\")}\n </Button>\n }\n secondary={\n onBack ? (\n <Button variant=\"secondary\" onClick={handleBack}>\n {t(\"selfie.common.back\", \"Retour\")}\n </Button>\n ) : undefined\n }\n />\n }\n className=\"bg-white\"\n >\n <div className=\"px-4 py-6 pt-8 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Custom instructions with icons */}\n <div className=\"mb-8 space-y-6\">\n <div className=\"flex items-center\">\n <div className=\"w-10 h-10 rounded-full bg-[#11E5C5] bg-opacity-20 flex items-center justify-center text-[#11E5C5] mr-4 flex-shrink-0\">\n <img\n src={UserHandsIcon}\n alt=\"User hands\"\n className=\"w-5 h-5 object-contain\"\n />\n </div>\n <div>\n <h3 className=\"font-medium text-sm\">{t(\"selfie.instructions.keep_head_straight\",\"Maintenez votre visage droit et entièrement visible\")}</h3>\n <p className=\"text-xs text-gray-600 mt-1\">{t(\"selfie.instructions.keep_head_straight_desc\",\"Assurez-vous que votre visage soit bien positionné face à la caméra\")}</p>\n </div>\n </div>\n\n <div className=\"flex items-center\">\n <div className=\"w-10 h-10 rounded-full bg-[#11E5C5] bg-opacity-20 flex items-center justify-center text-[#11E5C5] mr-4 flex-shrink-0\">\n <img\n src={FaceScanSquareIcon}\n alt=\"Face scan\"\n className=\"w-5 h-5 object-contain\"\n />\n </div>\n <div>\n <h3 className=\"font-medium text-sm\">{t(\"selfie.instructions.neutral_expression\",\"Conservez une expression neutre\")}</h3>\n <p className=\"text-xs text-gray-600 mt-1\">{t(\"selfie.instructions.neutral_expression_desc\",\"Gardez une expression naturelle et neutre pendant la capture\")}</p>\n </div>\n </div>\n\n <div className=\"flex items-center\">\n <div className=\"w-10 h-10 rounded-full bg-[#11E5C5] bg-opacity-20 flex items-center justify-center text-[#11E5C5] mr-4 flex-shrink-0\">\n <img\n src={LightbulbIcon}\n alt=\"Lightbulb\"\n className=\"w-5 h-5 object-contain\"\n />\n </div>\n <div>\n <h3 className=\"font-medium text-sm\">{t(\"selfie.instructions.well_lit\",\"Assurez-vous d'être suffisamment éclairé\")}</h3>\n <p className=\"text-xs text-gray-600 mt-1\">{t(\"selfie.instructions.well_lit_desc\",\"Choisissez un endroit bien éclairé, évitez le contre-jour\")}</p>\n </div>\n </div>\n\n <div className=\"flex items-center\">\n <div className=\"w-10 h-10 rounded-full bg-[#11E5C5] bg-opacity-20 flex items-center justify-center text-[#11E5C5] mr-4 flex-shrink-0\">\n <img\n src={MonitorCameraIcon}\n alt=\"Monitor camera\"\n className=\"w-5 h-5 object-contain\"\n />\n </div>\n <div>\n <h3 className=\"font-medium text-sm\">{t(\"selfie.instructions.camera_tab\",\"Assurez-vous que votre caméra n'est pas ouverte dans un autre onglet\")}</h3>\n <p className=\"text-xs text-gray-600 mt-1\">{t(\"selfie.instructions.camera_tab_desc\",\"Fermez les autres applications utilisant votre caméra\")}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default InstructionsSelfie;\n"],"names":["useI18n","_jsx","MobilePageLayout","_jsxs","Title","Subtitle","PageActions","Button","UserHandsIcon","FaceScanSquareIcon","LightbulbIcon","MonitorCameraIcon"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelfieFlow.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieFlow.tsx"],"sourcesContent":["import { lazy, Suspense, useState } from \"react\";\nimport SelfiePreIntroduction from \"./SelfiePreIntroduction\";\nimport InstructionsSelfie from \"./InstructionsSelfie\";\nimport LoadingState from \"../../states/LoadingState\";\n\nconst SelfieRecorder = lazy(() => import(\"./SelfieRecorder\"));\n\ninterface SelfieFlowProps {\n handleSelfie: (e: Event) => void;\n sessionId?: string;\n iad?: { enabled: boolean; level?: \"basic\" | \"reinforced\" };\n btnBg?: string;\n btnText?: string;\n}\n\nconst SelfieFlow = ({ handleSelfie, sessionId, iad, btnBg, btnText }: SelfieFlowProps) => {\n const [internalStep, setInternalStep] = useState(-1); // Commencer à -1 pour la pré-introduction\n\n return (\n <div\n className=\"h-full w-full flex flex-col\"\n style={{\n [\"--dk-btn-bg\" as string]: btnBg ?? \"#11E5C5\",\n [\"--dk-btn-text\" as string]: btnText ?? \"#3C3C40\",\n }}\n >\n {internalStep === -1 && (\n <div className=\"flex-1 flex flex-col h-full\">\n <SelfiePreIntroduction\n onContinue={() => setInternalStep(0)}\n />\n </div>\n )}\n {internalStep === 0 && (\n <div className=\"flex-1 flex flex-col h-full\">\n <InstructionsSelfie\n setStep={setInternalStep}\n onBack={() => setInternalStep(-1)}\n />\n </div>\n )}\n {internalStep === 1 && (\n <div className=\"flex-1 flex flex-col h-full overflow-hidden\">\n <Suspense fallback={<LoadingState />}>\n <SelfieRecorder\n handleSelfie={handleSelfie}\n sessionId={sessionId}\n iad={iad}\n btnBg={btnBg}\n btnText={btnText}\n />\n </Suspense>\n </div>\n )}\n </div>\n );\n};\n\nexport default SelfieFlow;\n"],"names":["lazy","useState","_jsxs","_jsx","SelfiePreIntroduction","InstructionsSelfie","Suspense","LoadingState"],"mappings":";;;;;;;;;;AAKA,IAAM,cAAc,GAAGA,UAAI,CAAC,YAAA,EAAM,OAAA,oDAAO,qBAAkB,KAAC,CAAA,CAA1B,CAA0B,CAAC;AAU7D,IAAM,UAAU,GAAG,UAAC,EAAiE,EAAA;;AAA/D,IAAA,IAAA,YAAY,GAAA,EAAA,CAAA,YAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA,EAAE,GAAG,GAAA,EAAA,CAAA,GAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA;AAC1D,IAAA,IAAA,EAAA,GAAkCC,cAAQ,CAAC,EAAE,CAAC,EAA7C,YAAY,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,eAAe,GAAA,EAAA,CAAA,CAAA,CAAgB,CAAC;AAErD,IAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,6BAA6B,EACvC,KAAK,GAAA,EAAA,GAAA,EAAA;YACH,EAAA,CAAC,aAAuB,IAAG,KAAK,KAAA,IAAA,IAAL,KAAK,KAAA,MAAA,GAAL,KAAK,GAAI,SAAS;YAC7C,EAAA,CAAC,eAAyB,IAAG,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,SAAS;4BAGlD,YAAY,KAAK,EAAE,KAClBC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAC1CA,cAAA,CAACC,6BAAqB,EAAA,EACpB,UAAU,EAAE,YAAA,EAAM,OAAA,eAAe,CAAC,CAAC,CAAC,CAAA,CAAlB,CAAkB,EAAA,CACpC,EAAA,CACE,CACP,EACA,YAAY,KAAK,CAAC,KACjBD,wBAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAC1CA,cAAA,CAACE,0BAAkB,IACjB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,cAAM,OAAA,eAAe,CAAC,EAAE,CAAC,EAAnB,CAAmB,EAAA,CACjC,GACE,CACP,EACA,YAAY,KAAK,CAAC,KACjBF,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAC1DA,cAAA,CAACG,cAAQ,EAAA,EAAC,QAAQ,EAAEH,cAAA,CAACI,oBAAY,EAAA,EAAA,CAAG,EAAA,QAAA,EAClCJ,cAAA,CAAC,cAAc,IACb,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAAA,CAChB,GACO,EAAA,CACP,CACP,CAAA,EAAA,CACG;AAEV;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelfiePreIntroduction.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfiePreIntroduction.tsx"],"sourcesContent":["import Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport Button from \"../../ui/Button\";\nimport PageActions from \"../../ui/PageActions\";\nimport { SelfieIcon } from \"../../../assets\";\nimport MobilePageLayout from \"../../ui/MobilePageLayout\";\nimport { useI18n } from \"../../../hooks/useI18n\";\n\ninterface SelfiePreIntroductionProps {\n onContinue: () => void;\n}\n\nconst SelfiePreIntroduction = ({ onContinue }: SelfiePreIntroductionProps) => {\n const { t } = useI18n();\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue}>\n {t(\"selfie.pre_intro.start\", \"Commencer\")}\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 \">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl font-semibold\">\n {t(\"selfie.pre_intro.title\", \"Prenez une photo de votre visage\")}\n </Title>\n <Subtitle className=\"text-xs md:text-xs text-gray-600 leading-relaxed px-4\">\n {t(\n \"selfie.pre_intro.subtitle\",\n \"Afin de vérifier votre identité, nous allons vous demander de prendre une photo de votre visage\"\n )}\n </Subtitle>\n </div>\n\n {/* Icon */}\n <div className=\"flex justify-center\">\n <div className=\"flex items-center justify-center\">\n <img\n src={SelfieIcon}\n alt=\"Vérification par selfie\"\n className=\"w-80 h-80 object-contain bg-white\"\n />\n </div>\n </div>\n {/* <p className=\"text-center text-xs text-gray-600 leading-relaxed \">\n {t(\n \"selfie.pre_intro.note\",\n \"À la prochaine étape, nous vous demanderons de prendre une photo de votre visage.\"\n )}\n </p> */}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default SelfiePreIntroduction;\n"],"names":["useI18n","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Title","Subtitle","SelfieIcon"],"mappings":";;;;;;;;;;;;;;;;;AAYA,IAAM,qBAAqB,GAAG,UAAC,EAA0C,EAAA;AAAxC,IAAA,IAAA,UAAU,GAAA,EAAA,CAAA,UAAA;AACjC,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IACT,QACEC,eAACC,wBAAgB,EAAA,EACf,MAAM,EACJD,cAAA,CAACE,mBAAW,EAAA,EACV,OAAO,EACLF,eAACG,cAAM,EAAA,EAAC,OAAO,EAAE,UAAU,YACxB,CAAC,CAAC,wBAAwB,EAAE,WAAW,CAAC,GAClC,EAAA,CAEX,EAAA,QAAA,EAGJH,wBAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC9CI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAAA,CAEvCA,yBAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCJ,cAAA,CAACK,aAAK,IAAC,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAC7D,CAAC,CAAC,wBAAwB,EAAE,kCAAkC,CAAC,EAAA,CAC1D,EACRL,eAACM,gBAAQ,EAAA,EAAC,SAAS,EAAC,uDAAuD,EAAA,QAAA,EACxE,CAAC,CACA,2BAA2B,EAC3B,iGAAiG,CAClG,GACQ,CAAA,EAAA,CACP,EAGNN,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,YAClCA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAC/CA,wBACE,GAAG,EAAEO,kBAAU,EACf,GAAG,EAAC,8BAAyB,EAC7B,SAAS,EAAC,mCAAmC,EAAA,CAC7C,EAAA,CACE,GACF,CAAA,EAAA,CAOF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelfieProcessing.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieProcessing.tsx"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport { codeToStep } from \"../../../services/utils\";\nimport type { SelfieCaptureData } from \"../../../types/selfie\";\nimport { analyzeSelfie } from \"../../../services/analysis\";\nimport { getActiveSessionId } from \"../../../services/sessionMemoryStore\";\nimport ButtonDesktop from \"../../ui/ButtonDesktop\";\nimport { reportSelfieFailure } from \"../../../services/sessionService\";\n\ninterface SelfieProcessingProps {\n onProcessingComplete: (success: boolean) => void;\n selfieVideo: SelfieCaptureData | null;\n selfiePhoto: string | null;\n onRetake: () => void;\n onContinueAnyway?: () => void;\n nodeId: string;\n}\n\nconst processingSteps = [\n { key: \"analysis\" },\n { key: \"face_detection\" },\n { key: \"liveness\" },\n { key: \"finalization\" },\n];\nconst SelfieProcessing = ({\n onProcessingComplete,\n selfieVideo,\n selfiePhoto,\n onRetake,\n onContinueAnyway,\n nodeId,\n}: SelfieProcessingProps) => {\n const { t } = useI18n();\n const [currentStep, setCurrentStep] = useState(0);\n const [hasError, setHasError] = useState(false);\n const [isDone, setIsDone] = useState(false);\n const [conformityCode, setConformityCode] = useState<string | null>(null);\n\n const analysisStartedRef = useRef(false);\n useEffect(() => {\n // Prevent multiple analysis runs\n if (analysisStartedRef.current) return;\n if (!selfieVideo || !selfiePhoto) return;\n\n analysisStartedRef.current = true;\n\n // Timeout simple : 60 secondes pour tous\n const timeoutId = setTimeout(() => {\n if (!isDone) {\n console.error(\"⏰ Selfie analysis timeout after 60 seconds\");\n const sessionId = getActiveSessionId();\n if (sessionId) {\n void reportSelfieFailure(sessionId, {\n nodeId,\n reason: \"timeout\",\n }).catch(() => undefined);\n }\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n }, 60000);\n\n const processFiles = async () => {\n const sessionId = getActiveSessionId();\n if (!sessionId) {\n console.error(\"❌ No session ID found\");\n setHasError(true);\n onProcessingComplete(false);\n setIsDone(true);\n clearTimeout(timeoutId);\n return;\n }\n\n console.log(\"🚀 Starting selfie analysis...\");\n\n try {\n // Délai minimum simple : 2 secondes\n const [response] = await Promise.all([\n analyzeSelfie(sessionId, selfieVideo, selfiePhoto, nodeId),\n new Promise((resolve) => setTimeout(resolve, 2000)),\n ]);\n\n console.log(\"✅ Analysis response:\", response);\n clearTimeout(timeoutId);\n\n // Handle Unissey response format\n let isSuccess = false;\n let conformityCodeToSet = \"4\"; // Default to error\n\n if (response && response.data) {\n // Check if analysis was successful based on real Unissey response structure\n const data = response.data;\n const details = data.details;\n const faceComparison = details?.face_comparison;\n\n // Success: face match with high confidence\n if (data.face_comparison_disabled === true) {\n isSuccess = true;\n conformityCodeToSet = \"1.0\";\n } else if (\n data.is_match &&\n faceComparison?.result === \"match\"\n // faceComparison?.confidence_level === \"high\" Pas assez explicit\n ) {\n isSuccess = true;\n conformityCodeToSet = \"1.0\"; // Success code\n } else if (details) {\n // Check specific failure reasons\n if (faceComparison?.result !== \"match\") {\n conformityCodeToSet = \"2.0\"; // Face comparison failed\n } else if (faceComparison?.confidence_level !== \"high\") {\n conformityCodeToSet = \"3.0\"; // Low confidence\n } else {\n conformityCodeToSet = \"4.0\"; // Generic error\n }\n }\n }\n\n console.log(\"📊 Selfie analysis result:\", {\n isSuccess,\n conformityCode: conformityCodeToSet,\n isMatch: response?.data?.is_match,\n confidenceLevel:\n response?.data?.details?.face_comparison?.confidence_level,\n comparisonResult: response?.data?.details?.face_comparison?.result,\n });\n\n setConformityCode(conformityCodeToSet);\n setIsDone(true);\n\n // Don't call onProcessingComplete here - let the animation effect handle it\n } catch (error) {\n console.error(\"💥 Selfie analysis failed:\", error);\n void reportSelfieFailure(sessionId, {\n nodeId,\n reason: \"network_error\",\n }).catch(() => undefined);\n clearTimeout(timeoutId);\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n };\n\n processFiles();\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [onProcessingComplete, selfieVideo, selfiePhoto, isDone, nodeId]);\n\n useEffect(() => {\n // While analysis is not finished, stay at step 0\n if (!isDone && !hasError) {\n setCurrentStep(0);\n return;\n }\n // We want stepToStop to be the step in error (the one corresponding to conformityCode)\n let stepToStop = codeToStep(conformityCode || \"4\");\n // If codeToStep returns 0 (generic error), stop at the first step\n if (stepToStop === 0) stepToStop = 1;\n console.log(\"Step to stop (error):\", stepToStop);\n\n // When analysis is finished (success or error), start the animation\n const interval = setInterval(() => {\n setCurrentStep((prev) => {\n if (prev < stepToStop - 1) {\n return prev + 1;\n } else {\n clearInterval(interval);\n if (stepToStop < 4) setHasError(true);\n onProcessingComplete(stepToStop === 4);\n return prev; // Stop at the step in error\n }\n });\n }, 500); // Adjust the speed of the animation\n return () => clearInterval(interval);\n }, [onProcessingComplete, hasError, isDone, conformityCode]);\n\n return (\n <div className=\"flex flex-col justify-between h-full w-full\">\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 <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {hasError\n ? t(\"selfie.processing.error_title\", \"Échec de l'analyse\")\n : t(\"selfie.processing.title\", \"Analyse en cours\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {hasError\n ? t(\n \"selfie.processing.error_subtitle\",\n \"Une erreur est survenue lors de l'analyse du selfie. Veuillez réessayer.\",\n )\n : t(\n \"selfie.processing.subtitle\",\n \"Nous analysons votre selfie. Cela peut prendre quelques instants.\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"w-full\">\n <div className=\"space-y-5\">\n {processingSteps.map(\n (step, index) =>\n step.key && (\n <div key={index} className=\"flex items-start\">\n <div className=\"mr-4 mt-1 flex-shrink-0\">\n {hasError && index === currentStep ? (\n // Step in error - red cross\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-red-500 text-white text-xs font-bold\">\n ×\n </div>\n ) : index < currentStep ? (\n // Completed step - green check\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs\">\n ✓\n </div>\n ) : index === currentStep ? (\n // Current step - spinner\n <div className=\"w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin\"></div>\n ) : (\n // Upcoming step - gray circle\n <div className=\"w-6 h-6 rounded-full border-2 border-gray-300\"></div>\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-[#3C3C40] text-sm\">\n {t(`selfie.processing.steps.${step.key}.title`)}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n {t(`selfie.processing.steps.${step.key}.subtitle`)}\n </p>\n </div>\n </div>\n ),\n )}\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"bg-gray-200 rounded-full h-2\">\n <div\n className={\n hasError\n ? \"bg-red-500 h-2 rounded-full transition-all duration-500 ease-out\"\n : \"bg-[#11E5C5] h-2 rounded-full transition-all duration-500 ease-out\"\n }\n style={{\n width: `${\n ((currentStep + 1) / processingSteps.length) * 100\n }%`,\n }}\n ></div>\n </div>\n <p className=\"text-xs text-gray-500 mt-2 text-center\">\n {t(\"selfie.processing.step_of\", {\n current: currentStep + 1,\n total: processingSteps.length,\n })}\n </p>\n </div>\n\n {/* Footer with buttons */}\n {hasError && (\n <div className=\"sticky bottom-0 bg-white border-t border-gray-100 p-4 md:p-6\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Mobile layout - stacked buttons */}\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {onContinueAnyway && (\n <ButtonDesktop type=\"back\" onClick={onContinueAnyway}>\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n <ButtonDesktop type=\"continue\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n </div>\n\n {/* Desktop layout - horizontal buttons */}\n <div className=\"hidden md:flex gap-3 justify-between items-center\">\n {onContinueAnyway && (\n <ButtonDesktop type=\"back\" onClick={onContinueAnyway}>\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n <ButtonDesktop type=\"continue\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieProcessing;\n"],"names":["useI18n","useState","useRef","useEffect","getActiveSessionId","reportSelfieFailure","__awaiter","analyzeSelfie","codeToStep","_jsx","_jsxs","Title","Subtitle","ButtonDesktop"],"mappings":";;;;;;;;;;;;;;;;AAoBA,IAAM,eAAe,GAAG;IACtB,EAAE,GAAG,EAAE,UAAU,EAAE;IACnB,EAAE,GAAG,EAAE,gBAAgB,EAAE;IACzB,EAAE,GAAG,EAAE,UAAU,EAAE;IACnB,EAAE,GAAG,EAAE,cAAc,EAAE;CACxB;AACD,IAAM,gBAAgB,GAAG,UAAC,EAOF,EAAA;AANtB,IAAA,IAAA,oBAAoB,GAAA,EAAA,CAAA,oBAAA,EACpB,WAAW,GAAA,EAAA,CAAA,WAAA,EACX,WAAW,GAAA,EAAA,CAAA,WAAA,EACX,QAAQ,cAAA,EACR,gBAAgB,GAAA,EAAA,CAAA,gBAAA,EAChB,MAAM,GAAA,EAAA,CAAA,MAAA;AAEE,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAAgCC,cAAQ,CAAC,CAAC,CAAC,EAA1C,WAAW,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,cAAc,GAAA,EAAA,CAAA,CAAA,CAAe;IAC3C,IAAA,EAAA,GAA0BA,cAAQ,CAAC,KAAK,CAAC,EAAxC,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,WAAW,GAAA,EAAA,CAAA,CAAA,CAAmB;IACzC,IAAA,EAAA,GAAsBA,cAAQ,CAAC,KAAK,CAAC,EAApC,MAAM,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,SAAS,GAAA,EAAA,CAAA,CAAA,CAAmB;IACrC,IAAA,EAAA,GAAsCA,cAAQ,CAAgB,IAAI,CAAC,EAAlE,cAAc,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,iBAAiB,GAAA,EAAA,CAAA,CAAA,CAAiC;AAEzE,IAAA,IAAM,kBAAkB,GAAGC,YAAM,CAAC,KAAK,CAAC;AACxC,IAAAC,eAAS,CAAC,YAAA;;QAER,IAAI,kBAAkB,CAAC,OAAO;YAAE;AAChC,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW;YAAE;AAElC,QAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI;;QAGjC,IAAM,SAAS,GAAG,UAAU,CAAC,YAAA;YAC3B,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAC3D,gBAAA,IAAM,SAAS,GAAGC,qCAAkB,EAAE;gBACtC,IAAI,SAAS,EAAE;oBACb,KAAKC,kCAAmB,CAAC,SAAS,EAAE;AAClC,wBAAA,MAAM,EAAA,MAAA;AACN,wBAAA,MAAM,EAAE,SAAS;qBAClB,CAAC,CAAC,KAAK,CAAC,YAAA,EAAM,OAAA,SAAS,CAAA,CAAT,CAAS,CAAC;gBAC3B;gBACA,WAAW,CAAC,IAAI,CAAC;gBACjB,SAAS,CAAC,IAAI,CAAC;gBACf,oBAAoB,CAAC,KAAK,CAAC;YAC7B;QACF,CAAC,EAAE,KAAK,CAAC;AAET,QAAA,IAAM,YAAY,GAAG,YAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;;wBACb,SAAS,GAAGF,qCAAkB,EAAE;wBACtC,IAAI,CAAC,SAAS,EAAE;AACd,4BAAA,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC;4BACtC,WAAW,CAAC,IAAI,CAAC;4BACjB,oBAAoB,CAAC,KAAK,CAAC;4BAC3B,SAAS,CAAC,IAAI,CAAC;4BACf,YAAY,CAAC,SAAS,CAAC;4BACvB,OAAA,CAAA,CAAA,YAAA;wBACF;AAEA,wBAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;;;;wBAIxB,OAAA,CAAA,CAAA,YAAM,OAAO,CAAC,GAAG,CAAC;gCACnCG,sBAAa,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC;AAC1D,gCAAA,IAAI,OAAO,CAAC,UAAC,OAAO,IAAK,OAAA,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA,CAAzB,CAAyB,CAAC;AACpD,6BAAA,CAAC,CAAA;;AAHK,wBAAA,QAAQ,GAAI,CAAA,EAAA,CAAA,IAAA,EAGjB,EAAA,CAAA,CAHa;AAKf,wBAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,QAAQ,CAAC;wBAC7C,YAAY,CAAC,SAAS,CAAC;wBAGnB,SAAS,GAAG,KAAK;wBACjB,mBAAmB,GAAG,GAAG;AAE7B,wBAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;AAEvB,4BAAA,IAAI,GAAG,QAAQ,CAAC,IAAI;AACpB,4BAAA,OAAO,GAAG,IAAI,CAAC,OAAO;4BACtB,cAAc,GAAG,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,eAAe;;AAG/C,4BAAA,IAAI,IAAI,CAAC,wBAAwB,KAAK,IAAI,EAAE;gCAC1C,SAAS,GAAG,IAAI;gCAChB,mBAAmB,GAAG,KAAK;4BAC7B;iCAAO,IACL,IAAI,CAAC,QAAQ;gCACb,CAAA,cAAc,aAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,MAAM,MAAK;;8BAE3B;gCACA,SAAS,GAAG,IAAI;AAChB,gCAAA,mBAAmB,GAAG,KAAK,CAAC;4BAC9B;iCAAO,IAAI,OAAO,EAAE;;gCAElB,IAAI,CAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,MAAM,MAAK,OAAO,EAAE;AACtC,oCAAA,mBAAmB,GAAG,KAAK,CAAC;gCAC9B;qCAAO,IAAI,CAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,gBAAgB,MAAK,MAAM,EAAE;AACtD,oCAAA,mBAAmB,GAAG,KAAK,CAAC;gCAC9B;qCAAO;AACL,oCAAA,mBAAmB,GAAG,KAAK,CAAC;gCAC9B;4BACF;wBACF;AAEA,wBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE;AACxC,4BAAA,SAAS,EAAA,SAAA;AACT,4BAAA,cAAc,EAAE,mBAAmB;4BACnC,OAAO,EAAE,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ;AACjC,4BAAA,eAAe,EACb,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,aAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,0CAAE,gBAAgB;AAC5D,4BAAA,gBAAgB,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,aAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,0CAAE,MAAM;AACnE,yBAAA,CAAC;wBAEF,iBAAiB,CAAC,mBAAmB,CAAC;wBACtC,SAAS,CAAC,IAAI,CAAC;;;;AAIf,wBAAA,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,OAAK,CAAC;wBAClD,KAAKF,kCAAmB,CAAC,SAAS,EAAE;AAClC,4BAAA,MAAM,EAAA,MAAA;AACN,4BAAA,MAAM,EAAE,eAAe;yBACxB,CAAC,CAAC,KAAK,CAAC,YAAA,EAAM,OAAA,SAAS,CAAA,CAAT,CAAS,CAAC;wBACzB,YAAY,CAAC,SAAS,CAAC;wBACvB,WAAW,CAAC,IAAI,CAAC;wBACjB,SAAS,CAAC,IAAI,CAAC;wBACf,oBAAoB,CAAC,KAAK,CAAC;;;;;aAE9B;AAED,QAAA,YAAY,EAAE;QAEd,OAAO,YAAA;YACL,YAAY,CAAC,SAAS,CAAC;AACzB,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEpE,IAAAF,eAAS,CAAC,YAAA;;AAER,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;YACxB,cAAc,CAAC,CAAC,CAAC;YACjB;QACF;;QAEA,IAAI,UAAU,GAAGK,gBAAU,CAAC,cAAc,IAAI,GAAG,CAAC;;QAElD,IAAI,UAAU,KAAK,CAAC;YAAE,UAAU,GAAG,CAAC;AACpC,QAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,UAAU,CAAC;;QAGhD,IAAM,QAAQ,GAAG,WAAW,CAAC,YAAA;YAC3B,cAAc,CAAC,UAAC,IAAI,EAAA;AAClB,gBAAA,IAAI,IAAI,GAAG,UAAU,GAAG,CAAC,EAAE;oBACzB,OAAO,IAAI,GAAG,CAAC;gBACjB;qBAAO;oBACL,aAAa,CAAC,QAAQ,CAAC;oBACvB,IAAI,UAAU,GAAG,CAAC;wBAAE,WAAW,CAAC,IAAI,CAAC;AACrC,oBAAA,oBAAoB,CAAC,UAAU,KAAK,CAAC,CAAC;oBACtC,OAAO,IAAI,CAAC;gBACd;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,YAAA,EAAM,OAAA,aAAa,CAAC,QAAQ,CAAC,CAAA,CAAvB,CAAuB;IACtC,CAAC,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AAE5D,IAAA,QACEC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAC1DA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EACrDC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCD,cAAA,CAACE,aAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC/C;AACC,sCAAE,CAAC,CAAC,+BAA+B,EAAE,oBAAoB;AACzD,sCAAE,CAAC,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,EAAA,CAC9C,EACRF,cAAA,CAACG,gBAAQ,EAAA,EAAC,SAAS,EAAC,uCAAuC,YACxD;AACC,sCAAE,CAAC,CACC,kCAAkC,EAClC,0EAA0E;sCAE5E,CAAC,CACC,4BAA4B,EAC5B,mEAAmE,CACpE,EAAA,CACI,CAAA,EAAA,CACP,EAENH,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,QAAQ,EAAA,QAAA,EACrBA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACvB,eAAe,CAAC,GAAG,CAClB,UAAC,IAAI,EAAE,KAAK,EAAA;gCACV,OAAA,IAAI,CAAC,GAAG,KACNC,eAAA,CAAA,KAAA,EAAA,EAAiB,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CAC3CD,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,YACrC,QAAQ,IAAI,KAAK,KAAK,WAAW;;AAEhC,4CAAAA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+FAA+F,EAAA,QAAA,EAAA,QAAA,EAAA,CAExG,IACJ,KAAK,GAAG,WAAW;;AAErB,4CAAAA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uFAAuF,EAAA,QAAA,EAAA,QAAA,EAAA,CAEhG,IACJ,KAAK,KAAK,WAAW;;AAEvB,4CAAAA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0HAA0H,GAAO;;4CAGhJA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+CAA+C,EAAA,CAAO,CACtE,EAAA,CACG,EACNC,yBAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAC7BD,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oCAAoC,YAC9C,CAAC,CAAC,kCAA2B,IAAI,CAAC,GAAG,EAAA,QAAA,CAAQ,CAAC,GAC7C,EACJA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4BAA4B,YACtC,CAAC,CAAC,kCAA2B,IAAI,CAAC,GAAG,EAAA,WAAA,CAAW,CAAC,GAChD,CAAA,EAAA,CACA,CAAA,EAAA,EA3BE,KAAK,CA4BT,CACP;AA9BD,4BAAA,CA8BC,CACJ,EAAA,CACG,EAAA,CACF,EAENC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,QAAQ,EAAA,QAAA,EAAA,CACrBD,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,YAC3CA,cAAA,CAAA,KAAA,EAAA,EACE,SAAS,EACP;AACE,0CAAE;AACF,0CAAE,oEAAoE,EAE1E,KAAK,EAAE;AACL,wCAAA,KAAK,EAAE,EAAA,CAAA,MAAA,CACL,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,IAAI,GAAG,EAAA,GAAA,CACjD;qCACJ,EAAA,CACI,EAAA,CACH,EACNA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAClD,CAAC,CAAC,2BAA2B,EAAE;oCAC9B,OAAO,EAAE,WAAW,GAAG,CAAC;oCACxB,KAAK,EAAE,eAAe,CAAC,MAAM;iCAC9B,CAAC,EAAA,CACA,CAAA,EAAA,CACA,EAGL,QAAQ,KACPA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8DAA8D,EAAA,QAAA,EAC3EC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAAA,CAEtCA,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAC/C,gBAAgB,KACfD,cAAA,CAACI,qBAAa,EAAA,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAE,gBAAgB,EAAA,QAAA,EACjD,CAAC,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,EAAA,CACzC,CACjB,EACDJ,cAAA,CAACI,qBAAa,EAAA,EAAC,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,QAAQ,EAAA,QAAA,EAC7C,CAAC,CAAC,4BAA4B,EAAE,qBAAqB,CAAC,EAAA,CACzC,CAAA,EAAA,CACZ,EAGNH,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAAA,CAC/D,gBAAgB,KACfD,cAAA,CAACI,qBAAa,IAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAE,gBAAgB,EAAA,QAAA,EACjD,CAAC,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,GACzC,CACjB,EACDJ,cAAA,CAACI,qBAAa,EAAA,EAAC,IAAI,EAAC,UAAU,EAAC,OAAO,EAAE,QAAQ,EAAA,QAAA,EAC7C,CAAC,CAAC,4BAA4B,EAAE,qBAAqB,CAAC,EAAA,CACzC,CAAA,EAAA,CACZ,CAAA,EAAA,CACF,EAAA,CACF,CACP,CAAA,EAAA,CACG,EAAA,CACF,EAAA,CACF;AAEV;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelfieRecorder.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieRecorder.tsx"],"sourcesContent":["import {\n useCallback,\n useMemo,\n useRef,\n useState,\n useEffect,\n type ElementRef,\n} from \"react\";\nimport {\n AcquisitionPreset,\n VideoRecorder,\n type IadConfig,\n} from \"@unissey-web/sdk-react\";\nimport Button from \"../../ui/Button\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport useVideoRecorderStyles from \"../hooks/useVideoRecorderStyles\";\nimport { setupVideoElementsObserver } from \"../utils/videoElementStyles\";\nimport { delay, isIOS, waitForVideoFrame, getRecorderVideoElement } from \"../utils/selfieCaptureUtils\";\nimport { useLiveFrameCapture } from \"../hooks/useLiveFrameCapture\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport { getUnisseyStrings } from \"../utils/unisseyStrings\";\nimport { prepareIadCapture } from \"../../../services/iadService\";\n\ntype RecordingState = \"idle\" | \"preparing\" | \"recording\" | \"processing\";\n\ninterface SelfieRecorderProps {\n handleSelfie: (e: Event) => void;\n onBeginCapture?: () => void;\n sessionId?: string;\n iad?: { enabled: boolean; level?: \"basic\" | \"reinforced\" };\n isCapturing?: boolean;\n btnBg?: string;\n btnText?: string;\n}\n\ntype VideoRecorderElement = ElementRef<typeof VideoRecorder>;\ntype VideoRecorderWithError = VideoRecorderElement & { error?: string };\n\n/** Préparation IAD mémorisée pour une session (donnée à usage unique). */\ntype PreparedIadSession = {\n sessionId: string;\n preparation?: IadConfig;\n};\n\nconst SelfieRecorder = ({\n handleSelfie,\n onBeginCapture = () => { },\n sessionId,\n iad,\n btnBg,\n btnText,\n}: SelfieRecorderProps) => {\n const { t } = useI18n();\n const isMobile = useIsMobile(768);\n const recorderRef = useRef<VideoRecorderElement | null>(null);\n const [disableButton, setDisableButton] = useState(false);\n const [recorderReady, setRecorderReady] = useState(false);\n const [recordingState, setRecordingState] = useState<RecordingState>(\"idle\");\n const [iadConfig, setIadConfig] = useState<IadConfig>();\n const [iadPreparationDone, setIadPreparationDone] = useState(\n iad?.enabled !== true,\n );\n const [captureError, setCaptureError] = useState<string>();\n /**\n * Préparation IAD déjà demandée pour une session, avec son résultat.\n * `preparation` reste indéfini tant que la requête n'a pas abouti.\n */\n const preparedSessionRef = useRef<PreparedIadSession>();\n const recordingStateRef = useRef<RecordingState>(\"idle\");\n const lastRecorderStatusRef = useRef<string | undefined>();\n const capturedThumbnailRef = useRef<string | null>(null);\n const { captureFrame, cleanup } = useLiveFrameCapture();\n\n useVideoRecorderStyles(btnBg, btnText);\n\n useEffect(() => {\n let cancelled = false;\n\n if (iad?.enabled !== true || !sessionId) {\n setIadConfig(undefined);\n setIadPreparationDone(true);\n return () => {\n cancelled = true;\n };\n }\n\n /**\n * La donnée de préparation est à USAGE UNIQUE : une seconde requête invalide\n * la première et provoque des suspicions d'injection systématiques (doc\n * Unissey, « False rejections possible root causes »). On ne prépare donc\n * qu'une fois par session — ce garde neutralise aussi le double montage du\n * StrictMode en développement.\n */\n /**\n * La préparation est mémorisée par session : on ne redemande pas de donnée\n * (usage unique côté Unissey), mais on réapplique le résultat déjà obtenu.\n *\n * C'est indispensable avec le double montage du StrictMode : au premier\n * montage la requête part puis le démontage annule l'application du\n * résultat ; sans réapplication ici, `iadPreparationDone` resterait\n * définitivement `false` et le recorder ne serait jamais monté.\n */\n const cached = preparedSessionRef.current;\n if (cached?.sessionId === sessionId) {\n if (cached.preparation) setIadConfig(cached.preparation);\n setIadPreparationDone(true);\n return () => {\n cancelled = true;\n };\n }\n\n const entry: PreparedIadSession = { sessionId };\n preparedSessionRef.current = entry;\n\n setIadConfig(undefined);\n setIadPreparationDone(false);\n void prepareIadCapture(sessionId)\n .then((preparation) => {\n const config: IadConfig = {\n mode: preparation.mode,\n data: preparation.data,\n };\n // Mémorisé même si ce montage est annulé : le montage suivant le\n // réappliquera sans consommer une nouvelle donnée.\n entry.preparation = config;\n if (!cancelled) setIadConfig(config);\n })\n .catch((error: unknown) => {\n // Seul le message est loggué : l'objet d'erreur Axios embarque la\n // requête (en-têtes d'authentification, URL avec identifiant de session).\n console.warn(\n \"[IAD prepare failed]\",\n error instanceof Error ? error.message : \"unknown error\",\n );\n // Fail open for capture: the backend will keep the IAD verdict\n // inconclusive if a trustworthy signal cannot be produced.\n // Aucune donnée n'a été consommée : on libère le garde pour permettre\n // une nouvelle tentative au prochain montage.\n if (preparedSessionRef.current === entry) {\n preparedSessionRef.current = undefined;\n }\n })\n .finally(() => {\n // Volontairement sans garde `cancelled` : le drapeau doit passer à\n // `true` même si ce montage est annulé, sinon le recorder reste bloqué.\n setIadPreparationDone(true);\n });\n\n return () => {\n cancelled = true;\n };\n }, [iad?.enabled, sessionId]);\n\n /**\n * La prop `config` doit être STABLE entre les rendus.\n *\n * `VideoRecorder` est un web-component Lit : un nouvel objet à chaque rendu\n * est vu comme une prop modifiée, ce qui réinitialise le recorder — il\n * recharge alors ses modules WASM et redemande une préparation IAD, en\n * boucle. Sans ce mémo, l'écran de capture ne devient jamais prêt.\n */\n /**\n * L'IAD est-elle attendue pour cette capture ET techniquement obtenable ?\n *\n * Sert à retarder le montage du recorder jusqu'à ce que `iadConfig` soit\n * prête. Repasse à `false` si la préparation a échoué (`preparedSessionRef`\n * libéré par le `catch`) : la capture démarre alors sans IAD plutôt que de\n * rester bloquée — le backend produira un verdict `inconclusive`.\n */\n const recorderConfig = useMemo(\n () => (iadConfig ? { iadConfig } : undefined),\n [iadConfig],\n );\n\n const updateRecordingState = useCallback((state: RecordingState) => {\n recordingStateRef.current = state;\n setRecordingState(state);\n }, []);\n\n const resetCaptureControls = useCallback(() => {\n capturedThumbnailRef.current = null;\n updateRecordingState(\"idle\");\n setDisableButton(false);\n }, [updateRecordingState]);\n\n // Réinitialisation déclenchée par le polling de statut Unissey.\n // Pendant une capture en cours (preparing/recording/processing), les transitions\n // internes du cycle d'enregistrement (starting → running → ready) ne doivent PAS\n // réactiver le bouton. Seule une perte réelle de la caméra (passage par\n // \"no-session\") justifie un reset pendant la capture (scénario retry caméra).\n const resetCaptureControlsFromPolling = useCallback(\n (previousStatus: string | undefined) => {\n if (\n recordingStateRef.current !== \"idle\" &&\n previousStatus !== \"no-session\"\n ) {\n return;\n }\n resetCaptureControls();\n },\n [resetCaptureControls]\n );\n\n useEffect(() => {\n document.body.classList.add(\"recording-selfie\");\n const cleanupObserver = setupVideoElementsObserver();\n\n // iOS-specific fix: Add required attributes to video elements after mount\n if (isIOS()) {\n const addIOSVideoAttributes = () => {\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder) => {\n // Try to access shadow DOM and video elements\n try {\n const shadowRoot = recorder.shadowRoot;\n if (shadowRoot) {\n const videoElements = shadowRoot.querySelectorAll(\"video\");\n videoElements.forEach((video: HTMLVideoElement) => {\n video.setAttribute(\"playsinline\", \"true\");\n video.setAttribute(\"autoplay\", \"true\");\n video.setAttribute(\"muted\", \"true\");\n // Ensure video plays inline and autoplays\n video.playsInline = true;\n video.autoplay = true;\n video.muted = true;\n });\n }\n } catch (error) {\n console.log(\"Could not access shadow DOM:\", error);\n }\n\n // Also set attributes on the component itself\n recorder.setAttribute(\"playsinline\", \"true\");\n recorder.setAttribute(\"autoplay\", \"true\");\n recorder.setAttribute(\"muted\", \"true\");\n });\n };\n\n // Apply immediately and also after a delay to catch dynamically created elements\n addIOSVideoAttributes();\n const iosTimeout = setTimeout(addIOSVideoAttributes, 500);\n const iosInterval = setInterval(addIOSVideoAttributes, 1000);\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n clearTimeout(iosTimeout);\n clearInterval(iosInterval);\n };\n }\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n };\n }, [cleanup]);\n\n // Les traducteurs automatiques (Safari iOS notamment) réécrivent le DOM et\n // détruisent les marqueurs de template Lit du web component Unissey : la capture\n // ne redémarre alors plus jamais. React sérialise `translate` en propriété DOM sur\n // un custom element (d'où un translate=\"yes\" parasite), il faut poser l'attribut\n // impérativement. Le recorder n'étant monté qu'une fois la préparation IAD\n // terminée, l'attribut est posé à ce moment-là (et non au montage du composant).\n useEffect(() => {\n if (!iadPreparationDone) return;\n document\n .querySelectorAll(\"uni-video-recorder\")\n .forEach((el) => el.setAttribute(\"translate\", \"no\"));\n }, [iadPreparationDone]);\n\n const recordStarting = () => {\n if (!recorderReady || recordingState !== \"idle\") return;\n onBeginCapture();\n setCaptureError(undefined);\n updateRecordingState(\"preparing\");\n setDisableButton(true);\n\n const triggerCapture = async () => {\n try {\n await waitForVideoFrame(recorderRef.current);\n await delay(200);\n updateRecordingState(\"recording\");\n\n // Capture a frame from the live video during recording (after a short delay)\n setTimeout(() => {\n const videoElement = getRecorderVideoElement(recorderRef.current);\n if (videoElement) {\n const thumbnail = captureFrame(videoElement);\n capturedThumbnailRef.current = thumbnail;\n }\n }, 1000); // Capture frame 1 second into recording\n\n recorderRef.current?.capture();\n } catch (error) {\n console.error(\"SelfieRecorder: failed to capture frame\", error);\n updateRecordingState(\"idle\");\n setDisableButton(false);\n }\n };\n\n void triggerCapture();\n };\n\n useEffect(() => {\n const interval = setInterval(() => {\n const status = recorderRef.current?.sdkJsStatus;\n const isReady = status === \"ready\" || status === \"running\";\n setRecorderReady((prev) => (prev !== isReady ? isReady : prev));\n\n const previousStatus = lastRecorderStatusRef.current;\n const wasReady = previousStatus === \"ready\" || previousStatus === \"running\";\n if (status !== previousStatus) {\n lastRecorderStatusRef.current = status;\n if (isReady && previousStatus !== undefined && !wasReady) {\n resetCaptureControlsFromPolling(previousStatus);\n }\n }\n }, 500);\n return () => clearInterval(interval);\n }, [resetCaptureControlsFromPolling]);\n\n const handleRecorderReady = () => {\n setCaptureError(undefined);\n setRecorderReady(true);\n resetCaptureControls();\n };\n\n const handleRecordInterrupted = () => {\n const recorderError = (recorderRef.current as VideoRecorderWithError | null)?.error;\n setCaptureError(\n recorderError || t(\"unissey.forbiddenActionMessages.default\"),\n );\n resetCaptureControls();\n };\n\n const handleRecordCompleted = (e: Event) => {\n const customEvent = e as CustomEvent<{ media?: Blob; metadata?: string }>;\n if (!customEvent.detail?.media || customEvent.detail.media.size === 0) {\n console.error(\"❌ No valid media captured\");\n\n // iOS-specific debugging\n if (isIOS()) {\n console.log(\"🍎 iOS detected - checking video elements for proper attributes\");\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder, index) => {\n console.log(`VideoRecorder ${index}:`, {\n playsinline: recorder.getAttribute(\"playsinline\"),\n autoplay: recorder.getAttribute(\"autoplay\"),\n muted: recorder.getAttribute(\"muted\")\n });\n });\n }\n\n updateRecordingState(\"idle\");\n setDisableButton(false);\n return;\n }\n\n // Attach the captured thumbnail to the event\n const enhancedEvent = new CustomEvent('record-completed', {\n detail: {\n media: customEvent.detail.media,\n metadata: customEvent.detail.metadata || '',\n thumbnail: capturedThumbnailRef.current || undefined,\n }\n });\n\n updateRecordingState(\"processing\");\n handleSelfie(enhancedEvent);\n };\n\n return (\n <div\n className=\"selfie selfie-recorder-root notranslate flex flex-col\"\n translate=\"no\"\n style={{\n [\"--dk-btn-bg\" as string]: btnBg ?? \"#11E5C5\",\n [\"--dk-btn-text\" as string]: btnText ?? \"#3C3C40\",\n position: isMobile ? \"fixed\" : \"relative\",\n inset: isMobile ? 0 : \"auto\",\n zIndex: isMobile ? 50 : \"auto\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <div className=\"p-4 text-center bg-white shrink-0\">\n <Title className=\"text-lg md:text-xl mb-1\">{t(\"selfie.recorder.title\")}</Title>\n <Subtitle className=\"text-xs text-gray-600 md:text-sm\">{t(\"selfie.recorder.subtitle\")}</Subtitle>\n </div>\n\n <div className=\"video-container flex-1 relative overflow-hidden\">\n {/* Le recorder ne doit monter QU'UNE FOIS la config IAD disponible.\n Unissey réinitialise sa session interne dès que la prop `config`\n change (`updated()` → `callInitSession()`). Monter sans config puis\n l'injecter créerait une première session SANS IAD — donc sans\n `selfie-metadata` — avant de la recréer. On attend donc que la\n préparation soit terminée ET, quand l'IAD est active, que sa config\n soit prête. */}\n {iadPreparationDone && (\n <VideoRecorder\n ref={recorderRef}\n preset={AcquisitionPreset.SELFIE_OPTIMIZED}\n hideCaptureBtn\n faceChecker={\n typeof window !== \"undefined\" &&\n window.__E2E_DISABLE_FACE_CHECKER__\n ? \"disabled\"\n : \"enabled\"\n }\n disableDebugMode\n {...(recorderConfig ? { config: recorderConfig } : {})}\n onRecorderReady={handleRecorderReady}\n onRecordInterrupted={handleRecordInterrupted}\n onRecordCompleted={handleRecordCompleted}\n style={{ width: \"100%\", height: \"100%\" }}\n className=\"video-recorder-no-radius notranslate w-full h-full\"\n {...(isIOS() && {\n \"data-playsinline\": \"true\",\n \"data-autoplay\": \"true\",\n \"data-muted\": \"true\",\n })}\n strings={getUnisseyStrings(t)}\n />\n )}\n </div>\n\n {captureError && (\n <div role=\"alert\" className=\"shrink-0 bg-red-50 px-4 py-2 text-center text-sm text-red-700\">\n {captureError}\n </div>\n )}\n\n <div className=\"shrink-0 bg-white border-t border-gray-200 p-4 md:p-6 relative\" style={{ zIndex: 9999 }}>\n <div className=\"max-w-md mx-auto\">\n <div className=\"text-center text-xs text-gray-400 mt-3\">\n {t(\"selfie.recorder.note\")}\n </div>\n\n <Button\n onClick={recordStarting}\n className=\"w-full py-3 md:py-4 relative selfie-button\"\n disabled={disableButton || !recorderReady}\n style={{ backgroundColor: btnBg ?? \"#11E5C5\", color: btnText ?? \"#3C3C40\" }}\n >\n {recordingState === \"idle\" && t(\"selfie.recorder.start\")}\n {recordingState === \"preparing\" && t(\"selfie.recorder.preparing\")}\n {recordingState === \"recording\" && (\n <span className=\"flex items-center justify-center\">\n <span className=\"mr-2\">{t(\"selfie.recorder.recording_label\")}</span>\n <span className=\"flex space-x-1 loading-dots\">\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n </span>\n </span>\n )}\n {recordingState === \"processing\" && t(\"selfie.recorder.processing\")}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieRecorder;\n"],"names":["useI18n","useIsMobile","useRef","useState","useLiveFrameCapture","useVideoRecorderStyles","useEffect","prepareIadCapture","useMemo","useCallback","setupVideoElementsObserver","isIOS","__awaiter","waitForVideoFrame","delay","getRecorderVideoElement","_jsxs","_jsx","Title","Subtitle","VideoRecorder","__assign","AcquisitionPreset","getUnisseyStrings","Button"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"selfieCaptureUtils.js","sources":["../../../../../../src/components/selfie/utils/selfieCaptureUtils.ts"],"sourcesContent":["/**\n * @file selfieCaptureUtils.ts\n * @brief Helper utilities used by selfie recorder components for device detection and frame capture.\n */\n\n/**\n * @brief Detects whether the current device is running iOS (including Firefox on iOS).\n *\n * @return True if the device is identified as iOS, false otherwise.\n */\nexport const isIOS = () => {\n const userAgent = navigator.userAgent;\n\n return (\n /iPad|iPhone|iPod/.test(userAgent) ||\n (/Macintosh/.test(userAgent) && navigator.maxTouchPoints > 1)\n );\n};\n\n/**\n * @brief Retrieves the nested video element within a recorder component.\n *\n * @param recorderElement The `uni-video-recorder` element or null if not yet available.\n * @return The nested HTMLVideoElement when found, otherwise null.\n */\nexport const getRecorderVideoElement = (\n recorderElement: HTMLElement | null\n): HTMLVideoElement | null => {\n if (!recorderElement) return null;\n\n const shadowVideo = recorderElement.shadowRoot?.querySelector(\"video\");\n if (shadowVideo instanceof HTMLVideoElement) {\n return shadowVideo;\n }\n\n const slottedVideo = recorderElement.querySelector(\"video\");\n return slottedVideo instanceof HTMLVideoElement ? slottedVideo : null;\n};\n\n/**\n * @brief Waits until the video element has painted a frame before capture.\n *\n * Firefox Mobile can return an empty canvas if a capture occurs before the video frame is ready.\n * This helper ensures a frame is available, attempting to autoplay the video and waiting for\n * the necessary events before resolving.\n *\n * @param recorderElement The recorder element containing the video stream.\n */\nexport const waitForVideoFrame = async (\n recorderElement: HTMLElement | null\n) => {\n const videoElement = getRecorderVideoElement(recorderElement);\n if (!videoElement) return;\n\n const hasFrameData = () =>\n videoElement.readyState >= HTMLMediaElement.HAVE_CURRENT_DATA &&\n videoElement.videoWidth > 0 &&\n videoElement.videoHeight > 0;\n\n if (\n videoElement.paused ||\n videoElement.readyState < HTMLMediaElement.HAVE_CURRENT_DATA\n ) {\n try {\n await videoElement.play();\n } catch (error) {\n console.warn(\n \"SelfieRecorder: unable to autoplay video before capture\",\n error\n );\n }\n }\n\n if (hasFrameData()) {\n await new Promise<void>((resolve) =>\n requestAnimationFrame(() => resolve())\n );\n return;\n }\n\n await new Promise<void>((resolve) => {\n let resolved = false;\n let timeoutId: number | undefined;\n const cleanupAndResolve = () => {\n if (resolved) return;\n resolved = true;\n if (timeoutId !== undefined) {\n window.clearTimeout(timeoutId);\n }\n videoElement.removeEventListener(\"loadeddata\", handleFrameReady);\n videoElement.removeEventListener(\"timeupdate\", handleFrameReady);\n videoElement.removeEventListener(\"playing\", handleFrameReady);\n resolve();\n };\n\n const handleFrameReady = () => {\n if (!hasFrameData()) return;\n requestAnimationFrame(cleanupAndResolve);\n };\n\n timeoutId = window.setTimeout(cleanupAndResolve, 1500);\n videoElement.addEventListener(\"loadeddata\", handleFrameReady);\n videoElement.addEventListener(\"timeupdate\", handleFrameReady);\n videoElement.addEventListener(\"playing\", handleFrameReady);\n handleFrameReady();\n });\n};\n\n/**\n * @brief Creates an asynchronous delay.\n *\n * @param ms Duration to wait in milliseconds.\n * @return Promise that resolves after the specified delay.\n */\nexport const delay = (ms: number) =>\n new Promise<void>((resolve) => window.setTimeout(resolve, ms));\n"],"names":["__awaiter"],"mappings":"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"}