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

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 (69) hide show
  1. package/dist/cjs/components/session/StartSession.js +4 -29
  2. package/dist/cjs/components/session/StartSession.js.map +1 -1
  3. package/dist/cjs/components/start-flow/Start.js +6 -6
  4. package/dist/cjs/components/start-flow/Start.js.map +1 -1
  5. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js +36 -0
  6. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js.map +1 -0
  7. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +17 -7
  8. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  9. package/dist/cjs/components/template/TemplateNodeRenderer.js +3 -0
  10. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
  11. package/dist/cjs/hooks/useSessionData.js +10 -5
  12. package/dist/cjs/hooks/useSessionData.js.map +1 -1
  13. package/dist/cjs/hooks/useStepNavigation.js +1 -1
  14. package/dist/cjs/hooks/useStepNavigation.js.map +1 -1
  15. package/dist/cjs/hooks/useUserInputForm.js +27 -6
  16. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  17. package/dist/cjs/i18n/en.json.js +24 -26
  18. package/dist/cjs/i18n/en.json.js.map +1 -1
  19. package/dist/cjs/i18n/es.json.js +24 -26
  20. package/dist/cjs/i18n/es.json.js.map +1 -1
  21. package/dist/cjs/i18n/fr.json.js +24 -26
  22. package/dist/cjs/i18n/fr.json.js.map +1 -1
  23. package/dist/cjs/services/sessionService.js +33 -6
  24. package/dist/cjs/services/sessionService.js.map +1 -1
  25. package/dist/cjs/types/session.js.map +1 -1
  26. package/dist/cjs/utils/customFieldValidation.js +44 -1
  27. package/dist/cjs/utils/customFieldValidation.js.map +1 -1
  28. package/dist/esm/components/session/StartSession.js +5 -30
  29. package/dist/esm/components/session/StartSession.js.map +1 -1
  30. package/dist/esm/components/start-flow/Start.js +6 -6
  31. package/dist/esm/components/start-flow/Start.js.map +1 -1
  32. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js +32 -0
  33. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js.map +1 -0
  34. package/dist/esm/components/template/ExternalVerificationNodeHandler.js +17 -7
  35. package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  36. package/dist/esm/components/template/TemplateNodeRenderer.js +3 -0
  37. package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
  38. package/dist/esm/hooks/useSessionData.js +10 -5
  39. package/dist/esm/hooks/useSessionData.js.map +1 -1
  40. package/dist/esm/hooks/useStepNavigation.js +1 -1
  41. package/dist/esm/hooks/useStepNavigation.js.map +1 -1
  42. package/dist/esm/hooks/useUserInputForm.js +28 -7
  43. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  44. package/dist/esm/i18n/en.json.js +24 -26
  45. package/dist/esm/i18n/en.json.js.map +1 -1
  46. package/dist/esm/i18n/es.json.js +24 -26
  47. package/dist/esm/i18n/es.json.js.map +1 -1
  48. package/dist/esm/i18n/fr.json.js +24 -26
  49. package/dist/esm/i18n/fr.json.js.map +1 -1
  50. package/dist/esm/services/sessionService.js +33 -7
  51. package/dist/esm/services/sessionService.js.map +1 -1
  52. package/dist/esm/types/session.js.map +1 -1
  53. package/dist/esm/utils/customFieldValidation.js +44 -2
  54. package/dist/esm/utils/customFieldValidation.js.map +1 -1
  55. package/docs/COMPLEMENTARY_MANDATE.md +22 -0
  56. package/docs/JOURNEY_NODE_BUILDER.md +15 -0
  57. package/package.json +1 -1
  58. package/dist/cjs/components/start-flow/CGU.js +0 -132
  59. package/dist/cjs/components/start-flow/CGU.js.map +0 -1
  60. package/dist/cjs/components/ui/LanguageSelector.js +0 -46
  61. package/dist/cjs/components/ui/LanguageSelector.js.map +0 -1
  62. package/dist/cjs/utils/languageFlags.js +0 -46
  63. package/dist/cjs/utils/languageFlags.js.map +0 -1
  64. package/dist/esm/components/start-flow/CGU.js +0 -108
  65. package/dist/esm/components/start-flow/CGU.js.map +0 -1
  66. package/dist/esm/components/ui/LanguageSelector.js +0 -42
  67. package/dist/esm/components/ui/LanguageSelector.js.map +0 -1
  68. package/dist/esm/utils/languageFlags.js +0 -42
  69. package/dist/esm/utils/languageFlags.js.map +0 -1
@@ -3,41 +3,16 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var jsxRuntime = require('react/jsx-runtime');
6
- var React = require('react');
7
6
  var Start = require('../start-flow/Start.js');
8
- var CGU = require('../start-flow/CGU.js');
9
7
 
