datakeen-session-react 1.1.160 → 1.1.161

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 (136) hide show
  1. package/dist/cjs/components/document-collection/DocumentError.js +2 -0
  2. package/dist/cjs/components/document-collection/DocumentError.js.map +1 -1
  3. package/dist/cjs/components/session/DocumentCheck.js +2 -2
  4. package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
  5. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js +42 -45
  6. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js.map +1 -1
  7. package/dist/cjs/components/session/UserInputForm/DatePickerField.js +154 -0
  8. package/dist/cjs/components/session/UserInputForm/DatePickerField.js.map +1 -0
  9. package/dist/cjs/components/session/UserInputForm.js +2 -2
  10. package/dist/cjs/components/session/UserInputForm.js.map +1 -1
  11. package/dist/cjs/components/signature-electronic/DocusealSignature.js +2 -1
  12. package/dist/cjs/components/signature-electronic/DocusealSignature.js.map +1 -1
  13. package/dist/cjs/components/signature-electronic/SignatureElectronic.js +2 -1
  14. package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +1 -1
  15. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js +2 -1
  16. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js.map +1 -1
  17. package/dist/cjs/components/start-flow/CGU.js +5 -2
  18. package/dist/cjs/components/start-flow/CGU.js.map +1 -1
  19. package/dist/cjs/components/start-flow/Start.js +5 -2
  20. package/dist/cjs/components/start-flow/Start.js.map +1 -1
  21. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +2 -1
  22. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  23. package/dist/cjs/hooks/useUserInputForm.js +90 -29
  24. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  25. package/dist/cjs/i18n/en.json.js +19 -5
  26. package/dist/cjs/i18n/en.json.js.map +1 -1
  27. package/dist/cjs/i18n/fr.json.js +19 -5
  28. package/dist/cjs/i18n/fr.json.js.map +1 -1
  29. package/dist/cjs/index.css.js +1 -1
  30. package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +13 -0
  31. package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -0
  32. package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +67 -0
  33. package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -0
  34. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js +62 -0
  35. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -0
  36. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +25 -0
  37. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -0
  38. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +106 -0
  39. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +1 -0
  40. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js +44 -0
  41. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +1 -0
  42. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +16 -0
  43. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +1 -0
  44. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js +192 -0
  45. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js.map +1 -0
  46. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js +137 -0
  47. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js.map +1 -0
  48. package/dist/cjs/node_modules/date-fns/locale/en-US.js +31 -0
  49. package/dist/cjs/node_modules/date-fns/locale/en-US.js.map +1 -0
  50. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js +105 -0
  51. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +1 -0
  52. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js +44 -0
  53. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +1 -0
  54. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js +16 -0
  55. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +1 -0
  56. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js +170 -0
  57. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js.map +1 -0
  58. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js +138 -0
  59. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js.map +1 -0
  60. package/dist/cjs/node_modules/date-fns/locale/fr.js +31 -0
  61. package/dist/cjs/node_modules/date-fns/locale/fr.js.map +1 -0
  62. package/dist/cjs/types/session.js +6 -0
  63. package/dist/cjs/types/session.js.map +1 -0
  64. package/dist/cjs/utils/customFieldValidation.js +62 -0
  65. package/dist/cjs/utils/customFieldValidation.js.map +1 -0
  66. package/dist/esm/components/document-collection/DocumentError.js +2 -0
  67. package/dist/esm/components/document-collection/DocumentError.js.map +1 -1
  68. package/dist/esm/components/session/DocumentCheck.js +2 -2
  69. package/dist/esm/components/session/DocumentCheck.js.map +1 -1
  70. package/dist/esm/components/session/UserInputForm/CustomFormFields.js +42 -45
  71. package/dist/esm/components/session/UserInputForm/CustomFormFields.js.map +1 -1
  72. package/dist/esm/components/session/UserInputForm/DatePickerField.js +132 -0
  73. package/dist/esm/components/session/UserInputForm/DatePickerField.js.map +1 -0
  74. package/dist/esm/components/session/UserInputForm.js +2 -2
  75. package/dist/esm/components/session/UserInputForm.js.map +1 -1
  76. package/dist/esm/components/signature-electronic/DocusealSignature.js +2 -1
  77. package/dist/esm/components/signature-electronic/DocusealSignature.js.map +1 -1
  78. package/dist/esm/components/signature-electronic/SignatureElectronic.js +2 -1
  79. package/dist/esm/components/signature-electronic/SignatureElectronic.js.map +1 -1
  80. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js +2 -1
  81. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js.map +1 -1
  82. package/dist/esm/components/start-flow/CGU.js +5 -2
  83. package/dist/esm/components/start-flow/CGU.js.map +1 -1
  84. package/dist/esm/components/start-flow/Start.js +5 -2
  85. package/dist/esm/components/start-flow/Start.js.map +1 -1
  86. package/dist/esm/components/template/ExternalVerificationNodeHandler.js +2 -1
  87. package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  88. package/dist/esm/components/ui/SelectComponent.js +3 -3
  89. package/dist/esm/components/ui/SelectComponent.js.map +1 -1
  90. package/dist/esm/hooks/useUserInputForm.js +92 -31
  91. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  92. package/dist/esm/i18n/en.json.js +19 -5
  93. package/dist/esm/i18n/en.json.js.map +1 -1
  94. package/dist/esm/i18n/fr.json.js +19 -5
  95. package/dist/esm/i18n/fr.json.js.map +1 -1
  96. package/dist/esm/index.css.js +1 -1
  97. package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +11 -0
  98. package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -0
  99. package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +65 -0
  100. package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -0
  101. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js +60 -0
  102. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -0
  103. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +23 -0
  104. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -0
  105. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +104 -0
  106. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +1 -0
  107. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js +42 -0
  108. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +1 -0
  109. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +14 -0
  110. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +1 -0
  111. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js +190 -0
  112. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js.map +1 -0
  113. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js +135 -0
  114. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js.map +1 -0
  115. package/dist/esm/node_modules/date-fns/locale/en-US.js +29 -0
  116. package/dist/esm/node_modules/date-fns/locale/en-US.js.map +1 -0
  117. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js +103 -0
  118. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +1 -0
  119. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js +42 -0
  120. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +1 -0
  121. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js +14 -0
  122. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +1 -0
  123. package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js +168 -0
  124. package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js.map +1 -0
  125. package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js +136 -0
  126. package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js.map +1 -0
  127. package/dist/esm/node_modules/date-fns/locale/fr.js +29 -0
  128. package/dist/esm/node_modules/date-fns/locale/fr.js.map +1 -0
  129. package/dist/esm/providers/I18nProvider.js +2 -2
  130. package/dist/esm/providers/I18nProvider.js.map +1 -1
  131. package/dist/esm/types/session.js +4 -0
  132. package/dist/esm/types/session.js.map +1 -0
  133. package/dist/esm/utils/customFieldValidation.js +56 -0
  134. package/dist/esm/utils/customFieldValidation.js.map +1 -0
  135. package/jest.config.js +1 -0
  136. package/package.json +4 -1
