datakeen-session-react 1.1.140-rc.47 → 1.1.140-rc.49

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 (49) hide show
  1. package/dist/cjs/_virtual/_commonjsHelpers.js +8 -0
  2. package/dist/cjs/_virtual/_commonjsHelpers.js.map +1 -0
  3. package/dist/cjs/_virtual/heic2any.js +12 -0
  4. package/dist/cjs/_virtual/heic2any.js.map +1 -0
  5. package/dist/cjs/_virtual/heic2any2.js +6 -0
  6. package/dist/cjs/_virtual/heic2any2.js.map +1 -0
  7. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js +1 -1
  8. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js.map +1 -1
  9. package/dist/cjs/components/session/UserInputForm/AddressFields.js +2 -10
  10. package/dist/cjs/components/session/UserInputForm/AddressFields.js.map +1 -1
  11. package/dist/cjs/components/session/UserInputForm/NationalityField.js +2 -11
  12. package/dist/cjs/components/session/UserInputForm/NationalityField.js.map +1 -1
  13. package/dist/cjs/components/start-flow/CGU.js +1 -1
  14. package/dist/cjs/components/start-flow/Start.js +1 -1
  15. package/dist/cjs/constants/userInputForm.js +0 -25
  16. package/dist/cjs/constants/userInputForm.js.map +1 -1
  17. package/dist/cjs/hooks/useCountryOptions.js +20 -0
  18. package/dist/cjs/hooks/useCountryOptions.js.map +1 -0
  19. package/dist/cjs/i18n/country/country.iso2.fr.json.js +2 -2
  20. package/dist/cjs/node_modules/heic2any/dist/heic2any.js +291 -0
  21. package/dist/cjs/node_modules/heic2any/dist/heic2any.js.map +1 -0
  22. package/dist/cjs/utils/fileConverter.js +2 -2
  23. package/dist/cjs/utils/fileConverter.js.map +1 -1
  24. package/dist/esm/_virtual/_commonjsHelpers.js +6 -0
  25. package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -0
  26. package/dist/esm/_virtual/heic2any.js +8 -0
  27. package/dist/esm/_virtual/heic2any.js.map +1 -0
  28. package/dist/esm/_virtual/heic2any2.js +4 -0
  29. package/dist/esm/_virtual/heic2any2.js.map +1 -0
  30. package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js +1 -1
  31. package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js.map +1 -1
  32. package/dist/esm/components/session/UserInputForm/AddressFields.js +2 -10
  33. package/dist/esm/components/session/UserInputForm/AddressFields.js.map +1 -1
  34. package/dist/esm/components/session/UserInputForm/NationalityField.js +3 -12
  35. package/dist/esm/components/session/UserInputForm/NationalityField.js.map +1 -1
  36. package/dist/esm/components/start-flow/CGU.js +1 -1
  37. package/dist/esm/components/start-flow/Start.js +1 -1
  38. package/dist/esm/constants/userInputForm.js +1 -25
  39. package/dist/esm/constants/userInputForm.js.map +1 -1
  40. package/dist/esm/hooks/useCountryOptions.js +18 -0
  41. package/dist/esm/hooks/useCountryOptions.js.map +1 -0
  42. package/dist/esm/i18n/country/country.iso2.fr.json.js +2 -2
  43. package/dist/esm/i18n/index.js +2 -2
  44. package/dist/esm/i18n/index.js.map +1 -1
  45. package/dist/esm/node_modules/heic2any/dist/heic2any.js +289 -0
  46. package/dist/esm/node_modules/heic2any/dist/heic2any.js.map +1 -0
  47. package/dist/esm/utils/fileConverter.js +1 -1
  48. package/jest.config.js +1 -0
  49. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var tslib_es6 = require('../node_modules/tslib/tslib.es6.js');
4
- var heic2any = require('heic2any');
4
+ var heic2any = require('../_virtual/heic2any.js');
5
5
 