8
+ // Le consentement est porté par le nœud `legal-consent` du parcours : l'accueil
9
+ // enchaîne directement sur le QR code (si configuré) ou le premier nœud.
10
10
  var StartSession = function (_a) {
11
- var _b, _c, _d, _e, _f;
11
+ var _b, _c;
12
12
  var stepObject = _a.stepObject, session = _a.session, showQRCodeInstructions = _a.showQRCodeInstructions;
13
13
  var setStep = stepObject.setStep;
14
- var _g = React.useState(0), startStep = _g[0], setStartStep = _g[1];
15
- // Find the start node from template
16
14
  var startNode = (_c = (_b = session === null || session === void 0 ? void 0 : session.template) === null || _b === void 0 ? void 0 : _b.nodes) === null || _c === void 0 ? void 0 : _c.find(function (node) { return node.type === "start"; });
17
- // Un nœud `legal-consent` porte lui-même le consentement : afficher en plus
18
- // les CGU de la page d'accueil ferait consentir deux fois pour la même chose.
19
- //
20
- // Le drapeau `showLegacyCGU` n'existe que pour les parcours antérieurs à ce
21
- // nœud. Il était posé à `false` par une migration au démarrage, retirée
22
- // depuis (« remove legacy legal consent migration from bootstrap process ») :
23
- // un parcours créé ou restauré après ce retrait garde donc le défaut `true`
24
- // et réaffiche les CGU malgré son nœud de consentement. On déduit le cas du
25
- // graphe plutôt que du drapeau, ce qui couvre aussi les parcours existants
26
- // sans toucher aux données.
27
- var hasLegalConsentNode = ((_e = (_d = session === null || session === void 0 ? void 0 : session.template) === null || _d === void 0 ? void 0 : _d.nodes) === null || _e === void 0 ? void 0 : _e.some(function (node) { return node.type === "legal-consent"; })) === true;
28
- var showLegacyCGU = !hasLegalConsentNode &&
29
- (startNode === null || startNode === void 0 ? void 0 : startNode.showLegacyCGU) !== false;
30
- // If CGU is disabled, clicking "Start" skips CGU.
31
- // Still honour showQRCodeInstructions so the QR code step is not bypassed.
32
- var handleStartButtonClick = function (localStep) {
33
- if (!showLegacyCGU) {
34
- setStep(showQRCodeInstructions ? 0.5 : 1);
35
- }
36
- else {
37
- setStartStep(localStep);
38
- }
39
- };
40
- return (jsxRuntime.jsxs("div", { className: "w-full h-full", children: [startStep === 0 && (jsxRuntime.jsx(Start.default, { setStep: handleStartButtonClick, welcomeTitle: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeTitle, welcomeSubtitle: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeSubtitle, welcomeDescription: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeDescription, welcomeImage: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeImage, session: session !== null && session !== void 0 ? session : undefined })), startStep === 1 && showLegacyCGU && (jsxRuntime.jsx(CGU.default, { setStep: setStep, session: session !== null && session !== void 0 ? session : undefined, sessionId: session === null || session === void 0 ? void 0 : session.id, showQRCodeInstructions: showQRCodeInstructions, languages: (_f = session === null || session === void 0 ? void 0 : session.template) === null || _f === void 0 ? void 0 : _f.languages, onBack: function () { return setStartStep(0); } }))] }));
15
+ return (jsxRuntime.jsx("div", { className: "w-full h-full", children: jsxRuntime.jsx(Start.default, { setStep: function () { return setStep(showQRCodeInstructions ? 0.5 : 1); }, welcomeTitle: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeTitle, welcomeSubtitle: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeSubtitle, welcomeDescription: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeDescription, welcomeImage: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeImage, session: session !== null && session !== void 0 ? session : undefined }) }));
41
16
  };
42
17
 
43
18
  exports.default = StartSession;
