datakeen-session-react 1.1.195-dev.1 → 1.1.195-dev.11

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 (877) 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 +5 -2
  24. package/dist/cjs/components/document-collection/DocumentProcessing.js +13 -12
  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 +9 -6
  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 +5 -2
  49. package/dist/cjs/components/jdi/JDIPreIntroduction.js +0 -1
  50. package/dist/cjs/components/jdi/JDIProcessing.js +15 -15
  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 +2 -3
  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 +2 -3
  69. package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js +0 -1
  70. package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js +5 -2
  71. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js +123 -14
  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 +15 -6
  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 +1 -2
  80. package/dist/cjs/components/session/SessionContent.js +5 -4
  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 +2 -11
  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 +4 -2
  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 +65 -32
  106. package/dist/cjs/components/template/TemplateNodeRenderer.js +5 -4
  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 +24 -5
  136. package/dist/cjs/hooks/useTemplateLoader.js +0 -1
  137. package/dist/cjs/hooks/useUserInputForm.js +38 -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 +4 -2
  145. package/dist/cjs/i18n/es.json.js +4 -2
  146. package/dist/cjs/i18n/fr.json.js +4 -2
  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 +40 -27
  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 +29 -0
  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 +33 -13
  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/customFieldLocks.js +27 -0
  195. package/dist/cjs/utils/customFieldValidation.js +0 -1
  196. package/dist/cjs/utils/documentLabels.js +0 -1
  197. package/dist/cjs/utils/europeanCountries.js +0 -1
  198. package/dist/cjs/utils/fileConverter.js +0 -1
  199. package/dist/cjs/utils/imageConverter.js +0 -1
  200. package/dist/cjs/utils/imageProcessing.js +0 -1
  201. package/dist/cjs/utils/isMobileDevice.js +0 -1
  202. package/dist/cjs/utils/isoCountryCodes.js +0 -1
  203. package/dist/cjs/utils/jdiCodes.js +0 -1
  204. package/dist/cjs/utils/labelToKey.js +0 -1
  205. package/dist/cjs/utils/listFieldUtils.js +0 -1
  206. package/dist/cjs/utils/mimeTypes.js +0 -1
  207. package/dist/cjs/utils/navigation.js +0 -1
  208. package/dist/cjs/utils/renderInlineMarkdown.js +0 -1
  209. package/dist/cjs/utils/sessionStatus.js +27 -0
  210. package/dist/cjs/utils/userInputForm.js +0 -1
  211. package/dist/cjs/utils/utils.js +0 -1
  212. package/dist/cjs/utils/validationUtils.js +0 -1
  213. package/dist/esm/_virtual/_commonjsHelpers.js +0 -1
  214. package/dist/esm/_virtual/heic2any.js +0 -1
  215. package/dist/esm/_virtual/heic2any2.js +0 -1
  216. package/dist/esm/assets/Face Scan Square.svg.js +0 -1
  217. package/dist/esm/assets/Lightbulb.svg.js +0 -1
  218. package/dist/esm/assets/Monitor Camera.svg.js +0 -1
  219. package/dist/esm/assets/User Hands.svg.js +0 -1
  220. package/dist/esm/assets/before-document.png.js +0 -1
  221. package/dist/esm/assets/before-passport.png.js +0 -1
  222. package/dist/esm/assets/before-photo.png.js +0 -1
  223. package/dist/esm/assets/before-verso.png.js +0 -1
  224. package/dist/esm/assets/check.svg.js +0 -1
  225. package/dist/esm/assets/icons/shield_magic_link.svg.js +0 -1
  226. package/dist/esm/assets/selfietake.svg.js +0 -1
  227. package/dist/esm/components/DatakeenSession.js +0 -1
  228. package/dist/esm/components/document-collection/DocumentCollection.js +0 -1
  229. package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js +0 -1
  230. package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js +0 -1
  231. package/dist/esm/components/document-collection/DocumentCollectionSelection.js +0 -1
  232. package/dist/esm/components/document-collection/DocumentCollectionUpload.js +0 -1
  233. package/dist/esm/components/document-collection/DocumentError.js +5 -2
  234. package/dist/esm/components/document-collection/DocumentProcessing.js +14 -13
  235. package/dist/esm/components/document-collection/DocumentSuccess.js +0 -1
  236. package/dist/esm/components/document-video/DocumentVideoCapture.js +0 -1
  237. package/dist/esm/components/document-video/DocumentVideoConfirmation.js +0 -1
  238. package/dist/esm/components/document-video/document-video-flow/DocumentVideoFlow.js +0 -1
  239. package/dist/esm/components/document-video/document-video-flow/DocumentVideoInstructions.js +0 -1
  240. package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js +9 -6
  241. package/dist/esm/components/document-video/document-video-flow/DocumentVideoRecorder.js +0 -1
  242. package/dist/esm/components/icons/ElectronicIcon.js +0 -1
  243. package/dist/esm/components/icons/PoweredByIcon.js +0 -1
  244. package/dist/esm/components/icons/PreIntroIcon.js +0 -1
  245. package/dist/esm/components/icons/StartIcon.js +0 -1
  246. package/dist/esm/components/id-check/BeforePhoto.js +0 -1
  247. package/dist/esm/components/id-check/BeforeVersoPhoto.js +0 -1
  248. package/dist/esm/components/id-check/CameraError.js +0 -1
  249. package/dist/esm/components/id-check/CameraMask.js +0 -1
  250. package/dist/esm/components/id-check/OrientationToggle.js +0 -1
  251. package/dist/esm/components/id-check/Photo.js +0 -1
  252. package/dist/esm/components/id-check/PhotoConfirmation.js +0 -1
  253. package/dist/esm/components/id-check/PhotoPreview.js +0 -1
  254. package/dist/esm/components/jdi/JDDWorkInProgress.js +0 -1
  255. package/dist/esm/components/jdi/JDICountrySelection.js +0 -1
  256. package/dist/esm/components/jdi/JDIDocumentSelection.js +0 -1
  257. package/dist/esm/components/jdi/JDIDocumentUpload.js +0 -1
  258. package/dist/esm/components/jdi/JDIError.js +5 -2
  259. package/dist/esm/components/jdi/JDIPreIntroduction.js +0 -1
  260. package/dist/esm/components/jdi/JDIProcessing.js +16 -16
  261. package/dist/esm/components/jdi/JDISuccess.js +0 -1
  262. package/dist/esm/components/legal-consent/LegalConsentNode.js +0 -1
  263. package/dist/esm/components/nfc-scan/BiometricSymbol.js +0 -1
  264. package/dist/esm/components/nfc-scan/NfcChipGate.js +0 -1
  265. package/dist/esm/components/nfc-scan/NfcFallbackSurvey.js +0 -1
  266. package/dist/esm/components/nfc-scan/NfcOnboardingNotice.js +0 -1
  267. package/dist/esm/components/nfc-scan/NfcScanNode.js +0 -1
  268. package/dist/esm/components/nfc-scan/NfcSuccessAnimation.js +0 -1
  269. package/dist/esm/components/nfc-scan/PuceCniSymbol.js +0 -1
  270. package/dist/esm/components/selfie/SelfieConfirmation.js +0 -1
  271. package/dist/esm/components/selfie/Video.css.js +0 -1
  272. package/dist/esm/components/selfie/Video.js +2 -3
  273. package/dist/esm/components/selfie/VideoFixes.css.js +0 -1
  274. package/dist/esm/components/selfie/VideoResetStyles.js +0 -1
  275. package/dist/esm/components/selfie/hooks/useLiveFrameCapture.js +0 -1
  276. package/dist/esm/components/selfie/hooks/useVideoRecorderStyles.js +0 -1
  277. package/dist/esm/components/selfie/selfie-flow/InstructionsSelfie.js +0 -1
  278. package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js +2 -3
  279. package/dist/esm/components/selfie/selfie-flow/SelfiePreIntroduction.js +0 -1
  280. package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js +5 -2
  281. package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js +124 -15
  282. package/dist/esm/components/selfie/utils/selfieCaptureUtils.js +0 -1
  283. package/dist/esm/components/selfie/utils/unisseyStrings.js +0 -1
  284. package/dist/esm/components/selfie/utils/videoElementStyles.js +0 -1
  285. package/dist/esm/components/session/DocumentCheck.js +0 -1
  286. package/dist/esm/components/session/EndFlow.js +15 -6
  287. package/dist/esm/components/session/MobileRedirect.js +0 -1
  288. package/dist/esm/components/session/PdfGeneration.js +0 -1
  289. package/dist/esm/components/session/Selfie.js +1 -2
  290. package/dist/esm/components/session/SessionContent.js +5 -4
  291. package/dist/esm/components/session/SessionExpired.js +0 -1
  292. package/dist/esm/components/session/StartSession.js +0 -1
  293. package/dist/esm/components/session/UserInputForm/AddressFields.js +0 -1
  294. package/dist/esm/components/session/UserInputForm/ContactFields.js +0 -1
  295. package/dist/esm/components/session/UserInputForm/CustomFormFields.js +1 -10
  296. package/dist/esm/components/session/UserInputForm/DatePickerField.js +0 -1
  297. package/dist/esm/components/session/UserInputForm/IdentityFields.js +0 -1
  298. package/dist/esm/components/session/UserInputForm/LegalEntityFields.js +0 -1
  299. package/dist/esm/components/session/UserInputForm/LegalRepFields.js +0 -1
  300. package/dist/esm/components/session/UserInputForm/NationalityField.js +0 -1
  301. package/dist/esm/components/session/UserInputForm.js +4 -2
  302. package/dist/esm/components/session/VideoWorkInProgress.js +0 -1
  303. package/dist/esm/components/session/controleJdiPolicy.js +0 -1
  304. package/dist/esm/components/session/endScreenIcons.js +0 -1
  305. package/dist/esm/components/signature-electronic/DocusealSignature.js +0 -1
  306. package/dist/esm/components/signature-electronic/SignatureElectronic.js +0 -1
  307. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js +0 -1
  308. package/dist/esm/components/signature-electronic/SignedDocumentPreview.js +0 -1
  309. package/dist/esm/components/start-flow/Start.js +0 -1
  310. package/dist/esm/components/states/ErrorState.js +0 -1
  311. package/dist/esm/components/states/LoadingState.js +0 -1
  312. package/dist/esm/components/states/NoSessionIdState.js +0 -1
  313. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js +0 -1
  314. package/dist/esm/components/template/ConditionNodeHandler.js +0 -1
  315. package/dist/esm/components/template/ExternalVerificationNodeHandler.js +65 -32
  316. package/dist/esm/components/template/TemplateNodeRenderer.js +5 -4
  317. package/dist/esm/components/template/conditionNodePolicy.js +0 -1
  318. package/dist/esm/components/ui/Body.js +0 -1
  319. package/dist/esm/components/ui/Button.js +0 -1
  320. package/dist/esm/components/ui/ButtonDesktop.js +0 -1
  321. package/dist/esm/components/ui/Card.js +0 -1
  322. package/dist/esm/components/ui/MobilePageLayout.js +0 -1
  323. package/dist/esm/components/ui/PDFPreview.js +0 -1
  324. package/dist/esm/components/ui/PageActions.js +0 -1
  325. package/dist/esm/components/ui/Paper.js +0 -1
  326. package/dist/esm/components/ui/PoweredBy.js +0 -1
  327. package/dist/esm/components/ui/QRCodeDisplay.js +0 -1
  328. package/dist/esm/components/ui/SelectComponent.js +0 -1
  329. package/dist/esm/components/ui/Subtitle.js +0 -1
  330. package/dist/esm/components/ui/Title.js +0 -1
  331. package/dist/esm/config/env.js +0 -1
  332. package/dist/esm/constants/userInputForm.js +0 -1
  333. package/dist/esm/context/ConfigContext.js +0 -1
  334. package/dist/esm/context/DocumentContext.js +0 -1
  335. package/dist/esm/context/SessionContext.js +0 -1
  336. package/dist/esm/hooks/useClientInfo.js +0 -1
  337. package/dist/esm/hooks/useCountryOptions.js +0 -1
  338. package/dist/esm/hooks/useI18n.js +0 -1
  339. package/dist/esm/hooks/useIsMobile.js +0 -1
  340. package/dist/esm/hooks/useNfcSseStatus.js +0 -1
  341. package/dist/esm/hooks/useRouteCSS.js +0 -1
  342. package/dist/esm/hooks/useSession.js +0 -1
  343. package/dist/esm/hooks/useSessionData.js +0 -1
  344. package/dist/esm/hooks/useStepCSS.js +0 -1
  345. package/dist/esm/hooks/useStepNavigation.js +22 -3
  346. package/dist/esm/hooks/useTemplateLoader.js +0 -1
  347. package/dist/esm/hooks/useUserInputForm.js +38 -1
  348. package/dist/esm/i18n/country/country.en.json.js +0 -1
  349. package/dist/esm/i18n/country/country.fr.json.js +0 -1
  350. package/dist/esm/i18n/country/country.iso2.en.json.js +0 -1
  351. package/dist/esm/i18n/country/country.iso2.fr.json.js +0 -1
  352. package/dist/esm/i18n/documents/documents.en.json.js +0 -1
  353. package/dist/esm/i18n/documents/documents.fr.json.js +0 -1
  354. package/dist/esm/i18n/en.json.js +4 -2
  355. package/dist/esm/i18n/es.json.js +4 -2
  356. package/dist/esm/i18n/fr.json.js +4 -2
  357. package/dist/esm/i18n/index.js +0 -1
  358. package/dist/esm/index.css.js +0 -1
  359. package/dist/esm/index.js +0 -1
  360. package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +0 -1
  361. package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +0 -1
  362. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js +0 -1
  363. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +0 -1
  364. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +0 -1
  365. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js +0 -1
  366. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +0 -1
  367. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js +0 -1
  368. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js +0 -1
  369. package/dist/esm/node_modules/date-fns/locale/en-US.js +0 -1
  370. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js +0 -1
  371. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js +0 -1
  372. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js +0 -1
  373. package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js +0 -1
  374. package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js +0 -1
  375. package/dist/esm/node_modules/date-fns/locale/fr.js +0 -1
  376. package/dist/esm/node_modules/heic2any/dist/heic2any.js +0 -1
  377. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.js +0 -1
  378. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
  379. package/dist/esm/node_modules/style-inject/dist/style-inject.es.js +0 -1
  380. package/dist/esm/node_modules/tslib/tslib.es6.js +0 -1
  381. package/dist/esm/providers/I18nProvider.js +0 -1
  382. package/dist/esm/services/analysis.js +40 -27
  383. package/dist/esm/services/api.js +0 -1
  384. package/dist/esm/services/auditTrailService.js +0 -1
  385. package/dist/esm/services/cameraService.js +0 -1
  386. package/dist/esm/services/documentEdgeDetectionService.js +0 -1
  387. package/dist/esm/services/documentTemplate.js +0 -1
  388. package/dist/esm/services/iadService.js +27 -0
  389. package/dist/esm/services/integrationService.js +0 -1
  390. package/dist/esm/services/pollingService.js +0 -1
  391. package/dist/esm/services/professionalImageQuality.js +0 -1
  392. package/dist/esm/services/retryService.js +0 -1
  393. package/dist/esm/services/sessionCredentials.js +0 -1
  394. package/dist/esm/services/sessionMemoryStore.js +0 -1
  395. package/dist/esm/services/sessionService.js +0 -1
  396. package/dist/esm/services/utils.js +0 -1
  397. package/dist/esm/types/session.js +0 -1
  398. package/dist/esm/utils/analysisErrors.js +30 -13
  399. package/dist/esm/utils/apiAnalysis.js +0 -1
  400. package/dist/esm/utils/conditionEvaluator.js +0 -1
  401. package/dist/esm/utils/countryFlags.js +0 -1
  402. package/dist/esm/utils/cssLoader.js +0 -1
  403. package/dist/esm/utils/customFieldIds.js +0 -1
  404. package/dist/esm/utils/customFieldLocks.js +24 -0
  405. package/dist/esm/utils/customFieldValidation.js +0 -1
  406. package/dist/esm/utils/documentLabels.js +0 -1
  407. package/dist/esm/utils/europeanCountries.js +0 -1
  408. package/dist/esm/utils/fileConverter.js +0 -1
  409. package/dist/esm/utils/imageConverter.js +0 -1
  410. package/dist/esm/utils/imageProcessing.js +0 -1
  411. package/dist/esm/utils/isMobileDevice.js +0 -1
  412. package/dist/esm/utils/isoCountryCodes.js +0 -1
  413. package/dist/esm/utils/jdiCodes.js +0 -1
  414. package/dist/esm/utils/labelToKey.js +0 -1
  415. package/dist/esm/utils/listFieldUtils.js +0 -1
  416. package/dist/esm/utils/mimeTypes.js +0 -1
  417. package/dist/esm/utils/navigation.js +0 -1
  418. package/dist/esm/utils/renderInlineMarkdown.js +0 -1
  419. package/dist/esm/utils/sessionStatus.js +25 -0
  420. package/dist/esm/utils/userInputForm.js +0 -1
  421. package/dist/esm/utils/utils.js +0 -1
  422. package/dist/esm/utils/validationUtils.js +0 -1
  423. package/package.json +9 -2
  424. package/.gitlab/issue_templates/bug.md +0 -14
  425. package/.gitlab/issue_templates/feature.md +0 -11
  426. package/.gitlab/issue_templates/task.md +0 -11
  427. package/.gitlab/merge_request_templates/default.md +0 -15
  428. package/.gitlab/merge_request_templates/hotfix.md +0 -15
  429. package/.gitlab-ci.yml +0 -290
  430. package/CLAUDE.md +0 -233
  431. package/__mocks__/@unissey-web/sdk-react.js +0 -17
  432. package/__mocks__/fileMock.js +0 -1
  433. package/__mocks__/pdfjs-dist/legacy/build/pdf.js +0 -5
  434. package/__mocks__/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
  435. package/assets/logo.svg +0 -56
  436. package/axios.install.md +0 -2
  437. package/babel.config.js +0 -15
  438. package/dist/cjs/_virtual/_commonjsHelpers.js.map +0 -1
  439. package/dist/cjs/_virtual/heic2any.js.map +0 -1
  440. package/dist/cjs/_virtual/heic2any2.js.map +0 -1
  441. package/dist/cjs/assets/Face Scan Square.svg.js.map +0 -1
  442. package/dist/cjs/assets/Lightbulb.svg.js.map +0 -1
  443. package/dist/cjs/assets/Monitor Camera.svg.js.map +0 -1
  444. package/dist/cjs/assets/User Hands.svg.js.map +0 -1
  445. package/dist/cjs/assets/before-document.png.js.map +0 -1
  446. package/dist/cjs/assets/before-passport.png.js.map +0 -1
  447. package/dist/cjs/assets/before-photo.png.js.map +0 -1
  448. package/dist/cjs/assets/before-verso.png.js.map +0 -1
  449. package/dist/cjs/assets/check.svg.js.map +0 -1
  450. package/dist/cjs/assets/icons/shield_magic_link.svg.js.map +0 -1
  451. package/dist/cjs/assets/selfietake.svg.js.map +0 -1
  452. package/dist/cjs/components/DatakeenSession.js.map +0 -1
  453. package/dist/cjs/components/document-collection/DocumentCollection.js.map +0 -1
  454. package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js.map +0 -1
  455. package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js.map +0 -1
  456. package/dist/cjs/components/document-collection/DocumentCollectionSelection.js.map +0 -1
  457. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js.map +0 -1
  458. package/dist/cjs/components/document-collection/DocumentError.js.map +0 -1
  459. package/dist/cjs/components/document-collection/DocumentProcessing.js.map +0 -1
  460. package/dist/cjs/components/document-collection/DocumentSuccess.js.map +0 -1
  461. package/dist/cjs/components/document-video/DocumentVideoCapture.js.map +0 -1
  462. package/dist/cjs/components/document-video/DocumentVideoConfirmation.js.map +0 -1
  463. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoFlow.js.map +0 -1
  464. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoInstructions.js.map +0 -1
  465. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +0 -1
  466. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoRecorder.js.map +0 -1
  467. package/dist/cjs/components/icons/ElectronicIcon.js.map +0 -1
  468. package/dist/cjs/components/icons/PoweredByIcon.js.map +0 -1
  469. package/dist/cjs/components/icons/PreIntroIcon.js.map +0 -1
  470. package/dist/cjs/components/icons/StartIcon.js.map +0 -1
  471. package/dist/cjs/components/id-check/BeforePhoto.js.map +0 -1
  472. package/dist/cjs/components/id-check/BeforeVersoPhoto.js.map +0 -1
  473. package/dist/cjs/components/id-check/CameraError.js.map +0 -1
  474. package/dist/cjs/components/id-check/CameraMask.js.map +0 -1
  475. package/dist/cjs/components/id-check/OrientationToggle.js.map +0 -1
  476. package/dist/cjs/components/id-check/Photo.js.map +0 -1
  477. package/dist/cjs/components/id-check/PhotoConfirmation.js.map +0 -1
  478. package/dist/cjs/components/id-check/PhotoPreview.js.map +0 -1
  479. package/dist/cjs/components/jdi/JDDWorkInProgress.js.map +0 -1
  480. package/dist/cjs/components/jdi/JDICountrySelection.js.map +0 -1
  481. package/dist/cjs/components/jdi/JDIDocumentSelection.js.map +0 -1
  482. package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +0 -1
  483. package/dist/cjs/components/jdi/JDIError.js.map +0 -1
  484. package/dist/cjs/components/jdi/JDIPreIntroduction.js.map +0 -1
  485. package/dist/cjs/components/jdi/JDIProcessing.js.map +0 -1
  486. package/dist/cjs/components/jdi/JDISuccess.js.map +0 -1
  487. package/dist/cjs/components/legal-consent/LegalConsentNode.js.map +0 -1
  488. package/dist/cjs/components/nfc-scan/BiometricSymbol.js.map +0 -1
  489. package/dist/cjs/components/nfc-scan/NfcChipGate.js.map +0 -1
  490. package/dist/cjs/components/nfc-scan/NfcFallbackSurvey.js.map +0 -1
  491. package/dist/cjs/components/nfc-scan/NfcOnboardingNotice.js.map +0 -1
  492. package/dist/cjs/components/nfc-scan/NfcScanNode.js.map +0 -1
  493. package/dist/cjs/components/nfc-scan/NfcSuccessAnimation.js.map +0 -1
  494. package/dist/cjs/components/nfc-scan/PuceCniSymbol.js.map +0 -1
  495. package/dist/cjs/components/selfie/SelfieConfirmation.js.map +0 -1
  496. package/dist/cjs/components/selfie/Video.css.js.map +0 -1
  497. package/dist/cjs/components/selfie/Video.js.map +0 -1
  498. package/dist/cjs/components/selfie/VideoFixes.css.js.map +0 -1
  499. package/dist/cjs/components/selfie/VideoResetStyles.js.map +0 -1
  500. package/dist/cjs/components/selfie/hooks/useLiveFrameCapture.js.map +0 -1
  501. package/dist/cjs/components/selfie/hooks/useVideoRecorderStyles.js.map +0 -1
  502. package/dist/cjs/components/selfie/selfie-flow/InstructionsSelfie.js.map +0 -1
  503. package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js.map +0 -1
  504. package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +0 -1
  505. package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js.map +0 -1
  506. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js.map +0 -1
  507. package/dist/cjs/components/selfie/utils/selfieCaptureUtils.js.map +0 -1
  508. package/dist/cjs/components/selfie/utils/unisseyStrings.js.map +0 -1
  509. package/dist/cjs/components/selfie/utils/videoElementStyles.js.map +0 -1
  510. package/dist/cjs/components/session/DocumentCheck.js.map +0 -1
  511. package/dist/cjs/components/session/EndFlow.js.map +0 -1
  512. package/dist/cjs/components/session/MobileRedirect.js.map +0 -1
  513. package/dist/cjs/components/session/PdfGeneration.js.map +0 -1
  514. package/dist/cjs/components/session/Selfie.js.map +0 -1
  515. package/dist/cjs/components/session/SessionContent.js.map +0 -1
  516. package/dist/cjs/components/session/SessionExpired.js.map +0 -1
  517. package/dist/cjs/components/session/StartSession.js.map +0 -1
  518. package/dist/cjs/components/session/UserInputForm/AddressFields.js.map +0 -1
  519. package/dist/cjs/components/session/UserInputForm/ContactFields.js.map +0 -1
  520. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js.map +0 -1
  521. package/dist/cjs/components/session/UserInputForm/DatePickerField.js.map +0 -1
  522. package/dist/cjs/components/session/UserInputForm/IdentityFields.js.map +0 -1
  523. package/dist/cjs/components/session/UserInputForm/LegalEntityFields.js.map +0 -1
  524. package/dist/cjs/components/session/UserInputForm/LegalRepFields.js.map +0 -1
  525. package/dist/cjs/components/session/UserInputForm/NationalityField.js.map +0 -1
  526. package/dist/cjs/components/session/UserInputForm.js.map +0 -1
  527. package/dist/cjs/components/session/VideoWorkInProgress.js.map +0 -1
  528. package/dist/cjs/components/session/controleJdiPolicy.js.map +0 -1
  529. package/dist/cjs/components/session/endScreenIcons.js.map +0 -1
  530. package/dist/cjs/components/signature-electronic/DocusealSignature.js.map +0 -1
  531. package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +0 -1
  532. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js.map +0 -1
  533. package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js.map +0 -1
  534. package/dist/cjs/components/start-flow/Start.js.map +0 -1
  535. package/dist/cjs/components/states/ErrorState.js.map +0 -1
  536. package/dist/cjs/components/states/LoadingState.js.map +0 -1
  537. package/dist/cjs/components/states/NoSessionIdState.js.map +0 -1
  538. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js.map +0 -1
  539. package/dist/cjs/components/template/ConditionNodeHandler.js.map +0 -1
  540. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +0 -1
  541. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +0 -1
  542. package/dist/cjs/components/template/conditionNodePolicy.js.map +0 -1
  543. package/dist/cjs/components/ui/Body.js.map +0 -1
  544. package/dist/cjs/components/ui/Button.js.map +0 -1
  545. package/dist/cjs/components/ui/ButtonDesktop.js.map +0 -1
  546. package/dist/cjs/components/ui/Card.js.map +0 -1
  547. package/dist/cjs/components/ui/MobilePageLayout.js.map +0 -1
  548. package/dist/cjs/components/ui/PDFPreview.js.map +0 -1
  549. package/dist/cjs/components/ui/PageActions.js.map +0 -1
  550. package/dist/cjs/components/ui/Paper.js.map +0 -1
  551. package/dist/cjs/components/ui/PoweredBy.js.map +0 -1
  552. package/dist/cjs/components/ui/QRCodeDisplay.js.map +0 -1
  553. package/dist/cjs/components/ui/SelectComponent.js.map +0 -1
  554. package/dist/cjs/components/ui/Subtitle.js.map +0 -1
  555. package/dist/cjs/components/ui/Title.js.map +0 -1
  556. package/dist/cjs/config/env.js.map +0 -1
  557. package/dist/cjs/constants/userInputForm.js.map +0 -1
  558. package/dist/cjs/context/ConfigContext.js.map +0 -1
  559. package/dist/cjs/context/DocumentContext.js.map +0 -1
  560. package/dist/cjs/context/SessionContext.js.map +0 -1
  561. package/dist/cjs/hooks/useClientInfo.js.map +0 -1
  562. package/dist/cjs/hooks/useCountryOptions.js.map +0 -1
  563. package/dist/cjs/hooks/useI18n.js.map +0 -1
  564. package/dist/cjs/hooks/useIsMobile.js.map +0 -1
  565. package/dist/cjs/hooks/useNfcSseStatus.js.map +0 -1
  566. package/dist/cjs/hooks/useRouteCSS.js.map +0 -1
  567. package/dist/cjs/hooks/useSession.js.map +0 -1
  568. package/dist/cjs/hooks/useSessionData.js.map +0 -1
  569. package/dist/cjs/hooks/useStepCSS.js.map +0 -1
  570. package/dist/cjs/hooks/useStepNavigation.js.map +0 -1
  571. package/dist/cjs/hooks/useTemplateLoader.js.map +0 -1
  572. package/dist/cjs/hooks/useUserInputForm.js.map +0 -1
  573. package/dist/cjs/i18n/country/country.en.json.js.map +0 -1
  574. package/dist/cjs/i18n/country/country.fr.json.js.map +0 -1
  575. package/dist/cjs/i18n/country/country.iso2.en.json.js.map +0 -1
  576. package/dist/cjs/i18n/country/country.iso2.fr.json.js.map +0 -1
  577. package/dist/cjs/i18n/documents/documents.en.json.js.map +0 -1
  578. package/dist/cjs/i18n/documents/documents.fr.json.js.map +0 -1
  579. package/dist/cjs/i18n/en.json.js.map +0 -1
  580. package/dist/cjs/i18n/es.json.js.map +0 -1
  581. package/dist/cjs/i18n/fr.json.js.map +0 -1
  582. package/dist/cjs/i18n/index.js.map +0 -1
  583. package/dist/cjs/index.css.js.map +0 -1
  584. package/dist/cjs/index.js.map +0 -1
  585. package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +0 -1
  586. package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +0 -1
  587. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +0 -1
  588. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +0 -1
  589. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +0 -1
  590. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +0 -1
  591. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +0 -1
  592. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js.map +0 -1
  593. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js.map +0 -1
  594. package/dist/cjs/node_modules/date-fns/locale/en-US.js.map +0 -1
  595. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +0 -1
  596. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +0 -1
  597. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +0 -1
  598. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js.map +0 -1
  599. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js.map +0 -1
  600. package/dist/cjs/node_modules/date-fns/locale/fr.js.map +0 -1
  601. package/dist/cjs/node_modules/heic2any/dist/heic2any.js.map +0 -1
  602. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.js.map +0 -1
  603. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.worker.js.map +0 -1
  604. package/dist/cjs/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
  605. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +0 -1
  606. package/dist/cjs/providers/I18nProvider.js.map +0 -1
  607. package/dist/cjs/services/analysis.js.map +0 -1
  608. package/dist/cjs/services/api.js.map +0 -1
  609. package/dist/cjs/services/auditTrailService.js.map +0 -1
  610. package/dist/cjs/services/cameraService.js.map +0 -1
  611. package/dist/cjs/services/documentEdgeDetectionService.js.map +0 -1
  612. package/dist/cjs/services/documentTemplate.js.map +0 -1
  613. package/dist/cjs/services/integrationService.js.map +0 -1
  614. package/dist/cjs/services/pollingService.js.map +0 -1
  615. package/dist/cjs/services/professionalImageQuality.js.map +0 -1
  616. package/dist/cjs/services/retryService.js.map +0 -1
  617. package/dist/cjs/services/sessionCredentials.js.map +0 -1
  618. package/dist/cjs/services/sessionMemoryStore.js.map +0 -1
  619. package/dist/cjs/services/sessionService.js.map +0 -1
  620. package/dist/cjs/services/utils.js.map +0 -1
  621. package/dist/cjs/types/session.js.map +0 -1
  622. package/dist/cjs/utils/analysisErrors.js.map +0 -1
  623. package/dist/cjs/utils/apiAnalysis.js.map +0 -1
  624. package/dist/cjs/utils/conditionEvaluator.js.map +0 -1
  625. package/dist/cjs/utils/countryFlags.js.map +0 -1
  626. package/dist/cjs/utils/cssLoader.js.map +0 -1
  627. package/dist/cjs/utils/customFieldIds.js.map +0 -1
  628. package/dist/cjs/utils/customFieldValidation.js.map +0 -1
  629. package/dist/cjs/utils/documentLabels.js.map +0 -1
  630. package/dist/cjs/utils/europeanCountries.js.map +0 -1
  631. package/dist/cjs/utils/fileConverter.js.map +0 -1
  632. package/dist/cjs/utils/imageConverter.js.map +0 -1
  633. package/dist/cjs/utils/imageProcessing.js.map +0 -1
  634. package/dist/cjs/utils/isMobileDevice.js.map +0 -1
  635. package/dist/cjs/utils/isoCountryCodes.js.map +0 -1
  636. package/dist/cjs/utils/jdiCodes.js.map +0 -1
  637. package/dist/cjs/utils/labelToKey.js.map +0 -1
  638. package/dist/cjs/utils/listFieldUtils.js.map +0 -1
  639. package/dist/cjs/utils/mimeTypes.js.map +0 -1
  640. package/dist/cjs/utils/navigation.js.map +0 -1
  641. package/dist/cjs/utils/renderInlineMarkdown.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/integrationService.js.map +0 -1
  821. package/dist/esm/services/pollingService.js.map +0 -1
  822. package/dist/esm/services/professionalImageQuality.js.map +0 -1
  823. package/dist/esm/services/retryService.js.map +0 -1
  824. package/dist/esm/services/sessionCredentials.js.map +0 -1
  825. package/dist/esm/services/sessionMemoryStore.js.map +0 -1
  826. package/dist/esm/services/sessionService.js.map +0 -1
  827. package/dist/esm/services/utils.js.map +0 -1
  828. package/dist/esm/types/session.js.map +0 -1
  829. package/dist/esm/utils/analysisErrors.js.map +0 -1
  830. package/dist/esm/utils/apiAnalysis.js.map +0 -1
  831. package/dist/esm/utils/conditionEvaluator.js.map +0 -1
  832. package/dist/esm/utils/countryFlags.js.map +0 -1
  833. package/dist/esm/utils/cssLoader.js.map +0 -1
  834. package/dist/esm/utils/customFieldIds.js.map +0 -1
  835. package/dist/esm/utils/customFieldValidation.js.map +0 -1
  836. package/dist/esm/utils/documentLabels.js.map +0 -1
  837. package/dist/esm/utils/europeanCountries.js.map +0 -1
  838. package/dist/esm/utils/fileConverter.js.map +0 -1
  839. package/dist/esm/utils/imageConverter.js.map +0 -1
  840. package/dist/esm/utils/imageProcessing.js.map +0 -1
  841. package/dist/esm/utils/isMobileDevice.js.map +0 -1
  842. package/dist/esm/utils/isoCountryCodes.js.map +0 -1
  843. package/dist/esm/utils/jdiCodes.js.map +0 -1
  844. package/dist/esm/utils/labelToKey.js.map +0 -1
  845. package/dist/esm/utils/listFieldUtils.js.map +0 -1
  846. package/dist/esm/utils/mimeTypes.js.map +0 -1
  847. package/dist/esm/utils/navigation.js.map +0 -1
  848. package/dist/esm/utils/renderInlineMarkdown.js.map +0 -1
  849. package/dist/esm/utils/userInputForm.js.map +0 -1
  850. package/dist/esm/utils/utils.js.map +0 -1
  851. package/dist/esm/utils/validationUtils.js.map +0 -1
  852. package/docs/COMPLEMENTARY_MANDATE.md +0 -22
  853. package/docs/GITLAB_BADGES_SETUP.md +0 -317
  854. package/docs/JOURNEY_NODE_BUILDER.md +0 -213
  855. package/docs/POLLING_SYSTEM.md +0 -695
  856. package/docs/README.md +0 -254
  857. package/docs/SESSION_TOKEN_MIGRATION.md +0 -52
  858. package/docs/condition-node.md +0 -651
  859. package/docs/configuration.md +0 -113
  860. package/docs/dynamic-configuration.md +0 -97
  861. package/docs/environment.md +0 -27
  862. package/docs/migration-guide.md +0 -120
  863. package/docs/multi-runs.md +0 -104
  864. package/docs/navigation-history.md +0 -155
  865. package/docs/sdk_integration_guide.md +0 -58
  866. package/eslint.config.js +0 -13
  867. package/examples/analysis-progress-example.tsx +0 -220
  868. package/examples/sdk-configuration.ts +0 -187
  869. package/examples/test-updated-urls.ts +0 -162
  870. package/examples/usage-example.tsx +0 -49
  871. package/jest.config.js +0 -32
  872. package/postcss.config.js +0 -6
  873. package/renovate.json +0 -242
  874. package/rollup.asset-url-plugin.js +0 -38
  875. package/rollup.dev.config.js +0 -65
  876. package/setupTests.js +0 -41
  877. package/tailwind.config.js +0 -11