6
6
  /**
7
7
  * File conversion utilities for document upload
@@ -112,7 +112,7 @@ var convertFileToSupportedFormat = function (file) { return tslib_es6.__awaiter(
112
112
  _e.label = 1;
113
113
  case 1:
114
114
  _e.trys.push([1, 3, , 4]);
115
- return [4 /*yield*/, heic2any({
115
+ return [4 /*yield*/, heic2any.default({
116
116
  blob: file,
117
117
  toType: "image/jpeg",
118
118
  })];
@@ -1 +1 @@
1
- {"version":3,"file":"fileConverter.js","sources":["../../../../src/utils/fileConverter.ts"],"sourcesContent":["import heic2any from \"heic2any\";\n\n/**\n * File conversion utilities for document upload\n * These utilities are optimized for cross-browser compatibility including Firefox Mobile\n */\n\n/**\n * Converts a File object to base64 data URL\n * Optimized for Firefox Mobile - defers conversion until needed\n *\n * @param file - File object to convert\n * @returns Promise<string> - Base64 data URL\n * @throws Error if conversion fails or results in invalid data\n */\nexport const fileToBase64 = (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n const result = reader.result as string;\n if (result && result.length > 100) {\n resolve(result);\n } else {\n reject(new Error(\"File conversion resulted in empty or invalid data\"));\n }\n };\n\n reader.onerror = () => {\n reject(new Error(\"Failed to read file\"));\n };\n\n reader.onabort = () => {\n reject(new Error(\"File reading was aborted\"));\n };\n\n reader.readAsDataURL(file);\n });\n};\n\n/**\n * Checks if a File object is a PDF\n *\n * @param file - File object to check\n * @returns boolean - True if the file is a PDF\n */\nexport const isPDF = (file: File | null): boolean => {\n return file?.type === \"application/pdf\";\n};\n\nconst ALLOWED_MIME_TYPES = [\"image/png\", \"image/jpeg\", \"application/pdf\"];\nconst ALLOWED_EXTENSIONS = [\".png\", \".jpg\", \".jpeg\", \".pdf\"];\nconst HEIC_MIME_TYPES = [\"image/heic\", \"image/heif\"];\nconst HEIC_EXTENSIONS = [\".heic\", \".heif\"];\n\n/**\n * Validates file type (PNG, JPG/JPEG or PDF)\n *\n * @param file - File object to validate\n * @returns boolean - True if valid file type\n */\nexport const isValidFileType = (file: File): boolean => {\n const normalizedType = file.type?.toLowerCase();\n if (normalizedType && ALLOWED_MIME_TYPES.includes(normalizedType)) {\n return true;\n }\n\n const extension = file.name?.split(\".\").pop()?.toLowerCase();\n if (!extension) {\n return false;\n }\n\n return ALLOWED_EXTENSIONS.includes(`.${extension}`);\n};\n\n/**\n * Validates file size\n *\n * @param file - File object to validate\n * @param maxSizeInMB - Maximum file size in megabytes (default: 10MB)\n * @returns boolean - True if file size is within limit\n */\nexport const isValidFileSize = (file: File, maxSizeInMB: number = 10): boolean => {\n return file.size <= maxSizeInMB * 1024 * 1024;\n};\n\n/**\n * Validates base64 data string\n *\n * @param base64Data - Base64 string to validate\n * @param minLength - Minimum expected length (default: 1000)\n * @returns boolean - True if data appears valid\n */\nexport const isValidBase64Data = (base64Data: string, minLength: number = 1000): boolean => {\n return !!base64Data && base64Data.length >= minLength;\n};\n\n/**\n * Converts HEIC/HEIF files to JPEG so upstream validation accepts them\n *\n * @param file - File object selected by the user\n * @returns Promise<File> - Converted JPEG file or original file if conversion not needed\n * @throws Error if conversion fails\n */\nexport const convertFileToSupportedFormat = async (file: File): Promise<File> => {\n const normalizedType = file.type?.toLowerCase();\n const extension = file.name?.split(\".\").pop()?.toLowerCase();\n const hasHeicMime = normalizedType ? HEIC_MIME_TYPES.includes(normalizedType) : false;\n const hasHeicExtension = extension ? HEIC_EXTENSIONS.includes(`.${extension}`) : false;\n\n if (!hasHeicMime && !hasHeicExtension) {\n return file;\n }\n\n try {\n const conversionResult = await heic2any({\n blob: file,\n toType: \"image/jpeg\",\n });\n\n const conversionBlob = Array.isArray(conversionResult) ? conversionResult[0] : conversionResult;\n const blob = conversionBlob instanceof Blob ? conversionBlob : new Blob([conversionBlob], { type: \"image/jpeg\" });\n\n const baseName = file.name?.replace(/\\.[^/.]+$/, \"\") || \"document\";\n const convertedFileName = `${baseName}.jpg`;\n\n return new File([blob], convertedFileName, { type: \"image/jpeg\" });\n } catch (error) {\n console.error(\"convertFileToSupportedFormat: HEIC conversion failed\", error);\n throw new Error(\"Nous n'avons pas pu convertir votre photo HEIC. Veuillez sélectionner un fichier PNG, JPG ou PDF.\");\n }\n};\n"],"names":["__awaiter"],"mappings":"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"}
1
+ {"version":3,"file":"fileConverter.js","sources":["../../../../src/utils/fileConverter.ts"],"sourcesContent":["import heic2any from \"heic2any\";\n\n/**\n * File conversion utilities for document upload\n * These utilities are optimized for cross-browser compatibility including Firefox Mobile\n */\n\n/**\n * Converts a File object to base64 data URL\n * Optimized for Firefox Mobile - defers conversion until needed\n *\n * @param file - File object to convert\n * @returns Promise<string> - Base64 data URL\n * @throws Error if conversion fails or results in invalid data\n */\nexport const fileToBase64 = (file: File): Promise<string> => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onload = () => {\n const result = reader.result as string;\n if (result && result.length > 100) {\n resolve(result);\n } else {\n reject(new Error(\"File conversion resulted in empty or invalid data\"));\n }\n };\n\n reader.onerror = () => {\n reject(new Error(\"Failed to read file\"));\n };\n\n reader.onabort = () => {\n reject(new Error(\"File reading was aborted\"));\n };\n\n reader.readAsDataURL(file);\n });\n};\n\n/**\n * Checks if a File object is a PDF\n *\n * @param file - File object to check\n * @returns boolean - True if the file is a PDF\n */\nexport const isPDF = (file: File | null): boolean => {\n return file?.type === \"application/pdf\";\n};\n\nconst ALLOWED_MIME_TYPES = [\"image/png\", \"image/jpeg\", \"application/pdf\"];\nconst ALLOWED_EXTENSIONS = [\".png\", \".jpg\", \".jpeg\", \".pdf\"];\nconst HEIC_MIME_TYPES = [\"image/heic\", \"image/heif\"];\nconst HEIC_EXTENSIONS = [\".heic\", \".heif\"];\n\n/**\n * Validates file type (PNG, JPG/JPEG or PDF)\n *\n * @param file - File object to validate\n * @returns boolean - True if valid file type\n */\nexport const isValidFileType = (file: File): boolean => {\n const normalizedType = file.type?.toLowerCase();\n if (normalizedType && ALLOWED_MIME_TYPES.includes(normalizedType)) {\n return true;\n }\n\n const extension = file.name?.split(\".\").pop()?.toLowerCase();\n if (!extension) {\n return false;\n }\n\n return ALLOWED_EXTENSIONS.includes(`.${extension}`);\n};\n\n/**\n * Validates file size\n *\n * @param file - File object to validate\n * @param maxSizeInMB - Maximum file size in megabytes (default: 10MB)\n * @returns boolean - True if file size is within limit\n */\nexport const isValidFileSize = (file: File, maxSizeInMB: number = 10): boolean => {\n return file.size <= maxSizeInMB * 1024 * 1024;\n};\n\n/**\n * Validates base64 data string\n *\n * @param base64Data - Base64 string to validate\n * @param minLength - Minimum expected length (default: 1000)\n * @returns boolean - True if data appears valid\n */\nexport const isValidBase64Data = (base64Data: string, minLength: number = 1000): boolean => {\n return !!base64Data && base64Data.length >= minLength;\n};\n\n/**\n * Converts HEIC/HEIF files to JPEG so upstream validation accepts them\n *\n * @param file - File object selected by the user\n * @returns Promise<File> - Converted JPEG file or original file if conversion not needed\n * @throws Error if conversion fails\n */\nexport const convertFileToSupportedFormat = async (file: File): Promise<File> => {\n const normalizedType = file.type?.toLowerCase();\n const extension = file.name?.split(\".\").pop()?.toLowerCase();\n const hasHeicMime = normalizedType ? HEIC_MIME_TYPES.includes(normalizedType) : false;\n const hasHeicExtension = extension ? HEIC_EXTENSIONS.includes(`.${extension}`) : false;\n\n if (!hasHeicMime && !hasHeicExtension) {\n return file;\n }\n\n try {\n const conversionResult = await heic2any({\n blob: file,\n toType: \"image/jpeg\",\n });\n\n const conversionBlob = Array.isArray(conversionResult) ? conversionResult[0] : conversionResult;\n const blob = conversionBlob instanceof Blob ? conversionBlob : new Blob([conversionBlob], { type: \"image/jpeg\" });\n\n const baseName = file.name?.replace(/\\.[^/.]+$/, \"\") || \"document\";\n const convertedFileName = `${baseName}.jpg`;\n\n return new File([blob], convertedFileName, { type: \"image/jpeg\" });\n } catch (error) {\n console.error(\"convertFileToSupportedFormat: HEIC conversion failed\", error);\n throw new Error(\"Nous n'avons pas pu convertir votre photo HEIC. Veuillez sélectionner un fichier PNG, JPG ou PDF.\");\n }\n};\n"],"names":["__awaiter","heic2any"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ function getDefaultExportFromCjs (x) {
2
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
3
+ }
4
+
5
+ export { getDefaultExportFromCjs };
6
+ //# sourceMappingURL=_commonjsHelpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_commonjsHelpers.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,8 @@
1
+ import { getDefaultExportFromCjs } from './_commonjsHelpers.js';
2
+ import { __require as requireHeic2any } from '../node_modules/heic2any/dist/heic2any.js';
3
+
4
+ var heic2anyExports = requireHeic2any();
5
+ var heic2any = /*@__PURE__*/getDefaultExportFromCjs(heic2anyExports);
6
+
7
+ export { heic2any as default };
8
+ //# sourceMappingURL=heic2any.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heic2any.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
@@ -0,0 +1,4 @@
1
+ var heic2any = {exports: {}};
2
+
3
+ export { heic2any as __module };
4
+ //# sourceMappingURL=heic2any2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heic2any2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -167,7 +167,7 @@ var SelfieRecorder = function (_a) {
167
167
  _b.zIndex = isMobile ? 50 : "auto",
168
168
  _b.height = "100%",
169
169
  _b.width = "100%",
170
- _b), children: [jsxs("div", { className: "p-4 text-center bg-white shrink-0", children: [jsx(Title, { className: "text-lg md:text-xl mb-1", children: t("selfie.recorder.title") }), jsx(Subtitle, { className: "text-xs text-gray-600 md:text-sm", children: t("selfie.recorder.subtitle") })] }), jsx("div", { className: "video-container flex-1 relative overflow-hidden", children: jsx(VideoRecorder, __assign({ ref: recorderRef, preset: AcquisitionPreset.SELFIE_OPTIMIZED, hideCaptureBtn: true, faceChecker: "enabled", disableDebugMode: true, onRecordCompleted: handleRecordCompleted, onRecord: recordStarting, style: { width: "100%", height: "100%" }, className: "video-recorder-no-radius w-full h-full" }, (isIOS() && {
170
+ _b), children: [jsxs("div", { className: "p-4 text-center bg-white shrink-0", children: [jsx(Title, { className: "text-lg md:text-xl mb-1", children: t("selfie.recorder.title") }), jsx(Subtitle, { className: "text-xs text-gray-600 md:text-sm", children: t("selfie.recorder.subtitle") })] }), jsx("div", { className: "video-container flex-1 relative overflow-hidden", children: jsx(VideoRecorder, __assign({ ref: recorderRef, preset: AcquisitionPreset.SELFIE_OPTIMIZED, hideCaptureBtn: true, faceChecker: (typeof window !== 'undefined' && window.__E2E_DISABLE_FACE_CHECKER__) ? 'disabled' : 'enabled', disableDebugMode: true, onRecordCompleted: handleRecordCompleted, onRecord: recordStarting, style: { width: "100%", height: "100%" }, className: "video-recorder-no-radius w-full h-full" }, (isIOS() && {
171
171
  "data-playsinline": "true",
172
172
  "data-autoplay": "true",
173
173
  "data-muted": "true"
@@ -1 +1 @@
1
- {"version":3,"file":"SelfieRecorder.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieRecorder.tsx"],"sourcesContent":["import { useRef, useState, useEffect } from \"react\";\nimport { AcquisitionPreset, VideoRecorder } from \"@unissey-web/sdk-react\";\nimport Button from \"../../ui/Button\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport useVideoRecorderStyles from \"../hooks/useVideoRecorderStyles\";\nimport { setupVideoElementsObserver } from \"../utils/videoElementStyles\";\nimport { delay, isIOS, waitForVideoFrame, getRecorderVideoElement } from \"../utils/selfieCaptureUtils\";\nimport { useLiveFrameCapture } from \"../hooks/useLiveFrameCapture\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport { getUnisseyStrings } from \"../utils/unisseyStrings\";\n\ninterface SelfieRecorderProps {\n handleSelfie: (e: Event) => void;\n onBeginCapture?: () => void;\n isCapturing?: boolean;\n btnBg?: string;\n btnText?: string;\n}\n\ninterface VideoRecorderRef extends HTMLElement {\n capture: () => void;\n}\n\nconst SelfieRecorder = ({\n handleSelfie,\n onBeginCapture = () => { },\n isCapturing = false,\n btnBg,\n btnText,\n}: SelfieRecorderProps) => {\n const { t } = useI18n();\n const isMobile = useIsMobile(768);\n const recorderRef = useRef<VideoRecorderRef | null>(null);\n const [disableButton, setDisableButton] = useState(false);\n const [recorderReady, setRecorderReady] = useState(false);\n const [recordingState, setRecordingState] = useState<\n \"idle\" | \"preparing\" | \"recording\" | \"processing\"\n >(\"idle\");\n const capturedThumbnailRef = useRef<string | null>(null);\n const { captureFrame, cleanup } = useLiveFrameCapture();\n\n useVideoRecorderStyles(btnBg, btnText);\n\n useEffect(() => {\n document.body.classList.add(\"recording-selfie\");\n const cleanupObserver = setupVideoElementsObserver();\n\n // iOS-specific fix: Add required attributes to video elements after mount\n if (isIOS()) {\n const addIOSVideoAttributes = () => {\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder) => {\n // Try to access shadow DOM and video elements\n try {\n const shadowRoot = (recorder as any).shadowRoot;\n if (shadowRoot) {\n const videoElements = shadowRoot.querySelectorAll(\"video\");\n videoElements.forEach((video: HTMLVideoElement) => {\n video.setAttribute(\"playsinline\", \"true\");\n video.setAttribute(\"autoplay\", \"true\");\n video.setAttribute(\"muted\", \"true\");\n // Ensure video plays inline and autoplays\n video.playsInline = true;\n video.autoplay = true;\n video.muted = true;\n });\n }\n } catch (error) {\n console.log(\"Could not access shadow DOM:\", error);\n }\n\n // Also set attributes on the component itself\n recorder.setAttribute(\"playsinline\", \"true\");\n recorder.setAttribute(\"autoplay\", \"true\");\n recorder.setAttribute(\"muted\", \"true\");\n });\n };\n\n // Apply immediately and also after a delay to catch dynamically created elements\n addIOSVideoAttributes();\n const iosTimeout = setTimeout(addIOSVideoAttributes, 500);\n const iosInterval = setInterval(addIOSVideoAttributes, 1000);\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n clearTimeout(iosTimeout);\n clearInterval(iosInterval);\n };\n }\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n };\n }, [cleanup]);\n\n const recordStarting = () => {\n if (!recorderReady || recordingState !== \"idle\") return;\n onBeginCapture();\n setRecordingState(\"preparing\");\n setDisableButton(true);\n\n const triggerCapture = async () => {\n try {\n await waitForVideoFrame(recorderRef.current);\n await delay(200);\n setRecordingState(\"recording\");\n\n // Capture a frame from the live video during recording (after a short delay)\n setTimeout(() => {\n const videoElement = getRecorderVideoElement(recorderRef.current);\n if (videoElement) {\n const thumbnail = captureFrame(videoElement);\n capturedThumbnailRef.current = thumbnail;\n }\n }, 1000); // Capture frame 1 second into recording\n\n recorderRef.current?.capture();\n } catch (error) {\n console.error(\"SelfieRecorder: failed to capture frame\", error);\n setRecordingState(\"idle\");\n setDisableButton(false);\n }\n };\n\n void triggerCapture();\n };\n\n useEffect(() => {\n const interval = setInterval(() => {\n const status = (recorderRef.current as any)?.sdkJsStatus;\n const isReady = status === \"ready\" || status === \"running\";\n setRecorderReady((prev) => (prev !== isReady ? isReady : prev));\n }, 500);\n return () => clearInterval(interval);\n }, []);\n\n const handleRecordCompleted = (e: Event) => {\n const customEvent = e as CustomEvent<{ media?: Blob; metadata?: string }>;\n if (!customEvent.detail?.media || customEvent.detail.media.size === 0) {\n console.error(\"❌ No valid media captured\");\n\n // iOS-specific debugging\n if (isIOS()) {\n console.log(\"🍎 iOS detected - checking video elements for proper attributes\");\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder, index) => {\n console.log(`VideoRecorder ${index}:`, {\n playsinline: recorder.getAttribute(\"playsinline\"),\n autoplay: recorder.getAttribute(\"autoplay\"),\n muted: recorder.getAttribute(\"muted\")\n });\n });\n }\n\n setRecordingState(\"idle\");\n setDisableButton(false);\n return;\n }\n\n // Attach the captured thumbnail to the event\n const enhancedEvent = new CustomEvent('record-completed', {\n detail: {\n media: customEvent.detail.media,\n metadata: customEvent.detail.metadata || '',\n thumbnail: capturedThumbnailRef.current || undefined,\n }\n });\n\n setRecordingState(\"processing\");\n handleSelfie(enhancedEvent);\n };\n\n return (\n <div\n className=\"selfie selfie-recorder-root flex flex-col\"\n style={{\n [\"--dk-btn-bg\" as string]: btnBg ?? \"#11E5C5\",\n [\"--dk-btn-text\" as string]: btnText ?? \"#3C3C40\",\n position: isMobile ? \"fixed\" : \"relative\",\n inset: isMobile ? 0 : \"auto\",\n zIndex: isMobile ? 50 : \"auto\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <div className=\"p-4 text-center bg-white shrink-0\">\n <Title className=\"text-lg md:text-xl mb-1\">{t(\"selfie.recorder.title\")}</Title>\n <Subtitle className=\"text-xs text-gray-600 md:text-sm\">{t(\"selfie.recorder.subtitle\")}</Subtitle>\n </div>\n\n <div className=\"video-container flex-1 relative overflow-hidden\">\n <VideoRecorder\n ref={recorderRef as any}\n preset={AcquisitionPreset.SELFIE_OPTIMIZED}\n hideCaptureBtn\n faceChecker=\"enabled\"\n disableDebugMode\n onRecordCompleted={handleRecordCompleted}\n onRecord={recordStarting}\n style={{ width: \"100%\", height: \"100%\" }}\n className=\"video-recorder-no-radius w-full h-full\"\n {...(isIOS() && {\n \"data-playsinline\": \"true\",\n \"data-autoplay\": \"true\",\n \"data-muted\": \"true\"\n })}\n strings={getUnisseyStrings(t)}\n />\n </div>\n\n <div className=\"shrink-0 bg-white border-t border-gray-200 p-4 md:p-6 relative\" style={{ zIndex: 9999 }}>\n <div className=\"max-w-md mx-auto\">\n <div className=\"text-center text-xs text-gray-400 mt-3\">\n {t(\"selfie.recorder.note\")}\n </div>\n\n <Button\n onClick={recordStarting}\n className=\"w-full py-3 md:py-4 relative selfie-button\"\n disabled={disableButton || !recorderReady}\n style={{ backgroundColor: btnBg ?? \"#11E5C5\", color: btnText ?? \"#3C3C40\" }}\n >\n {recordingState === \"idle\" && t(\"selfie.recorder.start\")}\n {recordingState === \"preparing\" && t(\"selfie.recorder.preparing\")}\n {recordingState === \"recording\" && (\n <span className=\"flex items-center justify-center\">\n <span className=\"mr-2\">{t(\"selfie.recorder.recording_label\")}</span>\n <span className=\"flex space-x-1 loading-dots\">\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n </span>\n </span>\n )}\n {recordingState === \"processing\" && t(\"selfie.recorder.processing\")}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieRecorder;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"SelfieRecorder.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieRecorder.tsx"],"sourcesContent":["import { useRef, useState, useEffect } from \"react\";\nimport { AcquisitionPreset, VideoRecorder } from \"@unissey-web/sdk-react\";\nimport Button from \"../../ui/Button\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport useVideoRecorderStyles from \"../hooks/useVideoRecorderStyles\";\nimport { setupVideoElementsObserver } from \"../utils/videoElementStyles\";\nimport { delay, isIOS, waitForVideoFrame, getRecorderVideoElement } from \"../utils/selfieCaptureUtils\";\nimport { useLiveFrameCapture } from \"../hooks/useLiveFrameCapture\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport useIsMobile from \"../../../hooks/useIsMobile\";\nimport { getUnisseyStrings } from \"../utils/unisseyStrings\";\n\ninterface SelfieRecorderProps {\n handleSelfie: (e: Event) => void;\n onBeginCapture?: () => void;\n isCapturing?: boolean;\n btnBg?: string;\n btnText?: string;\n}\n\ninterface VideoRecorderRef extends HTMLElement {\n capture: () => void;\n}\n\nconst SelfieRecorder = ({\n handleSelfie,\n onBeginCapture = () => { },\n isCapturing = false,\n btnBg,\n btnText,\n}: SelfieRecorderProps) => {\n const { t } = useI18n();\n const isMobile = useIsMobile(768);\n const recorderRef = useRef<VideoRecorderRef | null>(null);\n const [disableButton, setDisableButton] = useState(false);\n const [recorderReady, setRecorderReady] = useState(false);\n const [recordingState, setRecordingState] = useState<\n \"idle\" | \"preparing\" | \"recording\" | \"processing\"\n >(\"idle\");\n const capturedThumbnailRef = useRef<string | null>(null);\n const { captureFrame, cleanup } = useLiveFrameCapture();\n\n useVideoRecorderStyles(btnBg, btnText);\n\n useEffect(() => {\n document.body.classList.add(\"recording-selfie\");\n const cleanupObserver = setupVideoElementsObserver();\n\n // iOS-specific fix: Add required attributes to video elements after mount\n if (isIOS()) {\n const addIOSVideoAttributes = () => {\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder) => {\n // Try to access shadow DOM and video elements\n try {\n const shadowRoot = (recorder as any).shadowRoot;\n if (shadowRoot) {\n const videoElements = shadowRoot.querySelectorAll(\"video\");\n videoElements.forEach((video: HTMLVideoElement) => {\n video.setAttribute(\"playsinline\", \"true\");\n video.setAttribute(\"autoplay\", \"true\");\n video.setAttribute(\"muted\", \"true\");\n // Ensure video plays inline and autoplays\n video.playsInline = true;\n video.autoplay = true;\n video.muted = true;\n });\n }\n } catch (error) {\n console.log(\"Could not access shadow DOM:\", error);\n }\n\n // Also set attributes on the component itself\n recorder.setAttribute(\"playsinline\", \"true\");\n recorder.setAttribute(\"autoplay\", \"true\");\n recorder.setAttribute(\"muted\", \"true\");\n });\n };\n\n // Apply immediately and also after a delay to catch dynamically created elements\n addIOSVideoAttributes();\n const iosTimeout = setTimeout(addIOSVideoAttributes, 500);\n const iosInterval = setInterval(addIOSVideoAttributes, 1000);\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n clearTimeout(iosTimeout);\n clearInterval(iosInterval);\n };\n }\n\n return () => {\n document.body.classList.remove(\"recording-selfie\");\n cleanupObserver();\n cleanup();\n };\n }, [cleanup]);\n\n const recordStarting = () => {\n if (!recorderReady || recordingState !== \"idle\") return;\n onBeginCapture();\n setRecordingState(\"preparing\");\n setDisableButton(true);\n\n const triggerCapture = async () => {\n try {\n await waitForVideoFrame(recorderRef.current);\n await delay(200);\n setRecordingState(\"recording\");\n\n // Capture a frame from the live video during recording (after a short delay)\n setTimeout(() => {\n const videoElement = getRecorderVideoElement(recorderRef.current);\n if (videoElement) {\n const thumbnail = captureFrame(videoElement);\n capturedThumbnailRef.current = thumbnail;\n }\n }, 1000); // Capture frame 1 second into recording\n\n recorderRef.current?.capture();\n } catch (error) {\n console.error(\"SelfieRecorder: failed to capture frame\", error);\n setRecordingState(\"idle\");\n setDisableButton(false);\n }\n };\n\n void triggerCapture();\n };\n\n useEffect(() => {\n const interval = setInterval(() => {\n const status = (recorderRef.current as any)?.sdkJsStatus;\n const isReady = status === \"ready\" || status === \"running\";\n setRecorderReady((prev) => (prev !== isReady ? isReady : prev));\n }, 500);\n return () => clearInterval(interval);\n }, []);\n\n const handleRecordCompleted = (e: Event) => {\n const customEvent = e as CustomEvent<{ media?: Blob; metadata?: string }>;\n if (!customEvent.detail?.media || customEvent.detail.media.size === 0) {\n console.error(\"❌ No valid media captured\");\n\n // iOS-specific debugging\n if (isIOS()) {\n console.log(\"🍎 iOS detected - checking video elements for proper attributes\");\n const videoRecorders = document.querySelectorAll(\"uni-video-recorder\");\n videoRecorders.forEach((recorder, index) => {\n console.log(`VideoRecorder ${index}:`, {\n playsinline: recorder.getAttribute(\"playsinline\"),\n autoplay: recorder.getAttribute(\"autoplay\"),\n muted: recorder.getAttribute(\"muted\")\n });\n });\n }\n\n setRecordingState(\"idle\");\n setDisableButton(false);\n return;\n }\n\n // Attach the captured thumbnail to the event\n const enhancedEvent = new CustomEvent('record-completed', {\n detail: {\n media: customEvent.detail.media,\n metadata: customEvent.detail.metadata || '',\n thumbnail: capturedThumbnailRef.current || undefined,\n }\n });\n\n setRecordingState(\"processing\");\n handleSelfie(enhancedEvent);\n };\n\n return (\n <div\n className=\"selfie selfie-recorder-root flex flex-col\"\n style={{\n [\"--dk-btn-bg\" as string]: btnBg ?? \"#11E5C5\",\n [\"--dk-btn-text\" as string]: btnText ?? \"#3C3C40\",\n position: isMobile ? \"fixed\" : \"relative\",\n inset: isMobile ? 0 : \"auto\",\n zIndex: isMobile ? 50 : \"auto\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <div className=\"p-4 text-center bg-white shrink-0\">\n <Title className=\"text-lg md:text-xl mb-1\">{t(\"selfie.recorder.title\")}</Title>\n <Subtitle className=\"text-xs text-gray-600 md:text-sm\">{t(\"selfie.recorder.subtitle\")}</Subtitle>\n </div>\n\n <div className=\"video-container flex-1 relative overflow-hidden\">\n <VideoRecorder\n ref={recorderRef as any}\n preset={AcquisitionPreset.SELFIE_OPTIMIZED}\n hideCaptureBtn\n faceChecker={(typeof window !== 'undefined' && (window as any).__E2E_DISABLE_FACE_CHECKER__) ? 'disabled' : 'enabled'}\n disableDebugMode\n onRecordCompleted={handleRecordCompleted}\n onRecord={recordStarting}\n style={{ width: \"100%\", height: \"100%\" }}\n className=\"video-recorder-no-radius w-full h-full\"\n {...(isIOS() && {\n \"data-playsinline\": \"true\",\n \"data-autoplay\": \"true\",\n \"data-muted\": \"true\"\n })}\n strings={getUnisseyStrings(t)}\n />\n </div>\n\n <div className=\"shrink-0 bg-white border-t border-gray-200 p-4 md:p-6 relative\" style={{ zIndex: 9999 }}>\n <div className=\"max-w-md mx-auto\">\n <div className=\"text-center text-xs text-gray-400 mt-3\">\n {t(\"selfie.recorder.note\")}\n </div>\n\n <Button\n onClick={recordStarting}\n className=\"w-full py-3 md:py-4 relative selfie-button\"\n disabled={disableButton || !recorderReady}\n style={{ backgroundColor: btnBg ?? \"#11E5C5\", color: btnText ?? \"#3C3C40\" }}\n >\n {recordingState === \"idle\" && t(\"selfie.recorder.start\")}\n {recordingState === \"preparing\" && t(\"selfie.recorder.preparing\")}\n {recordingState === \"recording\" && (\n <span className=\"flex items-center justify-center\">\n <span className=\"mr-2\">{t(\"selfie.recorder.recording_label\")}</span>\n <span className=\"flex space-x-1 loading-dots\">\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n <span className=\"h-1 w-1 bg-white rounded-full\"></span>\n </span>\n </span>\n )}\n {recordingState === \"processing\" && t(\"selfie.recorder.processing\")}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieRecorder;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -1,22 +1,14 @@
1
- import { __spreadArray, __assign } from '../../../node_modules/tslib/tslib.es6.js';
2
1
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
3
- import { useMemo } from 'react';
4
2
  import * as Label from '@radix-ui/react-label';
5
3
  import clsx from 'clsx';
6
4
  import { Select } from '../../ui/SelectComponent.js';
7
- import { COUNTRY_OPTIONS } from '../../../constants/userInputForm.js';
8
5
  import { useI18n } from '../../../hooks/useI18n.js';
6
+ import { useCountryOptions } from '../../../hooks/useCountryOptions.js';
9
7
 
10
8
  var AddressFields = function (_a) {
11
9
  var form = _a.form, errors = _a.errors, requestedFields = _a.requestedFields, addressSuggestions = _a.addressSuggestions, showSuggestions = _a.showSuggestions, onFieldChange = _a.onFieldChange, onAddressChange = _a.onAddressChange, onAddressFocus = _a.onAddressFocus, onAddressBlur = _a.onAddressBlur, onApplySuggestion = _a.onApplySuggestion;
12
10
  var t = useI18n().t;
13
- var countryOptions = useMemo(function () {
14
- if (COUNTRY_OPTIONS.length === 0) {
15
- return COUNTRY_OPTIONS;
16
- }
17
- var first = COUNTRY_OPTIONS[0], rest = COUNTRY_OPTIONS.slice(1);
18
- return __spreadArray([__assign(__assign({}, first), { label: t("user_input_form.select.country") })], rest, true);
19
- }, [t]);
11
+ var countryOptions = useCountryOptions("user_input_form.select.country");
20
12
  if (!requestedFields.has("adresse")) {
21
13
  return null;
22
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AddressFields.js","sources":["../../../../../../src/components/session/UserInputForm/AddressFields.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport * as Label from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport { COUNTRY_OPTIONS } from \"../../../constants/userInputForm\";\nimport type {\n AddressSuggestion,\n RequestedFields,\n UserInputFormErrors,\n UserInputFormState,\n} from \"../../../types/userInputForm\";\nimport { useI18n } from \"../../../hooks/useI18n\";\n\ninterface AddressFieldsProps {\n form: UserInputFormState;\n errors: UserInputFormErrors;\n requestedFields: RequestedFields;\n addressSuggestions: AddressSuggestion[];\n showSuggestions: boolean;\n onFieldChange: (key: keyof UserInputFormState, value: string) => void;\n onAddressChange: (value: string) => void;\n onAddressFocus: () => void;\n onAddressBlur: () => void;\n onApplySuggestion: (suggestion: AddressSuggestion) => void;\n}\n\nconst AddressFields = ({\n form,\n errors,\n requestedFields,\n addressSuggestions,\n showSuggestions,\n onFieldChange,\n onAddressChange,\n onAddressFocus,\n onAddressBlur,\n onApplySuggestion,\n}: AddressFieldsProps) => {\n const { t } = useI18n();\n\n const countryOptions = useMemo(() => {\n if (COUNTRY_OPTIONS.length === 0) {\n return COUNTRY_OPTIONS;\n }\n\n const [first, ...rest] = COUNTRY_OPTIONS;\n return [{ ...first, label: t(\"user_input_form.select.country\") }, ...rest];\n }, [t]);\n\n if (!requestedFields.has(\"adresse\")) {\n return null;\n }\n\n return (\n <>\n <div className=\"relative space-y-2\">\n <Label.Root\n htmlFor=\"addressLine1\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.address_line1\")}\n </Label.Root>\n <input\n id=\"addressLine1\"\n type=\"text\"\n value={form.addressLine1 || \"\"}\n onChange={(event) => onAddressChange(event.target.value)}\n onFocus={onAddressFocus}\n onBlur={onAddressBlur}\n placeholder={t(\"user_input_form.placeholders.address_line1\")}\n className={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\",\n errors.addressLine1\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover:border-gray-400\"\n )}\n autoComplete=\"street-address\"\n />\n {showSuggestions && addressSuggestions.length > 0 && (\n <div className=\"absolute z-20 mt-1 max-h-48 w-full overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg\">\n {addressSuggestions.map((suggestion) => (\n <button\n key={suggestion.id}\n type=\"button\"\n className=\"w-full px-3 py-2 text-left text-sm hover:bg-gray-100\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onApplySuggestion(suggestion)}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm text-gray-900\">\n {suggestion.label}\n </span>\n {(suggestion.city ||\n suggestion.postalCode ||\n suggestion.country ||\n suggestion.countryCode) && (\n <span className=\"text-xs text-gray-500\">\n {[\n [suggestion.postalCode, suggestion.city]\n .filter(Boolean)\n .join(\" \"),\n suggestion.country ||\n suggestion.countryCode?.toUpperCase(),\n ]\n .filter(Boolean)\n .join(\", \")}\n </span>\n )}\n </div>\n </button>\n ))}\n </div>\n )}\n {errors.addressLine1 && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.address_line1_required\")}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"addressLine2\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.address_line2\")}\n </Label.Root>\n <input\n id=\"addressLine2\"\n type=\"text\"\n value={form.addressLine2 || \"\"}\n onChange={(event) =>\n onFieldChange(\"addressLine2\", event.target.value)\n }\n placeholder={t(\"user_input_form.placeholders.address_line2\")}\n className=\"w-full rounded-lg border border-gray-300 px-3 py-3 text-base transition-colors hover:border-gray-400 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[#11E5C5]\"\n autoComplete=\"address-line2\"\n />\n </div>\n\n <div className=\"grid grid-cols-[140px_minmax(0,1fr)] gap-3 md:grid-cols-[160px_minmax(0,1fr)]\">\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"postalCode\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.postal_code\")}\n </Label.Root>\n <input\n id=\"postalCode\"\n type=\"text\"\n value={form.postalCode || \"\"}\n onChange={(event) =>\n onFieldChange(\"postalCode\", event.target.value)\n }\n placeholder={t(\"user_input_form.placeholders.postal_code\")}\n className={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\",\n errors.postalCode\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"postal-code\"\n />\n {errors.postalCode && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.postal_code_required\")}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"city\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.city\")}\n </Label.Root>\n <input\n id=\"city\"\n type=\"text\"\n value={form.city || \"\"}\n onChange={(event) => onFieldChange(\"city\", event.target.value)}\n placeholder={t(\"user_input_form.placeholders.city\")}\n className={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\",\n errors.city\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"address-level2\"\n />\n {errors.city && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.city_required\")}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"country\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.country\")}\n </Label.Root>\n <Select\n options={countryOptions}\n value={form.countryCode || \"\"}\n onValueChange={(value) => onFieldChange(\"countryCode\", value)}\n placeholder={t(\"user_input_form.select.country\")}\n error={Boolean(errors.country)}\n />\n {errors.country && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.country_required\")}\n </p>\n )}\n </div>\n </>\n );\n};\n\nexport default AddressFields;\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":";;;;;;;;;AA0BA,IAAM,aAAa,GAAG,UAAC,EAWF,EAAA;QAVnB,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,kBAAkB,GAAA,EAAA,CAAA,kBAAA,EAClB,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,aAAa,GAAA,EAAA,CAAA,aAAA,EACb,iBAAiB,GAAA,EAAA,CAAA,iBAAA;AAET,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;IAET,IAAM,cAAc,GAAG,OAAO,CAAC,YAAA;AAC7B,QAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,eAAe;QACxB;QAEO,IAAA,KAAK,GAAa,eAAe,CAAA,CAAA,CAA5B,EAAK,IAAI,GAAI,eAAe,CAAA,KAAA,CAAA,CAAA,CAAnB;QACrB,OAAA,aAAA,CAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EAAa,KAAK,CAAA,EAAA,EAAE,KAAK,EAAE,CAAC,CAAC,gCAAgC,CAAC,EAAA,CAAA,CAAA,EAAO,IAAI,EAAA,IAAA,CAAA;AAC3E,IAAA,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEP,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AACnC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QACEA,IAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAA,CACED,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,CACjCE,GAAA,CAAC,KAAK,CAAC,IAAI,EAAA,EACT,OAAO,EAAC,cAAc,EACtB,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAEjE,CAAC,CAAC,sCAAsC,CAAC,GAC/B,EACbA,GAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAC,cAAc,EACjB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE,EAC9B,QAAQ,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAnC,CAAmC,EACxD,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,CAAC,CAAC,4CAA4C,CAAC,EAC5D,SAAS,EAAE,IAAI,CACb,sJAAsJ,EACtJ,MAAM,CAAC;AACL,8BAAE;AACF,8BAAE,uCAAuC,CAC5C,EACD,YAAY,EAAC,gBAAgB,EAAA,CAC7B,EACD,eAAe,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,KAC/CA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uGAAuG,EAAA,QAAA,EACnH,kBAAkB,CAAC,GAAG,CAAC,UAAC,UAAU,EAAA;;4BAAK,QACtCA,GAAA,CAAA,QAAA,EAAA,EAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,sDAAsD,EAChE,WAAW,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,KAAK,CAAC,cAAc,EAAE,CAAA,CAAtB,CAAsB,EAC9C,OAAO,EAAE,YAAA,EAAM,OAAA,iBAAiB,CAAC,UAAU,CAAC,CAAA,CAA7B,CAA6B,YAE5CF,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAAA,CAC5BE,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EACpC,UAAU,CAAC,KAAK,GACZ,EACN,CAAC,UAAU,CAAC,IAAI;AACf,4CAAA,UAAU,CAAC,UAAU;AACrB,4CAAA,UAAU,CAAC,OAAO;4CAClB,UAAU,CAAC,WAAW,MACpBA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,uBAAuB,EAAA,QAAA,EACpC;AACC,gDAAA,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,IAAI;qDACpC,MAAM,CAAC,OAAO;qDACd,IAAI,CAAC,GAAG,CAAC;AACZ,gDAAA,UAAU,CAAC,OAAO;AAClB,qDAAA,CAAA,EAAA,GAAA,UAAU,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,EAAE,CAAA;AACtC;iDACE,MAAM,CAAC,OAAO;AACd,iDAAA,IAAI,CAAC,IAAI,CAAC,EAAA,CACR,CACR,CAAA,EAAA,CACC,EAAA,EA1BD,UAAU,CAAC,EAAE,CA2BX;AACV,wBAAA,CAAA,CAAC,EAAA,CACE,CACP,EACA,MAAM,CAAC,YAAY,KAClBF,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAAA,CACzDE,cAAM,SAAS,EAAC,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EACtC,CAAC,CAAC,+CAA+C,CAAC,CAAA,EAAA,CACjD,CACL,CAAA,EAAA,CACG,EAENF,cAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBE,IAAC,KAAK,CAAC,IAAI,EAAA,EACT,OAAO,EAAC,cAAc,EACtB,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAEjE,CAAC,CAAC,sCAAsC,CAAC,EAAA,CAC/B,EACbA,eACE,EAAE,EAAC,cAAc,EACjB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE,EAC9B,QAAQ,EAAE,UAAC,KAAK,EAAA;4BACd,OAAA,aAAa,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAAjD,wBAAA,CAAiD,EAEnD,WAAW,EAAE,CAAC,CAAC,4CAA4C,CAAC,EAC5D,SAAS,EAAC,oLAAoL,EAC9L,YAAY,EAAC,eAAe,EAAA,CAC5B,CAAA,EAAA,CACE,EAENF,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+EAA+E,EAAA,QAAA,EAAA,CAC5FA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBE,GAAA,CAAC,KAAK,CAAC,IAAI,EAAA,EACT,OAAO,EAAC,YAAY,EACpB,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAEjE,CAAC,CAAC,oCAAoC,CAAC,EAAA,CAC7B,EACbA,GAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAC,YAAY,EACf,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,EAC5B,QAAQ,EAAE,UAAC,KAAK,EAAA;oCACd,OAAA,aAAa,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAA/C,gCAAA,CAA+C,EAEjD,WAAW,EAAE,CAAC,CAAC,0CAA0C,CAAC,EAC1D,SAAS,EAAE,IAAI,CACb,sJAAsJ,EACtJ,MAAM,CAAC;AACL,sCAAE;sCACA,uCAAuC,CAC5C,EACD,YAAY,EAAC,aAAa,EAAA,CAC1B,EACD,MAAM,CAAC,UAAU,KAChBF,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAAA,CACzDE,cAAM,SAAS,EAAC,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EACtC,CAAC,CAAC,6CAA6C,CAAC,CAAA,EAAA,CAC/C,CACL,CAAA,EAAA,CACG,EAENF,cAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBE,GAAA,CAAC,KAAK,CAAC,IAAI,EAAA,EACT,OAAO,EAAC,MAAM,EACd,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAEjE,CAAC,CAAC,6BAA6B,CAAC,EAAA,CACtB,EACbA,GAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAC,MAAM,EACT,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EACtB,QAAQ,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,CAAzC,CAAyC,EAC9D,WAAW,EAAE,CAAC,CAAC,mCAAmC,CAAC,EACnD,SAAS,EAAE,IAAI,CACb,sJAAsJ,EACtJ,MAAM,CAAC;AACL,sCAAE;AACF,sCAAE,uCAAuC,CAC5C,EACD,YAAY,EAAC,gBAAgB,EAAA,CAC7B,EACD,MAAM,CAAC,IAAI,KACVF,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAAA,CACzDE,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EACtC,CAAC,CAAC,sCAAsC,CAAC,CAAA,EAAA,CACxC,CACL,CAAA,EAAA,CACG,CAAA,EAAA,CACF,EAENF,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBE,GAAA,CAAC,KAAK,CAAC,IAAI,EAAA,EACT,OAAO,EAAC,SAAS,EACjB,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAEjE,CAAC,CAAC,gCAAgC,CAAC,EAAA,CACzB,EACbA,GAAA,CAAC,MAAM,EAAA,EACL,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAC7B,aAAa,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA,CAAnC,CAAmC,EAC7D,WAAW,EAAE,CAAC,CAAC,gCAAgC,CAAC,EAChD,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAA,CAC9B,EACD,MAAM,CAAC,OAAO,KACbF,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAAA,CACzDE,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EACtC,CAAC,CAAC,yCAAyC,CAAC,CAAA,EAAA,CAC3C,CACL,CAAA,EAAA,CACG,CAAA,EAAA,CACL;AAEP;;;;"}
1
+ {"version":3,"file":"AddressFields.js","sources":["../../../../../../src/components/session/UserInputForm/AddressFields.tsx"],"sourcesContent":["import * as Label from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport type {\n AddressSuggestion,\n RequestedFields,\n UserInputFormErrors,\n UserInputFormState,\n} from \"../../../types/userInputForm\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport { useCountryOptions } from \"../../../hooks/useCountryOptions\";\n\ninterface AddressFieldsProps {\n form: UserInputFormState;\n errors: UserInputFormErrors;\n requestedFields: RequestedFields;\n addressSuggestions: AddressSuggestion[];\n showSuggestions: boolean;\n onFieldChange: (key: keyof UserInputFormState, value: string) => void;\n onAddressChange: (value: string) => void;\n onAddressFocus: () => void;\n onAddressBlur: () => void;\n onApplySuggestion: (suggestion: AddressSuggestion) => void;\n}\n\nconst AddressFields = ({\n form,\n errors,\n requestedFields,\n addressSuggestions,\n showSuggestions,\n onFieldChange,\n onAddressChange,\n onAddressFocus,\n onAddressBlur,\n onApplySuggestion,\n}: AddressFieldsProps) => {\n const { t } = useI18n();\n const countryOptions = useCountryOptions(\"user_input_form.select.country\");\n\n if (!requestedFields.has(\"adresse\")) {\n return null;\n }\n\n return (\n <>\n <div className=\"relative space-y-2\">\n <Label.Root\n htmlFor=\"addressLine1\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.address_line1\")}\n </Label.Root>\n <input\n id=\"addressLine1\"\n type=\"text\"\n value={form.addressLine1 || \"\"}\n onChange={(event) => onAddressChange(event.target.value)}\n onFocus={onAddressFocus}\n onBlur={onAddressBlur}\n placeholder={t(\"user_input_form.placeholders.address_line1\")}\n className={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\",\n errors.addressLine1\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover:border-gray-400\"\n )}\n autoComplete=\"street-address\"\n />\n {showSuggestions && addressSuggestions.length > 0 && (\n <div className=\"absolute z-20 mt-1 max-h-48 w-full overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg\">\n {addressSuggestions.map((suggestion) => (\n <button\n key={suggestion.id}\n type=\"button\"\n className=\"w-full px-3 py-2 text-left text-sm hover:bg-gray-100\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onApplySuggestion(suggestion)}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm text-gray-900\">\n {suggestion.label}\n </span>\n {(suggestion.city ||\n suggestion.postalCode ||\n suggestion.country ||\n suggestion.countryCode) && (\n <span className=\"text-xs text-gray-500\">\n {[\n [suggestion.postalCode, suggestion.city]\n .filter(Boolean)\n .join(\" \"),\n suggestion.country ||\n suggestion.countryCode?.toUpperCase(),\n ]\n .filter(Boolean)\n .join(\", \")}\n </span>\n )}\n </div>\n </button>\n ))}\n </div>\n )}\n {errors.addressLine1 && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.address_line1_required\")}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"addressLine2\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.address_line2\")}\n </Label.Root>\n <input\n id=\"addressLine2\"\n type=\"text\"\n value={form.addressLine2 || \"\"}\n onChange={(event) =>\n onFieldChange(\"addressLine2\", event.target.value)\n }\n placeholder={t(\"user_input_form.placeholders.address_line2\")}\n className=\"w-full rounded-lg border border-gray-300 px-3 py-3 text-base transition-colors hover:border-gray-400 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[#11E5C5]\"\n autoComplete=\"address-line2\"\n />\n </div>\n\n <div className=\"grid grid-cols-[140px_minmax(0,1fr)] gap-3 md:grid-cols-[160px_minmax(0,1fr)]\">\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"postalCode\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.postal_code\")}\n </Label.Root>\n <input\n id=\"postalCode\"\n type=\"text\"\n value={form.postalCode || \"\"}\n onChange={(event) =>\n onFieldChange(\"postalCode\", event.target.value)\n }\n placeholder={t(\"user_input_form.placeholders.postal_code\")}\n className={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\",\n errors.postalCode\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"postal-code\"\n />\n {errors.postalCode && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.postal_code_required\")}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"city\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.city\")}\n </Label.Root>\n <input\n id=\"city\"\n type=\"text\"\n value={form.city || \"\"}\n onChange={(event) => onFieldChange(\"city\", event.target.value)}\n placeholder={t(\"user_input_form.placeholders.city\")}\n className={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\",\n errors.city\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"address-level2\"\n />\n {errors.city && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.city_required\")}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"country\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.country\")}\n </Label.Root>\n <Select\n options={countryOptions}\n value={form.countryCode || \"\"}\n onValueChange={(value) => onFieldChange(\"countryCode\", value)}\n placeholder={t(\"user_input_form.select.country\")}\n error={Boolean(errors.country)}\n />\n {errors.country && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.country_required\")}\n </p>\n )}\n </div>\n </>\n );\n};\n\nexport default AddressFields;\n"],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
@@ -1,23 +1,14 @@
1
- import { __spreadArray, __assign } from '../../../node_modules/tslib/tslib.es6.js';
2
1
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { useMemo } from 'react';
4
2
  import * as Label from '@radix-ui/react-label';
5
3
  import { Select } from '../../ui/SelectComponent.js';
6
- import { COUNTRY_OPTIONS, FIELD_LABELS } from '../../../constants/userInputForm.js';
4
+ import { FIELD_LABELS } from '../../../constants/userInputForm.js';
7
5
  import { useI18n } from '../../../hooks/useI18n.js';
6
+ import { useCountryOptions } from '../../../hooks/useCountryOptions.js';
8
7
 
9
8
  var NationalityField = function (_a) {
10
9
  var form = _a.form, errors = _a.errors, requestedFields = _a.requestedFields, onFieldChange = _a.onFieldChange;
11
10
  var t = useI18n().t;
12
- var countryOptions = useMemo(function () {
13
- if (COUNTRY_OPTIONS.length === 0) {
14
- return COUNTRY_OPTIONS;
15
- }
16
- var first = COUNTRY_OPTIONS[0], rest = COUNTRY_OPTIONS.slice(1);
17
- return __spreadArray([
18
- __assign(__assign({}, first), { label: t("user_input_form.select.nationality") })
19
- ], rest, true);
20
- }, [t]);
11
+ var countryOptions = useCountryOptions("user_input_form.select.nationality");
21
12
  if (!requestedFields.has("nationalite")) {
22
13
  return null;
23
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"NationalityField.js","sources":["../../../../../../src/components/session/UserInputForm/NationalityField.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport * as Label from \"@radix-ui/react-label\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport { COUNTRY_OPTIONS, FIELD_LABELS } from \"../../../constants/userInputForm\";\nimport type {\n RequestedFields,\n UserInputFormErrors,\n UserInputFormState,\n} from \"../../../types/userInputForm\";\nimport { useI18n } from \"../../../hooks/useI18n\";\n\ninterface NationalityFieldProps {\n form: UserInputFormState;\n errors: UserInputFormErrors;\n requestedFields: RequestedFields;\n onFieldChange: (key: keyof UserInputFormState, value: string) => void;\n}\n\nconst NationalityField = ({\n form,\n errors,\n requestedFields,\n onFieldChange,\n}: NationalityFieldProps) => {\n const { t } = useI18n();\n\n const countryOptions = useMemo(() => {\n if (COUNTRY_OPTIONS.length === 0) {\n return COUNTRY_OPTIONS;\n }\n\n const [first, ...rest] = COUNTRY_OPTIONS;\n return [\n { ...first, label: t(\"user_input_form.select.nationality\") },\n ...rest,\n ];\n }, [t]);\n\n if (!requestedFields.has(\"nationalite\")) {\n return null;\n }\n\n return (\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"nationality\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(FIELD_LABELS.nationalite)}\n </Label.Root>\n <Select\n options={countryOptions}\n value={form.nationality || \"\"}\n onValueChange={(value) => onFieldChange(\"nationality\", value)}\n placeholder={t(\"user_input_form.select.nationality\")}\n error={Boolean(errors.nationality)}\n />\n {errors.nationality && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.nationality_required\")}\n </p>\n )}\n </div>\n );\n};\n\nexport default NationalityField;\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;AAkBA,IAAM,gBAAgB,GAAG,UAAC,EAKF,EAAA;QAJtB,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,aAAa,GAAA,EAAA,CAAA,aAAA;AAEL,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;IAET,IAAM,cAAc,GAAG,OAAO,CAAC,YAAA;AAC7B,QAAA,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,eAAe;QACxB;QAEO,IAAA,KAAK,GAAa,eAAe,CAAA,CAAA,CAA5B,EAAK,IAAI,GAAI,eAAe,CAAA,KAAA,CAAA,CAAA,CAAnB;AACrB,QAAA,OAAA,aAAA,CAAA;AACO,YAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EAAA,KAAK,KAAE,KAAK,EAAE,CAAC,CAAC,oCAAoC,CAAC,EAAA;AACvD,SAAA,EAAA,IAAI,EAAA,IAAA,CAAA;AAEX,IAAA,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEP,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;AACvC,QAAA,OAAO,IAAI;IACb;IAEA,QACEA,cAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBC,GAAA,CAAC,KAAK,CAAC,IAAI,IACT,OAAO,EAAC,aAAa,EACrB,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAEjE,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAA,CACjB,EACbA,GAAA,CAAC,MAAM,IACL,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAC7B,aAAa,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA,CAAnC,CAAmC,EAC7D,WAAW,EAAE,CAAC,CAAC,oCAAoC,CAAC,EACpD,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAA,CAClC,EACD,MAAM,CAAC,WAAW,KACjBD,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAAA,CACzDC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EACtC,CAAC,CAAC,6CAA6C,CAAC,CAAA,EAAA,CAC/C,CACL,CAAA,EAAA,CACG;AAEV;;;;"}
1
+ {"version":3,"file":"NationalityField.js","sources":["../../../../../../src/components/session/UserInputForm/NationalityField.tsx"],"sourcesContent":["import * as Label from \"@radix-ui/react-label\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport { FIELD_LABELS } from \"../../../constants/userInputForm\";\nimport type {\n RequestedFields,\n UserInputFormErrors,\n UserInputFormState,\n} from \"../../../types/userInputForm\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport { useCountryOptions } from \"../../../hooks/useCountryOptions\";\n\ninterface NationalityFieldProps {\n form: UserInputFormState;\n errors: UserInputFormErrors;\n requestedFields: RequestedFields;\n onFieldChange: (key: keyof UserInputFormState, value: string) => void;\n}\n\nconst NationalityField = ({\n form,\n errors,\n requestedFields,\n onFieldChange,\n}: NationalityFieldProps) => {\n const { t } = useI18n();\n const countryOptions = useCountryOptions(\"user_input_form.select.nationality\");\n\n if (!requestedFields.has(\"nationalite\")) {\n return null;\n }\n\n return (\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"nationality\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(FIELD_LABELS.nationalite)}\n </Label.Root>\n <Select\n options={countryOptions}\n value={form.nationality || \"\"}\n onValueChange={(value) => onFieldChange(\"nationality\", value)}\n placeholder={t(\"user_input_form.select.nationality\")}\n error={Boolean(errors.nationality)}\n />\n {errors.nationality && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.nationality_required\")}\n </p>\n )}\n </div>\n );\n};\n\nexport default NationalityField;\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;AAkBA,IAAM,gBAAgB,GAAG,UAAC,EAKF,EAAA;QAJtB,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,aAAa,GAAA,EAAA,CAAA,aAAA;AAEL,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;AACT,IAAA,IAAM,cAAc,GAAG,iBAAiB,CAAC,oCAAoC,CAAC;IAE9E,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;AACvC,QAAA,OAAO,IAAI;IACb;IAEA,QACEA,cAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBC,GAAA,CAAC,KAAK,CAAC,IAAI,IACT,OAAO,EAAC,aAAa,EACrB,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAEjE,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,EAAA,CACjB,EACbA,GAAA,CAAC,MAAM,IACL,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAC7B,aAAa,EAAE,UAAC,KAAK,EAAA,EAAK,OAAA,aAAa,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA,CAAnC,CAAmC,EAC7D,WAAW,EAAE,CAAC,CAAC,oCAAoC,CAAC,EACpD,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAA,CAClC,EACD,MAAM,CAAC,WAAW,KACjBD,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAAA,CACzDC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EACtC,CAAC,CAAC,6CAA6C,CAAC,CAAA,EAAA,CAC/C,CACL,CAAA,EAAA,CACG;AAEV;;;;"}
@@ -26,7 +26,7 @@ import '@unissey-web/sdk-react';
26
26
  import '../ui/SelectComponent.js';
27
27
  import 'clsx';
28
28
  import 'tailwind-merge';
29
- import 'heic2any';
29
+ import '../../_virtual/heic2any.js';
30
30
  import '../jdi/JDIProcessing.js';
31
31
  import '../../services/cameraService.js';
32
32
  import '../../services/documentDetectionService.js';
@@ -26,7 +26,7 @@ import '@unissey-web/sdk-react';
26
26
  import '../ui/SelectComponent.js';
27
27
  import 'clsx';
28
28
  import 'tailwind-merge';
29
- import 'heic2any';
29
+ import '../../_virtual/heic2any.js';
30
30
  import '../jdi/JDIProcessing.js';
31
31
  import '../../services/cameraService.js';
32
32
  import '../../services/documentDetectionService.js';
@@ -27,30 +27,6 @@ var YEAR_OPTIONS = years.map(function (value) { return ({
27
27
  value: String(value),
28
28
  label: String(value),
29
29
  }); });
30
- var COUNTRY_OPTIONS = [
31
- { value: "", label: "Sélectionnez un pays" },
32
- { value: "FR", label: "France" },
33
- { value: "BE", label: "Belgique" },
34
- { value: "CH", label: "Suisse" },
35
- { value: "DE", label: "Allemagne" },
36
- { value: "ES", label: "Espagne" },
37
- { value: "IT", label: "Italie" },
38
- { value: "PT", label: "Portugal" },
39
- { value: "GB", label: "Royaume-Uni" },
40
- { value: "IE", label: "Irlande" },
41
- { value: "NL", label: "Pays-Bas" },
42
- { value: "US", label: "États-Unis" },
43
- { value: "CA", label: "Canada" },
44
- { value: "MX", label: "Mexique" },
45
- { value: "AU", label: "Australie" },
46
- { value: "BR", label: "Brésil" },
47
- { value: "MA", label: "Maroc" },
48
- { value: "DZ", label: "Algérie" },
49
- { value: "TN", label: "Tunisie" },
50
- { value: "JP", label: "Japon" },
51
- { value: "CN", label: "Chine" },
52
- { value: "IN", label: "Inde" },
53
- ];
54
30
  var ADDRESS_SUGGESTIONS = [
55
31
  "10 Rue de Rivoli, 75001 Paris, France",
56
32
  "221B Baker Street, NW1 6XE Londres, Royaume-Uni",
@@ -90,5 +66,5 @@ var FALLBACK_ADDRESS_SUGGESTIONS = ADDRESS_SUGGESTIONS.map(function (label, inde
90
66
  country: "",
91
67
  }); });
92
68
 
93
- export { ADDRESS_SUGGESTIONS, COUNTRY_OPTIONS, DAY_OPTIONS, DEFAULT_FIELDS, FALLBACK_ADDRESS_SUGGESTIONS, FIELD_LABELS, GEOCODING_AUTOCOMPLETE_ENDPOINT, MONTH_OPTIONS, YEAR_OPTIONS };
69
+ export { ADDRESS_SUGGESTIONS, DAY_OPTIONS, DEFAULT_FIELDS, FALLBACK_ADDRESS_SUGGESTIONS, FIELD_LABELS, GEOCODING_AUTOCOMPLETE_ENDPOINT, MONTH_OPTIONS, YEAR_OPTIONS };
94
70
  //# sourceMappingURL=userInputForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"userInputForm.js","sources":["../../../../src/constants/userInputForm.ts"],"sourcesContent":["import type {\n AddressSuggestion,\n InformationType,\n RequestedFieldKey,\n SelectOption,\n} from \"../types/userInputForm\";\n\nconst days = Array.from({ length: 31 }, (_, index) => index + 1);\nconst currentYear = new Date().getFullYear();\nconst years = Array.from({ length: 120 }, (_, index) => currentYear - index);\n\nconst monthLabels = [\n \"Janvier\",\n \"Février\",\n \"Mars\",\n \"Avril\",\n \"Mai\",\n \"Juin\",\n \"Juillet\",\n \"Août\",\n \"Septembre\",\n \"Octobre\",\n \"Novembre\",\n \"Décembre\",\n];\n\nexport const DAY_OPTIONS: SelectOption[] = days.map((value) => ({\n value: String(value).padStart(2, \"0\"),\n label: String(value).padStart(2, \"0\"),\n}));\n\nexport const MONTH_OPTIONS: SelectOption[] = monthLabels.map(\n (label, index) => ({\n value: String(index + 1).padStart(2, \"0\"),\n label,\n })\n);\n\nexport const YEAR_OPTIONS: SelectOption[] = years.map((value) => ({\n value: String(value),\n label: String(value),\n}));\n\nexport const COUNTRY_OPTIONS: SelectOption[] = [\n { value: \"\", label: \"Sélectionnez un pays\" },\n { value: \"FR\", label: \"France\" },\n { value: \"BE\", label: \"Belgique\" },\n { value: \"CH\", label: \"Suisse\" },\n { value: \"DE\", label: \"Allemagne\" },\n { value: \"ES\", label: \"Espagne\" },\n { value: \"IT\", label: \"Italie\" },\n { value: \"PT\", label: \"Portugal\" },\n { value: \"GB\", label: \"Royaume-Uni\" },\n { value: \"IE\", label: \"Irlande\" },\n { value: \"NL\", label: \"Pays-Bas\" },\n { value: \"US\", label: \"États-Unis\" },\n { value: \"CA\", label: \"Canada\" },\n { value: \"MX\", label: \"Mexique\" },\n { value: \"AU\", label: \"Australie\" },\n { value: \"BR\", label: \"Brésil\" },\n { value: \"MA\", label: \"Maroc\" },\n { value: \"DZ\", label: \"Algérie\" },\n { value: \"TN\", label: \"Tunisie\" },\n { value: \"JP\", label: \"Japon\" },\n { value: \"CN\", label: \"Chine\" },\n { value: \"IN\", label: \"Inde\" },\n];\n\nexport const ADDRESS_SUGGESTIONS: string[] = [\n \"10 Rue de Rivoli, 75001 Paris, France\",\n \"221B Baker Street, NW1 6XE Londres, Royaume-Uni\",\n \"1600 Amphitheatre Parkway, 94043 Mountain View, États-Unis\",\n \"55 Rue du Faubourg Saint-Honoré, 75008 Paris, France\",\n \"1 Place du Commerce, 44000 Nantes, France\",\n \"Piazza del Colosseo 1, 00184 Rome, Italie\",\n \"Av. Paulista 1578, 01310-200 São Paulo, Brésil\",\n];\n\nexport const DEFAULT_FIELDS: Record<InformationType, RequestedFieldKey[]> = {\n identity: [\"nom\", \"prenom\", \"date_naissance\"],\n \"identity-legal\": [\"nom\", \"siret\", \"tva\", \"adresse\"],\n contact: [\"email\", \"sms\"],\n address: [\"adresse\"],\n nationality: [\"nationalite\"],\n custom: [], // Custom forms use customFields instead\n};\n\nexport const FIELD_LABELS: Record<RequestedFieldKey, string> = {\n nom: \"user_input_form.fields.last_name\",\n prenom: \"user_input_form.fields.first_name\",\n date_naissance: \"user_input_form.fields.birth_date\",\n email: \"user_input_form.fields.email\",\n sms: \"user_input_form.fields.phone\",\n adresse: \"user_input_form.fields.address_line1\",\n nationalite: \"user_input_form.fields.nationality\",\n company: \"user_input_form.fields.company_name\",\n siret: \"user_input_form.fields.siret\",\n tva: \"user_input_form.fields.vat_number\",\n};\n\n// Backend endpoint pour l'autocomplétion d'adresses (sécurisé)\nexport const GEOCODING_AUTOCOMPLETE_ENDPOINT = \"/geocoding/autocomplete\";\n\nexport const FALLBACK_ADDRESS_SUGGESTIONS: AddressSuggestion[] =\n ADDRESS_SUGGESTIONS.map((label, index) => ({\n id: `fallback-${index}`,\n label,\n addressLine1: label,\n postalCode: \"\",\n city: \"\",\n country: \"\",\n }));\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"userInputForm.js","sources":["../../../../src/constants/userInputForm.ts"],"sourcesContent":["import type {\n AddressSuggestion,\n InformationType,\n RequestedFieldKey,\n SelectOption,\n} from \"../types/userInputForm\";\n\nconst days = Array.from({ length: 31 }, (_, index) => index + 1);\nconst currentYear = new Date().getFullYear();\nconst years = Array.from({ length: 120 }, (_, index) => currentYear - index);\n\nconst monthLabels = [\n \"Janvier\",\n \"Février\",\n \"Mars\",\n \"Avril\",\n \"Mai\",\n \"Juin\",\n \"Juillet\",\n \"Août\",\n \"Septembre\",\n \"Octobre\",\n \"Novembre\",\n \"Décembre\",\n];\n\nexport const DAY_OPTIONS: SelectOption[] = days.map((value) => ({\n value: String(value).padStart(2, \"0\"),\n label: String(value).padStart(2, \"0\"),\n}));\n\nexport const MONTH_OPTIONS: SelectOption[] = monthLabels.map(\n (label, index) => ({\n value: String(index + 1).padStart(2, \"0\"),\n label,\n })\n);\n\nexport const YEAR_OPTIONS: SelectOption[] = years.map((value) => ({\n value: String(value),\n label: String(value),\n}));\n\n\nexport const ADDRESS_SUGGESTIONS: string[] = [\n \"10 Rue de Rivoli, 75001 Paris, France\",\n \"221B Baker Street, NW1 6XE Londres, Royaume-Uni\",\n \"1600 Amphitheatre Parkway, 94043 Mountain View, États-Unis\",\n \"55 Rue du Faubourg Saint-Honoré, 75008 Paris, France\",\n \"1 Place du Commerce, 44000 Nantes, France\",\n \"Piazza del Colosseo 1, 00184 Rome, Italie\",\n \"Av. Paulista 1578, 01310-200 São Paulo, Brésil\",\n];\n\nexport const DEFAULT_FIELDS: Record<InformationType, RequestedFieldKey[]> = {\n identity: [\"nom\", \"prenom\", \"date_naissance\"],\n \"identity-legal\": [\"nom\", \"siret\", \"tva\", \"adresse\"],\n contact: [\"email\", \"sms\"],\n address: [\"adresse\"],\n nationality: [\"nationalite\"],\n custom: [], // Custom forms use customFields instead\n};\n\nexport const FIELD_LABELS: Record<RequestedFieldKey, string> = {\n nom: \"user_input_form.fields.last_name\",\n prenom: \"user_input_form.fields.first_name\",\n date_naissance: \"user_input_form.fields.birth_date\",\n email: \"user_input_form.fields.email\",\n sms: \"user_input_form.fields.phone\",\n adresse: \"user_input_form.fields.address_line1\",\n nationalite: \"user_input_form.fields.nationality\",\n company: \"user_input_form.fields.company_name\",\n siret: \"user_input_form.fields.siret\",\n tva: \"user_input_form.fields.vat_number\",\n};\n\n// Backend endpoint pour l'autocomplétion d'adresses (sécurisé)\nexport const GEOCODING_AUTOCOMPLETE_ENDPOINT = \"/geocoding/autocomplete\";\n\nexport const FALLBACK_ADDRESS_SUGGESTIONS: AddressSuggestion[] =\n ADDRESS_SUGGESTIONS.map((label, index) => ({\n id: `fallback-${index}`,\n label,\n addressLine1: label,\n postalCode: \"\",\n city: \"\",\n country: \"\",\n }));\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { __spreadArray } from '../node_modules/tslib/tslib.es6.js';
2
+ import { useMemo } from 'react';
3
+ import countryISO from '../i18n/country/country.iso2.fr.json.js';
4
+ import { useI18n } from './useI18n.js';
5
+
6
+ var ISO_CODES = Object.keys(countryISO);
7
+ var useCountryOptions = function (placeholderKey) {
8
+ var _a = useI18n(), t = _a.t, currentLanguage = _a.currentLanguage;
9
+ return useMemo(function () {
10
+ var countries = ISO_CODES.filter(function (code) { return code !== "EU"; })
11
+ .map(function (code) { return ({ value: code, label: t(code) }); })
12
+ .sort(function (a, b) { return a.label.localeCompare(b.label, currentLanguage); });
13
+ return __spreadArray([{ value: "", label: t(placeholderKey) }], countries, true);
14
+ }, [t, currentLanguage, placeholderKey]);
15
+ };
16
+
17
+ export { useCountryOptions };
18
+ //# sourceMappingURL=useCountryOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCountryOptions.js","sources":["../../../../src/hooks/useCountryOptions.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport countryISO from \"../i18n/country/country.iso2.fr.json\";\nimport { useI18n } from \"./useI18n\";\nimport type { SelectOption } from \"../types/userInputForm\";\n\nconst ISO_CODES = Object.keys(countryISO);\n\nexport const useCountryOptions = (placeholderKey: string): SelectOption[] => {\n const { t, currentLanguage } = useI18n();\n\n return useMemo(() => {\n const countries = ISO_CODES.filter((code) => code !== \"EU\")\n .map((code) => ({ value: code, label: t(code) }))\n .sort((a, b) => a.label.localeCompare(b.label, currentLanguage));\n\n return [{ value: \"\", label: t(placeholderKey) }, ...countries];\n }, [t, currentLanguage, placeholderKey]);\n};\n"],"names":[],"mappings":";;;;;AAKA,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAElC,IAAM,iBAAiB,GAAG,UAAC,cAAsB,EAAA;IAChD,IAAA,EAAA,GAAyB,OAAO,EAAE,EAAhC,CAAC,GAAA,EAAA,CAAA,CAAA,EAAE,eAAe,GAAA,EAAA,CAAA,eAAc;AAExC,IAAA,OAAO,OAAO,CAAC,YAAA;AACb,QAAA,IAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,KAAK,IAAI,CAAA,CAAb,CAAa;aACvD,GAAG,CAAC,UAAC,IAAI,EAAA,EAAK,QAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAC,CAAjC,CAAiC;aAC/C,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA,CAA/C,CAA+C,CAAC;AAElE,QAAA,OAAA,aAAA,CAAA,CAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,CAAA,EAAK,SAAS,EAAA,IAAA,CAAA;IAC/D,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;AAC1C;;;;"}
@@ -174,7 +174,7 @@ var YE = "Yémen";
174
174
  var ZM = "Zambie";
175
175
  var ZW = "Zimbabwe";
176
176
  var EU = "Europe (UE)";
177
- var countryISOFr = {
177
+ var countryISO = {
178
178
  AF: AF,
179
179
  ZA: ZA,
180
180
  AL: AL,
@@ -353,5 +353,5 @@ var countryISOFr = {
353
353
  EU: EU
354
354
  };
355
355
 
356
- export { AD, AE, AF, AG, AI, AL, AM, AO, AR, AT, AU, AW, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BM, BN, BO, BR, BS, BT, BW, BY, BZ, CA, CD, CF, CG, CH, CI, CL, CM, CN, CO, CR, CU, CV, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, ER, ES, ET, EU, FI, FR, GA, GB, GD, GE, GH, GL, GM, GN, GQ, GR, GY, HN, HR, HT, HU, ID, IE, IL, IN, IQ, IR, IS, IT, JM, JO, JP, KE, KG, KM, KR, KW, KZ, LA, LB, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MG, MK, ML, MR, MS, MT, MV, MW, MX, MY, MZ, NA, NE, NG, NI, NL, NO, NP, NZ, OM, PA, PE, PG, PH, PK, PL, PS, PT, PY, QA, RO, RS, RU, RW, SA, SC, SD, SE, SG, SI, SK, SL, SM, SN, SO, SR, SS, SV, SX, SY, TD, TG, TH, TL, TM, TN, TR, TW, TZ, UA, UG, US, UY, UZ, VA, VE, VN, YE, ZA, ZM, ZW, countryISOFr as default };
356
+ export { AD, AE, AF, AG, AI, AL, AM, AO, AR, AT, AU, AW, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BM, BN, BO, BR, BS, BT, BW, BY, BZ, CA, CD, CF, CG, CH, CI, CL, CM, CN, CO, CR, CU, CV, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, ER, ES, ET, EU, FI, FR, GA, GB, GD, GE, GH, GL, GM, GN, GQ, GR, GY, HN, HR, HT, HU, ID, IE, IL, IN, IQ, IR, IS, IT, JM, JO, JP, KE, KG, KM, KR, KW, KZ, LA, LB, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MG, MK, ML, MR, MS, MT, MV, MW, MX, MY, MZ, NA, NE, NG, NI, NL, NO, NP, NZ, OM, PA, PE, PG, PH, PK, PL, PS, PT, PY, QA, RO, RS, RU, RW, SA, SC, SD, SE, SG, SI, SK, SL, SM, SN, SO, SR, SS, SV, SX, SY, TD, TG, TH, TL, TM, TN, TR, TW, TZ, UA, UG, US, UY, UZ, VA, VE, VN, YE, ZA, ZM, ZW, countryISO as default };
357
357
  //# sourceMappingURL=country.iso2.fr.json.js.map
@@ -7,14 +7,14 @@ import documentsEn from './documents/documents.en.json.js';
7
7
  import documentsFr from './documents/documents.fr.json.js';
8
8
  import countryFr from './country/country.fr.json.js';
9
9
  import countryEn from './country/country.en.json.js';
10
- import countryISOFr from './country/country.iso2.fr.json.js';
10
+ import countryISO from './country/country.iso2.fr.json.js';
11
11
  import countryISOEn from './country/country.iso2.en.json.js';
12
12
 
13
13
  // Créer une instance i18next complètement séparée pour le SDK
14
14
  var sdkI18n = createInstance();
15
15
  var resources = {
16
16
  fr: {
17
- translation: __assign(__assign(__assign(__assign({}, frTranslations), documentsFr), countryFr), countryISOFr)
17
+ translation: __assign(__assign(__assign(__assign({}, frTranslations), documentsFr), countryFr), countryISO)
18
18
  },
19
19
  en: {
20
20
  translation: __assign(__assign(__assign(__assign({}, enTranslations), documentsEn), countryEn), countryISOEn)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/i18n/index.ts"],"sourcesContent":["import { createInstance } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport frTranslations from './fr.json';\nimport enTranslations from './en.json';\n\nimport documentsEn from './documents/documents.en.json';\nimport documentsFr from './documents/documents.fr.json';\n\nimport countryFr from './country/country.fr.json';\nimport countryEn from './country/country.en.json';\nimport countryISOFr from './country/country.iso2.fr.json';\nimport countryISOEn from './country/country.iso2.en.json';\n\n// Créer une instance i18next complètement séparée pour le SDK\nconst sdkI18n = createInstance();\n\nconst resources = {\n fr: {\n translation: {\n ...frTranslations,\n // Documents\n ...documentsFr,\n // Pays\n ...countryFr,\n ...countryISOFr\n }\n },\n en: {\n translation: {\n ...enTranslations,\n // Documents\n ...documentsEn,\n // Pays\n ...countryEn,\n ...countryISOEn\n }\n }\n};\n\n// Get initial language from localStorage or default to 'fr'\nconst getInitialLanguage = (): string => {\n try {\n const savedLanguage = localStorage.getItem('datakeen-sdk-language');\n return savedLanguage && (savedLanguage === 'fr' || savedLanguage === 'en') ? savedLanguage : 'fr';\n } catch (error) {\n console.warn('Failed to read language from localStorage:', error);\n return 'fr';\n }\n};\n\n// Initialiser l'instance SDK de manière indépendante\nsdkI18n\n .use(initReactI18next)\n .init({\n resources,\n lng: getInitialLanguage(),\n fallbackLng: 'fr',\n debug: false,\n interpolation: {\n escapeValue: false\n }\n });\n\nexport default sdkI18n;\n"],"names":[],"mappings":";;;;;;;;;;;;AAaA;AACA,IAAM,OAAO,GAAG,cAAc;AAE9B,IAAM,SAAS,GAAG;AAChB,IAAA,EAAE,EAAE;QACF,WAAW,EAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,cAAc,CAAA,EAEd,WAAW,GAEX,SAAS,CAAA,EACT,YAAY;AAElB,KAAA;AACD,IAAA,EAAE,EAAE;QACF,WAAW,EAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,cAAc,CAAA,EAEd,WAAW,GAEX,SAAS,CAAA,EACT,YAAY;AAElB;CACF;AAED;AACA,IAAM,kBAAkB,GAAG,YAAA;AACzB,IAAA,IAAI;QACF,IAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC;AACnE,QAAA,OAAO,aAAa,KAAK,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,IAAI;IACnG;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC;AACjE,QAAA,OAAO,IAAI;IACb;AACF,CAAC;AAED;AACA;KACG,GAAG,CAAC,gBAAgB;AACpB,KAAA,IAAI,CAAC;AACJ,IAAA,SAAS,EAAA,SAAA;IACT,GAAG,EAAE,kBAAkB,EAAE;AACzB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE;AACb,QAAA,WAAW,EAAE;AACd;AACF,CAAA,CAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/i18n/index.ts"],"sourcesContent":["import { createInstance } from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport frTranslations from './fr.json';\nimport enTranslations from './en.json';\n\nimport documentsEn from './documents/documents.en.json';\nimport documentsFr from './documents/documents.fr.json';\n\nimport countryFr from './country/country.fr.json';\nimport countryEn from './country/country.en.json';\nimport countryISOFr from './country/country.iso2.fr.json';\nimport countryISOEn from './country/country.iso2.en.json';\n\n// Créer une instance i18next complètement séparée pour le SDK\nconst sdkI18n = createInstance();\n\nconst resources = {\n fr: {\n translation: {\n ...frTranslations,\n // Documents\n ...documentsFr,\n // Pays\n ...countryFr,\n ...countryISOFr\n }\n },\n en: {\n translation: {\n ...enTranslations,\n // Documents\n ...documentsEn,\n // Pays\n ...countryEn,\n ...countryISOEn\n }\n }\n};\n\n// Get initial language from localStorage or default to 'fr'\nconst getInitialLanguage = (): string => {\n try {\n const savedLanguage = localStorage.getItem('datakeen-sdk-language');\n return savedLanguage && (savedLanguage === 'fr' || savedLanguage === 'en') ? savedLanguage : 'fr';\n } catch (error) {\n console.warn('Failed to read language from localStorage:', error);\n return 'fr';\n }\n};\n\n// Initialiser l'instance SDK de manière indépendante\nsdkI18n\n .use(initReactI18next)\n .init({\n resources,\n lng: getInitialLanguage(),\n fallbackLng: 'fr',\n debug: false,\n interpolation: {\n escapeValue: false\n }\n });\n\nexport default sdkI18n;\n"],"names":["countryISOFr"],"mappings":";;;;;;;;;;;;AAaA;AACA,IAAM,OAAO,GAAG,cAAc;AAE9B,IAAM,SAAS,GAAG;AAChB,IAAA,EAAE,EAAE;QACF,WAAW,EAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,cAAc,CAAA,EAEd,WAAW,GAEX,SAAS,CAAA,EACTA,UAAY;AAElB,KAAA;AACD,IAAA,EAAE,EAAE;QACF,WAAW,EAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,EAAA,EACN,cAAc,CAAA,EAEd,WAAW,GAEX,SAAS,CAAA,EACT,YAAY;AAElB;CACF;AAED;AACA,IAAM,kBAAkB,GAAG,YAAA;AACzB,IAAA,IAAI;QACF,IAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,uBAAuB,CAAC;AACnE,QAAA,OAAO,aAAa,KAAK,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,IAAI;IACnG;IAAE,OAAO,KAAK,EAAE;AACd,QAAA,OAAO,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,CAAC;AACjE,QAAA,OAAO,IAAI;IACb;AACF,CAAC;AAED;AACA;KACG,GAAG,CAAC,gBAAgB;AACpB,KAAA,IAAI,CAAC;AACJ,IAAA,SAAS,EAAA,SAAA;IACT,GAAG,EAAE,kBAAkB,EAAE;AACzB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,aAAa,EAAE;AACb,QAAA,WAAW,EAAE;AACd;AACF,CAAA,CAAC;;;;"}