@@ -1 +1 @@
1
- {"version":3,"file":"StartSession.js","sources":["../../../../../src/components/session/StartSession.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type { stepObject } from \"../../types/session\";\nimport { type SessionData } from \"../../types/session\";\nimport Start from \"../start-flow/Start\";\nimport CGU from \"../start-flow/CGU\";\n\ninterface StartSessionProps {\n stepObject: stepObject;\n session: SessionData | null;\n showQRCodeInstructions: boolean;\n}\n\nconst StartSession = ({ stepObject, session, showQRCodeInstructions }: StartSessionProps) => {\n const { setStep } = stepObject;\n const [startStep, setStartStep] = useState(0);\n\n // Find the start node from template\n const startNode = (session as SessionData | null)?.template?.nodes?.find(\n (node) => node.type === \"start\"\n );\n\n // Un nœud `legal-consent` porte lui-même le consentement : afficher en plus\n // les CGU de la page d'accueil ferait consentir deux fois pour la même chose.\n //\n // Le drapeau `showLegacyCGU` n'existe que pour les parcours antérieurs à ce\n // nœud. Il était posé à `false` par une migration au démarrage, retirée\n // depuis (« remove legacy legal consent migration from bootstrap process ») :\n // un parcours créé ou restauré après ce retrait garde donc le défaut `true`\n // et réaffiche les CGU malgré son nœud de consentement. On déduit le cas du\n // graphe plutôt que du drapeau, ce qui couvre aussi les parcours existants\n // sans toucher aux données.\n const hasLegalConsentNode =\n (session as SessionData | null)?.template?.nodes?.some(\n (node) => node.type === \"legal-consent\",\n ) === true;\n\n const showLegacyCGU =\n !hasLegalConsentNode &&\n (startNode as { showLegacyCGU?: boolean } | undefined)?.showLegacyCGU !== false;\n\n // If CGU is disabled, clicking \"Start\" skips CGU.\n // Still honour showQRCodeInstructions so the QR code step is not bypassed.\n const handleStartButtonClick = (localStep: number) => {\n if (!showLegacyCGU) {\n setStep(showQRCodeInstructions ? 0.5 : 1);\n } else {\n setStartStep(localStep);\n }\n };\n\n return (\n <div className=\"w-full h-full\">\n {startStep === 0 && (\n <Start\n setStep={handleStartButtonClick}\n welcomeTitle={startNode?.welcomeTitle}\n welcomeSubtitle={startNode?.welcomeSubtitle}\n welcomeDescription={startNode?.welcomeDescription}\n welcomeImage={startNode?.welcomeImage}\n session={session ?? undefined}\n />\n )}\n {startStep === 1 && showLegacyCGU && (\n <CGU\n setStep={setStep}\n session={session ?? undefined}\n sessionId={session?.id}\n showQRCodeInstructions={showQRCodeInstructions}\n languages={session?.template?.languages}\n onBack={() => setStartStep(0)}\n />\n )}\n </div>\n );\n};\n\nexport default StartSession;\n"],"names":["useState","_jsxs","_jsx","Start","CGU"],"mappings":";;;;;;;;;AAYA,IAAM,YAAY,GAAG,UAAC,EAAkE,EAAA;;AAAhE,IAAA,IAAA,UAAU,gBAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,sBAAsB,GAAA,EAAA,CAAA,sBAAA;AACzD,IAAA,IAAA,OAAO,GAAK,UAAU,CAAA,OAAf;IACT,IAAA,EAAA,GAA4BA,cAAQ,CAAC,CAAC,CAAC,EAAtC,SAAS,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,YAAY,GAAA,EAAA,CAAA,CAAA,CAAe;;AAG7C,IAAA,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,OAA8B,KAAA,IAAA,IAA9B,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAyB,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CACtE,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,IAAI,KAAK,OAAO,CAAA,CAArB,CAAqB,CAChC;;;;;;;;;;;AAYD,IAAA,IAAM,mBAAmB,GACvB,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAC,OAA8B,KAAA,IAAA,IAA9B,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAyB,QAAQ,0CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CACpD,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,IAAI,KAAK,eAAe,CAAA,CAA7B,CAA6B,CACxC,MAAK,IAAI;IAEZ,IAAM,aAAa,GACjB,CAAC,mBAAmB;QACpB,CAAC,SAAqD,aAArD,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAA8C,aAAa,MAAK,KAAK;;;IAIjF,IAAM,sBAAsB,GAAG,UAAC,SAAiB,EAAA;QAC/C,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,CAAC,sBAAsB,GAAG,GAAG,GAAG,CAAC,CAAC;QAC3C;aAAO;YACL,YAAY,CAAC,SAAS,CAAC;QACzB;AACF,IAAA,CAAC;AAED,IAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAAA,CAC3B,SAAS,KAAK,CAAC,KACdC,cAAA,CAACC,aAAK,EAAA,EACJ,OAAO,EAAE,sBAAsB,EAC/B,YAAY,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,YAAY,EACrC,eAAe,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,eAAe,EAC3C,kBAAkB,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,kBAAkB,EACjD,YAAY,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,YAAY,EACrC,OAAO,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,SAAS,EAAA,CAC7B,CACH,EACA,SAAS,KAAK,CAAC,IAAI,aAAa,KAC/BD,cAAA,CAACE,WAAG,EAAA,EACF,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAP,OAAO,GAAI,SAAS,EAC7B,SAAS,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,EACtB,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,EACvC,MAAM,EAAE,YAAA,EAAM,OAAA,YAAY,CAAC,CAAC,CAAC,CAAA,CAAf,CAAe,EAAA,CAC7B,CACH,CAAA,EAAA,CACG;AAEV;;;;"}
1
+ {"version":3,"file":"StartSession.js","sources":["../../../../../src/components/session/StartSession.tsx"],"sourcesContent":["import type { stepObject } from \"../../types/session\";\nimport { type SessionData } from \"../../types/session\";\nimport Start from \"../start-flow/Start\";\n\ninterface StartSessionProps {\n stepObject: stepObject;\n session: SessionData | null;\n showQRCodeInstructions: boolean;\n}\n\n// Le consentement est porté par le nœud `legal-consent` du parcours : l'accueil\n// enchaîne directement sur le QR code (si configuré) ou le premier nœud.\nconst StartSession = ({ stepObject, session, showQRCodeInstructions }: StartSessionProps) => {\n const { setStep } = stepObject;\n\n const startNode = session?.template?.nodes?.find((node) => node.type === \"start\");\n\n return (\n <div className=\"w-full h-full\">\n <Start\n setStep={() => setStep(showQRCodeInstructions ? 0.5 : 1)}\n welcomeTitle={startNode?.welcomeTitle}\n welcomeSubtitle={startNode?.welcomeSubtitle}\n welcomeDescription={startNode?.welcomeDescription}\n welcomeImage={startNode?.welcomeImage}\n session={session ?? undefined}\n />\n </div>\n );\n};\n\nexport default StartSession;\n"],"names":["_jsx","Start"],"mappings":";;;;;;;AAUA;AACA;AACA,IAAM,YAAY,GAAG,UAAC,EAAkE,EAAA;;AAAhE,IAAA,IAAA,UAAU,gBAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,sBAAsB,GAAA,EAAA,CAAA,sBAAA;AACzD,IAAA,IAAA,OAAO,GAAK,UAAU,CAAA,OAAf;AAEf,IAAA,IAAM,SAAS,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,IAAI,KAAK,OAAO,CAAA,CAArB,CAAqB,CAAC;AAEjF,IAAA,QACEA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,YAC5BA,cAAA,CAACC,aAAK,EAAA,EACJ,OAAO,EAAE,YAAA,EAAM,OAAA,OAAO,CAAC,sBAAsB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA,CAAzC,CAAyC,EACxD,YAAY,EAAE,SAAS,aAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,YAAY,EACrC,eAAe,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,eAAe,EAC3C,kBAAkB,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,kBAAkB,EACjD,YAAY,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,EACrC,OAAO,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,cAAP,OAAO,GAAI,SAAS,EAAA,CAC7B,EAAA,CACE;AAEV;;;;"}
@@ -13,6 +13,7 @@ require('../../utils/cssLoader.js');
13
13
  require('../../context/DocumentContext.js');