@@ -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 btnBg?: string;\n btnText?: string;\n}\n\nconst SelfieFlow = ({ handleSelfie, 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 handleSelfie={handleSelfie} btnBg={btnBg} btnText={btnText} />\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;AAQ7D,IAAM,UAAU,GAAG,UAAC,EAAiD,EAAA;;AAA/C,IAAA,IAAA,YAAY,kBAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA;AAC1C,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,eAACC,6BAAqB,EAAA,EACpB,UAAU,EAAE,YAAA,EAAM,OAAA,eAAe,CAAC,CAAC,CAAC,CAAA,CAAlB,CAAkB,GACpC,EAAA,CACE,CACP,EACA,YAAY,KAAK,CAAC,KACjBD,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,YAC1CA,cAAA,CAACE,0BAAkB,IACjB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,YAAA,EAAM,OAAA,eAAe,CAAC,EAAE,CAAC,CAAA,CAAnB,CAAmB,GACjC,EAAA,CACE,CACP,EACA,YAAY,KAAK,CAAC,KACjBF,wBAAK,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAC1DA,cAAA,CAACG,cAAQ,EAAA,EAAC,QAAQ,EAAEH,eAACI,oBAAY,EAAA,EAAA,CAAG,YAClCJ,cAAA,CAAC,cAAc,IAAC,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAA,CAAI,GACrE,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 (\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":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelfieRecorder.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieRecorder.tsx"],"sourcesContent":["import {\n useCallback,\n useRef,\n useState,\n useEffect,\n type ElementRef,\n} from \"react\";\nimport { AcquisitionPreset, VideoRecorder } 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\";\n\ntype RecordingState = \"idle\" | \"preparing\" | \"recording\" | \"processing\";\n\ninterface SelfieRecorderProps {\n handleSelfie: (e: Event) => void;\n onBeginCapture?: () => void;\n isCapturing?: boolean;\n btnBg?: string;\n btnText?: string;\n}\n\ntype VideoRecorderElement = ElementRef<typeof VideoRecorder>;\n\nconst SelfieRecorder = ({\n handleSelfie,\n onBeginCapture = () => { },\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 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 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 // 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.\n document\n .querySelectorAll(\"uni-video-recorder\")\n .forEach((el) => el.setAttribute(\"translate\", \"no\"));\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 const recordStarting = () => {\n if (!recorderReady || recordingState !== \"idle\") return;\n onBeginCapture();\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 setRecorderReady(true);\n resetCaptureControls();\n };\n\n const handleRecordInterrupted = () => {\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 <VideoRecorder\n ref={recorderRef}\n preset={AcquisitionPreset.SELFIE_OPTIMIZED}\n hideCaptureBtn\n faceChecker={(typeof window !== 'undefined' && window.__E2E_DISABLE_FACE_CHECKER__) ? 'disabled' : 'enabled'}\n disableDebugMode\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 </div>\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","useCallback","useEffect","setupVideoElementsObserver","isIOS","__awaiter","waitForVideoFrame","delay","getRecorderVideoElement","_jsxs","_jsx","Title","Subtitle","VideoRecorder","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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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"unisseyStrings.js","sources":["../../../../../../src/components/selfie/utils/unisseyStrings.ts"],"sourcesContent":["/**\n * Generates localized strings configuration for Unissey VideoRecorder component\n * @param t - Translation function from useI18n hook\n * @returns Localized strings object for VideoRecorder\n */\nexport const getUnisseyStrings = (t: (key: string) => string) => ({\n capture: t(\"unissey.capture\"),\n retry: t(\"unissey.retry\"),\n errors: {\n noFace: t(\"unissey.errors.noFace\")\n },\n hints: {\n up: t(\"unissey.hints.up\"),\n down: t(\"unissey.hints.down\"),\n perfect: t(\"unissey.hints.perfect\"),\n right: t(\"unissey.hints.right\"),\n left: t(\"unissey.hints.left\"),\n closer: t(\"unissey.hints.closer\"),\n record: t(\"unissey.hints.record\"),\n nil: t(\"unissey.hints.nil\")\n },\n forbiddenActionMessages: {\n visibility: t(\"unissey.forbiddenActionMessages.visibility\"),\n focus: t(\"unissey.forbiddenActionMessages.focus\"),\n keyboard: t(\"unissey.forbiddenActionMessages.keyboard\"),\n default: t(\"unissey.forbiddenActionMessages.default\")\n },\n cameraErrorMessages: {\n permissionDenied: t(\"unissey.cameraErrorMessages.permissionDenied\"),\n openFailed: t(\"unissey.cameraErrorMessages.openFailed\"),\n default: t(\"unissey.cameraErrorMessages.default\")\n },\n rotationWhileCapturingErrorMessage: t(\"unissey.rotationWhileCapturingErrorMessage\"),\n activeChallengeMessages: {\n rotateLeft: t(\"unissey.activeChallengeMessages.rotateLeft\"),\n rotateRight: t(\"unissey.activeChallengeMessages.rotateRight\"),\n rotateUp: t(\"unissey.activeChallengeMessages.rotateUp\"),\n rotateDown: t(\"unissey.activeChallengeMessages.rotateDown\")\n }\n});\n"],"names":[],"mappings":";;AAAA;;;;AAIG;IACU,iBAAiB,GAAG,UAAC,CAA0B,EAAA,EAAK,QAAC;AAChE,IAAA,OAAO,EAAE,CAAC,CAAC,iBAAiB,CAAC;AAC7B,IAAA,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC;AACzB,IAAA,MAAM,EAAE;AACN,QAAA,MAAM,EAAE,CAAC,CAAC,uBAAuB;AAClC,KAAA;AACD,IAAA,KAAK,EAAE;AACL,QAAA,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC;AACzB,QAAA,IAAI,EAAE,CAAC,CAAC,oBAAoB,CAAC;AAC7B,QAAA,OAAO,EAAE,CAAC,CAAC,uBAAuB,CAAC;AACnC,QAAA,KAAK,EAAE,CAAC,CAAC,qBAAqB,CAAC;AAC/B,QAAA,IAAI,EAAE,CAAC,CAAC,oBAAoB,CAAC;AAC7B,QAAA,MAAM,EAAE,CAAC,CAAC,sBAAsB,CAAC;AACjC,QAAA,MAAM,EAAE,CAAC,CAAC,sBAAsB,CAAC;AACjC,QAAA,GAAG,EAAE,CAAC,CAAC,mBAAmB;AAC3B,KAAA;AACD,IAAA,uBAAuB,EAAE;AACvB,QAAA,UAAU,EAAE,CAAC,CAAC,4CAA4C,CAAC;AAC3D,QAAA,KAAK,EAAE,CAAC,CAAC,uCAAuC,CAAC;AACjD,QAAA,QAAQ,EAAE,CAAC,CAAC,0CAA0C,CAAC;AACvD,QAAA,OAAO,EAAE,CAAC,CAAC,yCAAyC;AACrD,KAAA;AACD,IAAA,mBAAmB,EAAE;AACnB,QAAA,gBAAgB,EAAE,CAAC,CAAC,8CAA8C,CAAC;AACnE,QAAA,UAAU,EAAE,CAAC,CAAC,wCAAwC,CAAC;AACvD,QAAA,OAAO,EAAE,CAAC,CAAC,qCAAqC;AACjD,KAAA;AACD,IAAA,kCAAkC,EAAE,CAAC,CAAC,4CAA4C,CAAC;AACnF,IAAA,uBAAuB,EAAE;AACvB,QAAA,UAAU,EAAE,CAAC,CAAC,4CAA4C,CAAC;AAC3D,QAAA,WAAW,EAAE,CAAC,CAAC,6CAA6C,CAAC;AAC7D,QAAA,QAAQ,EAAE,CAAC,CAAC,0CAA0C,CAAC;AACvD,QAAA,UAAU,EAAE,CAAC,CAAC,4CAA4C;AAC3D;CACF,EAAC,CAlC+D;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"videoElementStyles.js","sources":["../../../../../../src/components/selfie/utils/videoElementStyles.ts"],"sourcesContent":["/**\n * Utilitaire pour appliquer des styles aux éléments de la vidéo, y compris les éléments shadow DOM\n * du composant VideoRecorder d'Unissey.\n */\n\n// Detect iOS devices (including Firefox on iOS)\nconst isIOS = () => {\n return /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1);\n};\n\n/**\n * Applique les styles nécessaires pour éliminer les bords arrondis et le fond noir\n * à tous les éléments shadow DOM du VideoRecorder.\n */\nexport const applyStylesToVideoElements = () => {\n // Cibler tous les éléments uni-video-recorder\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n\n if (videoRecorders.length === 0) {\n return;\n }\n\n // Pour chaque VideoRecorder, essayer d'accéder à son shadow DOM\n videoRecorders.forEach((recorder, index) => {\n // Appliquer des styles directs au conteneur\n (recorder as HTMLElement).style.borderRadius = \"0\";\n (recorder as HTMLElement).style.background = \"transparent\";\n (recorder as HTMLElement).style.overflow = \"hidden\";\n\n // Essayer d'accéder au shadow DOM (si accessible)\n // Note: cela peut ne pas fonctionner sur tous les navigateurs en fonction des restrictions CORS\n try {\n // Utiliser une assertion de type pour accéder au shadowRoot\n const shadowRoot = (recorder as Element & { shadowRoot?: ShadowRoot })\n .shadowRoot;\n\n if (shadowRoot) {\n // Injecter des styles dans le shadow DOM\n const styleElement = document.createElement(\"style\");\n styleElement.textContent = `\n * {\n border-radius: 0 !important;\n background-color: transparent !important;\n overflow: hidden !important;\n }\n \n video, canvas {\n width: 100% !important;\n height: 100% !important;\n object-fit: cover !important;\n border-radius: 0 !important;\n }\n `;\n\n shadowRoot.appendChild(styleElement);\n\n // Appliquer des styles directs aux éléments vidéo et canvas dans le shadow DOM\n const videoElements = shadowRoot.querySelectorAll(\"video, canvas\");\n videoElements.forEach((element) => {\n (element as HTMLElement).style.borderRadius = \"0\";\n (element as HTMLElement).style.width = \"100%\";\n (element as HTMLElement).style.height = \"100%\";\n (element as HTMLElement).style.objectFit = \"cover\";\n\n // iOS-specific fixes for black screen\n if (isIOS() && element.tagName.toLowerCase() === \"video\") {\n const video = element as HTMLVideoElement;\n video.setAttribute(\"playsinline\", \"true\");\n video.setAttribute(\"autoplay\", \"true\");\n video.setAttribute(\"muted\", \"true\");\n video.playsInline = true;\n video.autoplay = true;\n video.muted = true;\n }\n });\n } else {\n console.log(`Pas de shadow DOM pour l'élément ${index}`);\n }\n } catch (error) {\n console.log(`Erreur lors de l'accès au shadow DOM: ${error}`);\n }\n });\n};\n\n/**\n * Configure un observateur de mutations pour détecter l'ajout de VideoRecorder\n * et leur appliquer les styles nécessaires.\n */\nexport const setupVideoElementsObserver = () => {\n // Appliquer les styles aux éléments déjà présents dans le DOM\n applyStylesToVideoElements();\n\n // Configurer un observateur pour détecter l'ajout de nouveaux éléments VideoRecorder\n const observer = new MutationObserver((mutations) => {\n let shouldApplyStyles = false;\n\n mutations.forEach((mutation) => {\n if (mutation.type === \"childList\" && mutation.addedNodes.length > 0) {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n\n // Vérifier si l'élément est un VideoRecorder ou contient un VideoRecorder\n if (\n element.tagName.toLowerCase() === \"uni-video-recorder\" ||\n element.querySelector(\"uni-video-recorder\")\n ) {\n shouldApplyStyles = true;\n }\n }\n });\n }\n });\n\n if (shouldApplyStyles) {\n // Attendre un court instant pour que les composants soient complètement montés\n setTimeout(() => {\n applyStylesToVideoElements();\n }, 100);\n }\n });\n\n // Observer tout le document pour détecter l'ajout de VideoRecorder\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n return () => {\n observer.disconnect();\n };\n};\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DocumentCheck.js","sources":["../../../../../src/components/session/DocumentCheck.tsx"],"sourcesContent":["import { useState, useEffect, useMemo, useRef } from \"react\";\nimport type {\n AcceptedCountry,\n stepObject,\n SessionTemplate,\n} from \"../../types/session\";\nimport JDIPreIntroduction from \"../jdi/JDIPreIntroduction\";\nimport JDICountrySelection from \"../jdi/JDICountrySelection\";\nimport JDIDocumentSelection from \"../jdi/JDIDocumentSelection\";\nimport JDIDocumentUpload from \"../jdi/JDIDocumentUpload\";\nimport JDIProcessing from \"../jdi/JDIProcessing\";\nimport JDISuccess from \"../jdi/JDISuccess\";\nimport JDIError from \"../jdi/JDIError\";\nimport BeforePhoto from \"../id-check/BeforePhoto\";\nimport BeforeVersoPhoto from \"../id-check/BeforeVersoPhoto\";\nimport Photo from \"../id-check/Photo\";\nimport PhotoConfirmation from \"../id-check/PhotoConfirmation\";\nimport DocumentVideoCapture from \"../document-video/DocumentVideoCapture\";\nimport { Camera, Upload } from \"lucide-react\";\nimport { useDocumentContext } from \"../../context/DocumentContext\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport type { Prediction } from \"../../utils/apiAnalysis\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport {\n logDocumentTypeSelected,\n logCaptureModeSelected,\n logPhotoCaptured,\n logPhotosValidated,\n logDocumentLoaded,\n logDocumentsValidated,\n} from \"../../services/auditTrailService\";\nimport ButtonDesktop from \"../ui/ButtonDesktop\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { ISO_COUNTRY_CODES } from \"../../utils/isoCountryCodes\";\nimport {\n DocumentTemplate,\n FetchedDocumentTemplates,\n getAllDocumentTemplates,\n getDocTypeKey,\n getDocumentTemplateId,\n} from \"../../services/documentTemplate\";\nimport { UserInput } from \"../../types/userInput\";\nimport {\n resizeAfterCapture,\n dataUrlToBlob,\n blobToDataUrl,\n} from \"../../utils/imageProcessing\";\nimport {\n getNodeRetryCount,\n incrementNodeRetryCount,\n} from \"../../services/retryService\";\nimport { getSession } from \"../../context/SessionContext\";\nimport {\n updateSessionUserInput,\n skipNfcWithReason,\n hasOutgoingEdgeForHandle,\n} from \"../../services/sessionService\";\nimport NfcScanStep from \"../nfc-scan/NfcScanNode\";\nimport NfcChipGate from \"../nfc-scan/NfcChipGate\";\nimport NfcFallbackSurvey from \"../nfc-scan/NfcFallbackSurvey\";\nimport {\n normalizeMaxResubmissionAction,\n hasExceededResubmissionAttempts,\n resolveControleJdiOutcomeRoute,\n} from \"./controleJdiPolicy\";\n\nexport interface CountryDocuments {\n code: string;\n documents: {\n passport: string[];\n idCard: string[];\n residencePermit: string[];\n driverLicense: string[];\n pinkDriverLicense: string[];\n };\n}\n\nexport interface NodeIdentityControl {\n id: string;\n acceptedCountries: CountryDocuments[];\n automaticPhotoCapture?: boolean;\n withVideo?: boolean;\n nfcEnabled?: boolean;\n // \"nfcAndApi\" reste accepté pour rétrocompat (parcours legacy), normalisé via normalizeNfcMode.\n nfcMode?: \"nfcOnly\" | \"nfcOrPhoto\" | \"nfcAndApi\";\n allowedAddingMethods?: string[];\n introductionPage?: {\n title: string;\n description: string;\n };\n countrySelection?: {\n title: string;\n description: string;\n };\n documentSelection?: {\n title: string;\n description: string;\n };\n allowResubmission: boolean;\n maxResubmissionAttempts?: number;\n /** Paramétrable par nœud dans le journey builder. Absent/true = comportement\n * actuel inchangé (bouton \"Continuer quand même\" proposé) ; false = masqué.\n * Déprécié quand une sortie \"false\" est câblée sur ce nœud : le routage\n * automatique prend le relais et ce bouton n'est alors jamais affiché. */\n allowContinueOnFailure?: boolean;\n /** Codes JDI exacts bloquants pour ce nœud. Absent = DEFAULT_BLOCKING_CODES. */\n blockingCodes?: string[];\n /** Sortie suivie quand les resoumissions sont épuisées sur un code bloquant\n * ET qu'une sortie \"false\" est câblée. Défaut \"end-journey\". */\n maxResubmissionAction?: \"end-journey\" | \"force-true\";\n}\n\ninterface DocumentCheckProps {\n stepObject: stepObject;\n sessionId: string;\n node: NodeIdentityControl;\n onContinueOnPC?: () => void;\n documentTypeId: string;\n acceptedCountries?: AcceptedCountry[];\n isMobileCapture?: boolean;\n allowedAddingMethods?: string[];\n template?: SessionTemplate;\n templateIndex?: number;\n setUserInput: React.Dispatch<React.SetStateAction<UserInput>>;\n}\n\nimport { EUROPEAN_COUNTRY_CODES } from \"../../utils/europeanCountries\";\n\nconst NFC_ELIGIBLE_DOCUMENT_TYPES = new Set([\n \"passport\",\n \"idCard\",\n \"residencePermit\",\n]);\n\n/**\n * Normalise le mode NFC vers les valeurs courantes.\n * Rétrocompat : les parcours enregistrés avant le renommage portent encore\n * `nfcAndApi`, qui doit être traité comme `nfcOrPhoto` (scan NFC avec alternative photo).\n */\nconst normalizeNfcMode = (mode?: string): \"nfcOnly\" | \"nfcOrPhoto\" =>\n mode === \"nfcAndApi\" || mode === \"nfcOrPhoto\" ? \"nfcOrPhoto\" : \"nfcOnly\";\n\n/**\n * DocumentCheck component manages the multi-step document verification flow for a session.\n * It handles country and document type selection, document upload or photo capture, processing, and error/success handling.\n * The component adapts its flow for mobile capture and supports custom session templates.\n *\n * @component\n * @param {Object} props - Component props.\n * @param {stepObject} props.stepObject - Object managing the current step in the parent flow, with setStep and step properties.\n * @param {string} props.sessionId - Unique identifier for the current session.\n * @param {() => void} [props.onContinueOnPC] - Optional callback to continue the process on a PC (used for mobile capture fallback).\n * @param {string} props.documentTypeId - The ID of the required document type for verification (e.g., \"jdi-2\" for ID card).\n * @param {AcceptedCountry[]} [props.acceptedCountries] - Optional list of countries accepted for the document type. If not provided, resolved from the session template.\n * @param {boolean} [props.isMobileCapture=false] - If true, enables mobile photo capture flow instead of file upload.\n * @param {SessionTemplate} [props.template] - Optional session template object, used to resolve accepted countries and flow configuration.\n * @param {number} [props.templateIndex] - Optional index of the current template node, used for navigation and retry logic.\n *\n * @returns {JSX.Element} Multi-step document verification UI, rendering different subcomponents based on the current step.\n *\n * @remarks\n * - Handles both desktop and mobile flows, including photo capture and file upload.\n * - Integrates with context for selected document type and manages internal state for step navigation, country selection, file uploads, and error handling.\n * - Displays error messages and fallback UI for misconfiguration or invalid navigation.\n * - Uses hooks for translation, retry navigation, and context management.\n */\nconst DocumentCheck = ({\n stepObject,\n sessionId,\n node,\n documentTypeId,\n acceptedCountries,\n isMobileCapture = false,\n allowedAddingMethods,\n template,\n setUserInput,\n}: DocumentCheckProps): JSX.Element => {\n const { t } = useI18n();\n const { session } = getSession();\n\n const [documentTemplates, setDocumentTemplates] =\n useState<FetchedDocumentTemplates>();\n const [loadingTemplates, setLoadingTemplates] = useState(true);\n\n useEffect(() => {\n (async () => {\n setLoadingTemplates(true);\n const templates = await getAllDocumentTemplates();\n setDocumentTemplates(templates);\n setLoadingTemplates(false);\n })();\n }, []);\n\n const initialRetryCount = getNodeRetryCount(session, node.id);\n const [selectedMethod, setSelectedMethod] = useState<\n \"download\" | \"picture\" | null\n >(null);\n\n const isPictureAllowed = allowedAddingMethods?.includes(\"picture\") ?? true;\n const isDownloadAllowed = allowedAddingMethods?.includes(\"download\") ?? true;\n\n // Check if retry is allowed based on initial retry count\n const isInitialRetryAllowed = () => {\n // Special case: if allowResubmission is false and retryCount > 0, no retries allowed\n if (node.allowResubmission === false && initialRetryCount > 0) {\n return false;\n }\n\n if (node.allowResubmission === undefined) return true;\n if (!node.allowResubmission) return false;\n if (node.maxResubmissionAttempts !== undefined) {\n return initialRetryCount <= node.maxResubmissionAttempts;\n }\n return true;\n };\n\n // Initialize docStep - if retries exhausted, start at error page (step 6)\n const [docStep, setDocStep] = useState(() => {\n if (initialRetryCount > 0 && !isInitialRetryAllowed()) {\n return 6; // Error page\n }\n return 0; // Normal flow - start with introduction\n });\n const [selectedCountry, setSelectedCountry] = useState(\n acceptedCountries?.[0]?.code?.toUpperCase() || \"FR\",\n );\n const [fileUploaded, setFileUploaded] = useState<onUploadFiles | null>(null);\n const [analysisData, setAnalysisData] = useState<Prediction[] | null>(null);\n const [errorCode, setErrorCode] = useState<string | null>(null);\n const [blockContinue, setBlockContinue] = useState(false);\n const [nfcPreparationError, setNfcPreparationError] = useState<string | null>(null);\n // Quand l'utilisateur déclare ne pas avoir de puce (questionnaire de fallback),\n // on ne doit plus le réorienter vers le scan NFC (ni avant, ni après l'analyse API).\n const [nfcSkipped, setNfcSkipped] = useState(false);\n\n // Initialize retry count from session data\n const [retryCount, setRetryCount] = useState(() => {\n return getNodeRetryCount(session, node.id);\n });\n\n // Update retry count when session loads/changes\n useEffect(() => {\n if (session) {\n const sessionRetryCount = getNodeRetryCount(session, node.id);\n setRetryCount(sessionRetryCount);\n }\n }, [session, node.id]);\n\n // Restauration après refresh / déchargement de l'onglet : `docStep` est en mémoire et serait perdu\n // au rechargement. On s'appuie sur `session.nfcStatus` (persisté et exposé par le backend) pour\n // remettre l'utilisateur au bon endroit du nœud NFC au lieu de repartir au début (gate -1).\n //\n // En parcours full mobile, l'ouverture de l'app de scan peut décharger l'onglet ; au retour, le\n // composant remonte. Sans cette restauration, l'utilisateur retombait sur le choix pays/document.\n const hasRestoredNfcStep = useRef(false);\n useEffect(() => {\n if (hasRestoredNfcStep.current) return;\n if (node.nfcEnabled !== true) return;\n const status = session?.nfcStatus;\n // 'pending' (ou absent) → rien à restaurer : le scan n'a pas démarré, l'effet de reset affiche\n // le gate -1 (écran d'entrée normal).\n if (status !== \"opened\" && status !== \"failed\" && status !== \"completed\" && status !== \"skipped\") {\n return;\n }\n // À partir d'ici on prend la décision une seule fois (idempotence, y compris si l'effet se\n // re-déclenche) : on pose le flag AVANT toute navigation.\n hasRestoredNfcStep.current = true;\n\n if (status === \"opened\" || status === \"failed\") {\n // Scan en cours, ou échoué (définitivement, ou en attente d'une nouvelle tentative) :\n // rester sur l'écran de scan / d'échec (docStep 7) avec ses actions.\n setDocStep(7);\n return;\n }\n\n if (status === \"completed\") {\n // Scan réussi avant le déchargement : le nœud NFC est terminé → passer à l'étape suivante\n // (y compris en mode nfcOrPhoto — le NFC réussi suffit à valider le document).\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n return;\n }\n\n // status === \"skipped\" : l'utilisateur a poursuivi sans puce avant le déchargement.\n // Reproduit le routage de handleNfcFallback selon le mode :\n // - nfcOrPhoto → reprendre le flux photo/API du même nœud (intro/pays)\n // - nfcOnly → sauter le nœud (étape suivante)\n if (normalizeNfcMode(node.nfcMode) === \"nfcOrPhoto\") {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n setDocStep(hasIntroduction ? 0 : 1);\n } else if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n }, [session, node, template, stepObject]);\n\n // Check retry limits on mount/reload - if retries exhausted, show error page immediately\n useEffect(() => {\n // Special case: if allowResubmission is false and retryCount > 0, show error immediately\n if (node.allowResubmission === false && retryCount > 0) {\n setDocStep(6);\n return;\n }\n\n // Normal case: check against maxResubmissionAttempts\n // Inline retry check to avoid dependency issues\n const checkRetryLimit = () => {\n // If allowResubmission is undefined (old journeys), allow unlimited retries\n if (node.allowResubmission === undefined) {\n return true;\n }\n // If allowResubmission is false, no retries allowed\n if (!node.allowResubmission) {\n return false;\n }\n // If allowResubmission is true, check against maxResubmissionAttempts\n if (node.maxResubmissionAttempts !== undefined) {\n return retryCount <= node.maxResubmissionAttempts;\n }\n // If maxResubmissionAttempts is not set, allow unlimited retries\n return true;\n };\n\n // Check immediately on mount if retries are exhausted\n // This redirects to error page before showing any JDI steps\n if (retryCount > 0 && !checkRetryLimit()) {\n // User has exhausted retries, redirect to error page immediately\n setDocStep(6);\n }\n }, [retryCount, node.allowResubmission, node.maxResubmissionAttempts]);\n\n const [capturedImages, setCapturedImages] = useState<Record<string, string>>(\n {},\n );\n const [currentPhotoStep, setCurrentPhotoStep] = useState(\n \"before-recto\" as\n | \"before-recto\"\n | \"recto\"\n | \"before-verso\"\n | \"verso\"\n | \"confirmation\",\n );\n const [videoFlowPhase, setVideoFlowPhase] = useState<\"photo\" | \"video\">(\n \"photo\",\n );\n\n const { selectedDocumentType, setSelectedDocumentType } =\n useDocumentContext();\n\n const finalAcceptedCountries = useMemo(() => {\n if (loadingTemplates) return acceptedCountries;\n const result: AcceptedCountry[] = [];\n const hasInternational = acceptedCountries?.some(c => c.code === \"INT\");\n const hasEurope = acceptedCountries?.some(c => c.code === \"EU\");\n\n if (!hasInternational && !hasEurope) return acceptedCountries;\n\n const internationalDoc = acceptedCountries?.find(c => c.code === \"INT\");\n const europeDoc = acceptedCountries?.find(c => c.code === \"EU\");\n\n for (const ISOCode of ISO_COUNTRY_CODES) {\n if (ISOCode === \"INT\" || ISOCode === \"EU\") continue;\n\n const countryDocInput = acceptedCountries?.find(c => c.code?.toUpperCase() === ISOCode);\n const isEuropean = EUROPEAN_COUNTRY_CODES.includes(ISOCode);\n\n // Determine which configuration to use for this country\n // 1. Specific country config\n // 2. EU group config (if European)\n // 3. INT group config\n let configToUse: AcceptedCountry | undefined = countryDocInput;\n\n if (!configToUse) {\n if (isEuropean && europeDoc) {\n configToUse = europeDoc;\n } else if (internationalDoc) {\n configToUse = internationalDoc;\n }\n }\n\n if (configToUse) {\n const documents: AcceptedCountry['documents'] = {\n passport: [],\n idCard: [],\n driverLicense: [],\n residencePermit: [],\n pinkDriverLicense: [],\n };\n for (const key of Object.keys(configToUse.documents)) {\n const docKey = key as keyof AcceptedCountry['documents'];\n if (!isDocumentTypeAvailable(ISOCode, docKey)) continue;\n documents[docKey] = configToUse.documents[docKey];\n }\n if (\n documents.passport.length ||\n documents.idCard.length ||\n documents.driverLicense.length ||\n documents.residencePermit.length ||\n documents.pinkDriverLicense.length\n ) {\n result.push({ code: ISOCode, documents: { ...documents } });\n }\n }\n }\n return result;\n }, [acceptedCountries, documentTemplates, loadingTemplates]);\n\n // Helper to check if a document type is available for a country\n function isDocumentTypeAvailable(\n countryCode: string,\n documentType: keyof AcceptedCountry[\"documents\"],\n ) {\n if (countryCode === 'INT' || countryCode === 'EU') return true;\n const docTypeKey = (getDocTypeKey(documentType) ?? \"\").toLowerCase();\n return documentTemplates?.data?.some(\n (tpl: DocumentTemplate) =>\n tpl.countryCode === countryCode &&\n (tpl.name?.toLowerCase() || \"\").includes(docTypeKey),\n );\n }\n\n useEffect(() => {\n if (!documentTypeId) console.error(\"DocumentCheck: Missing documentTypeId\");\n console.debug(\"[DocumentCheck] node content:\", node);\n\n // Don't reset docStep if we're already on error page (step 6) due to exhausted retries\n if (docStep === 6) {\n return;\n }\n\n // En NFC, on affiche d'abord l'écran de confirmation de la puce (gate -1).\n // MAIS si un scan est déjà engagé/terminé/sauté côté backend (reload / retour après\n // déchargement de l'onglet), on ne force PAS le gate : on laisse l'effet de restauration\n // ci-dessus décider (sinon il l'écraserait et l'utilisateur repartirait au début du nœud).\n if (node.nfcEnabled === true) {\n const nfcStatus = session?.nfcStatus;\n if (\n nfcStatus === \"opened\" ||\n nfcStatus === \"failed\" ||\n nfcStatus === \"completed\" ||\n nfcStatus === \"skipped\"\n ) {\n return;\n }\n setDocStep(-1);\n return;\n }\n\n if (\n node.introductionPage?.title === undefined &&\n node.introductionPage?.description === undefined\n ) {\n setDocStep(1);\n } else {\n setDocStep(0);\n }\n // Deps volontairement limitées au changement de NŒUD (documentTypeId/sessionId/isMobileCapture).\n // On NE met PAS `session`/`nfcStatus` ici : ce reset ré-initialise docStep, et le déclencher sur\n // une évolution de session renverrait l'utilisateur au début du nœud (ex. boucle pays→document).\n // La lecture de session?.nfcStatus ci-dessus ne sert qu'à NE PAS écraser une restauration déjà\n // décidée par l'effet dédié (protégé par hasRestoredNfcStep) au (re)montage.\n }, [documentTypeId, sessionId, isMobileCapture]);\n\n const handleCountrySelect = (countryId: string) => {\n console.debug(\n \"[DocumentCheck] handleCountrySelect - countryId:\",\n countryId,\n );\n setUserInput((prev) => ({ ...prev, countryCode: countryId.toUpperCase() }));\n setSelectedCountry(countryId.toUpperCase());\n setSelectedDocumentType(null);\n setFileUploaded(null);\n setAnalysisData(null);\n setErrorCode(null);\n setNfcPreparationError(null);\n // Reset retry count to 0 (will be synced to session)\n setRetryCount(0);\n setCapturedImages({});\n setCurrentPhotoStep(\"before-recto\");\n setVideoFlowPhase(\"photo\");\n setDocStep(2);\n };\n\n const handlePhotoCapture = async (\n imageData: string,\n side: \"recto\" | \"verso\",\n ) => {\n try {\n // Convert data URL to Blob for processing\n const imageBlob = dataUrlToBlob(imageData);\n\n // Resize and optimize the image (only on mobile)\n const processedBlob = await resizeAfterCapture(imageBlob);\n\n // Convert back to data URL for storage and display\n const processedDataUrl = await blobToDataUrl(processedBlob);\n\n console.debug(`[DocumentCheck] Photo processed for ${side}`, {\n originalSize: imageBlob.size,\n processedSize: processedBlob.size,\n originalType: imageBlob.type,\n processedType: processedBlob.type,\n });\n\n setCapturedImages((prev) => ({ ...prev, [side]: processedDataUrl }));\n logPhotoCaptured(sessionId, side);\n\n if (side === \"recto\") {\n const isSingleSided =\n selectedDocumentType?.id === \"passport\" ||\n selectedDocumentType?.id === \"pinkDriverLicense\";\n setCurrentPhotoStep(isSingleSided ? \"confirmation\" : \"before-verso\");\n } else {\n setCurrentPhotoStep(\"confirmation\");\n }\n } catch (error) {\n console.error(\n `[DocumentCheck] Failed to process photo for ${side}:`,\n error,\n );\n // Fallback: use original image if processing fails\n setCapturedImages((prev) => ({ ...prev, [side]: imageData }));\n logPhotoCaptured(sessionId, side);\n\n if (side === \"recto\") {\n const isSingleSided =\n selectedDocumentType?.id === \"passport\" ||\n selectedDocumentType?.id === \"pinkDriverLicense\";\n setCurrentPhotoStep(isSingleSided ? \"confirmation\" : \"before-verso\");\n } else {\n setCurrentPhotoStep(\"confirmation\");\n }\n }\n };\n\n const handlePhotoConfirmation = () => {\n if (capturedImages.recto) {\n logPhotosValidated(sessionId);\n setFileUploaded({\n front: capturedImages.recto,\n back: capturedImages.verso || null,\n });\n setDocStep(4);\n }\n };\n\n const handlePhotoConfirmedForVideo = () => {\n setVideoFlowPhase(\"video\");\n };\n\n const handleDocumentVideoComplete = (\n success: boolean,\n predictions?: Prediction[],\n errorCode?: string,\n ) => {\n const analysisData =\n predictions && predictions.length > 0 ? predictions : null;\n if (analysisData) {\n setAnalysisData(analysisData);\n }\n if (errorCode) {\n setErrorCode(errorCode);\n }\n handleProcessingComplete(success, undefined, analysisData);\n };\n\n const handleDocumentTypeSelect = async (documentId: string) => {\n const documentLabel = t(`documentTypes.${documentId}`, documentId);\n logDocumentTypeSelected(sessionId, documentId, documentLabel);\n const documentTemplateID = loadingTemplates\n ? undefined\n : getDocumentTemplateId({\n acceptedCountries: finalAcceptedCountries,\n countryCode: selectedCountry,\n documentId,\n documentTemplates,\n });\n\n const selectedDoc = {\n id: documentId,\n label: t(`documentTypes.${documentId}`),\n hasTwoSides:\n documentId !== \"passport\" && documentId !== \"pinkDriverLicense\",\n documentTemplateId: documentTemplateID,\n };\n\n const selectedCountryCode = selectedCountry.toUpperCase();\n const selectedDocumentInput = {\n countryCode: selectedCountryCode,\n identityDocumentType: documentId,\n identityDocumentTemplateId: documentTemplateID,\n };\n\n setSelectedDocumentType(selectedDoc);\n setUserInput((prev) => ({ ...prev, ...selectedDocumentInput }));\n setFileUploaded(null);\n setAnalysisData(null);\n setErrorCode(null);\n setNfcPreparationError(null);\n setCapturedImages({});\n setCurrentPhotoStep(\"before-recto\");\n setVideoFlowPhase(\"photo\");\n\n if (\n node.nfcEnabled === true &&\n !nfcSkipped &&\n NFC_ELIGIBLE_DOCUMENT_TYPES.has(documentId)\n ) {\n const nfcMode = normalizeNfcMode(node.nfcMode);\n try {\n await updateSessionUserInput(sessionId, {\n ...((session?.userInput as Record<string, unknown> | undefined) ?? {}),\n ...selectedDocumentInput,\n });\n } catch (error) {\n console.error(\"Failed to persist NFC document selection:\", error);\n setNfcPreparationError(\n t(\n \"nfc_scan.preparation_failed\",\n \"Impossible de préparer le scan NFC. Veuillez réessayer.\",\n ),\n );\n }\n setDocStep(nfcMode === \"nfcOrPhoto\" ? 3 : 7);\n return;\n }\n\n setDocStep(3);\n };\n\n const handleDocumentUpload = (files: onUploadFiles) => {\n logDocumentLoaded(sessionId, \"recto\");\n if (files.back) {\n logDocumentLoaded(sessionId, \"verso\");\n }\n logDocumentsValidated(sessionId);\n\n setFileUploaded(files);\n\n // Check if retry limit is reached before processing\n if (!isRetryAllowed() && retryCount > 0) {\n // Skip processing and go directly to error page\n setDocStep(6);\n } else {\n // Proceed to processing\n setDocStep(4);\n }\n };\n\n const handleProcessingComplete = (\n success: boolean,\n _retryCount?: number,\n apiAnalysisData?: Prediction[] | null,\n shouldBlockContinue?: boolean,\n ) => {\n setBlockContinue(shouldBlockContinue === true);\n if (apiAnalysisData) {\n setAnalysisData(apiAnalysisData);\n\n // Extract and store the error code\n if (apiAnalysisData.length > 0) {\n const code = apiAnalysisData[0].code;\n setErrorCode(code);\n }\n }\n\n if (success) {\n const shouldRunNfcAfterApi =\n node.nfcEnabled === true &&\n !nfcSkipped &&\n normalizeNfcMode(node.nfcMode) === \"nfcOrPhoto\" &&\n !!selectedDocumentType?.id &&\n NFC_ELIGIBLE_DOCUMENT_TYPES.has(selectedDocumentType.id);\n\n if (shouldRunNfcAfterApi) {\n setDocStep(7);\n return;\n }\n\n // Increment currentStep in database immediately after successful analysis\n // This prevents double analysis if the user refreshes the page\n // Handle \"true\" explicite : sûr même sur un nœud legacy à une seule\n // arête (findOutgoingEdge retombe sur la première arête existante).\n if (template) {\n stepObject.goToNextStep(node.id, template, \"true\");\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setDocStep(5);\n } else {\n const newRetryCount = retryCount + 1;\n // Increment retry count both in state and session\n setRetryCount(newRetryCount);\n incrementNodeRetryCount(sessionId, node.id, retryCount).catch((error) => {\n console.error(\"Failed to update retry count in session:\", error);\n });\n\n // Routage automatique vers la sortie \"false\" (nouveau) : uniquement\n // pour un véritable échec de code JDI bloquant (pas un souci d'upload\n // S3 non confirmé — cf. shouldBlockContinue), une fois les\n // resoumissions épuisées ET si l'auteur a câblé une sortie \"false\".\n // Sinon, comportement legacy inchangé : écran d'erreur (retry et/ou\n // \"continuer quand même\" selon isRetryAllowed/allowContinueOnFailure).\n if (shouldBlockContinue !== true && template) {\n const currentCode =\n apiAnalysisData && apiAnalysisData.length > 0\n ? apiAnalysisData[0].code\n : (errorCode ?? undefined);\n const effectiveMaxAttempts =\n currentCode?.startsWith(\"8\") || node.allowResubmission === false\n ? 0\n : (node.maxResubmissionAttempts ?? Infinity);\n const route = resolveControleJdiOutcomeRoute({\n isBlockingCode: true, // success === false ⇒ le code était bloquant\n hasExceededAttempts: hasExceededResubmissionAttempts(\n newRetryCount,\n effectiveMaxAttempts,\n ),\n hasFalseEdge: hasOutgoingEdgeForHandle(node.id, template, \"false\"),\n action: normalizeMaxResubmissionAction(node.maxResubmissionAction),\n });\n\n if (!route.showErrorScreen && route.handle) {\n stepObject.goToNextStep(node.id, template, route.handle);\n setDocStep(0);\n return;\n }\n }\n\n setDocStep(6);\n }\n };\n\n const handleRetryFromError = () => {\n setBlockContinue(false);\n // Note: retry count is already incremented in handleProcessingComplete\n // This function just handles navigation\n // Pour l'erreur 2.5 (face manquante), on conserve fileUploaded pour pré-remplir\n // l'upload avec la face déjà déposée. Pour les autres erreurs, on repart de zéro.\n if (errorCode !== \"2.5\") {\n setFileUploaded(null);\n }\n // Always stay on the current node and go back to upload step.\n // Never navigate to a different global step: if this node was reached via a\n // condition branch (e.g. \"true\"), navigating away would land on the other\n // branch (\"false\"). The retry means \"re-submit on THIS node\", not \"go back\n // in the journey\".\n setDocStep(3);\n };\n\n // Check if retry is allowed based on configuration\n const isRetryAllowed = () => {\n console.log(\"isRetryAllowed - Props:\", {\n allowResubmission: node.allowResubmission,\n maxResubmissionAttempts: node.maxResubmissionAttempts,\n retryCount,\n });\n // Specimen documents (code 8.x) block retry — user can only continue anyway\n if (errorCode?.startsWith(\"8\")) {\n return false;\n }\n // If allowResubmission is undefined (old journeys), allow unlimited retries\n if (node.allowResubmission === undefined) {\n return true;\n }\n // If allowResubmission is false, no retries allowed\n if (!node.allowResubmission) {\n return false;\n }\n // If allowResubmission is true, check against maxResubmissionAttempts\n if (node.maxResubmissionAttempts !== undefined) {\n return retryCount <= node.maxResubmissionAttempts;\n }\n // If maxResubmissionAttempts is not set, allow unlimited retries\n return true;\n };\n\n const handleContinueAnyway = () => {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setDocStep(0);\n };\n\n const handleSuccessContinue = () => {\n if (template) {\n stepObject.goToNextStep(node.id, template, \"true\");\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setDocStep(0);\n };\n\n // Questionnaire de fallback NFC : l'utilisateur a déclaré ne pas avoir de puce.\n // On enregistre la raison (non bloquant) puis on poursuit selon le mode du nœud :\n // - nfcOrPhoto → flux photo/API du même nœud (intro/pays → upload → analyse), sans scan NFC\n // - nfcOnly → on saute le nœud (nœud suivant)\n const handleNfcFallback = async (\n reason: string,\n label: string,\n comment?: string,\n ) => {\n setNfcSkipped(true);\n try {\n await skipNfcWithReason(sessionId, { reason, label, comment });\n } catch (error) {\n console.error(\"Failed to persist NFC fallback reason:\", error);\n }\n\n const nfcMode = normalizeNfcMode(node.nfcMode);\n if (nfcMode === \"nfcOrPhoto\") {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n setDocStep(hasIntroduction ? 0 : 1);\n return;\n }\n\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n };\n\n const handleBack = () => {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n\n // Le questionnaire de fallback (-2) revient au gate (-1)\n if (docStep === -2) {\n setDocStep(-1);\n return;\n }\n\n // En NFC, le premier écran réel (intro=0 sinon pays=1) revient au gate (-1)\n if (\n node.nfcEnabled === true &&\n docStep === (hasIntroduction ? 0 : 1)\n ) {\n setDocStep(-1);\n return;\n }\n\n if (docStep === 0) {\n stepObject.goBack();\n } else {\n setDocStep((prev) => prev - 1);\n }\n };\n\n switch (docStep) {\n case -1: {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n return (\n <NfcChipGate\n onConfirm={() => setDocStep(hasIntroduction ? 0 : 1)}\n // Pas de puce → questionnaire de fallback pour recueillir la raison\n onNoChip={() => setDocStep(-2)}\n />\n );\n }\n case -2:\n return <NfcFallbackSurvey onSubmit={handleNfcFallback} />;\n case 0:\n if (!documentTypeId) {\n console.error(\"DocumentCheck: Missing documentTypeId in step 0\");\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\n \"document_check.config_error.title\",\n \"Erreur de configuration\",\n )}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\n \"document_check.config_error.description\",\n \"Type de document non spécifié.\",\n )}\n </p>\n <ButtonDesktop\n type=\"back\"\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={() =>\n stepObject.setStep(Math.max(0, stepObject.step - 1))\n }\n >\n {t(\"document_check.config_error.back\", \"Retour\")}\n </ButtonDesktop>\n </div>\n );\n }\n return (\n <JDIPreIntroduction\n documentTypeId={documentTypeId}\n onContinue={() => setDocStep(1)}\n onBack={stepObject.canGoBack ? handleBack : undefined}\n introTitleText={\n node.introductionPage?.title || t(\"jdi.pre_introduction.title\")\n }\n introDescText={\n node.introductionPage?.description ||\n t(\"jdi.pre_introduction.description\")\n }\n />\n );\n case 1:\n return (\n <JDICountrySelection\n onCountrySelect={handleCountrySelect}\n onBack={handleBack}\n documentTypeId={documentTypeId}\n acceptedCountries={finalAcceptedCountries}\n countryIntroText={\n node.countrySelection?.title || t(\"jdi.country_selection.title\")\n }\n countryDescText={\n node.countrySelection?.description ||\n t(\"jdi.country_selection.description\")\n }\n />\n );\n case 2:\n return (\n <JDIDocumentSelection\n onDocumentSelect={handleDocumentTypeSelect}\n onBack={handleBack}\n documentTypeId={documentTypeId}\n sessionId={sessionId}\n chosenCountry={\n finalAcceptedCountries?.find((c) => c.code === selectedCountry) ||\n undefined\n }\n documentSelectionTitle={\n node.documentSelection?.title || t(\"jdi.document_selection.title\")\n }\n documentSelectionDescription={\n // En NFC, on laisse JDIDocumentSelection choisir le wording adapté\n // (subtitle_identity_nfc) plutôt que l'override \"téléverser\" du nœud.\n node.nfcEnabled === true\n ? undefined\n : node.documentSelection?.description ||\n t(\"jdi.document_selection.description\")\n }\n nfcEnabled={node.nfcEnabled === true}\n />\n );\n case 3: {\n if (!selectedDocumentType) {\n console.error(\n \"DocumentCheck: selectedDocumentType is null for step 3!\",\n );\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"document_check.selection_error.title\", \"Erreur de sélection\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\n \"document_check.selection_error.description\",\n \"Aucun type de document sélectionné. Veuillez revenir à l'étape précédente.\",\n )}\n </p>\n <ButtonDesktop\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n type=\"back\"\n onClick={() => setDocStep(2)}\n >\n {t(\n \"document_check.selection_error.back\",\n \"Retour à la sélection\",\n )}\n </ButtonDesktop>\n </div>\n );\n }\n\n if (isPictureAllowed && isDownloadAllowed && !selectedMethod) {\n return (\n <MobilePageLayout\n footer={\n <div className=\"w-full max-w-md mx-auto\">\n <ButtonDesktop\n type=\"back\"\n onClick={handleBack}\n className=\"w-full text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline py-2\"\n >\n {t(\"buttons.back\", \"Retour\")}\n </ButtonDesktop>\n </div>\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\n \"document_check.method_selection.title\",\n \"Choisissez une méthode\",\n )}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {t(\n \"document_check.method_selection.subtitle\",\n \"Comment souhaitez-vous ajouter votre document ?\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"grid gap-4\">\n <button\n onClick={() => { setSelectedMethod(\"picture\"); logCaptureModeSelected(sessionId, \"picture\"); }}\n className=\"flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group\"\n >\n <div className=\"w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4\">\n <Camera size={24} />\n </div>\n <div>\n <p className=\"font-semibold text-gray-900\">\n {t(\n \"document_check.method_selection.picture_title\",\n \"Prendre une photo\",\n )}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\n \"document_check.method_selection.picture_desc\",\n \"Utilisez l'appareil photo de votre appareil\",\n )}\n </p>\n </div>\n </button>\n\n <button\n onClick={() => { setSelectedMethod(\"download\"); logCaptureModeSelected(sessionId, \"upload\"); }}\n className=\"flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group\"\n >\n <div className=\"w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4\">\n <Upload size={24} />\n </div>\n <div>\n <p className=\"font-semibold text-gray-900\">\n {t(\n \"document_check.method_selection.download_title\",\n \"Téléverser un fichier\",\n )}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\n \"document_check.method_selection.download_desc\",\n \"Sélectionnez un fichier sur votre appareil\",\n )}\n </p>\n </div>\n </button>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n }\n\n const activeMethod =\n selectedMethod ||\n (isPictureAllowed && isMobileCapture ? \"picture\" : \"download\");\n\n if (activeMethod === \"picture\" && isPictureAllowed) {\n const isSingleSided =\n selectedDocumentType?.id === \"passport\" ||\n selectedDocumentType?.id === \"pinkDriverLicense\";\n const onConfirm = node.withVideo\n ? handlePhotoConfirmedForVideo\n : handlePhotoConfirmation;\n\n if (node.withVideo && videoFlowPhase === \"video\") {\n return (\n <DocumentVideoCapture\n selectedDocumentType={selectedDocumentType}\n onComplete={handleDocumentVideoComplete}\n onBack={() => {\n setVideoFlowPhase(\"photo\");\n setCurrentPhotoStep(\"confirmation\");\n }}\n nodeId={node.id}\n sessionId={sessionId}\n previewOverrides={{\n recto: capturedImages.recto,\n verso: capturedImages.verso,\n }}\n blockingCodes={node.blockingCodes}\n />\n );\n }\n\n if (currentPhotoStep === \"before-recto\") {\n return (\n <BeforePhoto\n setStep={() => setCurrentPhotoStep(\"recto\")}\n isSingleSided={isSingleSided}\n onBack={() => setDocStep(2)}\n />\n );\n }\n if (currentPhotoStep === \"recto\") {\n return (\n <Photo\n onCapture={(imageData) => handlePhotoCapture(imageData, \"recto\")}\n />\n );\n }\n if (currentPhotoStep === \"before-verso\") {\n return (\n <BeforeVersoPhoto setStep={() => setCurrentPhotoStep(\"verso\")} />\n );\n }\n if (currentPhotoStep === \"verso\") {\n return (\n <Photo\n onCapture={(imageData) => handlePhotoCapture(imageData, \"verso\")}\n />\n );\n }\n if (currentPhotoStep === \"confirmation\") {\n return (\n <PhotoConfirmation\n imageUrl={capturedImages.recto || \"\"}\n versoImageUrl={capturedImages.verso}\n requiresTwoSides={!!capturedImages.verso}\n onConfirm={onConfirm}\n onRetry={() => setCurrentPhotoStep(\"before-recto\")}\n onRetryAfterProcessing={() => setCurrentPhotoStep(\"before-recto\")}\n fileUploaded={fileUploaded}\n isSingleSided={isSingleSided}\n />\n );\n }\n return (\n <BeforePhoto\n setStep={() => setCurrentPhotoStep(\"recto\")}\n isSingleSided={isSingleSided}\n onBack={() => setDocStep(2)}\n />\n );\n } else {\n return (\n <JDIDocumentUpload\n documentType={selectedDocumentType?.id || documentTypeId}\n documentTypeId={documentTypeId}\n documentLabel={selectedDocumentType?.label}\n onUpload={handleDocumentUpload}\n onBack={() => {\n if (isPictureAllowed && isDownloadAllowed) {\n setSelectedMethod(null);\n } else {\n setDocStep(2);\n }\n }}\n initialFront={errorCode === \"2.5\" ? fileUploaded?.front : null}\n initialBack={errorCode === \"2.5\" ? fileUploaded?.back : null}\n sessionId={sessionId}\n />\n );\n }\n }\n // fall-through volontaire vers case 4 (comportement existant conservé)\n case 4:\n return (\n <JDIProcessing\n documentType={selectedDocumentType?.id || documentTypeId}\n onProcessingComplete={handleProcessingComplete}\n fileUploaded={fileUploaded}\n documentTypeId={documentTypeId}\n retryCount={retryCount}\n documentTemplateId={selectedDocumentType?.documentTemplateId}\n nodeId={node.id}\n blockingCodes={node.blockingCodes}\n />\n );\n case 5:\n return (\n <JDISuccess\n documentType={selectedDocumentType?.id || documentTypeId}\n onContinue={handleSuccessContinue}\n errorCode={errorCode || undefined}\n />\n );\n case 6:\n return (\n <JDIError\n documentType={selectedDocumentType?.id || documentTypeId}\n onRetry={handleRetryFromError}\n onContinueAnyway={\n node.allowContinueOnFailure === false\n ? undefined\n : handleContinueAnyway\n }\n retryCount={retryCount}\n predictions={analysisData || undefined}\n errorCode={errorCode || undefined}\n allowResubmission={node.allowResubmission}\n maxResubmissionAttempts={node.maxResubmissionAttempts}\n isRetryAllowed={isRetryAllowed()}\n blockContinue={blockContinue}\n />\n );\n case 7:\n if (nfcPreparationError) {\n return (\n <MobilePageLayout\n footer={\n <div className=\"w-full max-w-md mx-auto\">\n <ButtonDesktop\n type=\"back\"\n onClick={() => setDocStep(2)}\n className=\"w-full text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline py-2\"\n >\n {t(\"buttons.back\", \"Retour\")}\n </ButtonDesktop>\n </div>\n }\n >\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"nfc_scan.preparation_error_title\", \"Erreur de préparation NFC\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">{nfcPreparationError}</p>\n </div>\n </MobilePageLayout>\n );\n }\n return (\n <NfcScanStep\n sessionId={sessionId}\n nodeId={node.id}\n stepObject={stepObject}\n template={template}\n onBack={() => {\n // Retour vers la sélection du document (corriger un mauvais choix, ou après échec NFC).\n // Le démontage de NfcScanStep ferme le SSE via le cleanup du hook (pas d'appel backend).\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n hasRestoredNfcStep.current = true; // ne pas re-restaurer l'étape QR après ce retour\n setDocStep(hasIntroduction ? 0 : 1);\n }}\n onContinueWithoutChip={() => {\n // \"Poursuivre sans puce\" après échec définitif : ouvre le questionnaire de raison\n // (docStep -2 → NfcFallbackSurvey → handleNfcFallback). handleNfcFallback applique\n // ensuite la reprise selon nfcMode (nfcOrPhoto → photo/API ; nfcOnly → nœud suivant).\n hasRestoredNfcStep.current = true;\n setDocStep(-2);\n }}\n />\n );\n default:\n console.error(`Invalid docStep: ${docStep}`);\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"document_check.navigation_error.title\", \"Erreur de navigation\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\n \"document_check.navigation_error.description\",\n \"Étape non valide. Veuillez recommencer.\",\n )}\n </p>\n <ButtonDesktop\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n type=\"back\"\n onClick={() => setDocStep(0)}\n >\n {t(\"document_check.navigation_error.back\", \"Retour au début\")}\n </ButtonDesktop>\n </div>\n );\n }\n};\n\nexport default DocumentCheck;\n"],"names":["useI18n","getSession","useState","useEffect","__awaiter","getAllDocumentTemplates","getNodeRetryCount","useRef","useDocumentContext","useMemo","EUROPEAN_COUNTRY_CODES","__assign","ISO_COUNTRY_CODES","getDocTypeKey","dataUrlToBlob","resizeAfterCapture","blobToDataUrl","logPhotoCaptured","logPhotosValidated","logDocumentTypeSelected","getDocumentTemplateId","updateSessionUserInput","logDocumentLoaded","logDocumentsValidated","incrementNodeRetryCount","resolveControleJdiOutcomeRoute","hasExceededResubmissionAttempts","hasOutgoingEdgeForHandle","normalizeMaxResubmissionAction","skipNfcWithReason","_jsx","NfcChipGate","NfcFallbackSurvey","_jsxs","ButtonDesktop","JDIPreIntroduction","JDICountrySelection","JDIDocumentSelection","MobilePageLayout","Title","Subtitle","logCaptureModeSelected","Camera","Upload","DocumentVideoCapture","BeforePhoto","Photo","BeforeVersoPhoto","PhotoConfirmation","JDIDocumentUpload","JDIProcessing","JDISuccess","JDIError","NfcScanStep"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"EndFlow.js","sources":["../../../../../src/components/session/EndFlow.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { HeartHandshake, Send, Mail } from \"lucide-react\";\nimport checkIcon from \"../../assets/check.svg\";\nimport LoadingState from \"../states/LoadingState\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport {\n clearSessionSensitiveData,\n updateSessionStatus,\n} from \"../../services/sessionService\";\nimport { logSessionEnded } from \"../../services/auditTrailService\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport useIsMobile from \"../../hooks/useIsMobile\";\nimport type { EndScreenCase } from \"../../types/session\";\nimport { resolveEndScreenIcon } from \"./endScreenIcons\";\nimport { replaceLocation } from \"../../utils/navigation\";\n\n// Couleur des icônes = couleur du bouton choisie pour le journey (buttonBgColor).\nconst ICON_COLOR = \"var(--dk-btn-bg, #11e5c5)\";\n\ninterface EndFlowProps {\n sessionId: string;\n sessionStatus?: string; // Ajout du statut de session optionnel\n callbackURL?: string | null;\n endNodeId?: string; // Id du nœud `end` atteint, transmis au backend pour forcer le bon statut\n expectedResult?: string; // Résultat forcé du nœud end atteint (ex: 'non_compliant')\n /** Textes de fin personnalisés (config globale du journey). Vide → fallback standard. */\n compliantCase?: EndScreenCase;\n nonCompliantCase?: EndScreenCase;\n}\n\n/**\n * EndFlow Component\n *\n * Composant affiché à la fin du flux de vérification lorsque toutes les étapes ont été complétées.\n * Affiche un message de confirmation avec une icône de succès.\n *\n * @param {EndFlowProps} props - Propriétés du composant\n * @param {string} props.sessionId - L'identifiant de la session\n * @param {string} props.sessionStatus - Le statut actuel de la session\n * @returns {JSX.Element} Le composant EndFlow\n */\nconst EndFlow: React.FC<EndFlowProps> = ({\n sessionId,\n sessionStatus,\n callbackURL,\n endNodeId,\n expectedResult,\n compliantCase,\n nonCompliantCase,\n}) => {\n const [isEnding, setIsEnding] = useState(false);\n const [isRedirecting, setIsRedirecting] = useState(false);\n const [shouldRedirect, setShouldRedirect] = useState(false);\n // Statut consolidé renvoyé par le backend après updateSessionStatus —\n // sert à détecter un échec « poursuivre quand même » non porté par expectedResult.\n const [backendStatus, setBackendStatus] = useState<string | undefined>(\n undefined,\n );\n // Le verdict backend arrive de façon asynchrone (~1-2s). On le marque résolu\n // pour éviter de flasher l'écran succès puis basculer sur l'écran erreur.\n const [statusResolved, setStatusResolved] = useState(false);\n const { t } = useI18n();\n const isMobile = useIsMobile(768);\n // Décalage horizontal du bloc d'items réservé au desktop. On le pilote en JS\n // (useIsMobile, cohérent avec le composant Button) plutôt que via `md:` Tailwind :\n // les variantes responsive `md:translate-*` ne sont pas fiables dans le bundle SDK.\n // Utilisé uniquement par l'écran d'erreur générique hardcodé ci-dessous.\n const desktopTranslateX = isMobile ? \"\" : \"translate-x-10\";\n // Même décalage, mais via padding plutôt que transform — réservé aux écrans à\n // message personnalisé (renderCustomCase) : un `transform: translateX(...)` ne fait\n // déborder aucune boîte visuellement, mais contribue quand même au \"scrollable\n // overflow\" du conteneur `overflow-y-auto` ancêtre (DatakeenSession), ce qui\n // affichait une scrollbar horizontale fantôme sur desktop. `padding-left` reste\n // contenu dans la largeur déclarée (box-sizing: border-box global du SDK), donc ne\n // peut pas produire ce débordement invisible.\n const desktopOffsetX = isMobile ? \"\" : \"pl-10\";\n\n // Le nœud end peut déjà forcer un résultat non conforme : dans ce cas on\n // connaît l'issue sans attendre le backend.\n const expectedError =\n expectedResult === \"non_compliant\" || expectedResult === \"error\";\n\n // L'écran « erreur conservée » s'affiche si le nœud end force un résultat\n // non conforme, OU si le backend a consolidé un statut d'échec/vérification.\n const isError =\n expectedError ||\n backendStatus === \"ai_rejected\" ||\n backendStatus === \"verify\";\n\n // Tant que le verdict n'est pas connu (ni forcé par le nœud, ni renvoyé par\n // le backend), on affiche un état neutre plutôt que de présumer le succès.\n const isResolving = !expectedError && !statusResolved;\n\n // Trigger session end as soon as the user reaches this screen,\n // regardless of whether they click the button (e.g. tab close)\n useEffect(() => {\n updateSessionStatus(sessionId, \"ended\", endNodeId)\n .then((updatedSession) => {\n if (updatedSession?.status) {\n setBackendStatus(updatedSession.status);\n }\n if (updatedSession && updatedSession.analysisId) {\n logSessionEnded(sessionId).catch((err) => {\n console.error(\"Failed to log session end in audit trail:\", err);\n });\n }\n })\n .catch((error) => {\n console.error(\"Error updating session status on EndFlow mount:\", error);\n })\n .finally(() => {\n // Verdict connu (ou échec d'appel) : on peut afficher l'écran final.\n setStatusResolved(true);\n });\n }, []);\n\n const handleEndSession = async () => {\n setIsEnding(true);\n try {\n clearSessionSensitiveData(sessionId);\n } catch (error) {\n console.error(\"Erreur lors de la finalisation de la session:\", error);\n } finally {\n setIsEnding(false);\n if (callbackURL) {\n setIsRedirecting(true);\n setShouldRedirect(true);\n } else {\n // Forcer la fermeture immédiatement lorsqu'aucune redirection n'est attendue\n closeWindow();\n }\n }\n };\n\n const redirectToCallback = (url: string) => {\n try {\n replaceLocation(url);\n } catch (e) {\n console.error(\"Redirection vers le callback échouée:\", e);\n setIsRedirecting(false);\n closeWindow();\n }\n };\n\n useEffect(() => {\n if (sessionStatus === \"ended\" && callbackURL && !shouldRedirect) {\n setIsRedirecting(true);\n setShouldRedirect(true);\n }\n }, [sessionStatus, callbackURL, shouldRedirect]);\n\n useEffect(() => {\n if (!shouldRedirect || !callbackURL) {\n return;\n }\n\n const REDIRECT_DELAY_MS = 2000;\n const timer = window.setTimeout(\n () => redirectToCallback(callbackURL),\n REDIRECT_DELAY_MS,\n );\n return () => window.clearTimeout(timer);\n }, [shouldRedirect, callbackURL]);\n\n const closeWindow = () => {\n console.log(\"Tentative de fermeture de la fenêtre...\");\n\n // Méthode 1: Si dans un iframe, communiquer avec le parent IMMÉDIATEMENT\n if (window.parent && window.parent !== window) {\n try {\n window.parent.postMessage(\n {\n action: \"closeSession\",\n sessionId,\n status: \"ended\",\n message: \"Session terminée, veuillez fermer cette fenêtre\",\n },\n \"*\",\n );\n console.log(\"Message envoyé au parent pour fermeture\");\n } catch (e) {\n console.log(\"postMessage échoué:\", e);\n }\n }\n\n // Méthode 2: Essayer window.close() avec différentes approches\n try {\n // Essayer close direct\n window.close();\n console.log(\"window.close() direct appelé\");\n } catch (e) {\n console.log(\"window.close() direct échoué:\", e);\n }\n\n // Méthode 3: Si on a un opener, essayer de se fermer via l'opener\n setTimeout(() => {\n try {\n if (window.opener) {\n window.opener.focus();\n window.close();\n console.log(\"Fermeture via opener\");\n }\n } catch (e) {\n console.log(\"Fermeture via opener échouée:\", e);\n }\n }, 100);\n\n // Méthode 4: Forcer avec self.close()\n setTimeout(() => {\n try {\n self.close();\n console.log(\"self.close() appelé\");\n } catch (e) {\n console.log(\"self.close() échoué:\", e);\n }\n }, 200);\n\n // Méthode 5: Essayer de manipuler l'historique pour forcer la fermeture\n setTimeout(() => {\n try {\n window.history.back();\n window.close();\n console.log(\"history.back() + close\");\n } catch (e) {\n console.log(\"history.back() + close échoué:\", e);\n }\n }, 300);\n\n // Méthode 6: Rediriger vers une page de fermeture personnalisée\n setTimeout(() => {\n try {\n // Créer une URL de données avec un script de fermeture automatique\n const closeScript = `\n <html>\n <head><title>Session terminée</title></head>\n <body style=\"margin:0;padding:0;background:#f0f0f0;font-family:Arial,sans-serif;\">\n <div style=\"display:flex;flex-direction:column;justify-content:center;align-items:center;height:100vh;text-align:center;\">\n <h1 style=\"color:#4ade80;margin-bottom:20px;\">✅ Session terminée avec succès</h1>\n <p style=\"color:#666;margin-bottom:30px;\">Cette fenêtre va se fermer automatiquement.</p>\n <button onclick=\"attemptClose()\" style=\"background:#3b82f6;color:white;border:none;padding:12px 24px;border-radius:6px;cursor:pointer;font-size:16px;\">\n Fermer maintenant\n </button>\n </div>\n <script>\n function attemptClose() {\n try {\n window.close();\n self.close();\n if (window.opener) {\n window.opener.focus();\n window.close();\n }\n if (window.parent && window.parent !== window) {\n window.parent.postMessage({action:'closeWindow'}, '*');\n }\n } catch(e) {\n console.log('Fermeture impossible:', e);\n document.body.innerHTML = '<div style=\"text-align:center;padding:50px;\"><h2>Veuillez fermer cette fenêtre manuellement</h2><p>Appuyez sur Alt+F4 ou cliquez sur le X</p></div>';\n }\n }\n // Essayer de fermer automatiquement après 1 seconde\n setTimeout(attemptClose, 1000);\n </script>\n </body>\n </html>\n `;\n const dataUrl =\n \"data:text/html;charset=utf-8,\" + encodeURIComponent(closeScript);\n replaceLocation(dataUrl);\n console.log(\"Redirection vers page de fermeture personnalisée\");\n } catch (e) {\n console.log(\"Redirection vers page personnalisée échouée:\", e);\n }\n }, 500);\n };\n\n // Rendu d'un jeu de textes de fin personnalisé (titre ancré en haut,\n // items centrés verticalement, icônes à la couleur du bouton du journey).\n const renderCustomCase = (config: EndScreenCase, fallbackTitle: string) => (\n <div className=\"flex flex-1 flex-col items-center h-full px-4 pt-10 pb-8 md:px-8\">\n <Title className=\"text-2xl md:text-3xl text-center\">\n {config.title?.trim() || fallbackTitle}\n </Title>\n <div className=\"flex flex-1 items-center w-full max-w-md mx-auto\">\n {/* Padding appliqué uniquement sur desktop (md+) ; sur mobile il\n décalait le texte hors écran et le tronquait. */}\n <div\n className={`flex w-full flex-col items-start gap-7 -translate-y-20 ${desktopOffsetX}`}\n >\n {config.items.map((item, index) => {\n const Icon = resolveEndScreenIcon(item.icon);\n return (\n <div\n key={index}\n className=\"flex w-full items-center gap-4 text-left\"\n >\n <Icon\n className=\"w-7 h-7 shrink-0\"\n style={{ color: ICON_COLOR }}\n />\n <span className=\"flex-1 text-base md:text-lg text-[#3C3C40]\">\n {item.text}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n\n const hasCustomError = !!nonCompliantCase?.items?.length;\n const hasCustomSuccess = !!compliantCase?.items?.length;\n\n // En attente du verdict backend : éviter le flash de l'écran succès.\n if (isResolving) {\n return (\n <LoadingState\n message={t(\"session.end.finalizing\", \"Finalisation du parcours...\")}\n subtitle=\"\"\n />\n );\n }\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleEndSession}\n disabled={isEnding || isRedirecting}\n >\n {isRedirecting\n ? t(\"session.end.button_redirecting\", \"Redirection...\")\n : isEnding\n ? t(\"session.end.button_finalizing\", \"Finalisation...\")\n : t(\"session.end.button_end\", \"Terminer\")}\n </Button>\n }\n />\n }\n >\n {isError ? (\n hasCustomError ? (\n renderCustomCase(\n nonCompliantCase as EndScreenCase,\n t(\"session.end.error_title\", \"Les prochaines étapes\"),\n )\n ) : (\n <div className=\"flex flex-1 flex-col items-center h-full px-4 pt-10 pb-8 md:px-8\">\n {/* Titre ancré en haut */}\n <Title className=\"text-2xl md:text-3xl text-center\">\n {t(\"session.end.error_title\", \"Les prochaines étapes\")}\n </Title>\n\n {/* Liste centrée verticalement dans l'espace restant */}\n <div className=\"flex flex-1 items-center w-full max-w-md mx-auto\">\n {/* Translate desktop-only : sur mobile il tronquait le texte. */}\n <div\n className={`flex w-full flex-col items-start gap-7 -translate-y-20 ${desktopTranslateX}`}\n >\n {[\n {\n Icon: HeartHandshake,\n key: \"session.end.error_step_thanks\",\n fallback: \"Nous vous remercions pour ces informations\",\n },\n {\n Icon: Send,\n key: \"session.end.error_step_transmitted\",\n fallback: \"Votre dossier a été transmis à notre équipe\",\n },\n {\n Icon: Mail,\n key: \"session.end.error_step_contact\",\n fallback: \"Nous vous recontacterons si nécessaire\",\n },\n ].map(({ Icon, key, fallback }) => (\n <div\n key={key}\n className=\"flex w-full items-center gap-4 text-left\"\n >\n <Icon\n className=\"w-7 h-7 shrink-0\"\n style={{ color: ICON_COLOR }}\n />\n <span className=\"flex-1 text-base md:text-lg text-[#3C3C40]\">\n {t(key, fallback)}\n </span>\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n ) : hasCustomSuccess ? (\n renderCustomCase(\n compliantCase as EndScreenCase,\n t(\"session.end.title\", \"C'est tout bon !\"),\n )\n ) : (\n <div className=\"flex flex-1 flex-col items-center justify-center h-full px-4 py-8 md:px-8\">\n <div className=\"w-full max-w-md mx-auto text-center space-y-6\">\n {/* Icon - shown on top for both mobile and desktop */}\n <div className=\"flex justify-center\">\n <img\n src={checkIcon}\n alt={t(\"session.end.image_alt\", \"Vérification terminée\")}\n className=\"w-48 h-48\"\n />\n </div>\n\n {/* Text content */}\n <div className=\"space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\"session.end.title\", \"C'est tout bon !\")}\n </Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed\">\n {t(\n \"session.end.subtitle\",\n \"Merci d'avoir terminé ce parcours, vous pouvez quitter cette fenêtre.\",\n )}\n </Subtitle>\n </div>\n </div>\n </div>\n )}\n </MobilePageLayout>\n );\n};\n\nexport default EndFlow;\n"],"names":["useState","useI18n","useIsMobile","useEffect","updateSessionStatus","logSessionEnded","__awaiter","clearSessionSensitiveData","replaceLocation","_jsxs","_jsx","Title","resolveEndScreenIcon","LoadingState","MobilePageLayout","PageActions","Button","HeartHandshake","Send","Mail","checkIcon","Subtitle"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"MobileRedirect.js","sources":["../../../../../src/components/session/MobileRedirect.tsx"],"sourcesContent":["import { getSessionCredential } from '../../services/sessionCredentials';\nimport { useEffect, useState } from \"react\";\nimport useIsMobile from \"../../hooks/useIsMobile\";\nimport QRCodeDisplay from \"../ui/QRCodeDisplay\";\n\ninterface MobileRedirectProps {\n sessionId: string;\n children?: React.ReactNode;\n onBack?: () => void;\n onContinueOnPC?: () => void;\n title?: string;\n subtitle?: string;\n isDesktopAllowed?: boolean;\n}\n\nconst MobileRedirect = ({\n sessionId,\n children,\n onBack,\n onContinueOnPC,\n isDesktopAllowed,\n title,\n subtitle,\n}: MobileRedirectProps) => {\n const isMobile = useIsMobile();\n const [currentUrl, setCurrentUrl] = useState(\"\");\n\n useEffect(() => {\n // Only generate URL if sessionId is available\n if (!sessionId) return;\n\n // Generate the mobile URL with the session ID\n const baseUrl = window.location.origin + window.location.pathname;\n const url = new URL(baseUrl);\n url.searchParams.set(\"sessionId\", sessionId);\n url.searchParams.set(\"mobile\", \"true\");\n const token = getSessionCredential(sessionId);\n if (token) url.hash = new URLSearchParams({ sessionToken: token }).toString();\n const mobileUrl = url.toString();\n\n setCurrentUrl(mobileUrl);\n }, [sessionId]);\n\n // If the user is on mobile, automatically continue to next step\n useEffect(() => {\n if (isMobile) {\n if (onContinueOnPC) {\n onContinueOnPC();\n } else {\n // Even if onContinueOnPC is not defined, we should not show the QR code on mobile\n console.warn(\n \"User is on mobile but onContinueOnPC callback is not provided. Cannot proceed automatically.\"\n );\n }\n }\n }, [isMobile, onContinueOnPC]);\n\n // If the user is on mobile, show the normal session flow (or will redirect automatically)\n if (isMobile) {\n return <>{children || null}</>;\n }\n\n // If the user is on desktop, show the QR code redirect\n return (\n <QRCodeDisplay\n url={currentUrl}\n title={title || \"Continuer sur mobile\"}\n subtitle={subtitle || \"Scannez ce QR code pour continuer la vérification d'identité sur votre smartphone.\"}\n onBack={onBack}\n onContinueOnPC={onContinueOnPC}\n isDesktopAllowed={isDesktopAllowed}\n />\n );\n};\n\nexport default MobileRedirect;\n"],"names":["useIsMobile","useState","useEffect","getSessionCredential","_jsx","_Fragment","QRCodeDisplay"],"mappings":";;;;;;;;;;AAeA,IAAM,cAAc,GAAG,UAAC,EAQF,EAAA;AAPpB,IAAA,IAAA,SAAS,eAAA,EACT,QAAQ,cAAA,EACR,MAAM,YAAA,EACN,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,gBAAgB,GAAA,EAAA,CAAA,gBAAA,EAChB,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA;AAER,IAAA,IAAM,QAAQ,GAAGA,mBAAW,EAAE;IACxB,IAAA,EAAA,GAA8BC,cAAQ,CAAC,EAAE,CAAC,EAAzC,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAAgB;AAEhD,IAAAC,eAAS,CAAC,YAAA;;AAER,QAAA,IAAI,CAAC,SAAS;YAAE;;AAGhB,QAAA,IAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ;AACjE,QAAA,IAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;QAC5B,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC;QAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AACtC,QAAA,IAAM,KAAK,GAAGC,uCAAoB,CAAC,SAAS,CAAC;AAC7C,QAAA,IAAI,KAAK;AAAE,YAAA,GAAG,CAAC,IAAI,GAAG,IAAI,eAAe,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;AAC7E,QAAA,IAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE;QAEhC,aAAa,CAAC,SAAS,CAAC;AAC1B,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;;AAGf,IAAAD,eAAS,CAAC,YAAA;QACR,IAAI,QAAQ,EAAE;YACZ,IAAI,cAAc,EAAE;AAClB,gBAAA,cAAc,EAAE;YAClB;iBAAO;;AAEL,gBAAA,OAAO,CAAC,IAAI,CACV,8FAA8F,CAC/F;YACH;QACF;AACF,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;;IAG9B,IAAI,QAAQ,EAAE;AACZ,QAAA,OAAOE,cAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,IAAI,IAAI,GAAI;IAChC;;AAGA,IAAA,QACED,cAAA,CAACE,qBAAa,EAAA,EACZ,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,KAAK,IAAI,sBAAsB,EACtC,QAAQ,EAAE,QAAQ,IAAI,oFAAoF,EAC1G,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAAA,CAClC;AAEN;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PdfGeneration.js","sources":["../../../../../src/components/session/PdfGeneration.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport LoadingState from \"../states/LoadingState\";\nimport { apiService } from \"../../services/api\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport type { SessionData, stepObject } from \"../../types/session\";\nimport type { UserInput } from \"../../types/userInput\";\n\ninterface PdfGenerationProps {\n node: {\n id: string;\n type: string;\n pageTitle?: string;\n pageDescription?: string;\n };\n session: SessionData;\n sessionId: string;\n stepObject: stepObject;\n userInput: UserInput;\n}\n\nconst PdfGeneration: React.FC<PdfGenerationProps> = ({\n node,\n session,\n sessionId,\n stepObject,\n userInput,\n}) => {\n const { t } = useI18n();\n const [status, setStatus] = useState<\"loading\" | \"ready\" | \"error\">(\n \"loading\",\n );\n const [runId, setRunId] = useState(0);\n const [generationError, setGenerationError] = useState<string | null>(null);\n\n const baseURL = (apiService.getRawClient().defaults.baseURL || \"\").replace(\n /\\/+$/,\n \"\",\n );\n const generatedPdfPath = `/session/sdk/${sessionId}/generated-pdf/${node.id}.pdf`;\n const [generatedPdfUrl, setGeneratedPdfUrl] = useState('');\n const downloadPdfUrl = generatedPdfUrl;\n\n const isDevEnv = /localhost|app\\.dev\\.datakeen\\.co/.test(baseURL);\n\n useEffect(() => {\n let cancelled = false;\n let objectUrl: string | undefined;\n\n const generate = async () => {\n try {\n await apiService.post(\n `/session/sdk/${sessionId}/generate-pdf`,\n {\n nodeId: node.id,\n userInput: {\n ...userInput,\n customFormData: (userInput as any).customFormData ?? {},\n },\n },\n { timeout: 60_000 }, // PDF generation can take up to 60s\n );\n\n if (!cancelled) {\n setGenerationError(null);\n if (!isDevEnv) {\n stepObject.goToNextStep(node.id, session.template);\n } else {\n const response = await apiService.get(generatedPdfPath, { responseType: 'blob' });\n if (cancelled) return;\n objectUrl = URL.createObjectURL(response.data);\n setGeneratedPdfUrl(objectUrl);\n setStatus(\"ready\");\n }\n }\n } catch (error: any) {\n if (!cancelled) {\n setGenerationError(\n error?.message ||\n t(\n \"pdf_generation.error_unknown\",\n \"Erreur inconnue pendant la génération du PDF.\",\n ),\n );\n setStatus(\"error\");\n }\n }\n };\n\n generate();\n\n return () => {\n cancelled = true;\n if (objectUrl) URL.revokeObjectURL(objectUrl);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [runId]);\n\n if (status === \"loading\") {\n return (\n <LoadingState\n message={\n node.pageTitle ||\n t(\"pdf_generation.loading_title\", \"Génération du document\")\n }\n subtitle={\n node.pageDescription ||\n t(\n \"pdf_generation.loading_subtitle\",\n \"Votre document est en cours de préparation...\",\n )\n }\n />\n );\n }\n\n if (status === \"ready\") {\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-6 text-center gap-4\">\n <div className=\"text-green-500 text-4xl\">✅</div>\n <h2 className=\"text-xl font-bold text-gray-900\">\n {t(\"pdf_generation.ready_title\", \"Document généré\")}\n </h2>\n <p className=\"text-gray-600 max-w-md\">\n {t(\n \"pdf_generation.ready_description\",\n \"Vous pouvez prévisualiser ou télécharger le PDF avant de continuer.\",\n )}\n </p>\n <div className=\"flex flex-wrap justify-center gap-3 mt-2\">\n <a\n href={generatedPdfUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"px-4 py-2 border border-gray-300 rounded text-gray-700 hover:bg-gray-50 transition-colors\"\n >\n {t(\"pdf_generation.preview\", \"Aperçu\")}\n </a>\n <a\n href={downloadPdfUrl}\n className=\"px-4 py-2 border border-gray-300 rounded text-gray-700 hover:bg-gray-50 transition-colors\"\n >\n {t(\"pdf_generation.download\", \"Télécharger\")}\n </a>\n <button\n type=\"button\"\n className=\"px-4 py-2 bg-primary text-white rounded hover:opacity-90 transition-opacity\"\n onClick={() => stepObject.goToNextStep(node.id, session.template)}\n >\n {t(\"template.buttons.continue\", \"Continuer\")}\n </button>\n </div>\n </div>\n );\n }\n\n // Error state\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-6 text-center gap-4\">\n <div className=\"text-red-500 text-4xl\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600\">\n {t(\"pdf_generation.error_title\", \"Erreur lors de la génération\")}\n </h2>\n <p className=\"text-gray-600 max-w-sm\">\n {t(\n \"pdf_generation.error_description\",\n \"Une erreur est survenue lors de la génération de votre document. Veuillez réessayer.\",\n )}\n </p>\n {generationError && (\n <p className=\"max-w-md text-xs text-red-500\">{generationError}</p>\n )}\n <div className=\"flex gap-3 mt-2\">\n {stepObject.canGoBack && (\n <button\n type=\"button\"\n className=\"px-4 py-2 border border-gray-300 rounded text-gray-700 hover:bg-gray-50 transition-colors\"\n onClick={() => stepObject.goBack()}\n >\n {t(\"template.buttons.back\", \"Retour\")}\n </button>\n )}\n <button\n type=\"button\"\n className=\"px-4 py-2 bg-primary text-white rounded hover:opacity-90 transition-opacity\"\n onClick={() => {\n setGenerationError(null);\n setStatus(\"loading\");\n setRunId((value) => value + 1);\n }}\n >\n {t(\"pdf_generation.retry\", \"Réessayer\")}\n </button>\n </div>\n </div>\n );\n};\n\nexport default PdfGeneration;\n"],"names":["useI18n","useState","apiService","useEffect","__awaiter","__assign","_jsx","LoadingState","_jsxs"],"mappings":";;;;;;;;;;;AAoBA,IAAM,aAAa,GAAiC,UAAC,EAMpD,EAAA;AALC,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,SAAS,GAAA,EAAA,CAAA,SAAA;AAED,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAAsBC,cAAQ,CAClC,SAAS,CACV,EAFM,MAAM,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,SAAS,GAAA,EAAA,CAAA,CAAA,CAEvB;IACK,IAAA,EAAA,GAAoBA,cAAQ,CAAC,CAAC,CAAC,EAA9B,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAe;IAC/B,IAAA,EAAA,GAAwCA,cAAQ,CAAgB,IAAI,CAAC,EAApE,eAAe,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,kBAAkB,GAAA,EAAA,CAAA,CAAA,CAAiC;IAE3E,IAAM,OAAO,GAAG,CAACC,cAAU,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CACxE,MAAM,EACN,EAAE,CACH;IACD,IAAM,gBAAgB,GAAG,eAAA,CAAA,MAAA,CAAgB,SAAS,4BAAkB,IAAI,CAAC,EAAE,EAAA,MAAA,CAAM;IAC3E,IAAA,EAAA,GAAwCD,cAAQ,CAAC,EAAE,CAAC,EAAnD,eAAe,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,kBAAkB,GAAA,EAAA,CAAA,CAAA,CAAgB;IAC1D,IAAM,cAAc,GAAG,eAAe;IAEtC,IAAM,QAAQ,GAAG,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC;AAEjE,IAAAE,eAAS,CAAC,YAAA;QACR,IAAI,SAAS,GAAG,KAAK;AACrB,QAAA,IAAI,SAA6B;AAEjC,QAAA,IAAM,QAAQ,GAAG,YAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;;;AAEb,wBAAA,OAAA,CAAA,CAAA,YAAMF,cAAU,CAAC,IAAI,CACnB,eAAA,CAAA,MAAA,CAAgB,SAAS,kBAAe,EACxC;gCACE,MAAM,EAAE,IAAI,CAAC,EAAE;gCACf,SAAS,EAAAG,kBAAA,CAAAA,kBAAA,CAAA,EAAA,EACJ,SAAS,CAAA,EAAA,EACZ,cAAc,EAAE,CAAA,EAAA,GAAC,SAAiB,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,EAAA,CACxD;AACF,6BAAA,EACD,EAAE,OAAO,EAAE,KAAM,EAAE,CACpB,CAAA;;AAVD,wBAAA,EAAA,CAAA,IAAA,EAUC;6BAEG,CAAC,SAAS,EAAV,OAAA,CAAA,CAAA,YAAA,CAAA,CAAA;wBACF,kBAAkB,CAAC,IAAI,CAAC;6BACpB,CAAC,QAAQ,EAAT,OAAA,CAAA,CAAA,YAAA,CAAA,CAAA;wBACF,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;;AAEjC,oBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,YAAMH,cAAU,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAA;;AAA3E,wBAAA,QAAQ,GAAG,EAAA,CAAA,IAAA,EAAgE;AACjF,wBAAA,IAAI,SAAS;4BAAE,OAAA,CAAA,CAAA,YAAA;wBACf,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;wBAC9C,kBAAkB,CAAC,SAAS,CAAC;wBAC7B,SAAS,CAAC,OAAO,CAAC;;;;;wBAItB,IAAI,CAAC,SAAS,EAAE;4BACd,kBAAkB,CAChB,CAAA,OAAK,KAAA,IAAA,IAAL,OAAK,KAAA,MAAA,GAAA,MAAA,GAAL,OAAK,CAAE,OAAO;AACZ,gCAAA,CAAC,CACC,8BAA8B,EAC9B,+CAA+C,CAChD,CACJ;4BACD,SAAS,CAAC,OAAO,CAAC;wBACpB;;;;;aAEH;AAED,QAAA,QAAQ,EAAE;QAEV,OAAO,YAAA;YACL,SAAS,GAAG,IAAI;AAChB,YAAA,IAAI,SAAS;AAAE,gBAAA,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;AAC/C,QAAA,CAAC;;AAEH,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,QACEI,eAACC,oBAAY,EAAA,EACX,OAAO,EACL,IAAI,CAAC,SAAS;gBACd,CAAC,CAAC,8BAA8B,EAAE,wBAAwB,CAAC,EAE7D,QAAQ,EACN,IAAI,CAAC,eAAe;AACpB,gBAAA,CAAC,CACC,iCAAiC,EACjC,+CAA+C,CAChD,EAAA,CAEH;IAEN;AAEA,IAAA,IAAI,MAAM,KAAK,OAAO,EAAE;QACtB,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wEAAwE,EAAA,QAAA,EAAA,CACrFF,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAAA,QAAA,EAAA,CAAQ,EAChDA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC5C,CAAC,CAAC,4BAA4B,EAAE,iBAAiB,CAAC,EAAA,CAChD,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,wBAAwB,EAAA,QAAA,EAClC,CAAC,CACA,kCAAkC,EAClC,qEAAqE,CACtE,EAAA,CACC,EACJE,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0CAA0C,EAAA,QAAA,EAAA,CACvDF,cAAA,CAAA,GAAA,EAAA,EACE,IAAI,EAAE,eAAe,EACrB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,2FAA2F,EAAA,QAAA,EAEpG,CAAC,CAAC,wBAAwB,EAAE,QAAQ,CAAC,EAAA,CACpC,EACJA,cAAA,CAAA,GAAA,EAAA,EACE,IAAI,EAAE,cAAc,EACpB,SAAS,EAAC,2FAA2F,EAAA,QAAA,EAEpG,CAAC,CAAC,yBAAyB,EAAE,aAAa,CAAC,EAAA,CAC1C,EACJA,cAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6EAA6E,EACvF,OAAO,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA,CAAlD,CAAkD,EAAA,QAAA,EAEhE,CAAC,CAAC,2BAA2B,EAAE,WAAW,CAAC,EAAA,CACrC,CAAA,EAAA,CACL,CAAA,EAAA,CACF;IAEV;;IAGA,QACEE,yBAAK,SAAS,EAAC,wEAAwE,EAAA,QAAA,EAAA,CACrFF,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,6BAAS,EAC/CA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,gCAAgC,YAC3C,CAAC,CAAC,4BAA4B,EAAE,8BAA8B,CAAC,GAC7D,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,wBAAwB,YAClC,CAAC,CACA,kCAAkC,EAClC,sFAAsF,CACvF,GACC,EACH,eAAe,KACdA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAAE,eAAe,EAAA,CAAK,CACnE,EACDE,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC7B,UAAU,CAAC,SAAS,KACnBF,cAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,2FAA2F,EACrG,OAAO,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,MAAM,EAAE,CAAA,CAAnB,CAAmB,EAAA,QAAA,EAEjC,CAAC,CAAC,uBAAuB,EAAE,QAAQ,CAAC,EAAA,CAC9B,CACV,EACDA,cAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6EAA6E,EACvF,OAAO,EAAE,YAAA;4BACP,kBAAkB,CAAC,IAAI,CAAC;4BACxB,SAAS,CAAC,SAAS,CAAC;4BACpB,QAAQ,CAAC,UAAC,KAAK,EAAA,EAAK,OAAA,KAAK,GAAG,CAAC,CAAA,CAAT,CAAS,CAAC;wBAChC,CAAC,EAAA,QAAA,EAEA,CAAC,CAAC,sBAAsB,EAAE,WAAW,CAAC,EAAA,CAChC,CAAA,EAAA,CACL,CAAA,EAAA,CACF;AAEV;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Selfie.js","sources":["../../../../../src/components/session/Selfie.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport {\n SessionTemplate,\n SessionTemplateNode,\n stepObject,\n} from \"../../types/session\";\nimport Video from \"../selfie/Video\";\nimport SelfieConfirmation from \"../selfie/SelfieConfirmation\";\nimport type { SelfieCaptureData } from \"../../types/selfie\";\nimport SelfieProcessing from \"../selfie/selfie-flow/SelfieProcessing\";\nimport { reportSelfieFailure } from \"../../services/sessionService\";\n\n/**\n * Composant de gestion du flux selfie.\n * Gère les étapes internes de capture et confirmation du selfie.\n */\nconst Selfie = ({\n stepObject,\n sessionId,\n node,\n template,\n}: {\n stepObject: stepObject;\n sessionId: string;\n node: SessionTemplateNode;\n template: SessionTemplate;\n}) => {\n const [internalStep, setInternalStep] = useState(0);\n const [selfieData, setSelfieData] = useState<SelfieCaptureData | null>(null);\n const [selfiePhoto, setSelfiePhoto] = useState<string | null>(null);\n const [isTransitioning, setIsTransitioning] = useState(false);\n\n const handleConfirmSelfie = () => {\n // Ajouter une transition visuelle avant de passer à l'étape suivante\n setIsTransitioning(true);\n\n // Attendre un peu pour l'animation avant de passer à l'étape suivante\n setTimeout(() => {\n setInternalStep(2); // Passer à l'étape de traitement du selfie\n setIsTransitioning(false);\n }, 500);\n };\n\n const selfieProcessed = (processed: boolean) => {\n // Callback pour indiquer que le selfie a été traité\n if (processed) {\n stepObject.goToNextStepCommitted(node.id, template);\n }\n };\n\n const handleContinueAnyway = () => {\n void reportSelfieFailure(sessionId, {\n nodeId: node.id,\n reason: \"user_bypassed\",\n bypassed: true,\n }).catch(() => undefined);\n stepObject.goToNextStepCommitted(node.id, template);\n };\n\n const onRetake = () => {\n setInternalStep(0);\n };\n\n const handleRetakeSelfie = () => {\n setInternalStep(0);\n };\n\n return (\n <div\n className={`h-full w-full transition-opacity duration-500 ${isTransitioning ? \"opacity-50\" : \"opacity-100\"\n }`}\n >\n {internalStep === 0 && (\n <Video\n setSelfieData={setSelfieData}\n setStep={setInternalStep}\n btnBg={template.buttonBgColor ?? \"#11E5C5\"}\n btnText={template.buttonTextColor ?? \"#3C3C40\"}\n />\n )}\n {internalStep === 1 && selfieData && (\n <SelfieConfirmation\n selfieData={selfieData}\n onConfirm={handleConfirmSelfie}\n onRetake={handleRetakeSelfie}\n setSelfiePhoto={setSelfiePhoto}\n />\n )}\n {internalStep === 2 && selfieData && (\n <SelfieProcessing\n onProcessingComplete={selfieProcessed}\n selfieVideo={selfieData}\n selfiePhoto={selfiePhoto}\n onRetake={onRetake}\n nodeId={node.id}\n onContinueAnyway={\n node.allowContinueOnFailure === false\n ? undefined\n : handleContinueAnyway\n }\n />\n )}\n </div>\n );\n};\n\nexport default Selfie;\n"],"names":["useState","reportSelfieFailure","_jsxs","_jsx","Video","SelfieConfirmation","SelfieProcessing"],"mappings":";;;;;;;;;;;AAYA;;;AAGG;AACH,IAAM,MAAM,GAAG,UAAC,EAUf,EAAA;;QATC,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,QAAQ,GAAA,EAAA,CAAA,QAAA;IAOF,IAAA,EAAA,GAAkCA,cAAQ,CAAC,CAAC,CAAC,EAA5C,YAAY,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,eAAe,GAAA,EAAA,CAAA,CAAA,CAAe;IAC7C,IAAA,EAAA,GAA8BA,cAAQ,CAA2B,IAAI,CAAC,EAArE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAA4C;IACtE,IAAA,EAAA,GAAgCA,cAAQ,CAAgB,IAAI,CAAC,EAA5D,WAAW,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,cAAc,GAAA,EAAA,CAAA,CAAA,CAAiC;IAC7D,IAAA,EAAA,GAAwCA,cAAQ,CAAC,KAAK,CAAC,EAAtD,eAAe,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,kBAAkB,GAAA,EAAA,CAAA,CAAA,CAAmB;AAE7D,IAAA,IAAM,mBAAmB,GAAG,YAAA;;QAE1B,kBAAkB,CAAC,IAAI,CAAC;;AAGxB,QAAA,UAAU,CAAC,YAAA;AACT,YAAA,eAAe,CAAC,CAAC,CAAC,CAAC;YACnB,kBAAkB,CAAC,KAAK,CAAC;QAC3B,CAAC,EAAE,GAAG,CAAC;AACT,IAAA,CAAC;IAED,IAAM,eAAe,GAAG,UAAC,SAAkB,EAAA;;QAEzC,IAAI,SAAS,EAAE;YACb,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;QACrD;AACF,IAAA,CAAC;AAED,IAAA,IAAM,oBAAoB,GAAG,YAAA;QAC3B,KAAKC,kCAAmB,CAAC,SAAS,EAAE;YAClC,MAAM,EAAE,IAAI,CAAC,EAAE;AACf,YAAA,MAAM,EAAE,eAAe;AACvB,YAAA,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC,KAAK,CAAC,YAAA,EAAM,OAAA,SAAS,CAAA,CAAT,CAAS,CAAC;QACzB,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;AACrD,IAAA,CAAC;AAED,IAAA,IAAM,QAAQ,GAAG,YAAA;QACf,eAAe,CAAC,CAAC,CAAC;AACpB,IAAA,CAAC;AAED,IAAA,IAAM,kBAAkB,GAAG,YAAA;QACzB,eAAe,CAAC,CAAC,CAAC;AACpB,IAAA,CAAC;IAED,QACEC,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,gDAAA,CAAA,MAAA,CAAiD,eAAe,GAAG,YAAY,GAAG,aAAa,CACtG,EAAA,QAAA,EAAA,CAEH,YAAY,KAAK,CAAC,KACjBC,cAAA,CAACC,aAAK,EAAA,EACJ,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,CAAA,EAAA,GAAA,QAAQ,CAAC,aAAa,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,SAAS,EAC1C,OAAO,EAAE,CAAA,EAAA,GAAA,QAAQ,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,SAAS,EAAA,CAC9C,CACH,EACA,YAAY,KAAK,CAAC,IAAI,UAAU,KAC/BD,eAACE,0BAAkB,EAAA,EACjB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,mBAAmB,EAC9B,QAAQ,EAAE,kBAAkB,EAC5B,cAAc,EAAE,cAAc,EAAA,CAC9B,CACH,EACA,YAAY,KAAK,CAAC,IAAI,UAAU,KAC/BF,cAAA,CAACG,wBAAgB,IACf,oBAAoB,EAAE,eAAe,EACrC,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,IAAI,CAAC,EAAE,EACf,gBAAgB,EACd,IAAI,CAAC,sBAAsB,KAAK;AAC9B,sBAAE;AACF,sBAAE,oBAAoB,EAAA,CAE1B,CACH,CAAA,EAAA,CACG;AAEV;;;;"}