datakeen-session-react 1.1.140-dev.64 → 1.1.140-dev.65
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.
- package/dist/cjs/components/session/UserInputForm/DatePickerField.js +3 -21
- package/dist/cjs/components/session/UserInputForm/DatePickerField.js.map +1 -1
- package/dist/cjs/components/start-flow/CGU.js +1 -0
- package/dist/cjs/components/start-flow/CGU.js.map +1 -1
- package/dist/cjs/components/start-flow/Start.js +1 -0
- package/dist/cjs/components/start-flow/Start.js.map +1 -1
- package/dist/esm/components/session/UserInputForm/DatePickerField.js +3 -21
- package/dist/esm/components/session/UserInputForm/DatePickerField.js.map +1 -1
- package/dist/esm/components/start-flow/CGU.js +1 -0
- package/dist/esm/components/start-flow/CGU.js.map +1 -1
- package/dist/esm/components/start-flow/Start.js +1 -0
- package/dist/esm/components/start-flow/Start.js.map +1 -1
- package/jest.config.js +1 -0
- package/package.json +1 -1
|
@@ -5,6 +5,7 @@ var React = require('react');
|
|
|
5
5
|
var dateFns = require('date-fns');
|
|
6
6
|
var lucideReact = require('lucide-react');
|
|
7
7
|
var reactDayPicker = require('react-day-picker');
|
|
8
|
+
require('../../../node_modules/react-day-picker/src/style.css.js');
|
|
8
9
|
var Popover = require('@radix-ui/react-popover');
|
|
9
10
|
var clsx = require('clsx');
|
|
10
11
|
var useI18n = require('../../../hooks/useI18n.js');
|
|
@@ -31,8 +32,6 @@ function _interopNamespaceDefault(e) {
|
|
|
31
32
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
32
33
|
var Popover__namespace = /*#__PURE__*/_interopNamespaceDefault(Popover);
|
|
33
34
|
|
|
34
|
-
// Styles injectés inline → toujours présents en prod, pas de dépendance au CDN
|
|
35
|
-
var DP_STYLES = "\n.dp-months{padding:.75rem}\n.dp-month{display:flex;flex-direction:column;gap:.5rem}\n.dp-caption{display:flex;align-items:center;justify-content:center;height:2rem;font-weight:600;font-size:.875rem;position:relative}\n.dp-nav-btn{position:absolute;top:50%;transform:translateY(-50%);width:1.75rem;height:1.75rem;border:1px solid #e5e7eb;border-radius:.25rem;background:transparent;display:flex;align-items:center;justify-content:center;opacity:.6;cursor:pointer;padding:0}\n.dp-nav-btn:hover{opacity:1}\n.dp-grid{width:100%;border-collapse:collapse;table-layout:fixed}\n.dp-weekday{color:#9ca3af;font-weight:400;font-size:.75rem;text-align:center;padding-bottom:.25rem}\n.dp-day{text-align:center;padding:.125rem 0}\n.dp-day-btn{width:2rem;height:2rem;border-radius:.25rem;font-size:.875rem;background:none;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;margin:0 auto}\n.dp-day-btn:hover{background-color:#f3f4f6}\n.dp-selected .dp-day-btn{background-color:#11e5c5;color:#fff}\n.dp-today:not(.dp-selected) .dp-day-btn{background-color:#f3f4f6;font-weight:600}\n.dp-outside{opacity:.35}\n.dp-disabled .dp-day-btn{cursor:default;pointer-events:none}\n.dp-hidden{visibility:hidden}\n";
|
|
36
35
|
// ─── helpers ──────────────────────────────────────────────────────────────────
|
|
37
36
|
var FORMAT_TO_DATEFNS = {
|
|
38
37
|
"dd/mm/yyyy": "dd/MM/yyyy",
|
|
@@ -99,24 +98,7 @@ var MiniCalendar = function (_a) {
|
|
|
99
98
|
? "bg-[#11E5C5] text-white font-semibold"
|
|
100
99
|
: "hover:bg-gray-100"), children: m }, m)); }) })] }));
|
|
101
100
|
}
|
|
102
|
-
return (jsxRuntime.jsx(reactDayPicker.DayPicker, { mode: "single", selected: selected, onSelect: onSelect, month: displayMonth, onMonthChange: setDisplayMonth, locale: locale, showOutsideDays: true, navLayout: "around",
|
|
103
|
-
months: "dp-months",
|
|
104
|
-
month: "dp-month",
|
|
105
|
-
month_caption: "dp-caption",
|
|
106
|
-
button_previous: "dp-nav-btn",
|
|
107
|
-
button_next: "dp-nav-btn",
|
|
108
|
-
month_grid: "dp-grid",
|
|
109
|
-
weekdays: "dp-weekdays",
|
|
110
|
-
weekday: "dp-weekday",
|
|
111
|
-
week: "dp-week",
|
|
112
|
-
day: "dp-day",
|
|
113
|
-
day_button: "dp-day-btn",
|
|
114
|
-
selected: "dp-selected",
|
|
115
|
-
today: "dp-today",
|
|
116
|
-
outside: "dp-outside",
|
|
117
|
-
disabled: "dp-disabled",
|
|
118
|
-
hidden: "dp-hidden",
|
|
119
|
-
}, components: {
|
|
101
|
+
return (jsxRuntime.jsx(reactDayPicker.DayPicker, { mode: "single", selected: selected, onSelect: onSelect, month: displayMonth, onMonthChange: setDisplayMonth, locale: locale, showOutsideDays: true, navLayout: "around", components: {
|
|
120
102
|
MonthCaption: CustomMonthCaption,
|
|
121
103
|
Chevron: CustomChevron,
|
|
122
104
|
} }));
|
|
@@ -166,7 +148,7 @@ var DatePickerField = function (_a) {
|
|
|
166
148
|
};
|
|
167
149
|
var defaultPlaceholder = placeholder !== null && placeholder !== void 0 ? placeholder : dfnsFmt.toUpperCase();
|
|
168
150
|
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);
|
|
169
|
-
return (jsxRuntime.jsxs(Popover__namespace.Root, { open: open, onOpenChange: setOpen, children: [jsxRuntime.jsx(Popover__namespace.Trigger, { asChild: true, children: jsxRuntime.jsxs("div", { className: "relative", children: [jsxRuntime.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") }), jsxRuntime.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: jsxRuntime.jsx(lucideReact.Calendar, { className: "size-4" }) })] }) }), jsxRuntime.jsx(Popover__namespace.Portal, { children: jsxRuntime.
|
|
151
|
+
return (jsxRuntime.jsxs(Popover__namespace.Root, { open: open, onOpenChange: setOpen, children: [jsxRuntime.jsx(Popover__namespace.Trigger, { asChild: true, children: jsxRuntime.jsxs("div", { className: "relative", children: [jsxRuntime.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") }), jsxRuntime.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: jsxRuntime.jsx(lucideReact.Calendar, { className: "size-4" }) })] }) }), jsxRuntime.jsx(Popover__namespace.Portal, { children: jsxRuntime.jsx(Popover__namespace.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: jsxRuntime.jsx(MiniCalendar, { selected: selectedDate, onSelect: handleCalendarSelect, locale: locale }) }) })] }));
|
|
170
152
|
};
|
|
171
153
|
|
|
172
154
|
exports.DatePickerField = DatePickerField;
|
|
@@ -1 +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// Styles injectés inline → toujours présents en prod, pas de dépendance au CDN\nconst DP_STYLES = `\n.dp-months{padding:.75rem}\n.dp-month{display:flex;flex-direction:column;gap:.5rem}\n.dp-caption{display:flex;align-items:center;justify-content:center;height:2rem;font-weight:600;font-size:.875rem;position:relative}\n.dp-nav-btn{position:absolute;top:50%;transform:translateY(-50%);width:1.75rem;height:1.75rem;border:1px solid #e5e7eb;border-radius:.25rem;background:transparent;display:flex;align-items:center;justify-content:center;opacity:.6;cursor:pointer;padding:0}\n.dp-nav-btn:hover{opacity:1}\n.dp-grid{width:100%;border-collapse:collapse;table-layout:fixed}\n.dp-weekday{color:#9ca3af;font-weight:400;font-size:.75rem;text-align:center;padding-bottom:.25rem}\n.dp-day{text-align:center;padding:.125rem 0}\n.dp-day-btn{width:2rem;height:2rem;border-radius:.25rem;font-size:.875rem;background:none;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;margin:0 auto}\n.dp-day-btn:hover{background-color:#f3f4f6}\n.dp-selected .dp-day-btn{background-color:#11e5c5;color:#fff}\n.dp-today:not(.dp-selected) .dp-day-btn{background-color:#f3f4f6;font-weight:600}\n.dp-outside{opacity:.35}\n.dp-disabled .dp-day-btn{cursor:default;pointer-events:none}\n.dp-hidden{visibility:hidden}\n`;\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 classNames={{\n months: \"dp-months\",\n month: \"dp-month\",\n month_caption: \"dp-caption\",\n button_previous: \"dp-nav-btn\",\n button_next: \"dp-nav-btn\",\n month_grid: \"dp-grid\",\n weekdays: \"dp-weekdays\",\n weekday: \"dp-weekday\",\n week: \"dp-week\",\n day: \"dp-day\",\n day_button: \"dp-day-btn\",\n selected: \"dp-selected\",\n today: \"dp-today\",\n outside: \"dp-outside\",\n disabled: \"dp-disabled\",\n hidden: \"dp-hidden\",\n }}\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 <style>{DP_STYLES}</style>\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":["React","fr","_jsxs","_jsx","ChevronLeft","ChevronRight","DayPicker","useI18n","enUS","parse","isValid","format","Popover","Calendar"],"mappings":"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"}
|
|
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 \"react-day-picker/style.css\";\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":["React","fr","_jsxs","_jsx","ChevronLeft","ChevronRight","DayPicker","useI18n","enUS","parse","isValid","format","Popover","Calendar"],"mappings":"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"}
|
|
@@ -39,6 +39,7 @@ require('../document-collection/DocumentProcessing.js');
|
|
|
39
39
|
require('../../constants/userInputForm.js');
|
|
40
40
|
require('date-fns');
|
|
41
41
|
require('react-day-picker');
|
|
42
|
+
require('../../node_modules/react-day-picker/src/style.css.js');
|
|
42
43
|
require('@radix-ui/react-popover');
|
|
43
44
|
require('react-i18next');
|
|
44
45
|
require('../../i18n/index.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":["useI18n","useState","__awaiter","updateSessionStatus","_jsx","MobilePageLayout","_jsxs","Body","CheckboxPrimitive","CheckIcon","LabelPrimitive","PageActions","Button","Title","LanguageSelector"],"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":["useI18n","useState","__awaiter","updateSessionStatus","_jsx","MobilePageLayout","_jsxs","Body","CheckboxPrimitive","CheckIcon","LabelPrimitive","PageActions","Button","Title","LanguageSelector"],"mappings":"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"}
|
|
@@ -39,6 +39,7 @@ require('../document-collection/DocumentProcessing.js');
|
|
|
39
39
|
require('../../constants/userInputForm.js');
|
|
40
40
|
require('date-fns');
|
|
41
41
|
require('react-day-picker');
|
|
42
|
+
require('../../node_modules/react-day-picker/src/style.css.js');
|
|
42
43
|
require('@radix-ui/react-popover');
|
|
43
44
|
require('react-i18next');
|
|
44
45
|
require('../../i18n/index.js');
|
|
@@ -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":"
|
|
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;;;;"}
|
|
@@ -3,14 +3,13 @@ import * as React from 'react';
|
|
|
3
3
|
import { parse, isValid, format } from 'date-fns';
|
|
4
4
|
import { Calendar, ChevronLeft, ChevronRight } from 'lucide-react';
|
|
5
5
|
import { DayPicker } from 'react-day-picker';
|
|
6
|
+
import '../../../node_modules/react-day-picker/src/style.css.js';
|
|
6
7
|
import * as Popover from '@radix-ui/react-popover';
|
|
7
8
|
import clsx from 'clsx';
|
|
8
9
|
import { useI18n } from '../../../hooks/useI18n.js';
|
|
9
10
|
import { enUS } from '../../../node_modules/date-fns/locale/en-US.js';
|
|
10
11
|
import { fr } from '../../../node_modules/date-fns/locale/fr.js';
|
|
11
12
|
|
|
12
|
-
// Styles injectés inline → toujours présents en prod, pas de dépendance au CDN
|
|
13
|
-
var DP_STYLES = "\n.dp-months{padding:.75rem}\n.dp-month{display:flex;flex-direction:column;gap:.5rem}\n.dp-caption{display:flex;align-items:center;justify-content:center;height:2rem;font-weight:600;font-size:.875rem;position:relative}\n.dp-nav-btn{position:absolute;top:50%;transform:translateY(-50%);width:1.75rem;height:1.75rem;border:1px solid #e5e7eb;border-radius:.25rem;background:transparent;display:flex;align-items:center;justify-content:center;opacity:.6;cursor:pointer;padding:0}\n.dp-nav-btn:hover{opacity:1}\n.dp-grid{width:100%;border-collapse:collapse;table-layout:fixed}\n.dp-weekday{color:#9ca3af;font-weight:400;font-size:.75rem;text-align:center;padding-bottom:.25rem}\n.dp-day{text-align:center;padding:.125rem 0}\n.dp-day-btn{width:2rem;height:2rem;border-radius:.25rem;font-size:.875rem;background:none;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;margin:0 auto}\n.dp-day-btn:hover{background-color:#f3f4f6}\n.dp-selected .dp-day-btn{background-color:#11e5c5;color:#fff}\n.dp-today:not(.dp-selected) .dp-day-btn{background-color:#f3f4f6;font-weight:600}\n.dp-outside{opacity:.35}\n.dp-disabled .dp-day-btn{cursor:default;pointer-events:none}\n.dp-hidden{visibility:hidden}\n";
|
|
14
13
|
// ─── helpers ──────────────────────────────────────────────────────────────────
|
|
15
14
|
var FORMAT_TO_DATEFNS = {
|
|
16
15
|
"dd/mm/yyyy": "dd/MM/yyyy",
|
|
@@ -77,24 +76,7 @@ var MiniCalendar = function (_a) {
|
|
|
77
76
|
? "bg-[#11E5C5] text-white font-semibold"
|
|
78
77
|
: "hover:bg-gray-100"), children: m }, m)); }) })] }));
|
|
79
78
|
}
|
|
80
|
-
return (jsx(DayPicker, { mode: "single", selected: selected, onSelect: onSelect, month: displayMonth, onMonthChange: setDisplayMonth, locale: locale, showOutsideDays: true, navLayout: "around",
|
|
81
|
-
months: "dp-months",
|
|
82
|
-
month: "dp-month",
|
|
83
|
-
month_caption: "dp-caption",
|
|
84
|
-
button_previous: "dp-nav-btn",
|
|
85
|
-
button_next: "dp-nav-btn",
|
|
86
|
-
month_grid: "dp-grid",
|
|
87
|
-
weekdays: "dp-weekdays",
|
|
88
|
-
weekday: "dp-weekday",
|
|
89
|
-
week: "dp-week",
|
|
90
|
-
day: "dp-day",
|
|
91
|
-
day_button: "dp-day-btn",
|
|
92
|
-
selected: "dp-selected",
|
|
93
|
-
today: "dp-today",
|
|
94
|
-
outside: "dp-outside",
|
|
95
|
-
disabled: "dp-disabled",
|
|
96
|
-
hidden: "dp-hidden",
|
|
97
|
-
}, components: {
|
|
79
|
+
return (jsx(DayPicker, { mode: "single", selected: selected, onSelect: onSelect, month: displayMonth, onMonthChange: setDisplayMonth, locale: locale, showOutsideDays: true, navLayout: "around", components: {
|
|
98
80
|
MonthCaption: CustomMonthCaption,
|
|
99
81
|
Chevron: CustomChevron,
|
|
100
82
|
} }));
|
|
@@ -144,7 +126,7 @@ var DatePickerField = function (_a) {
|
|
|
144
126
|
};
|
|
145
127
|
var defaultPlaceholder = placeholder !== null && placeholder !== void 0 ? placeholder : dfnsFmt.toUpperCase();
|
|
146
128
|
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);
|
|
147
|
-
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:
|
|
129
|
+
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 }) }) })] }));
|
|
148
130
|
};
|
|
149
131
|
|
|
150
132
|
export { DatePickerField };
|
|
@@ -1 +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// Styles injectés inline → toujours présents en prod, pas de dépendance au CDN\nconst DP_STYLES = `\n.dp-months{padding:.75rem}\n.dp-month{display:flex;flex-direction:column;gap:.5rem}\n.dp-caption{display:flex;align-items:center;justify-content:center;height:2rem;font-weight:600;font-size:.875rem;position:relative}\n.dp-nav-btn{position:absolute;top:50%;transform:translateY(-50%);width:1.75rem;height:1.75rem;border:1px solid #e5e7eb;border-radius:.25rem;background:transparent;display:flex;align-items:center;justify-content:center;opacity:.6;cursor:pointer;padding:0}\n.dp-nav-btn:hover{opacity:1}\n.dp-grid{width:100%;border-collapse:collapse;table-layout:fixed}\n.dp-weekday{color:#9ca3af;font-weight:400;font-size:.75rem;text-align:center;padding-bottom:.25rem}\n.dp-day{text-align:center;padding:.125rem 0}\n.dp-day-btn{width:2rem;height:2rem;border-radius:.25rem;font-size:.875rem;background:none;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;margin:0 auto}\n.dp-day-btn:hover{background-color:#f3f4f6}\n.dp-selected .dp-day-btn{background-color:#11e5c5;color:#fff}\n.dp-today:not(.dp-selected) .dp-day-btn{background-color:#f3f4f6;font-weight:600}\n.dp-outside{opacity:.35}\n.dp-disabled .dp-day-btn{cursor:default;pointer-events:none}\n.dp-hidden{visibility:hidden}\n`;\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 classNames={{\n months: \"dp-months\",\n month: \"dp-month\",\n month_caption: \"dp-caption\",\n button_previous: \"dp-nav-btn\",\n button_next: \"dp-nav-btn\",\n month_grid: \"dp-grid\",\n weekdays: \"dp-weekdays\",\n weekday: \"dp-weekday\",\n week: \"dp-week\",\n day: \"dp-day\",\n day_button: \"dp-day-btn\",\n selected: \"dp-selected\",\n today: \"dp-today\",\n outside: \"dp-outside\",\n disabled: \"dp-disabled\",\n hidden: \"dp-hidden\",\n }}\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 <style>{DP_STYLES}</style>\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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"}
|
|
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 \"react-day-picker/style.css\";\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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"}
|
|
@@ -35,6 +35,7 @@ import '../document-collection/DocumentProcessing.js';
|
|
|
35
35
|
import '../../constants/userInputForm.js';
|
|
36
36
|
import 'date-fns';
|
|
37
37
|
import 'react-day-picker';
|
|
38
|
+
import '../../node_modules/react-day-picker/src/style.css.js';
|
|
38
39
|
import '@radix-ui/react-popover';
|
|
39
40
|
import 'react-i18next';
|
|
40
41
|
import '../../i18n/index.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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"}
|
|
@@ -35,6 +35,7 @@ import '../document-collection/DocumentProcessing.js';
|
|
|
35
35
|
import '../../constants/userInputForm.js';
|
|
36
36
|
import 'date-fns';
|
|
37
37
|
import 'react-day-picker';
|
|
38
|
+
import '../../node_modules/react-day-picker/src/style.css.js';
|
|
38
39
|
import '@radix-ui/react-popover';
|
|
39
40
|
import 'react-i18next';
|
|
40
41
|
import '../../i18n/index.js';
|
|
@@ -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":["_jsx","_jsxs"],"mappings":"
|
|
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":["_jsx","_jsxs"],"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,GAAK,OAAO,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,QACEA,GAAA,CAAC,gBAAgB,EAAA,EACf,MAAM,EACJA,GAAA,CAAC,WAAW,EAAA,EACV,OAAO,EACLA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAE,OAAO,EAAA,QAAA,EAAG,CAAC,CAAC,oBAAoB,CAAC,EAAA,CAAU,EAAA,CAE9D,EAEJ,OAAO,EAAE,OAAO,EAAA,QAAA,EAEhBA,aAAK,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAC3DC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6DAA6D,EAAA,QAAA,EAAA,CAE1ED,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA,QAAA,EACjC,YAAY,IACXA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,GAAG,EAAC,eAAe,EACnB,SAAS,EAAC,mCAAmC,EAAA,CAC7C,KAEFA,GAAA,CAAC,SAAS,EAAA,EAAC,SAAS,EAAC,WAAW,EAAA,CAAG,CACpC,EAAA,CACG,EAGNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBD,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC/C,YAAY,EAAA,CACP,EACRA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,wEAAwE,EAAA,QAAA,EACzF,eAAe,EAAA,CACP,CAAA,EAAA,CACP,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAC5BA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4EAA4E,EAAA,QAAA,EACtF,kBAAkB,EAAA,CACjB,EAAA,CACA,CAAA,EAAA,CACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
|
package/jest.config.js
CHANGED
package/package.json
CHANGED