14
14
  require('../../services/api.js');
15
15
  require('../../config/env.js');
16
+ require('axios');
16
17
  require('../../services/auditTrailService.js');
17
18
  require('ua-parser-js');
18
19
  var StartIcon = require('../icons/StartIcon.js');
@@ -20,10 +21,6 @@ var PageActions = require('../ui/PageActions.js');
20
21
  var Subtitle = require('../ui/Subtitle.js');
21
22
  var Title = require('../ui/Title.js');
22
23
  var MobilePageLayout = require('../ui/MobilePageLayout.js');
23
- require('@radix-ui/react-checkbox');
24
- require('@radix-ui/react-label');
25
- require('@radix-ui/react-icons');
26
- require('react-circle-flags');
27
24
  require('qrcode');
28
25
  require('lucide-react');
29
26
  require('../../assets/check.svg.js');
@@ -44,12 +41,15 @@ require('../../services/documentEdgeDetectionService.js');
44
41
  require('../document-video/document-video-flow/DocumentVideoFlow.js');
45
42
  require('../document-collection/DocumentProcessing.js');
46
43
  require('../../constants/userInputForm.js');
44
+ require('@radix-ui/react-label');
47
45
  require('date-fns');
48
46
  require('react-day-picker');
49
47
  require('@radix-ui/react-popover');
50
48
  require('react-i18next');
51
49
  require('../../i18n/index.js');
52
50
  require('@docuseal/react');
51
+ require('@radix-ui/react-checkbox');
52
+ require('@radix-ui/react-icons');
53
53
  require('../../services/professionalImageQuality.js');
54
54
  require('../../providers/I18nProvider.js');
55
55
 