@@ -0,0 +1,132 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { parse, isValid, format } from 'date-fns';
4
+ import { Calendar, ChevronLeft, ChevronRight } from 'lucide-react';
5
+ import { DayPicker } from 'react-day-picker';
6
+ import * as Popover from '@radix-ui/react-popover';
7
+ import clsx from 'clsx';
8
+ import { useI18n } from '../../../hooks/useI18n.js';
9
+ import { enUS } from '../../../node_modules/date-fns/locale/en-US.js';
10
+ import { fr } from '../../../node_modules/date-fns/locale/fr.js';
11
+
12
+ // ─── helpers ──────────────────────────────────────────────────────────────────
13
+ var FORMAT_TO_DATEFNS = {
14
+ "dd/mm/yyyy": "dd/MM/yyyy",
15
+ "mm/dd/yyyy": "MM/dd/yyyy",
16
+ "yyyy-mm-dd": "yyyy-MM-dd",
17
+ };
18
+ // Auto-inserts separator after 2nd and 4th digit while the user types.
19
+ var autoInsertSeparator = function (prev, next, separator) {
20
+ var digits = next.replace(/[^\d]/g, "");
21
+ var out = "";
22
+ for (var i = 0; i < digits.length && i < 8; i++) {
23
+ if (i === 2 || i === 4)
24
+ out += separator;
25
+ out += digits[i];
26
+ }
27
+ if (next.length < prev.length)
28
+ return next;
29
+ return out;
30
+ };
31
+ var MONTH_LABELS_FR = ["Jan", "Fév", "Mar", "Avr", "Mai", "Jun", "Jul", "Aoû", "Sep", "Oct", "Nov", "Déc"];
32
+ var MONTH_LABELS_EN = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
33
+ var MiniCalendar = function (_a) {
34
+ var selected = _a.selected, onSelect = _a.onSelect, locale = _a.locale;
35
+ var _b = React.useState("day"), mode = _b[0], setMode = _b[1];
36
+ var _c = React.useState(selected !== null && selected !== void 0 ? selected : new Date()), displayMonth = _c[0], setDisplayMonth = _c[1];
37
+ var _d = React.useState(null), tempYear = _d[0], setTempYear = _d[1];
38
+ var isFr = locale === fr;
39
+ var monthLabels = isFr ? MONTH_LABELS_FR : MONTH_LABELS_EN;
40
+ var yearGrid = React.useMemo(function () {
41
+ var base = displayMonth.getFullYear();
42
+ return Array.from({ length: 15 }, function (_, i) { return base - 7 + i; });
43
+ }, [displayMonth]);
44
+ var navYear = function (dir) {
45
+ var d = new Date(displayMonth);
46
+ d.setFullYear(d.getFullYear() + dir * 15);
47
+ setDisplayMonth(d);
48
+ };
49
+ // Custom MonthCaption pour v9 — reçoit calendarMonth
50
+ var CustomMonthCaption = React.useCallback(function (_a) {
51
+ var calendarMonth = _a.calendarMonth;
52
+ var dm = calendarMonth.date;
53
+ return (jsxs("div", { className: "flex items-center justify-center gap-1 text-sm font-semibold select-none py-1", children: [jsx("button", { type: "button", onClick: function () { setDisplayMonth(dm); setMode("month"); }, className: "hover:text-[#11E5C5] transition-colors capitalize", children: dm.toLocaleString(isFr ? "fr-FR" : "en-US", { month: "long" }) }), jsx("button", { type: "button", onClick: function () { setDisplayMonth(dm); setMode("year"); }, className: "hover:text-[#11E5C5] transition-colors", children: dm.getFullYear() })] }));
54
+ }, [isFr]);
55
+ // Custom Chevron pour v9 — orientation "left" | "right"
56
+ var CustomChevron = React.useCallback(function (_a) {
57
+ var orientation = _a.orientation;
58
+ return orientation === "left"
59
+ ? jsx(ChevronLeft, { className: "size-4" })
60
+ : jsx(ChevronRight, { className: "size-4" });
61
+ }, []);
62
+ if (mode === "year") {
63
+ return (jsxs("div", { className: "p-3 w-[252px]", children: [jsxs("div", { className: "flex items-center justify-between mb-3", children: [jsx("button", { type: "button", onClick: function () { return navYear(-1); }, className: "p-1 rounded hover:bg-gray-100", children: jsx(ChevronLeft, { className: "size-4" }) }), jsxs("span", { className: "text-sm font-semibold", children: [yearGrid[0], " \u2013 ", yearGrid[yearGrid.length - 1]] }), jsx("button", { type: "button", onClick: function () { return navYear(1); }, className: "p-1 rounded hover:bg-gray-100", children: jsx(ChevronRight, { className: "size-4" }) })] }), jsx("div", { className: "grid grid-cols-3 gap-1", children: yearGrid.map(function (y) { return (jsx("button", { type: "button", onClick: function () { setTempYear(y); setMode("month"); }, className: clsx("rounded py-1.5 text-sm transition-colors", y === displayMonth.getFullYear()
64
+ ? "bg-[#11E5C5] text-white font-semibold"
65
+ : "hover:bg-gray-100"), children: y }, y)); }) })] }));
66
+ }
67
+ if (mode === "month") {
68
+ var year_1 = tempYear !== null && tempYear !== void 0 ? tempYear : displayMonth.getFullYear();
69
+ return (jsxs("div", { className: "p-3 w-[252px]", children: [jsx("div", { className: "text-sm font-semibold text-center mb-3", children: year_1 }), jsx("div", { className: "grid grid-cols-3 gap-1", children: monthLabels.map(function (m, i) { return (jsx("button", { type: "button", onClick: function () {
70
+ var d = new Date(year_1, i, 1);
71
+ setDisplayMonth(d);
72
+ setTempYear(null);
73
+ setMode("day");
74
+ }, className: clsx("rounded py-1.5 text-sm transition-colors", i === displayMonth.getMonth() && year_1 === displayMonth.getFullYear()
75
+ ? "bg-[#11E5C5] text-white font-semibold"
76
+ : "hover:bg-gray-100"), children: m }, m)); }) })] }));
77
+ }
78
+ return (jsx(DayPicker, { mode: "single", selected: selected, onSelect: onSelect, month: displayMonth, onMonthChange: setDisplayMonth, locale: locale, showOutsideDays: true, navLayout: "around", components: {
79
+ MonthCaption: CustomMonthCaption,
80
+ Chevron: CustomChevron,
81
+ } }));
82
+ };
83
+ var DatePickerField = function (_a) {
84
+ var _b;
85
+ var id = _a.id, value = _a.value, dateFormat = _a.dateFormat, placeholder = _a.placeholder, _c = _a.hasError, hasError = _c === void 0 ? false : _c, _d = _a.language, language = _d === void 0 ? "fr" : _d, onChange = _a.onChange, className = _a.className;
86
+ var t = useI18n().t;
87
+ var locale = language === "en" ? enUS : fr;
88
+ var dfnsFmt = (_b = FORMAT_TO_DATEFNS[dateFormat]) !== null && _b !== void 0 ? _b : "dd/MM/yyyy";
89
+ var separator = dateFormat === "yyyy-mm-dd" ? "-" : "/";
90
+ var _e = React.useState(value !== null && value !== void 0 ? value : ""), inputValue = _e[0], setInputValue = _e[1];
91
+ var _f = React.useState(false), open = _f[0], setOpen = _f[1];
92
+ React.useEffect(function () {
93
+ setInputValue(value !== null && value !== void 0 ? value : "");
94
+ }, [value]);
95
+ var parseInputToDate = function (raw) {
96
+ if (raw.length < 10)
97
+ return undefined;
98
+ var d = parse(raw, dfnsFmt, new Date(), { locale: locale });
99
+ return isValid(d) ? d : undefined;
100
+ };
101
+ var selectedDate = parseInputToDate(inputValue);
102
+ var handleInputChange = function (e) {
103
+ var next = autoInsertSeparator(inputValue, e.target.value, separator);
104
+ if (next.length > 10)
105
+ return;
106
+ setInputValue(next);
107
+ if (next.length === 10) {
108
+ var d = parse(next, dfnsFmt, new Date(), { locale: locale });
109
+ if (isValid(d)) {
110
+ onChange(next);
111
+ setOpen(false);
112
+ }
113
+ }
114
+ else if (next === "") {
115
+ onChange("");
116
+ }
117
+ };
118
+ var handleCalendarSelect = function (d) {
119
+ if (!d)
120
+ return;
121
+ var formatted = format(d, dfnsFmt, { locale: locale });
122
+ setInputValue(formatted);
123
+ onChange(formatted);
124
+ setOpen(false);
125
+ };
126
+ var defaultPlaceholder = placeholder !== null && placeholder !== void 0 ? placeholder : dfnsFmt.toUpperCase();
127
+ var inputClasses = clsx("w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent bg-transparent", hasError ? "border-red-500 bg-red-50" : "border-gray-300 hover:border-gray-400", className);
128
+ return (jsxs(Popover.Root, { open: open, onOpenChange: setOpen, children: [jsx(Popover.Trigger, { asChild: true, children: jsxs("div", { className: "relative", children: [jsx("input", { id: id, type: "text", value: inputValue, onChange: handleInputChange, placeholder: defaultPlaceholder, className: clsx(inputClasses, "pr-10"), autoComplete: "off", inputMode: "numeric", onFocus: function () { return setOpen(true); }, "aria-label": t("custom_form.select_option", "Date") }), jsx("button", { type: "button", tabIndex: -1, onClick: function () { return setOpen(function (o) { return !o; }); }, className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600", children: jsx(Calendar, { className: "size-4" }) })] }) }), jsx(Popover.Portal, { children: jsx(Popover.Content, { side: "bottom", align: "start", sideOffset: 4, className: "z-50 rounded-lg border border-gray-200 bg-white shadow-lg focus:outline-none", onOpenAutoFocus: function (e) { return e.preventDefault(); }, children: jsx(MiniCalendar, { selected: selectedDate, onSelect: handleCalendarSelect, locale: locale }) }) })] }));
129
+ };
130
+
131
+ export { DatePickerField };
132
+ //# sourceMappingURL=DatePickerField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DatePickerField.js","sources":["../../../../../../src/components/session/UserInputForm/DatePickerField.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { format, parse, isValid, type Locale } from \"date-fns\";\nimport { fr, enUS } from \"date-fns/locale\";\nimport { ChevronLeft, ChevronRight, Calendar } from \"lucide-react\";\nimport { DayPicker } from \"react-day-picker\";\nimport type { MonthCaptionProps, ChevronProps } from \"react-day-picker\";\nimport * as Popover from \"@radix-ui/react-popover\";\nimport clsx from \"clsx\";\nimport type { DateDisplayFormat } from \"../../../types/session\";\nimport { useI18n } from \"../../../hooks/useI18n\";\n\n// ─── helpers ──────────────────────────────────────────────────────────────────\n\nconst FORMAT_TO_DATEFNS: Record<DateDisplayFormat, string> = {\n \"dd/mm/yyyy\": \"dd/MM/yyyy\",\n \"mm/dd/yyyy\": \"MM/dd/yyyy\",\n \"yyyy-mm-dd\": \"yyyy-MM-dd\",\n};\n\n// Auto-inserts separator after 2nd and 4th digit while the user types.\nconst autoInsertSeparator = (\n prev: string,\n next: string,\n separator: \"/\" | \"-\",\n): string => {\n const digits = next.replace(/[^\\d]/g, \"\");\n let out = \"\";\n for (let i = 0; i < digits.length && i < 8; i++) {\n if (i === 2 || i === 4) out += separator;\n out += digits[i];\n }\n if (next.length < prev.length) return next;\n return out;\n};\n\n// ─── mini calendar (DayPicker v9 wrapper) ─────────────────────────────────────\n\ntype CalendarMode = \"day\" | \"month\" | \"year\";\n\ninterface MiniCalendarProps {\n selected: Date | undefined;\n onSelect: (d: Date | undefined) => void;\n locale: Locale;\n}\n\nconst MONTH_LABELS_FR = [\"Jan\", \"Fév\", \"Mar\", \"Avr\", \"Mai\", \"Jun\", \"Jul\", \"Aoû\", \"Sep\", \"Oct\", \"Nov\", \"Déc\"];\nconst MONTH_LABELS_EN = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nconst MiniCalendar: React.FC<MiniCalendarProps> = ({ selected, onSelect, locale }) => {\n const [mode, setMode] = React.useState<CalendarMode>(\"day\");\n const [displayMonth, setDisplayMonth] = React.useState<Date>(selected ?? new Date());\n const [tempYear, setTempYear] = React.useState<number | null>(null);\n\n const isFr = locale === fr;\n const monthLabels = isFr ? MONTH_LABELS_FR : MONTH_LABELS_EN;\n\n const yearGrid: number[] = React.useMemo(() => {\n const base = displayMonth.getFullYear();\n return Array.from({ length: 15 }, (_, i) => base - 7 + i);\n }, [displayMonth]);\n\n const navYear = (dir: 1 | -1) => {\n const d = new Date(displayMonth);\n d.setFullYear(d.getFullYear() + dir * 15);\n setDisplayMonth(d);\n };\n\n // Custom MonthCaption pour v9 — reçoit calendarMonth\n const CustomMonthCaption = React.useCallback(\n ({ calendarMonth }: MonthCaptionProps) => {\n const dm = calendarMonth.date;\n return (\n <div className=\"flex items-center justify-center gap-1 text-sm font-semibold select-none py-1\">\n <button\n type=\"button\"\n onClick={() => { setDisplayMonth(dm); setMode(\"month\"); }}\n className=\"hover:text-[#11E5C5] transition-colors capitalize\"\n >\n {dm.toLocaleString(isFr ? \"fr-FR\" : \"en-US\", { month: \"long\" })}\n </button>\n <button\n type=\"button\"\n onClick={() => { setDisplayMonth(dm); setMode(\"year\"); }}\n className=\"hover:text-[#11E5C5] transition-colors\"\n >\n {dm.getFullYear()}\n </button>\n </div>\n );\n },\n [isFr],\n );\n\n // Custom Chevron pour v9 — orientation \"left\" | \"right\"\n const CustomChevron = React.useCallback(\n ({ orientation }: ChevronProps) =>\n orientation === \"left\"\n ? <ChevronLeft className=\"size-4\" />\n : <ChevronRight className=\"size-4\" />,\n [],\n );\n\n if (mode === \"year\") {\n return (\n <div className=\"p-3 w-[252px]\">\n <div className=\"flex items-center justify-between mb-3\">\n <button type=\"button\" onClick={() => navYear(-1)} className=\"p-1 rounded hover:bg-gray-100\">\n <ChevronLeft className=\"size-4\" />\n </button>\n <span className=\"text-sm font-semibold\">\n {yearGrid[0]} – {yearGrid[yearGrid.length - 1]}\n </span>\n <button type=\"button\" onClick={() => navYear(1)} className=\"p-1 rounded hover:bg-gray-100\">\n <ChevronRight className=\"size-4\" />\n </button>\n </div>\n <div className=\"grid grid-cols-3 gap-1\">\n {yearGrid.map((y) => (\n <button\n key={y}\n type=\"button\"\n onClick={() => { setTempYear(y); setMode(\"month\"); }}\n className={clsx(\n \"rounded py-1.5 text-sm transition-colors\",\n y === displayMonth.getFullYear()\n ? \"bg-[#11E5C5] text-white font-semibold\"\n : \"hover:bg-gray-100\",\n )}\n >\n {y}\n </button>\n ))}\n </div>\n </div>\n );\n }\n\n if (mode === \"month\") {\n const year = tempYear ?? displayMonth.getFullYear();\n return (\n <div className=\"p-3 w-[252px]\">\n <div className=\"text-sm font-semibold text-center mb-3\">{year}</div>\n <div className=\"grid grid-cols-3 gap-1\">\n {monthLabels.map((m, i) => (\n <button\n key={m}\n type=\"button\"\n onClick={() => {\n const d = new Date(year, i, 1);\n setDisplayMonth(d);\n setTempYear(null);\n setMode(\"day\");\n }}\n className={clsx(\n \"rounded py-1.5 text-sm transition-colors\",\n i === displayMonth.getMonth() && year === displayMonth.getFullYear()\n ? \"bg-[#11E5C5] text-white font-semibold\"\n : \"hover:bg-gray-100\",\n )}\n >\n {m}\n </button>\n ))}\n </div>\n </div>\n );\n }\n\n return (\n <DayPicker\n mode=\"single\"\n selected={selected}\n onSelect={onSelect}\n month={displayMonth}\n onMonthChange={setDisplayMonth}\n locale={locale}\n showOutsideDays\n navLayout=\"around\"\n components={{\n MonthCaption: CustomMonthCaption,\n Chevron: CustomChevron,\n }}\n />\n );\n};\n\n// ─── DatePickerField (export) ──────────────────────────────────────────────────\n\ninterface DatePickerFieldProps {\n id?: string;\n value: string;\n dateFormat: DateDisplayFormat;\n placeholder?: string;\n hasError?: boolean;\n language?: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport const DatePickerField: React.FC<DatePickerFieldProps> = ({\n id,\n value,\n dateFormat,\n placeholder,\n hasError = false,\n language = \"fr\",\n onChange,\n className,\n}) => {\n const { t } = useI18n();\n const locale = language === \"en\" ? enUS : fr;\n const dfnsFmt = FORMAT_TO_DATEFNS[dateFormat] ?? \"dd/MM/yyyy\";\n const separator = dateFormat === \"yyyy-mm-dd\" ? \"-\" : \"/\";\n\n const [inputValue, setInputValue] = React.useState(value ?? \"\");\n const [open, setOpen] = React.useState(false);\n\n React.useEffect(() => {\n setInputValue(value ?? \"\");\n }, [value]);\n\n const parseInputToDate = (raw: string): Date | undefined => {\n if (raw.length < 10) return undefined;\n const d = parse(raw, dfnsFmt, new Date(), { locale });\n return isValid(d) ? d : undefined;\n };\n\n const selectedDate = parseInputToDate(inputValue);\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const next = autoInsertSeparator(inputValue, e.target.value, separator);\n if (next.length > 10) return;\n setInputValue(next);\n if (next.length === 10) {\n const d = parse(next, dfnsFmt, new Date(), { locale });\n if (isValid(d)) {\n onChange(next);\n setOpen(false);\n }\n } else if (next === \"\") {\n onChange(\"\");\n }\n };\n\n const handleCalendarSelect = (d: Date | undefined) => {\n if (!d) return;\n const formatted = format(d, dfnsFmt, { locale });\n setInputValue(formatted);\n onChange(formatted);\n setOpen(false);\n };\n\n const defaultPlaceholder = placeholder ?? dfnsFmt.toUpperCase();\n\n const inputClasses = clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent bg-transparent\",\n hasError ? \"border-red-500 bg-red-50\" : \"border-gray-300 hover:border-gray-400\",\n className,\n );\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger asChild>\n <div className=\"relative\">\n <input\n id={id}\n type=\"text\"\n value={inputValue}\n onChange={handleInputChange}\n placeholder={defaultPlaceholder}\n className={clsx(inputClasses, \"pr-10\")}\n autoComplete=\"off\"\n inputMode=\"numeric\"\n onFocus={() => setOpen(true)}\n aria-label={t(\"custom_form.select_option\", \"Date\")}\n />\n <button\n type=\"button\"\n tabIndex={-1}\n onClick={() => setOpen((o) => !o)}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-600\"\n >\n <Calendar className=\"size-4\" />\n </button>\n </div>\n </Popover.Trigger>\n\n <Popover.Portal>\n <Popover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={4}\n className=\"z-50 rounded-lg border border-gray-200 bg-white shadow-lg focus:outline-none\"\n onOpenAutoFocus={(e) => e.preventDefault()}\n >\n <MiniCalendar\n selected={selectedDate}\n onSelect={handleCalendarSelect}\n locale={locale}\n />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n );\n};\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -18,7 +18,7 @@ var UserInputForm = function (props) {
18
18
  var t = useI18n().t;
19
19
  var hasListCustomField = props.node.informationType === "custom" &&
20
20
  (props.node.customFields || []).some(function (field) { return field.valueType === "list"; });
21
- var _b = useUserInputForm(props), form = _b.form, errors = _b.errors, informationType = _b.informationType, requestedFields = _b.requestedFields, pageTitle = _b.pageTitle, pageDescription = _b.pageDescription, addressSuggestions = _b.addressSuggestions, showSuggestions = _b.showSuggestions, handleFieldChange = _b.handleFieldChange, handleAddressChange = _b.handleAddressChange, handleAddressFocus = _b.handleAddressFocus, handleAddressBlur = _b.handleAddressBlur, applyAddressSuggestion = _b.applyAddressSuggestion, goOnNextStep = _b.goOnNextStep, goOnPreviousStep = _b.goOnPreviousStep, customFormData = _b.customFormData, customFormErrors = _b.customFormErrors, handleCustomFieldChange = _b.handleCustomFieldChange;
21
+ var _b = useUserInputForm(props), form = _b.form, errors = _b.errors, informationType = _b.informationType, requestedFields = _b.requestedFields, pageTitle = _b.pageTitle, pageDescription = _b.pageDescription, addressSuggestions = _b.addressSuggestions, showSuggestions = _b.showSuggestions, handleFieldChange = _b.handleFieldChange, handleAddressChange = _b.handleAddressChange, handleAddressFocus = _b.handleAddressFocus, handleAddressBlur = _b.handleAddressBlur, applyAddressSuggestion = _b.applyAddressSuggestion, goOnNextStep = _b.goOnNextStep, goOnPreviousStep = _b.goOnPreviousStep, customFormData = _b.customFormData, customFormErrors = _b.customFormErrors, customFormCellErrors = _b.customFormCellErrors, handleCustomFieldChange = _b.handleCustomFieldChange;
22
22
  // DEBUG LOGS
23
23
  console.log("🔍 [UserInputForm] informationType:", informationType);
24
24
  console.log("🔍 [UserInputForm] node.informationType:", props.node.informationType);
@@ -28,7 +28,7 @@ var UserInputForm = function (props) {
28
28
  return (jsxs(MobilePageLayout, { contentClassName: "h-full", footer: jsx(PageActions, { primary: jsx(Button, { onClick: goOnNextStep, children: t("user_input_form.buttons.continue") }), secondary: jsx(Button, { variant: "secondary", onClick: goOnPreviousStep, children: t("user_input_form.buttons.back") }) }), children: [typeof process !== "undefined" &&
29
29
  ((_a = process.env) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === "development" && (jsx("div", { className: "fixed right-0 top-0 z-50 bg-green-500 p-2 text-xs text-white", children: "UserInputForm Rendered \u2713" })), jsx("div", { className: "px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxs("div", { className: "mx-auto w-full space-y-6 ".concat(hasListCustomField
30
30
  ? "max-w-[98vw] md:max-w-[1300px] lg:max-w-[1500px]"
31
- : "max-w-md"), children: [jsxs("div", { className: "space-y-4 text-center", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: pageTitle }), jsx(Subtitle, { className: "text-sm leading-relaxed text-gray-600 md:text-base whitespace-pre-line", children: pageDescription })] }), jsxs("div", { className: "space-y-6 z-30 h-full", children: [informationType === "identity" && (jsx(IdentityFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "identity-legal" && (jsxs(Fragment, { children: [jsx(LegalEntityFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange }), requestedFields.has("adresse") && (jsxs("div", { className: "space-y-4", children: [jsx("h3", { className: "text-lg md:text-xl font-semibold text-gray-900", children: t("user_input_form.registered_office_address", "Adresse du siège social") }), jsx(AddressFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: handleAddressChange, onAddressFocus: handleAddressFocus, onAddressBlur: handleAddressBlur, onApplySuggestion: applyAddressSuggestion })] }))] })), informationType === "contact" && (jsx(ContactFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "address" && (jsx(AddressFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: handleAddressChange, onAddressFocus: handleAddressFocus, onAddressBlur: handleAddressBlur, onApplySuggestion: applyAddressSuggestion })), informationType === "nationality" && (jsx(NationalityField, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "custom" && props.node.customFields && (jsx(CustomFormFields, { customFields: props.node.customFields, formData: customFormData, errors: customFormErrors, onFieldChange: handleCustomFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: function (fieldId, val) { return handleAddressChange(val); }, onAddressFocus: function (fieldId) { return handleAddressFocus(); }, onAddressBlur: function (fieldId) { return handleAddressBlur(); }, onApplySuggestion: function (fieldId, suggestion) {
31
+ : "max-w-md"), children: [jsxs("div", { className: "space-y-4 text-center", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: pageTitle }), jsx(Subtitle, { className: "text-sm leading-relaxed text-gray-600 md:text-base whitespace-pre-line", children: pageDescription })] }), jsxs("div", { className: "space-y-6 z-30 h-full", children: [informationType === "identity" && (jsx(IdentityFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "identity-legal" && (jsxs(Fragment, { children: [jsx(LegalEntityFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange }), requestedFields.has("adresse") && (jsxs("div", { className: "space-y-4", children: [jsx("h3", { className: "text-lg md:text-xl font-semibold text-gray-900", children: t("user_input_form.registered_office_address", "Adresse du siège social") }), jsx(AddressFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: handleAddressChange, onAddressFocus: handleAddressFocus, onAddressBlur: handleAddressBlur, onApplySuggestion: applyAddressSuggestion })] }))] })), informationType === "contact" && (jsx(ContactFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "address" && (jsx(AddressFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: handleAddressChange, onAddressFocus: handleAddressFocus, onAddressBlur: handleAddressBlur, onApplySuggestion: applyAddressSuggestion })), informationType === "nationality" && (jsx(NationalityField, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "custom" && props.node.customFields && (jsx(CustomFormFields, { customFields: props.node.customFields, formData: customFormData, errors: customFormErrors, cellErrors: customFormCellErrors, onFieldChange: handleCustomFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: function (fieldId, val) { return handleAddressChange(val); }, onAddressFocus: function (fieldId) { return handleAddressFocus(); }, onAddressBlur: function (fieldId) { return handleAddressBlur(); }, onApplySuggestion: function (fieldId, suggestion) {
32
32
  return applyAddressSuggestion(suggestion);
33
33
  } }))] })] }) })] }));
34
34
  };
@@ -1 +1 @@
1
- {"version":3,"file":"UserInputForm.js","sources":["../../../../../src/components/session/UserInputForm.tsx"],"sourcesContent":["import type { UserInputFormProps } from \"../../types/userInput\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { useUserInputForm } from \"../../hooks/useUserInputForm\";\nimport IdentityFields from \"./UserInputForm/IdentityFields\";\nimport LegalEntityFields from \"./UserInputForm/LegalEntityFields\";\nimport ContactFields from \"./UserInputForm/ContactFields\";\nimport AddressFields from \"./UserInputForm/AddressFields\";\nimport NationalityField from \"./UserInputForm/NationalityField\";\nimport CustomFormFields from \"./UserInputForm/CustomFormFields\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst UserInputForm = (props: UserInputFormProps) => {\n const { t } = useI18n();\n const hasListCustomField =\n props.node.informationType === \"custom\" &&\n (props.node.customFields || []).some((field) => field.valueType === \"list\");\n\n const {\n form,\n errors,\n informationType,\n requestedFields,\n pageTitle,\n pageDescription,\n addressSuggestions,\n showSuggestions,\n handleFieldChange,\n handleAddressChange,\n handleAddressFocus,\n handleAddressBlur,\n applyAddressSuggestion,\n goOnNextStep,\n goOnPreviousStep,\n customFormData,\n customFormErrors,\n handleCustomFieldChange,\n } = useUserInputForm(props);\n\n // DEBUG LOGS\n console.log(\"🔍 [UserInputForm] informationType:\", informationType);\n console.log(\n \"🔍 [UserInputForm] node.informationType:\",\n props.node.informationType,\n );\n console.log(\"🔍 [UserInputForm] node.customFields:\", props.node.customFields);\n console.log(\"🔍 [UserInputForm] customFormData:\", customFormData);\n console.log(\n \"🔍 [UserInputForm] requestedFields:\",\n Array.from(requestedFields),\n );\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button onClick={goOnNextStep}>\n {t(\"user_input_form.buttons.continue\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={goOnPreviousStep}>\n {t(\"user_input_form.buttons.back\")}\n </Button>\n }\n />\n }\n >\n {typeof process !== \"undefined\" &&\n process.env?.NODE_ENV === \"development\" && (\n <div className=\"fixed right-0 top-0 z-50 bg-green-500 p-2 text-xs text-white\">\n UserInputForm Rendered ✓\n </div>\n )}\n\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div\n className={`mx-auto w-full space-y-6 ${\n hasListCustomField\n ? \"max-w-[98vw] md:max-w-[1300px] lg:max-w-[1500px]\"\n : \"max-w-md\"\n }`}\n >\n <div className=\"space-y-4 text-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {pageTitle}\n </Title>\n <Subtitle className=\"text-sm leading-relaxed text-gray-600 md:text-base whitespace-pre-line\">\n {pageDescription}\n </Subtitle>\n </div>\n\n <div className=\"space-y-6 z-30 h-full\">\n {informationType === \"identity\" && (\n <IdentityFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"identity-legal\" && (\n <>\n <LegalEntityFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n {requestedFields.has(\"adresse\") && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg md:text-xl font-semibold text-gray-900\">\n {t(\n \"user_input_form.registered_office_address\",\n \"Adresse du siège social\",\n )}\n </h3>\n <AddressFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={handleAddressChange}\n onAddressFocus={handleAddressFocus}\n onAddressBlur={handleAddressBlur}\n onApplySuggestion={applyAddressSuggestion}\n />\n </div>\n )}\n </>\n )}\n\n {informationType === \"contact\" && (\n <ContactFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"address\" && (\n <AddressFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={handleAddressChange}\n onAddressFocus={handleAddressFocus}\n onAddressBlur={handleAddressBlur}\n onApplySuggestion={applyAddressSuggestion}\n />\n )}\n\n {informationType === \"nationality\" && (\n <NationalityField\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"custom\" && props.node.customFields && (\n <CustomFormFields\n customFields={props.node.customFields}\n formData={customFormData}\n errors={customFormErrors}\n onFieldChange={handleCustomFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={(fieldId, val) => handleAddressChange(val)}\n onAddressFocus={(fieldId) => handleAddressFocus()}\n onAddressBlur={(fieldId) => handleAddressBlur()}\n onApplySuggestion={(fieldId, suggestion) =>\n applyAddressSuggestion(suggestion)\n }\n />\n )}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default UserInputForm;\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"UserInputForm.js","sources":["../../../../../src/components/session/UserInputForm.tsx"],"sourcesContent":["import type { UserInputFormProps } from \"../../types/userInput\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { useUserInputForm } from \"../../hooks/useUserInputForm\";\nimport IdentityFields from \"./UserInputForm/IdentityFields\";\nimport LegalEntityFields from \"./UserInputForm/LegalEntityFields\";\nimport ContactFields from \"./UserInputForm/ContactFields\";\nimport AddressFields from \"./UserInputForm/AddressFields\";\nimport NationalityField from \"./UserInputForm/NationalityField\";\nimport CustomFormFields from \"./UserInputForm/CustomFormFields\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst UserInputForm = (props: UserInputFormProps) => {\n const { t } = useI18n();\n const hasListCustomField =\n props.node.informationType === \"custom\" &&\n (props.node.customFields || []).some((field) => field.valueType === \"list\");\n\n const {\n form,\n errors,\n informationType,\n requestedFields,\n pageTitle,\n pageDescription,\n addressSuggestions,\n showSuggestions,\n handleFieldChange,\n handleAddressChange,\n handleAddressFocus,\n handleAddressBlur,\n applyAddressSuggestion,\n goOnNextStep,\n goOnPreviousStep,\n customFormData,\n customFormErrors,\n customFormCellErrors,\n handleCustomFieldChange,\n } = useUserInputForm(props);\n\n // DEBUG LOGS\n console.log(\"🔍 [UserInputForm] informationType:\", informationType);\n console.log(\n \"🔍 [UserInputForm] node.informationType:\",\n props.node.informationType,\n );\n console.log(\"🔍 [UserInputForm] node.customFields:\", props.node.customFields);\n console.log(\"🔍 [UserInputForm] customFormData:\", customFormData);\n console.log(\n \"🔍 [UserInputForm] requestedFields:\",\n Array.from(requestedFields),\n );\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button onClick={goOnNextStep}>\n {t(\"user_input_form.buttons.continue\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={goOnPreviousStep}>\n {t(\"user_input_form.buttons.back\")}\n </Button>\n }\n />\n }\n >\n {typeof process !== \"undefined\" &&\n process.env?.NODE_ENV === \"development\" && (\n <div className=\"fixed right-0 top-0 z-50 bg-green-500 p-2 text-xs text-white\">\n UserInputForm Rendered ✓\n </div>\n )}\n\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div\n className={`mx-auto w-full space-y-6 ${\n hasListCustomField\n ? \"max-w-[98vw] md:max-w-[1300px] lg:max-w-[1500px]\"\n : \"max-w-md\"\n }`}\n >\n <div className=\"space-y-4 text-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {pageTitle}\n </Title>\n <Subtitle className=\"text-sm leading-relaxed text-gray-600 md:text-base whitespace-pre-line\">\n {pageDescription}\n </Subtitle>\n </div>\n\n <div className=\"space-y-6 z-30 h-full\">\n {informationType === \"identity\" && (\n <IdentityFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"identity-legal\" && (\n <>\n <LegalEntityFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n {requestedFields.has(\"adresse\") && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg md:text-xl font-semibold text-gray-900\">\n {t(\n \"user_input_form.registered_office_address\",\n \"Adresse du siège social\",\n )}\n </h3>\n <AddressFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={handleAddressChange}\n onAddressFocus={handleAddressFocus}\n onAddressBlur={handleAddressBlur}\n onApplySuggestion={applyAddressSuggestion}\n />\n </div>\n )}\n </>\n )}\n\n {informationType === \"contact\" && (\n <ContactFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"address\" && (\n <AddressFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={handleAddressChange}\n onAddressFocus={handleAddressFocus}\n onAddressBlur={handleAddressBlur}\n onApplySuggestion={applyAddressSuggestion}\n />\n )}\n\n {informationType === \"nationality\" && (\n <NationalityField\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"custom\" && props.node.customFields && (\n <CustomFormFields\n customFields={props.node.customFields}\n formData={customFormData}\n errors={customFormErrors}\n cellErrors={customFormCellErrors}\n onFieldChange={handleCustomFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={(fieldId, val) => handleAddressChange(val)}\n onAddressFocus={(fieldId) => handleAddressFocus()}\n onAddressBlur={(fieldId) => handleAddressBlur()}\n onApplySuggestion={(fieldId, suggestion) =>\n applyAddressSuggestion(suggestion)\n }\n />\n )}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default UserInputForm;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -4,6 +4,7 @@ import { useState, useEffect, useCallback } from 'react';
4
4
  import { DocusealForm } from '@docuseal/react';
5
5
  import LoadingState from '../states/LoadingState.js';
6
6
  import { useTranslation } from 'react-i18next';
7
+ import sdkI18n from '../../i18n/index.js';
7
8
  import { getDocusealSigningToken } from '../../services/integrationService.js';
8
9
  import { logSignatureDocumentOpened, logDocumentSigned } from '../../services/auditTrailService.js';
9
10
 
@@ -15,7 +16,7 @@ var normalizeDocusealHost = function (rawHost) {
15
16
  };
16
17
  var DocusealSignature = function (_a) {
17
18
  var sessionId = _a.sessionId, templateId = _a.templateId, _b = _a.templateName, templateName = _b === void 0 ? "Document" : _b, onComplete = _a.onComplete, onBack = _a.onBack, prefillValues = _a.prefillValues, readonlyFieldNames = _a.readonlyFieldNames;
18
- var t = useTranslation().t;
19
+ var t = useTranslation("translation", { i18n: sdkI18n }).t;
19
20
  var _c = useState(null), token = _c[0], setToken = _c[1];
20
21
  var _d = useState(DEFAULT_DOCUSEAL_HOST), host = _d[0], setHost = _d[1];
21
22
  var _e = useState(true), loading = _e[0], setLoading = _e[1];
@@ -1 +1 @@
1
- {"version":3,"file":"DocusealSignature.js","sources":["../../../../../src/components/signature-electronic/DocusealSignature.tsx"],"sourcesContent":["import React, { useEffect, useState, useCallback } from \"react\";\nimport { DocusealForm } from \"@docuseal/react\";\nimport LoadingState from \"../states/LoadingState\";\nimport { useTranslation } from \"react-i18next\";\nimport { getDocusealSigningToken } from \"../../services/integrationService\";\nimport { logSignatureDocumentOpened, logDocumentSigned } from \"../../services/auditTrailService\";\n\nconst DEFAULT_DOCUSEAL_HOST = \"docuseal.datakeen.co\";\n\nconst normalizeDocusealHost = (rawHost?: string | null): string => {\n const candidate = (rawHost ?? \"\").trim() || DEFAULT_DOCUSEAL_HOST;\n // Just return the domain, stripping any protocol to let the component handle it\n return candidate.replace(/^https?:\\/\\//i, \"\").replace(/\\/+$/, \"\");\n};\n\ninterface DocusealSignatureProps {\n sessionId: string;\n templateId: string;\n templateName?: string;\n onComplete: () => void;\n onBack: () => void;\n /** Pre-filled field values from previous information-input steps */\n prefillValues?: Record<string, string>;\n /** Field names that should be read-only in the signing form */\n readonlyFieldNames?: string[];\n}\n\nconst DocusealSignature: React.FC<DocusealSignatureProps> = ({\n sessionId,\n templateId,\n templateName = \"Document\",\n onComplete,\n onBack,\n prefillValues,\n readonlyFieldNames,\n}) => {\n const { t } = useTranslation();\n const [token, setToken] = useState<string | null>(null);\n const [host, setHost] = useState<string>(DEFAULT_DOCUSEAL_HOST);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n\n const fetchData = async () => {\n try {\n setLoading(true);\n\n const data = await getDocusealSigningToken(sessionId, templateId);\n const normalizedHost = normalizeDocusealHost(data?.host);\n\n setToken(data.token);\n setHost(normalizedHost);\n } catch (err) {\n setError(t(\"signature.token_error\", \"Erreur lors du chargement de la signature.\"));\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, [sessionId, templateId, t]);\n\n const handleInit = useCallback(async () => {\n try {\n await logSignatureDocumentOpened(sessionId, {\n templateId,\n templateName: templateName || \"Document\",\n sessionId,\n });\n } catch (error) {\n console.error(\"[DocusealSignature] Failed to log SIGNATURE_DOCUMENT_OPENED:\", error);\n }\n }, [sessionId, templateId, templateName]);\n\n const handleComplete = useCallback(async () => {\n try {\n await logDocumentSigned(sessionId, {\n templateId,\n templateName: templateName || \"Document\",\n sessionId,\n });\n } catch (error) {\n console.error(\"[DocusealSignature] Failed to log DOCUMENT_SIGNED:\", error);\n }\n\n onComplete();\n }, [sessionId, templateId, templateName, onComplete]);\n\n if (loading) {\n return <LoadingState message={t(\"signature.loading\", \"Chargement du document...\")} subtitle=\"\" />;\n }\n\n if (error || !token) {\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\">{t(\"signature.error_title\", \"Erreur\")}</h2>\n <p className=\"text-gray-600 mb-4\">{error || t(\"signature.generic_error\", \"Impossible de charger le document.\")}</p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={onBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n const src = `https://${host}/s/${token}`;\n\n const customCss = `\n input[type=\"date\"] {\n width: 100% !important;\n min-height: 48px !important;\n padding: 10px 14px !important;\n font-size: 18px !important;\n box-sizing: border-box !important;\n }\n `;\n\n return (\n <div className=\"w-full flex-1 flex flex-col\" style={{ minHeight: \"600px\" }}>\n <DocusealForm\n src={src}\n host={host}\n withTitle={false}\n withSendCopyButton={false}\n values={prefillValues}\n readonlyFields={readonlyFieldNames}\n onComplete={handleComplete}\n onInit={handleInit}\n className=\"flex-1 w-full h-[600px]\"\n customCss={customCss}\n />\n </div>\n );\n};\n\nexport default DocusealSignature;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"DocusealSignature.js","sources":["../../../../../src/components/signature-electronic/DocusealSignature.tsx"],"sourcesContent":["import React, { useEffect, useState, useCallback } from \"react\";\nimport { DocusealForm } from \"@docuseal/react\";\nimport LoadingState from \"../states/LoadingState\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport { getDocusealSigningToken } from \"../../services/integrationService\";\nimport { logSignatureDocumentOpened, logDocumentSigned } from \"../../services/auditTrailService\";\n\nconst DEFAULT_DOCUSEAL_HOST = \"docuseal.datakeen.co\";\n\nconst normalizeDocusealHost = (rawHost?: string | null): string => {\n const candidate = (rawHost ?? \"\").trim() || DEFAULT_DOCUSEAL_HOST;\n // Just return the domain, stripping any protocol to let the component handle it\n return candidate.replace(/^https?:\\/\\//i, \"\").replace(/\\/+$/, \"\");\n};\n\ninterface DocusealSignatureProps {\n sessionId: string;\n templateId: string;\n templateName?: string;\n onComplete: () => void;\n onBack: () => void;\n /** Pre-filled field values from previous information-input steps */\n prefillValues?: Record<string, string>;\n /** Field names that should be read-only in the signing form */\n readonlyFieldNames?: string[];\n}\n\nconst DocusealSignature: React.FC<DocusealSignatureProps> = ({\n sessionId,\n templateId,\n templateName = \"Document\",\n onComplete,\n onBack,\n prefillValues,\n readonlyFieldNames,\n}) => {\n const { t } = useTranslation(\"translation\", { i18n: sdkI18n });\n const [token, setToken] = useState<string | null>(null);\n const [host, setHost] = useState<string>(DEFAULT_DOCUSEAL_HOST);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n\n const fetchData = async () => {\n try {\n setLoading(true);\n\n const data = await getDocusealSigningToken(sessionId, templateId);\n const normalizedHost = normalizeDocusealHost(data?.host);\n\n setToken(data.token);\n setHost(normalizedHost);\n } catch (err) {\n setError(t(\"signature.token_error\", \"Erreur lors du chargement de la signature.\"));\n } finally {\n setLoading(false);\n }\n };\n\n fetchData();\n }, [sessionId, templateId, t]);\n\n const handleInit = useCallback(async () => {\n try {\n await logSignatureDocumentOpened(sessionId, {\n templateId,\n templateName: templateName || \"Document\",\n sessionId,\n });\n } catch (error) {\n console.error(\"[DocusealSignature] Failed to log SIGNATURE_DOCUMENT_OPENED:\", error);\n }\n }, [sessionId, templateId, templateName]);\n\n const handleComplete = useCallback(async () => {\n try {\n await logDocumentSigned(sessionId, {\n templateId,\n templateName: templateName || \"Document\",\n sessionId,\n });\n } catch (error) {\n console.error(\"[DocusealSignature] Failed to log DOCUMENT_SIGNED:\", error);\n }\n\n onComplete();\n }, [sessionId, templateId, templateName, onComplete]);\n\n if (loading) {\n return <LoadingState message={t(\"signature.loading\", \"Chargement du document...\")} subtitle=\"\" />;\n }\n\n if (error || !token) {\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\">{t(\"signature.error_title\", \"Erreur\")}</h2>\n <p className=\"text-gray-600 mb-4\">{error || t(\"signature.generic_error\", \"Impossible de charger le document.\")}</p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={onBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n const src = `https://${host}/s/${token}`;\n\n const customCss = `\n input[type=\"date\"] {\n width: 100% !important;\n min-height: 48px !important;\n padding: 10px 14px !important;\n font-size: 18px !important;\n box-sizing: border-box !important;\n }\n `;\n\n return (\n <div className=\"w-full flex-1 flex flex-col\" style={{ minHeight: \"600px\" }}>\n <DocusealForm\n src={src}\n host={host}\n withTitle={false}\n withSendCopyButton={false}\n values={prefillValues}\n readonlyFields={readonlyFieldNames}\n onComplete={handleComplete}\n onInit={handleInit}\n className=\"flex-1 w-full h-[600px]\"\n customCss={customCss}\n />\n </div>\n );\n};\n\nexport default DocusealSignature;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -2,6 +2,7 @@ import { __awaiter, __generator } from '../../node_modules/tslib/tslib.es6.js';
2
2
  import { jsx, jsxs } from 'react/jsx-runtime';
3
3
  import { useMemo, useState, useEffect } from 'react';
4
4
  import { useTranslation } from 'react-i18next';
5
+ import sdkI18n from '../../i18n/index.js';
5
6
  import SignatureElectronicIntroduction from './SignatureElectronicIntroduction.js';
6
7
  import DocusealSignature from './DocusealSignature.js';
7
8
  import { updateSessionStatus } from '../../services/sessionService.js';
@@ -23,7 +24,7 @@ var FIELD_KEY_TO_USER_INPUT = {
23
24
  };
24
25
  var SignatureElectronic = function (_a) {
25
26
  var sessionId = _a.sessionId, stepObject = _a.stepObject, title = _a.title, description = _a.description, external_id = _a.external_id, fieldMappings = _a.fieldMappings, userInput = _a.userInput, contactInfo = _a.contactInfo;
26
- var t = useTranslation().t;
27
+ var t = useTranslation("translation", { i18n: sdkI18n }).t;
27
28
  var signatureViewStorageKey = useMemo(function () { return "dk-signature-open:".concat(sessionId, ":").concat(external_id !== null && external_id !== void 0 ? external_id : "no-template"); }, [sessionId, external_id]);
28
29
  var _b = useState(function () {
29
30
  if (typeof window === "undefined")
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureElectronic.js","sources":["../../../../../src/components/signature-electronic/SignatureElectronic.tsx"],"sourcesContent":["import React, { useState, useMemo, useEffect } from \"react\";\nimport type { stepObject, SessionTemplateNode } from \"../../types/session\";\nimport type { UserInput } from \"../../types/userInput\";\nimport type { ContactInfo } from \"../../types/contactInfo\";\nimport { useTranslation } from \"react-i18next\";\nimport SignatureElectronicIntroduction from \"./SignatureElectronicIntroduction\";\nimport DocusealSignature from \"./DocusealSignature\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n/**\n * Maps an InformationFieldKey (journey field) to the corresponding UserInput key.\n * This bridges the admin-defined field names to the actual data collected in the SDK.\n */\nconst FIELD_KEY_TO_USER_INPUT: Record<string, (ui: UserInput, ci?: ContactInfo) => string | undefined> = {\n nom: (ui) => ui.lastName,\n prenom: (ui) => ui.firstName,\n date_naissance: (ui) => ui.birthDate,\n email: (ui, ci) => ui.email || ci?.email,\n sms: (ui, ci) => ui.sms || ui.phoneNumber || ci?.phoneNumber,\n adresse: (ui) => [ui.addressLine1, ui.addressLine2, ui.postalCode, ui.city, ui.countryCode].filter(Boolean).join(', '),\n nationalite: (ui) => ui.nationality,\n siret: (ui) => ui.siret,\n tva: (ui) => ui.tva,\n};\n\ninterface SignatureElectronicProps {\n sessionId: string;\n stepObject: stepObject;\n title?: string;\n description?: string;\n external_id?: string;\n fieldMappings?: SessionTemplateNode['fieldMappings'];\n userInput?: UserInput;\n contactInfo?: ContactInfo;\n}\n\nconst SignatureElectronic: React.FC<SignatureElectronicProps> = ({\n sessionId,\n stepObject,\n title,\n description,\n external_id,\n fieldMappings,\n userInput,\n contactInfo,\n}) => {\n const { t } = useTranslation();\n const signatureViewStorageKey = useMemo(() => `dk-signature-open:${sessionId}:${external_id ?? \"no-template\"}`, [sessionId, external_id]);\n const [showSignature, setShowSignature] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.sessionStorage.getItem(signatureViewStorageKey) === \"1\";\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n if (showSignature) {\n window.sessionStorage.setItem(signatureViewStorageKey, \"1\");\n } else {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n }, [showSignature, signatureViewStorageKey]);\n\n /**\n * Build the pre-fill values object from userInput + fieldMappings.\n * Maps each configured field to its value from userInput.\n * Used by DocusealForm's `values` prop for client-side pre-filling.\n */\n const prefillValues = useMemo<Record<string, string> | undefined>(() => {\n if (!fieldMappings || !userInput) return undefined;\n\n const values: Record<string, string> = {};\n\n fieldMappings.forEach(mapping => {\n const resolver = FIELD_KEY_TO_USER_INPUT[mapping.sourceFieldId];\n let value: string | undefined;\n\n if (resolver) {\n value = resolver(userInput, contactInfo);\n } else if (userInput.customFormData) {\n const raw = userInput.customFormData[mapping.sourceFieldId];\n value = raw != null ? String(raw) : undefined;\n }\n\n if (value !== undefined && value !== '') {\n values[mapping.sourceFieldId] = value;\n }\n });\n\n return Object.keys(values).length > 0 ? values : undefined;\n }, [fieldMappings, userInput, contactInfo]);\n\n /**\n * Build the list of field names that should be read-only in the signing form.\n * Only includes fields that are both mapped AND marked as readonly by the admin.\n */\n const readonlyFieldNames = useMemo<string[] | undefined>(() => {\n if (!fieldMappings) return undefined;\n\n const names = fieldMappings\n .filter(m => m.readonly)\n .map(m => m.sourceFieldId);\n\n return names.length > 0 ? names : undefined;\n }, [fieldMappings]);\n\n const handleContinue = () => {\n setShowSignature(true);\n };\n\n const handleComplete = async () => {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n try {\n await updateSessionStatus(sessionId, \"conform\");\n } catch (err) {\n console.error(\"[SignatureElectronic] Failed to update session status:\", err);\n // Non-bloquant : l'utilisateur avance quoi qu'il arrive\n }\n // Progress to the next step in the journey\n stepObject.setStep(stepObject.step + 1);\n };\n\n const handleBack = () => {\n if (showSignature) {\n setShowSignature(false);\n } else {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n // Go back to the previous step in the journey\n stepObject.setStep(stepObject.step - 1);\n }\n };\n\n if (showSignature && external_id) {\n return (\n <DocusealSignature\n sessionId={sessionId}\n templateId={external_id}\n templateName={title}\n onComplete={handleComplete}\n onBack={handleBack}\n prefillValues={prefillValues}\n readonlyFieldNames={readonlyFieldNames}\n />\n );\n }\n\n if (showSignature && !external_id) {\n // No template configured — show error instead of silently falling back to intro\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(\"signature.error_title\", \"Erreur\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"signature.no_template\", \"Le modèle de signature n'est pas configuré.\")}\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={handleBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n return (\n <SignatureElectronicIntroduction\n onContinue={handleContinue}\n onBack={handleBack}\n title={title}\n description={description}\n />\n );\n};\n\nexport default SignatureElectronic;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"SignatureElectronic.js","sources":["../../../../../src/components/signature-electronic/SignatureElectronic.tsx"],"sourcesContent":["import React, { useState, useMemo, useEffect } from \"react\";\nimport type { stepObject, SessionTemplateNode } from \"../../types/session\";\nimport type { UserInput } from \"../../types/userInput\";\nimport type { ContactInfo } from \"../../types/contactInfo\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport SignatureElectronicIntroduction from \"./SignatureElectronicIntroduction\";\nimport DocusealSignature from \"./DocusealSignature\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n/**\n * Maps an InformationFieldKey (journey field) to the corresponding UserInput key.\n * This bridges the admin-defined field names to the actual data collected in the SDK.\n */\nconst FIELD_KEY_TO_USER_INPUT: Record<string, (ui: UserInput, ci?: ContactInfo) => string | undefined> = {\n nom: (ui) => ui.lastName,\n prenom: (ui) => ui.firstName,\n date_naissance: (ui) => ui.birthDate,\n email: (ui, ci) => ui.email || ci?.email,\n sms: (ui, ci) => ui.sms || ui.phoneNumber || ci?.phoneNumber,\n adresse: (ui) => [ui.addressLine1, ui.addressLine2, ui.postalCode, ui.city, ui.countryCode].filter(Boolean).join(', '),\n nationalite: (ui) => ui.nationality,\n siret: (ui) => ui.siret,\n tva: (ui) => ui.tva,\n};\n\ninterface SignatureElectronicProps {\n sessionId: string;\n stepObject: stepObject;\n title?: string;\n description?: string;\n external_id?: string;\n fieldMappings?: SessionTemplateNode['fieldMappings'];\n userInput?: UserInput;\n contactInfo?: ContactInfo;\n}\n\nconst SignatureElectronic: React.FC<SignatureElectronicProps> = ({\n sessionId,\n stepObject,\n title,\n description,\n external_id,\n fieldMappings,\n userInput,\n contactInfo,\n}) => {\n const { t } = useTranslation(\"translation\", { i18n: sdkI18n });\n const signatureViewStorageKey = useMemo(() => `dk-signature-open:${sessionId}:${external_id ?? \"no-template\"}`, [sessionId, external_id]);\n const [showSignature, setShowSignature] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.sessionStorage.getItem(signatureViewStorageKey) === \"1\";\n });\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n if (showSignature) {\n window.sessionStorage.setItem(signatureViewStorageKey, \"1\");\n } else {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n }, [showSignature, signatureViewStorageKey]);\n\n /**\n * Build the pre-fill values object from userInput + fieldMappings.\n * Maps each configured field to its value from userInput.\n * Used by DocusealForm's `values` prop for client-side pre-filling.\n */\n const prefillValues = useMemo<Record<string, string> | undefined>(() => {\n if (!fieldMappings || !userInput) return undefined;\n\n const values: Record<string, string> = {};\n\n fieldMappings.forEach(mapping => {\n const resolver = FIELD_KEY_TO_USER_INPUT[mapping.sourceFieldId];\n let value: string | undefined;\n\n if (resolver) {\n value = resolver(userInput, contactInfo);\n } else if (userInput.customFormData) {\n const raw = userInput.customFormData[mapping.sourceFieldId];\n value = raw != null ? String(raw) : undefined;\n }\n\n if (value !== undefined && value !== '') {\n values[mapping.sourceFieldId] = value;\n }\n });\n\n return Object.keys(values).length > 0 ? values : undefined;\n }, [fieldMappings, userInput, contactInfo]);\n\n /**\n * Build the list of field names that should be read-only in the signing form.\n * Only includes fields that are both mapped AND marked as readonly by the admin.\n */\n const readonlyFieldNames = useMemo<string[] | undefined>(() => {\n if (!fieldMappings) return undefined;\n\n const names = fieldMappings\n .filter(m => m.readonly)\n .map(m => m.sourceFieldId);\n\n return names.length > 0 ? names : undefined;\n }, [fieldMappings]);\n\n const handleContinue = () => {\n setShowSignature(true);\n };\n\n const handleComplete = async () => {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n try {\n await updateSessionStatus(sessionId, \"conform\");\n } catch (err) {\n console.error(\"[SignatureElectronic] Failed to update session status:\", err);\n // Non-bloquant : l'utilisateur avance quoi qu'il arrive\n }\n // Progress to the next step in the journey\n stepObject.setStep(stepObject.step + 1);\n };\n\n const handleBack = () => {\n if (showSignature) {\n setShowSignature(false);\n } else {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n // Go back to the previous step in the journey\n stepObject.setStep(stepObject.step - 1);\n }\n };\n\n if (showSignature && external_id) {\n return (\n <DocusealSignature\n sessionId={sessionId}\n templateId={external_id}\n templateName={title}\n onComplete={handleComplete}\n onBack={handleBack}\n prefillValues={prefillValues}\n readonlyFieldNames={readonlyFieldNames}\n />\n );\n }\n\n if (showSignature && !external_id) {\n // No template configured — show error instead of silently falling back to intro\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(\"signature.error_title\", \"Erreur\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"signature.no_template\", \"Le modèle de signature n'est pas configuré.\")}\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={handleBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n return (\n <SignatureElectronicIntroduction\n onContinue={handleContinue}\n onBack={handleBack}\n title={title}\n description={description}\n />\n );\n};\n\nexport default SignatureElectronic;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -4,12 +4,13 @@ import Subtitle from '../ui/Subtitle.js';
4
4
  import Button from '../ui/Button.js';
5
5
  import PageActions from '../ui/PageActions.js';
6
6
  import { useTranslation } from 'react-i18next';
7
+ import sdkI18n from '../../i18n/index.js';
7
8
  import MobilePageLayout from '../ui/MobilePageLayout.js';
8
9
  import ElectronicIcon from '../icons/ElectronicIcon.js';
9
10
 
10
11
  var SignatureElectronicIntroduction = function (_a) {
11
12
  var onContinue = _a.onContinue, onBack = _a.onBack, propTitle = _a.title, propDescription = _a.description;
12
- var t = useTranslation().t;
13
+ var t = useTranslation("translation", { i18n: sdkI18n }).t;
13
14
  var title = propTitle || t("signature.introduction_title", "Signature électronique");
14
15
  var description = propDescription || t("signature.introduction_description", "Veuillez signer le document pour continuer.");
15
16
  var handleContinueClick = function (event) {
@@ -1 +1 @@
1
- {"version":3,"file":"SignatureElectronicIntroduction.js","sources":["../../../../../src/components/signature-electronic/SignatureElectronicIntroduction.tsx"],"sourcesContent":["import React from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { useTranslation } from \"react-i18next\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport ElectronicIcon from \"../icons/ElectronicIcon\";\n\ninterface SignatureElectronicIntroductionProps {\n onContinue: () => void;\n onBack: () => void;\n title?: string;\n description?: string;\n}\n\nconst SignatureElectronicIntroduction: React.FC<SignatureElectronicIntroductionProps> = ({\n onContinue,\n onBack,\n title: propTitle,\n description: propDescription,\n}) => {\n const { t } = useTranslation();\n\n const title = propTitle || t(\"signature.introduction_title\", \"Signature électronique\");\n const description = propDescription || t(\"signature.introduction_description\", \"Veuillez signer le document pour continuer.\");\n\n const handleContinueClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n onContinue();\n };\n\n const handleBackClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n onBack();\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinueClick} type=\"button\">\n {t(\"buttons.continue\", \"Commencer\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={handleBackClick} type=\"button\">\n {t(\"buttons.back\", \"Retour\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">{title}</Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {description}\n </Subtitle>\n </div>\n\n <div className=\"flex justify-center items-center w-full py-6\">\n <ElectronicIcon className=\"w-full max-w-xs md:max-w-sm\" />\n </div>\n\n {/* Information box */}\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <div className=\"flex\">\n <div className=\"shrink-0\">\n <svg\n className=\"h-5 w-5 text-blue-400\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-blue-800\">\n {t(\"signature.info_title\", \"Instruction\")}\n </h3>\n <div className=\"mt-2 text-sm text-blue-700\">\n <p>{t(\"signature.info_description\", \"Vous allez être redirigé vers un formulaire de signature sécurisé. Assurez-vous d'avoir une connexion stable.\")}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default SignatureElectronicIntroduction;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"SignatureElectronicIntroduction.js","sources":["../../../../../src/components/signature-electronic/SignatureElectronicIntroduction.tsx"],"sourcesContent":["import React from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport ElectronicIcon from \"../icons/ElectronicIcon\";\n\ninterface SignatureElectronicIntroductionProps {\n onContinue: () => void;\n onBack: () => void;\n title?: string;\n description?: string;\n}\n\nconst SignatureElectronicIntroduction: React.FC<SignatureElectronicIntroductionProps> = ({\n onContinue,\n onBack,\n title: propTitle,\n description: propDescription,\n}) => {\n const { t } = useTranslation(\"translation\", { i18n: sdkI18n });\n\n const title = propTitle || t(\"signature.introduction_title\", \"Signature électronique\");\n const description = propDescription || t(\"signature.introduction_description\", \"Veuillez signer le document pour continuer.\");\n\n const handleContinueClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n onContinue();\n };\n\n const handleBackClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n onBack();\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinueClick} type=\"button\">\n {t(\"buttons.continue\", \"Commencer\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={handleBackClick} type=\"button\">\n {t(\"buttons.back\", \"Retour\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">{title}</Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {description}\n </Subtitle>\n </div>\n\n <div className=\"flex justify-center items-center w-full py-6\">\n <ElectronicIcon className=\"w-full max-w-xs md:max-w-sm\" />\n </div>\n\n {/* Information box */}\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <div className=\"flex\">\n <div className=\"shrink-0\">\n <svg\n className=\"h-5 w-5 text-blue-400\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-blue-800\">\n {t(\"signature.info_title\", \"Instruction\")}\n </h3>\n <div className=\"mt-2 text-sm text-blue-700\">\n <p>{t(\"signature.info_description\", \"Vous allez être redirigé vers un formulaire de signature sécurisé. Assurez-vous d'avoir une connexion stable.\")}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default SignatureElectronicIntroduction;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -31,10 +31,13 @@ import '../jdi/JDIProcessing.js';
31
31
  import '../../services/cameraService.js';
32
32
  import '../../services/documentDetectionService.js';
33
33
  import 'lucide-react';
34
- import 'react-i18next';
35
34
  import '../document-collection/DocumentProcessing.js';
36
35
  import '../../constants/userInputForm.js';
37
- import '../session/UserInputForm/CustomFormFields.js';
36
+ import 'date-fns';
37
+ import 'react-day-picker';
38
+ import '@radix-ui/react-popover';
39
+ import 'react-i18next';
40
+ import '../../i18n/index.js';
38
41
  import '@docuseal/react';
39
42
  import '../../services/professionalImageQuality.js';
40
43
  import '../../providers/I18nProvider.js';
@@ -1 +1 @@
1
- {"version":3,"file":"CGU.js","sources":["../../../../../src/components/start-flow/CGU.tsx"],"sourcesContent":["import Body from \"../ui/Body\";\nimport Title from \"../ui/Title\";\nimport { useState } from \"react\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n// For checkbox\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { useI18n } from \"../..\";\nimport LanguageSelector from \"../ui/LanguageSelector\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { SessionData } from \"../../types/session\";\n\ninterface CGUProps {\n setStep: (nubr: number) => void;\n sessionId?: string;\n showQRCodeInstructions: boolean;\n languages?: string[];\n session?: SessionData;\n onBack?: () => void;\n}\n\nconst CGU = ({\n setStep,\n sessionId,\n showQRCodeInstructions,\n languages,\n session,\n onBack,\n}: CGUProps) => {\n const { t, setLanguage } = useI18n();\n const [selectedLanguage, setSelectedLanguage] = useState(\n languages ? languages[0] : \"fr\"\n );\n const [checked, setChecked] = useState(false);\n const [error, setError] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const handleCheckboxChange = (value: boolean) => {\n setChecked(value);\n setError(false);\n setSubmitError(null);\n };\n\n const goOnNextStep = async () => {\n if (!checked) {\n setError(true);\n return;\n }\n\n const nextStep = showQRCodeInstructions ? 0.5 : 1;\n\n if (!sessionId) {\n setStep(nextStep);\n return;\n }\n\n setIsSubmitting(true);\n try {\n await updateSessionStatus(sessionId, \"started\");\n setStep(nextStep);\n } catch (statusError) {\n console.error(t(\"CGU.error.console_update_status\"), statusError);\n setSubmitError(t(\"CGU.error.general\"));\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleLanguageChange = (langId: string) => {\n const lang = languages?.find((l) => l === langId);\n if (lang) {\n setLanguage(lang);\n setSelectedLanguage(lang);\n }\n };\n\n return (\n <MobilePageLayout\n session={session ?? undefined}\n footer={\n <div className=\"w-full space-y-4\">\n {/* Error message */}\n {(error || submitError) && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-3\">\n <Body className=\"text-red-600 text-sm text-center\">\n {submitError ? submitError : t(\"CGU.error.required\")}\n </Body>\n </div>\n )}\n\n {/* Consent checkbox */}\n <div className=\"flex items-start gap-3 p-3 bg-gray-50 rounded-lg\">\n <CheckboxPrimitive.Root\n id=\"checkbox\"\n checked={checked}\n onCheckedChange={(value) => handleCheckboxChange(!!value)}\n className={`mt-1 h-5 w-5 shrink-0 rounded border bg-white transition-colors\n data-[state=checked]:bg-[var(--dk-btn-bg)] data-[state=checked]:border-[var(--dk-btn-bg)]\n ${error\n ? \"border-red-500\"\n : \"border-gray-300 hover:border-gray-400\"\n }\n `}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-white\">\n <CheckIcon className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n <LabelPrimitive.Root htmlFor=\"checkbox\" className=\"cursor-pointer\">\n <Body\n className={`text-left text-sm leading-relaxed ${error ? \"text-red-600\" : \"text-gray-700\"\n }`}\n >\n {t(\"CGU.checkbox_text\")}\n </Body>\n </LabelPrimitive.Root>\n </div>\n\n {/* Buttons */}\n <PageActions\n primary={\n <Button\n onClick={goOnNextStep}\n disabled={!checked || isSubmitting}\n >\n {isSubmitting\n ? t(\"CGU.button.loading\")\n : t(\"CGU.button.continue\")}\n </Button>\n }\n secondary={\n onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.country_selection.back\")}\n </Button>\n ) : undefined\n }\n />\n </div>\n }\n >\n <div className=\"px-4 py-8 md:px-8 flex flex-col\">\n <div className=\"w-full max-w-2xl mx-auto space-y-6\">\n <div className=\"text-center justify-center items-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl mb-6\">\n {t(\"CGU.terms_of_use\")}\n </Title>\n\n {/* Language selector */}\n {languages && languages.length > 1 && (\n <div className=\"flex justify-center items-center mb-6\">\n <LanguageSelector\n className=\"w-64 mx-auto\"\n languages={languages}\n />\n </div>\n )}\n </div>\n\n {/* Terms content */}\n <div className=\"bg-gray-50 rounded-lg p-4 md:p-6\">\n <Body className=\"text-left text-sm md:text-base leading-relaxed space-y-4\">\n <p>{t(\"CGU.title\")}</p>\n <p>{t(\"CGU.description\")}</p>\n <p>\n {t(\"CGU.description2_before\")}{\" \"}\n <a\n href={t(\"CGU.privacy_url\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline text-blue-600 hover:text-blue-800\"\n >\n {t(\"CGU.privacy_link_label\")}\n </a>\n {t(\"CGU.description2_after\")}\n </p>\n <p>\n {t(\"CGU.by_proceeding_before\")}{\" \"}\n <a\n href={t(\"CGU.cgu_url\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline text-blue-600 hover:text-blue-800\"\n >\n {t(\"CGU.cgu_link_label\")}\n </a>\n {t(\"CGU.by_proceeding_after\")}\n </p>\n </Body>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default CGU;\n"],"names":["_jsx","_jsxs","LabelPrimitive"],"mappings":"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"}
1
+ {"version":3,"file":"CGU.js","sources":["../../../../../src/components/start-flow/CGU.tsx"],"sourcesContent":["import Body from \"../ui/Body\";\nimport Title from \"../ui/Title\";\nimport { useState } from \"react\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n// For checkbox\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { useI18n } from \"../..\";\nimport LanguageSelector from \"../ui/LanguageSelector\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { SessionData } from \"../../types/session\";\n\ninterface CGUProps {\n setStep: (nubr: number) => void;\n sessionId?: string;\n showQRCodeInstructions: boolean;\n languages?: string[];\n session?: SessionData;\n onBack?: () => void;\n}\n\nconst CGU = ({\n setStep,\n sessionId,\n showQRCodeInstructions,\n languages,\n session,\n onBack,\n}: CGUProps) => {\n const { t, setLanguage } = useI18n();\n const [selectedLanguage, setSelectedLanguage] = useState(\n languages ? languages[0] : \"fr\"\n );\n const [checked, setChecked] = useState(false);\n const [error, setError] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const handleCheckboxChange = (value: boolean) => {\n setChecked(value);\n setError(false);\n setSubmitError(null);\n };\n\n const goOnNextStep = async () => {\n if (!checked) {\n setError(true);\n return;\n }\n\n const nextStep = showQRCodeInstructions ? 0.5 : 1;\n\n if (!sessionId) {\n setStep(nextStep);\n return;\n }\n\n setIsSubmitting(true);\n try {\n await updateSessionStatus(sessionId, \"started\");\n setStep(nextStep);\n } catch (statusError) {\n console.error(t(\"CGU.error.console_update_status\"), statusError);\n setSubmitError(t(\"CGU.error.general\"));\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleLanguageChange = (langId: string) => {\n const lang = languages?.find((l) => l === langId);\n if (lang) {\n setLanguage(lang);\n setSelectedLanguage(lang);\n }\n };\n\n return (\n <MobilePageLayout\n session={session ?? undefined}\n footer={\n <div className=\"w-full space-y-4\">\n {/* Error message */}\n {(error || submitError) && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-3\">\n <Body className=\"text-red-600 text-sm text-center\">\n {submitError ? submitError : t(\"CGU.error.required\")}\n </Body>\n </div>\n )}\n\n {/* Consent checkbox */}\n <div className=\"flex items-start gap-3 p-3 bg-gray-50 rounded-lg\">\n <CheckboxPrimitive.Root\n id=\"checkbox\"\n checked={checked}\n onCheckedChange={(value) => handleCheckboxChange(!!value)}\n className={`mt-1 h-5 w-5 shrink-0 rounded border bg-white transition-colors\n data-[state=checked]:bg-[var(--dk-btn-bg)] data-[state=checked]:border-[var(--dk-btn-bg)]\n ${error\n ? \"border-red-500\"\n : \"border-gray-300 hover:border-gray-400\"\n }\n `}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-white\">\n <CheckIcon className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n <LabelPrimitive.Root htmlFor=\"checkbox\" className=\"cursor-pointer\">\n <Body\n className={`text-left text-sm leading-relaxed ${error ? \"text-red-600\" : \"text-gray-700\"\n }`}\n >\n {t(\"CGU.checkbox_text\")}\n </Body>\n </LabelPrimitive.Root>\n </div>\n\n {/* Buttons */}\n <PageActions\n primary={\n <Button\n onClick={goOnNextStep}\n disabled={!checked || isSubmitting}\n >\n {isSubmitting\n ? t(\"CGU.button.loading\")\n : t(\"CGU.button.continue\")}\n </Button>\n }\n secondary={\n onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.country_selection.back\")}\n </Button>\n ) : undefined\n }\n />\n </div>\n }\n >\n <div className=\"px-4 py-8 md:px-8 flex flex-col\">\n <div className=\"w-full max-w-2xl mx-auto space-y-6\">\n <div className=\"text-center justify-center items-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl mb-6\">\n {t(\"CGU.terms_of_use\")}\n </Title>\n\n {/* Language selector */}\n {languages && languages.length > 1 && (\n <div className=\"flex justify-center items-center mb-6\">\n <LanguageSelector\n className=\"w-64 mx-auto\"\n languages={languages}\n />\n </div>\n )}\n </div>\n\n {/* Terms content */}\n <div className=\"bg-gray-50 rounded-lg p-4 md:p-6\">\n <Body className=\"text-left text-sm md:text-base leading-relaxed space-y-4\">\n <p>{t(\"CGU.title\")}</p>\n <p>{t(\"CGU.description\")}</p>\n <p>\n {t(\"CGU.description2_before\")}{\" \"}\n <a\n href={t(\"CGU.privacy_url\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline text-blue-600 hover:text-blue-800\"\n >\n {t(\"CGU.privacy_link_label\")}\n </a>\n {t(\"CGU.description2_after\")}\n </p>\n <p>\n {t(\"CGU.by_proceeding_before\")}{\" \"}\n <a\n href={t(\"CGU.cgu_url\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline text-blue-600 hover:text-blue-800\"\n >\n {t(\"CGU.cgu_link_label\")}\n </a>\n {t(\"CGU.by_proceeding_after\")}\n </p>\n </Body>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default CGU;\n"],"names":["_jsx","_jsxs","LabelPrimitive"],"mappings":"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"}
@@ -31,10 +31,13 @@ import '../jdi/JDIProcessing.js';
31
31
  import '../../services/cameraService.js';
32
32
  import '../../services/documentDetectionService.js';
33
33
  import 'lucide-react';
34
- import 'react-i18next';
35
34
  import '../document-collection/DocumentProcessing.js';
36
35
  import '../../constants/userInputForm.js';
37
- import '../session/UserInputForm/CustomFormFields.js';
36
+ import 'date-fns';
37
+ import 'react-day-picker';
38
+ import '@radix-ui/react-popover';
39
+ import 'react-i18next';
40
+ import '../../i18n/index.js';
38
41
  import '@docuseal/react';
39
42
  import '../../services/professionalImageQuality.js';
40
43
  import '../../providers/I18nProvider.js';