@@ -60,10 +60,10 @@ var Start = function (_a) {
60
60
  var displaySubtitle = welcomeSubtitle ||
61
61
  t("start.welcome_subtitle", "Nous devons vérifier votre identité");
62
62
  var displayDescription = welcomeDescription || t("start.welcome_description");
63
- var goOnCGU = function () {
63
+ var goOnNextStep = function () {
64
64
  setStep(1);
65
65
  };
66
- return (jsxRuntime.jsx(MobilePageLayout.default, { footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: goOnCGU, children: t("start_verification") }) }), session: session, children: jsxRuntime.jsx("div", { className: "flex flex-col items-center px-4 py-8 md:px-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto text-center space-y-6 flex flex-col", children: [jsxRuntime.jsx("div", { className: "flex justify-center", children: welcomeImage ? (jsxRuntime.jsx("img", { src: welcomeImage, alt: "Welcome image", className: "max-w-48 w-auto h-auto rounded-lg" })) : (jsxRuntime.jsx(StartIcon.default, { className: "w-48 h-48" })) }), jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: displayTitle }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line", children: displaySubtitle })] }), jsxRuntime.jsx("div", { className: "md:block mt-8", children: jsxRuntime.jsx("p", { className: "text-xs text-gray-500 leading-relaxed max-w-sm mx-auto whitespace-pre-line", children: displayDescription }) })] }) }) }));
66
+ return (jsxRuntime.jsx(MobilePageLayout.default, { footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: goOnNextStep, children: t("start_verification") }) }), session: session, children: jsxRuntime.jsx("div", { className: "flex flex-col items-center px-4 py-8 md:px-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto text-center space-y-6 flex flex-col", children: [jsxRuntime.jsx("div", { className: "flex justify-center", children: welcomeImage ? (jsxRuntime.jsx("img", { src: welcomeImage, alt: "Welcome image", className: "max-w-48 w-auto h-auto rounded-lg" })) : (jsxRuntime.jsx(StartIcon.default, { className: "w-48 h-48" })) }), jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: displayTitle }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line", children: displaySubtitle })] }), jsxRuntime.jsx("div", { className: "md:block mt-8", children: jsxRuntime.jsx("p", { className: "text-xs text-gray-500 leading-relaxed max-w-sm mx-auto whitespace-pre-line", children: displayDescription }) })] }) }) }));
67
67
  };
68
68
 
69
69
  exports.default = Start;
@@ -1 +1 @@
1
- {"version":3,"file":"Start.js","sources":["../../../../../src/components/start-flow/Start.tsx"],"sourcesContent":["import { useI18n } from \"../..\";\nimport { SessionData } from \"../../types/session\";\nimport StartIcon from \"../icons/StartIcon\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Title from \"../ui/Title\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface StartProps {\n setStep: (nubr: number) => void;\n welcomeTitle?: string;\n welcomeSubtitle?: string;\n welcomeDescription?: string;\n welcomeImage?: string;\n session?: SessionData;\n}\n\nconst Start = ({\n setStep,\n welcomeTitle,\n welcomeSubtitle,\n welcomeDescription,\n welcomeImage,\n session,\n}: StartProps) => {\n const { t } = useI18n();\n\n const displayTitle =\n welcomeTitle || t(\"start.welcome_title\", \"Vérifions votre identité\");\n const displaySubtitle =\n welcomeSubtitle ||\n t(\"start.welcome_subtitle\", \"Nous devons vérifier votre identité\");\n const displayDescription =\n welcomeDescription || t(\"start.welcome_description\");\n\n const goOnCGU = () => {\n setStep(1);\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={goOnCGU}>{t(\"start_verification\")}</Button>\n }\n />\n }\n session={session}\n >\n <div className=\"flex flex-col items-center px-4 py-8 md:px-8\">\n <div className=\"w-full max-w-md mx-auto text-center space-y-6 flex flex-col\">\n {/* Icon/Image - shown on top for both mobile and desktop */}\n <div className=\"flex justify-center\">\n {welcomeImage ? (\n <img\n src={welcomeImage}\n alt=\"Welcome image\"\n className=\"max-w-48 w-auto h-auto rounded-lg\"\n />\n ) : (\n <StartIcon 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 {displayTitle}\n </Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {displaySubtitle}\n </Subtitle>\n </div>\n\n {/* Terms notice */}\n <div className=\"md:block mt-8\">\n <p className=\"text-xs text-gray-500 leading-relaxed max-w-sm mx-auto whitespace-pre-line\">\n {displayDescription}\n </p>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default Start;\n"],"names":["useI18n","_jsx","MobilePageLayout","PageActions","Button","_jsxs","StartIcon","Title","Subtitle"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,IAAM,KAAK,GAAG,UAAC,EAOF,EAAA;AANX,IAAA,IAAA,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,kBAAkB,wBAAA,EAClB,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,OAAO,GAAA,EAAA,CAAA,OAAA;AAEC,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IAET,IAAM,YAAY,GAChB,YAAY,IAAI,CAAC,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IACtE,IAAM,eAAe,GACnB,eAAe;AACf,QAAA,CAAC,CAAC,wBAAwB,EAAE,qCAAqC,CAAC;IACpE,IAAM,kBAAkB,GACtB,kBAAkB,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAEtD,IAAA,IAAM,OAAO,GAAG,YAAA;QACd,OAAO,CAAC,CAAC,CAAC;AACZ,IAAA,CAAC;IAED,QACEC,cAAA,CAACC,wBAAgB,EAAA,EACf,MAAM,EACJD,cAAA,CAACE,mBAAW,EAAA,EACV,OAAO,EACLF,cAAA,CAACG,cAAM,EAAA,EAAC,OAAO,EAAE,OAAO,EAAA,QAAA,EAAG,CAAC,CAAC,oBAAoB,CAAC,EAAA,CAAU,EAAA,CAE9D,EAEJ,OAAO,EAAE,OAAO,EAAA,QAAA,EAEhBH,wBAAK,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAC3DI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6DAA6D,EAAA,QAAA,EAAA,CAE1EJ,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA,QAAA,EACjC,YAAY,IACXA,cAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,GAAG,EAAC,eAAe,EACnB,SAAS,EAAC,mCAAmC,EAAA,CAC7C,KAEFA,cAAA,CAACK,iBAAS,EAAA,EAAC,SAAS,EAAC,WAAW,EAAA,CAAG,CACpC,EAAA,CACG,EAGND,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBJ,cAAA,CAACM,aAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC/C,YAAY,EAAA,CACP,EACRN,cAAA,CAACO,gBAAQ,EAAA,EAAC,SAAS,EAAC,wEAAwE,EAAA,QAAA,EACzF,eAAe,EAAA,CACP,CAAA,EAAA,CACP,EAGNP,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAC5BA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4EAA4E,EAAA,QAAA,EACtF,kBAAkB,EAAA,CACjB,EAAA,CACA,CAAA,EAAA,CACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
1
+ {"version":3,"file":"Start.js","sources":["../../../../../src/components/start-flow/Start.tsx"],"sourcesContent":["import { useI18n } from \"../..\";\nimport { SessionData } from \"../../types/session\";\nimport StartIcon from \"../icons/StartIcon\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Title from \"../ui/Title\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface StartProps {\n setStep: (nubr: number) => void;\n welcomeTitle?: string;\n welcomeSubtitle?: string;\n welcomeDescription?: string;\n welcomeImage?: string;\n session?: SessionData;\n}\n\nconst Start = ({\n setStep,\n welcomeTitle,\n welcomeSubtitle,\n welcomeDescription,\n welcomeImage,\n session,\n}: StartProps) => {\n const { t } = useI18n();\n\n const displayTitle =\n welcomeTitle || t(\"start.welcome_title\", \"Vérifions votre identité\");\n const displaySubtitle =\n welcomeSubtitle ||\n t(\"start.welcome_subtitle\", \"Nous devons vérifier votre identité\");\n const displayDescription =\n welcomeDescription || t(\"start.welcome_description\");\n\n const goOnNextStep = () => {\n setStep(1);\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={goOnNextStep}>{t(\"start_verification\")}</Button>\n }\n />\n }\n session={session}\n >\n <div className=\"flex flex-col items-center px-4 py-8 md:px-8\">\n <div className=\"w-full max-w-md mx-auto text-center space-y-6 flex flex-col\">\n {/* Icon/Image - shown on top for both mobile and desktop */}\n <div className=\"flex justify-center\">\n {welcomeImage ? (\n <img\n src={welcomeImage}\n alt=\"Welcome image\"\n className=\"max-w-48 w-auto h-auto rounded-lg\"\n />\n ) : (\n <StartIcon 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 {displayTitle}\n </Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {displaySubtitle}\n </Subtitle>\n </div>\n\n {/* Terms notice */}\n <div className=\"md:block mt-8\">\n <p className=\"text-xs text-gray-500 leading-relaxed max-w-sm mx-auto whitespace-pre-line\">\n {displayDescription}\n </p>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default Start;\n"],"names":["useI18n","_jsx","MobilePageLayout","PageActions","Button","_jsxs","StartIcon","Title","Subtitle"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,IAAM,KAAK,GAAG,UAAC,EAOF,EAAA;AANX,IAAA,IAAA,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,kBAAkB,wBAAA,EAClB,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,OAAO,GAAA,EAAA,CAAA,OAAA;AAEC,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IAET,IAAM,YAAY,GAChB,YAAY,IAAI,CAAC,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IACtE,IAAM,eAAe,GACnB,eAAe;AACf,QAAA,CAAC,CAAC,wBAAwB,EAAE,qCAAqC,CAAC;IACpE,IAAM,kBAAkB,GACtB,kBAAkB,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAEtD,IAAA,IAAM,YAAY,GAAG,YAAA;QACnB,OAAO,CAAC,CAAC,CAAC;AACZ,IAAA,CAAC;IAED,QACEC,cAAA,CAACC,wBAAgB,EAAA,EACf,MAAM,EACJD,cAAA,CAACE,mBAAW,EAAA,EACV,OAAO,EACLF,cAAA,CAACG,cAAM,EAAA,EAAC,OAAO,EAAE,YAAY,EAAA,QAAA,EAAG,CAAC,CAAC,oBAAoB,CAAC,EAAA,CAAU,EAAA,CAEnE,EAEJ,OAAO,EAAE,OAAO,EAAA,QAAA,EAEhBH,wBAAK,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAC3DI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6DAA6D,EAAA,QAAA,EAAA,CAE1EJ,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA,QAAA,EACjC,YAAY,IACXA,cAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,GAAG,EAAC,eAAe,EACnB,SAAS,EAAC,mCAAmC,EAAA,CAC7C,KAEFA,cAAA,CAACK,iBAAS,EAAA,EAAC,SAAS,EAAC,WAAW,EAAA,CAAG,CACpC,EAAA,CACG,EAGND,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBJ,cAAA,CAACM,aAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC/C,YAAY,EAAA,CACP,EACRN,cAAA,CAACO,gBAAQ,EAAA,EAAC,SAAS,EAAC,wEAAwE,EAAA,QAAA,EACzF,eAAe,EAAA,CACP,CAAA,EAAA,CACP,EAGNP,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAC5BA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4EAA4E,EAAA,QAAA,EACtF,kBAAkB,EAAA,CACjB,EAAA,CACA,CAAA,EAAA,CACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+ var React = require('react');
7
+ var useI18n = require('../../hooks/useI18n.js');
8
+ var sessionService = require('../../services/sessionService.js');
9
+ var LoadingState = require('../states/LoadingState.js');
10
+ var Button = require('../ui/Button.js');
11
+
12
+ function ComplementaryMandateNodeHandler(_a) {
13
+ var sessionId = _a.sessionId, nodeId = _a.nodeId, onOutcome = _a.onOutcome;
14
+ var t = useI18n.useI18n().t;
15
+ var _b = React.useState(false), error = _b[0], setError = _b[1];
16
+ var _c = React.useState(0), attempt = _c[0], setAttempt = _c[1];
17
+ var callback = React.useRef(onOutcome);
18
+ callback.current = onOutcome;
19
+ React.useEffect(function () {
20
+ var active = true;
21
+ setError(false);
22
+ sessionService.checkComplementaryMandate(sessionId, nodeId).then(function (_a) {
23
+ var outcome = _a.outcome;
24
+ if (active)
25
+ callback.current(outcome);
26
+ }).catch(function () { if (active)
27
+ setError(true); });
28
+ return function () { active = false; };
29
+ }, [sessionId, nodeId, attempt]);
30
+ if (!error)
31
+ return jsxRuntime.jsx(LoadingState.default, { message: t('complementary_mandate.loading') });
32
+ return jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4 p-6", children: [jsxRuntime.jsx("p", { role: "alert", children: t('complementary_mandate.error') }), jsxRuntime.jsx(Button.default, { onClick: function () { return setAttempt(function (value) { return value + 1; }); }, children: t('complementary_mandate.retry') })] });
33
+ }
34
+
35
+ exports.default = ComplementaryMandateNodeHandler;
36
+ //# sourceMappingURL=ComplementaryMandateNodeHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ComplementaryMandateNodeHandler.js","sources":["../../../../../src/components/template/ComplementaryMandateNodeHandler.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { useI18n } from '../../hooks/useI18n';\nimport { checkComplementaryMandate } from '../../services/sessionService';\nimport type { ComplementaryMandateOutcome } from '../../types/session';\nimport LoadingState from '../states/LoadingState';\nimport Button from '../ui/Button';\n\nexport default function ComplementaryMandateNodeHandler({ sessionId, nodeId, onOutcome }: { sessionId: string; nodeId: string; onOutcome: (outcome: ComplementaryMandateOutcome) => void }) {\n const { t } = useI18n();\n const [error, setError] = useState(false);\n const [attempt, setAttempt] = useState(0);\n const callback = useRef(onOutcome);\n callback.current = onOutcome;\n useEffect(() => {\n let active = true;\n setError(false);\n checkComplementaryMandate(sessionId, nodeId).then(({ outcome }) => {\n if (active) callback.current(outcome);\n }).catch(() => { if (active) setError(true); });\n return () => { active = false; };\n }, [sessionId, nodeId, attempt]);\n if (!error) return <LoadingState message={t('complementary_mandate.loading')} />;\n return <div className=\"flex flex-col items-center gap-4 p-6\">\n <p role=\"alert\">{t('complementary_mandate.error')}</p>\n <Button onClick={() => setAttempt(value => value + 1)}>{t('complementary_mandate.retry')}</Button>\n </div>;\n}\n"],"names":["useI18n","useState","useRef","useEffect","checkComplementaryMandate","_jsx","LoadingState","_jsxs","Button"],"mappings":";;;;;;;;;;;AAOc,SAAU,+BAA+B,CAAC,EAAkI,EAAA;AAAhI,IAAA,IAAA,SAAS,eAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA;AAC5E,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAAoBC,cAAQ,CAAC,KAAK,CAAC,EAAlC,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAmB;IACnC,IAAA,EAAA,GAAwBA,cAAQ,CAAC,CAAC,CAAC,EAAlC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAe;AACzC,IAAA,IAAM,QAAQ,GAAGC,YAAM,CAAC,SAAS,CAAC;AAClC,IAAA,QAAQ,CAAC,OAAO,GAAG,SAAS;AAC5B,IAAAC,eAAS,CAAC,YAAA;QACR,IAAI,MAAM,GAAG,IAAI;QACjB,QAAQ,CAAC,KAAK,CAAC;QACfC,wCAAyB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,UAAC,EAAW,EAAA;AAAT,YAAA,IAAA,OAAO,GAAA,EAAA,CAAA,OAAA;AAC1D,YAAA,IAAI,MAAM;AAAE,gBAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AACvC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,YAAA,EAAQ,IAAI,MAAM;AAAE,YAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,OAAO,cAAQ,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC,KAAK;QAAE,OAAOC,cAAA,CAACC,oBAAY,EAAA,EAAC,OAAO,EAAE,CAAC,CAAC,+BAA+B,CAAC,EAAA,CAAI;IAChF,OAAOC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sCAAsC,aAC1DF,cAAA,CAAA,GAAA,EAAA,EAAG,IAAI,EAAC,OAAO,EAAA,QAAA,EAAE,CAAC,CAAC,6BAA6B,CAAC,EAAA,CAAK,EACtDA,eAACG,cAAM,EAAA,EAAC,OAAO,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,UAAA,KAAK,EAAA,EAAI,OAAA,KAAK,GAAG,CAAC,CAAA,CAAT,CAAS,CAAC,CAAA,CAA9B,CAA8B,YAAG,CAAC,CAAC,6BAA6B,CAAC,EAAA,CAAU,IAC9F;AACR;;;;"}
@@ -279,7 +279,7 @@ var ExternalVerificationNodeHandler = function (_a) {
279
279
  _v.label = 4;
280
280
  case 4:
281
281
  _v.trys.push([4, 7, , 8]);
282
- return [4 /*yield*/, api.apiService.post("/session/sdk/".concat(session.id, "/verify-external/").concat(node.id), tslib_es6.__assign({ apiType: apiType, referenceValue: referenceValue, referenceField: referenceField, enableRnaFallback: isInpiRbe && nodeData.rnaFallbackEnabled === true }, (comparisonConfig ? { comparisonConfig: comparisonConfig } : {})), { signal: abortController.signal })];
282
+ return [4 /*yield*/, api.apiService.post("/session/sdk/".concat(session.id, "/verify-external/").concat(node.id), tslib_es6.__assign({ apiType: apiType, referenceValue: referenceValue, referenceField: referenceField, enableRnaFallback: isInpiRbe && nodeData.rnaFallbackEnabled === true, enableInseeFallback: isInpiRbe && nodeData.enableInseeFallback === true }, (comparisonConfig ? { comparisonConfig: comparisonConfig } : {})), { signal: abortController.signal })];
283
283
  case 5:
284
284
  response = _v.sent();
285
285
  if (isInpiRbe)
@@ -383,13 +383,16 @@ var ExternalVerificationNodeHandler = function (_a) {
383
383
  setPhase('success');
384
384
  setTimeout(onNext, 1200);
385
385
  }
386
- else if (result.status === 'config_error') {
387
- setPhase('success');
388
- setTimeout(onNext, 800);
389
- }
390
386
  else {
387
+ // config_error / external_error / any other non-blocking technical
388
+ // failure (missing API key, registry down…) — never a fault of the
389
+ // end user. The backend already maps these to a 'done' analysisrun,
390
+ // never 'ai_rejected' (reviewed manually in backoffice), so the SDK
391
+ // stays non-blocking here too — but must never claim success
392
+ // (config_error used to show the success screen) and must never
393
+ // leave a blank screen (this phase previously had no render block).
391
394
  setPhase('error');
392
- setTimeout(onNext, 1500);
395
+ setTimeout(onNext, 1200);
393
396
  }
394
397
  return [2 /*return*/];
395
398
  }
@@ -413,12 +416,19 @@ var ExternalVerificationNodeHandler = function (_a) {
413
416
  };
414
417
  // ─── Loading phase ─────────────────────────────────────────────────────────
415
418
  if (phase === 'loading') {
416
- return (jsxRuntime.jsx("div", { className: "flex flex-col justify-between h-full w-full", children: jsxRuntime.jsx("div", { className: "flex-1 px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: t('verification_node.verifying_title', 'Vérification en cours…') }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed", children: t('verification_node.verifying_desc', 'Nous vérifions vos informations. Cela peut prendre quelques instants.') })] }), jsxRuntime.jsx("div", { className: "w-full flex justify-center", children: jsxRuntime.jsx("div", { className: "space-y-5", children: steps.map(function (step, index) { return (jsxRuntime.jsxs("div", { className: "flex items-start", children: [jsxRuntime.jsx("div", { className: "mr-4 mt-1 flex-shrink-0", children: step.status === 'done' ? (jsxRuntime.jsx("div", { className: "flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs", children: "\u2713" })) : step.status === 'active' ? (jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin" })) : (jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-full border-2 border-gray-300" })) }), jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntime.jsx("p", { className: "font-medium text-[#3C3C40] text-sm", children: step.title }), jsxRuntime.jsx("p", { className: "text-xs text-gray-500 mt-1", children: step.subtitle })] })] }, index)); }) }) })] }) }) }));
419
+ return (jsxRuntime.jsx("div", { className: "flex flex-col justify-between h-full w-full", children: jsxRuntime.jsx("div", { className: "flex-1 px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: t('verification_node.verifying_title', 'Vérification en cours…') }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed", children: t('verification_node.verifying_desc', 'Nous vérifions vos informations. Cela peut prendre quelques instants.') })] }), jsxRuntime.jsx("div", { className: "w-full flex justify-center", children: jsxRuntime.jsx("div", { className: "space-y-5", children: steps.map(function (step, index) { return (jsxRuntime.jsxs("div", { className: "flex items-start", children: [jsxRuntime.jsx("div", { className: "mr-4 mt-1 shrink-0", children: step.status === 'done' ? (jsxRuntime.jsx("div", { className: "flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs", children: "\u2713" })) : step.status === 'active' ? (jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin" })) : (jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-full border-2 border-gray-300" })) }), jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntime.jsx("p", { className: "font-medium text-[#3C3C40] text-sm", children: step.title }), jsxRuntime.jsx("p", { className: "text-xs text-gray-500 mt-1", children: step.subtitle })] })] }, index)); }) }) })] }) }) }));
417
420
  }
418
421
  // ─── Success phase ─────────────────────────────────────────────────────────
419
422
  if (phase === 'success') {
420
423
  return (jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-4", children: [jsxRuntime.jsx("img", { src: check.default, alt: "success", className: "w-24 h-24" }), jsxRuntime.jsx("h3", { className: "text-[#3C3C40] font-poppins text-xl font-bold", children: t('inpi_verification.success_title', 'Vérification réussie') }), jsxRuntime.jsx("p", { className: "text-gray-500 text-sm", children: t('inpi_verification.success_desc', "Passage à l'étape suivante…") })] }));
421
424
  }
425
+ // ─── Technical error phase (config_error / external_error) ────────────────
426
+ //
427
+ // Non-blocking (the flow already auto-advances via the useEffect above) but
428
+ // must never look like a success — neutral wording, no checkmark.
429
+ if (phase === 'error') {
430
+ return (jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-4", children: [jsxRuntime.jsx("div", { className: "w-16 h-16 bg-gray-100 rounded-full flex items-center justify-center", children: jsxRuntime.jsx("span", { className: "text-gray-500 text-2xl font-bold", children: "!" }) }), jsxRuntime.jsx("h3", { className: "text-[#3C3C40] font-poppins text-xl font-bold", children: t('inpi_verification.technical_error_title', 'Vérification en cours de traitement') }), jsxRuntime.jsx("p", { className: "text-gray-500 text-sm", children: t('inpi_verification.technical_error_desc', 'Un problème technique est survenu. Votre dossier sera examiné manuellement.') })] }));
431
+ }
422
432
  // ─── Mismatch phase ────────────────────────────────────────────────────────
423
433
  if (phase === 'mismatch') {
424
434
  var d = errorScreenData;