datakeen-session-react 1.1.140-dev.75 → 1.1.140-dev.77

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 (55) hide show
  1. package/dist/cjs/components/document-collection/DocumentCollection.js +20 -23
  2. package/dist/cjs/components/document-collection/DocumentCollection.js.map +1 -1
  3. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js +9 -1
  4. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js.map +1 -1
  5. package/dist/cjs/components/id-check/Photo.js +1 -2
  6. package/dist/cjs/components/id-check/Photo.js.map +1 -1
  7. package/dist/cjs/components/id-check/PhotoPreview.js +39 -0
  8. package/dist/cjs/components/id-check/PhotoPreview.js.map +1 -0
  9. package/dist/cjs/components/jdi/JDIDocumentUpload.js +1 -1
  10. package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +1 -1
  11. package/dist/cjs/components/session/DocumentCheck.js +35 -32
  12. package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
  13. package/dist/cjs/components/template/TemplateNodeRenderer.js +1 -1
  14. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
  15. package/dist/cjs/hooks/useUserInputForm.js +6 -1
  16. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  17. package/dist/cjs/i18n/en.json.js +11 -0
  18. package/dist/cjs/i18n/en.json.js.map +1 -1
  19. package/dist/cjs/i18n/fr.json.js +11 -0
  20. package/dist/cjs/i18n/fr.json.js.map +1 -1
  21. package/dist/cjs/index.css.js +1 -1
  22. package/dist/cjs/services/analysis.js +1 -5
  23. package/dist/cjs/services/analysis.js.map +1 -1
  24. package/dist/cjs/services/auditTrailService.js +73 -0
  25. package/dist/cjs/services/auditTrailService.js.map +1 -1
  26. package/dist/cjs/services/cameraService.js +54 -9
  27. package/dist/cjs/services/cameraService.js.map +1 -1
  28. package/dist/esm/components/document-collection/DocumentCollection.js +21 -24
  29. package/dist/esm/components/document-collection/DocumentCollection.js.map +1 -1
  30. package/dist/esm/components/document-collection/DocumentCollectionUpload.js +9 -1
  31. package/dist/esm/components/document-collection/DocumentCollectionUpload.js.map +1 -1
  32. package/dist/esm/components/id-check/Photo.js +1 -2
  33. package/dist/esm/components/id-check/Photo.js.map +1 -1
  34. package/dist/esm/components/id-check/PhotoPreview.js +35 -0
  35. package/dist/esm/components/id-check/PhotoPreview.js.map +1 -0
  36. package/dist/esm/components/jdi/JDIDocumentUpload.js +1 -1
  37. package/dist/esm/components/jdi/JDIDocumentUpload.js.map +1 -1
  38. package/dist/esm/components/session/DocumentCheck.js +35 -32
  39. package/dist/esm/components/session/DocumentCheck.js.map +1 -1
  40. package/dist/esm/components/template/TemplateNodeRenderer.js +1 -1
  41. package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
  42. package/dist/esm/hooks/useUserInputForm.js +6 -1
  43. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  44. package/dist/esm/i18n/en.json.js +11 -0
  45. package/dist/esm/i18n/en.json.js.map +1 -1
  46. package/dist/esm/i18n/fr.json.js +11 -0
  47. package/dist/esm/i18n/fr.json.js.map +1 -1
  48. package/dist/esm/index.css.js +1 -1
  49. package/dist/esm/services/analysis.js +1 -5
  50. package/dist/esm/services/analysis.js.map +1 -1
  51. package/dist/esm/services/auditTrailService.js +67 -1
  52. package/dist/esm/services/auditTrailService.js.map +1 -1
  53. package/dist/esm/services/cameraService.js +54 -9
  54. package/dist/esm/services/cameraService.js.map +1 -1
  55. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cameraService.js","sources":["../../../../src/services/cameraService.ts"],"sourcesContent":["import type { CameraFacingMode } from \"../types/camera\";\nimport { professionalImageQuality } from \"./professionalImageQuality\";\nimport type { QualityAnalysis } from \"./professionalImageQuality\";\n\n// Permit to enable development mode to test without a camera\nconst DEV_MODE = false; // import.meta.env.DEV;\n// Default image path for development mode\nconst DEFAULT_TEST_IMAGE = \"/mock-id-card.jpeg\";\n\ntype CaptureMethod = \"imageCapture\" | \"canvas\" | \"mock\";\n\nexport interface CameraStartOptions {\n facingMode?: CameraFacingMode;\n idealResolution?: {\n width?: number;\n height?: number;\n };\n deviceId?: string;\n advancedConstraints?: MediaTrackConstraints[];\n preferImageCapture?: boolean;\n}\n\nexport interface CameraStartResult {\n success: boolean;\n error?: string;\n settings?: MediaTrackSettings;\n captureMethod?: CaptureMethod;\n}\n\nexport interface DocumentCropArea {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface CaptureDocumentOptions {\n facingMode?: CameraFacingMode;\n format?: \"png\" | \"jpeg\";\n jpegQuality?: number;\n preferImageCapture?: boolean;\n}\n\nexport interface CaptureDocumentResult {\n dataUrl: string;\n method: CaptureMethod;\n analysis?: QualityAnalysis;\n sourceDimensions?: { width: number; height: number };\n cropDimensions?: { width: number; height: number };\n}\n\nconst DEFAULT_RESOLUTION = {\n width: 4096,\n height: 3072,\n};\n\nconst QUALITY_REQUIREMENTS = {\n minArea: 3500 * 2200,\n targetArea: 4800 * 3200,\n minLongSide: 3200,\n};\n\nconst supportsImageCapture = (): boolean =>\n typeof window !== \"undefined\" && \"ImageCapture\" in window;\n\ninterface CanvasSource {\n source: CanvasImageSource;\n width: number;\n height: number;\n cleanup?: () => void;\n}\n\nexport class CameraService {\n private stream: MediaStream | null = null;\n private videoTrack: MediaStreamTrack | null = null;\n private imageCapture: ImageCapture | null = null;\n private devMode: boolean = DEV_MODE;\n private mockImagePath: string = DEFAULT_TEST_IMAGE;\n private captureMethod: CaptureMethod = \"canvas\";\n private lastTrackSettings: MediaTrackSettings | null = null;\n\n private async startMockCamera(\n videoElement: HTMLVideoElement | null\n ): Promise<CameraStartResult> {\n try {\n if (!videoElement) {\n return { success: false, error: \"Élément vidéo non disponible\" };\n }\n\n const img = new Image();\n img.src = this.mockImagePath;\n\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () =>\n reject(\n new Error(`Impossible de charger l'image: ${this.mockImagePath}`)\n );\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n\n if (!ctx) {\n return { success: false, error: \"Contexte du canvas non disponible\" };\n }\n\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n const stream: MediaStream = canvas.captureStream(30);\n this.stream = stream;\n this.captureMethod = \"mock\";\n videoElement.srcObject = stream;\n\n return { success: true, captureMethod: \"mock\" };\n } catch (err) {\n console.error(\"Erreur lors de la création du flux vidéo mock:\", err);\n return {\n success: false,\n error: `Erreur lors de la création du flux vidéo mock: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n }\n\n async startCamera(\n videoElement: HTMLVideoElement | null,\n options: CameraStartOptions = {}\n ): Promise<CameraStartResult> {\n if (this.devMode) {\n return this.startMockCamera(videoElement);\n }\n\n if (!videoElement) {\n return { success: false, error: \"Élément vidéo non disponible\" };\n }\n\n if (!navigator?.mediaDevices?.getUserMedia) {\n return {\n success: false,\n error: \"La capture vidéo n'est pas supportée sur cet appareil.\",\n };\n }\n\n const facingMode = options.facingMode ?? \"environment\";\n const preferImageCapture = options.preferImageCapture ?? true;\n const desiredWidth = options.idealResolution?.width ?? DEFAULT_RESOLUTION.width;\n const desiredHeight = options.idealResolution?.height ?? DEFAULT_RESOLUTION.height;\n\n try {\n // Step 1: Probe the camera to discover its maximum supported resolution\n const maxResolution = await this.getMaxCameraResolution(facingMode, options.deviceId);\n\n // Use the lesser of the desired and the device maximum\n const targetWidth = maxResolution\n ? Math.min(desiredWidth, maxResolution.width)\n : desiredWidth;\n const targetHeight = maxResolution\n ? Math.min(desiredHeight, maxResolution.height)\n : desiredHeight;\n\n console.debug(\"[CameraService] Resolution negotiation\", {\n desired: { width: desiredWidth, height: desiredHeight },\n deviceMax: maxResolution ?? \"unknown\",\n target: { width: targetWidth, height: targetHeight },\n });\n\n const videoConstraints: MediaTrackConstraints = {\n facingMode,\n width: { ideal: targetWidth },\n height: { ideal: targetHeight },\n };\n\n if (options.deviceId) {\n videoConstraints.deviceId = { exact: options.deviceId };\n }\n\n if (options.advancedConstraints?.length) {\n videoConstraints.advanced = options.advancedConstraints;\n }\n\n // Step 2: Open the stream with adapted constraints\n const stream = await navigator.mediaDevices.getUserMedia({\n video: videoConstraints,\n });\n\n this.stream = stream;\n this.videoTrack = stream.getVideoTracks()[0] ?? null;\n this.lastTrackSettings = this.videoTrack?.getSettings() ?? null;\n\n console.debug(\"[CameraService] Actual stream settings\", this.lastTrackSettings);\n\n if (supportsImageCapture() && this.videoTrack && preferImageCapture) {\n try {\n this.imageCapture = new ImageCapture(this.videoTrack);\n this.captureMethod = \"imageCapture\";\n } catch (error) {\n console.warn(\n \"ImageCapture API indisponible, fallback sur capture canvas\",\n error\n );\n this.imageCapture = null;\n this.captureMethod = \"canvas\";\n }\n } else {\n this.imageCapture = null;\n this.captureMethod = \"canvas\";\n }\n\n videoElement.srcObject = stream;\n\n await this.waitForVideoReady(videoElement);\n\n return {\n success: true,\n settings: this.lastTrackSettings ?? undefined,\n captureMethod: this.captureMethod,\n };\n } catch (err) {\n console.error(\"Erreur lors de l'accès à la caméra:\", err);\n\n let errorMessage =\n \"Une erreur inconnue s'est produite lors de l'accès à la caméra.\";\n\n if (err instanceof DOMException) {\n if (err.name === \"NotFoundError\") {\n errorMessage = \"Aucune caméra n'a été détectée sur votre appareil.\";\n } else if (err.name === \"NotAllowedError\") {\n errorMessage =\n \"L'accès à la caméra a été refusé. Veuillez autoriser l'accès dans les paramètres de votre navigateur.\";\n } else {\n errorMessage = `Impossible d'accéder à la caméra: ${err.message}`;\n }\n }\n\n return { success: false, error: errorMessage };\n }\n }\n\n async captureDocument(\n videoElement: HTMLVideoElement | null,\n cropArea?: DocumentCropArea | null,\n options: CaptureDocumentOptions = {}\n ): Promise<CaptureDocumentResult> {\n if (!videoElement) {\n throw new Error(\"Élément vidéo requis pour capturer le document\");\n }\n\n if (!videoElement.videoWidth || !videoElement.videoHeight) {\n throw new Error(\n \"La vidéo n'est pas prête. Impossible de déterminer les dimensions.\"\n );\n }\n\n const format = options.format ?? \"jpeg\";\n const jpegQuality = options.jpegQuality ?? 0.95;\n const facingMode = options.facingMode ?? \"environment\";\n const preferImageCapture = options.preferImageCapture ?? true;\n\n const effectiveCropArea: DocumentCropArea = cropArea ?? {\n x: 0,\n y: 0,\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n };\n\n console.debug(\"[CameraService] captureDocument request\", {\n format,\n jpegQuality,\n facingMode,\n preferImageCapture,\n cropArea: effectiveCropArea,\n videoDimensions: {\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n },\n });\n\n if (this.imageCapture && preferImageCapture) {\n try {\n const result = await this.captureWithImageCapture(\n videoElement,\n effectiveCropArea,\n {\n format,\n jpegQuality,\n facingMode,\n }\n );\n\n if (result) {\n console.debug(\"[CameraService] captureDocument via ImageCapture\", {\n cropArea: effectiveCropArea,\n result,\n });\n return result;\n }\n } catch (error) {\n console.warn(\n \"Capture haute résolution impossible, fallback sur capture vidéo\",\n error\n );\n }\n }\n\n const fallback = professionalImageQuality.autoEnhanceImage(\n videoElement,\n effectiveCropArea,\n {\n outputFormat: format,\n jpegQuality,\n flipHorizontal: facingMode === \"user\",\n ...QUALITY_REQUIREMENTS,\n }\n );\n\n console.debug(\"[CameraService] captureDocument via video fallback\", {\n cropArea: effectiveCropArea,\n analysis: fallback.analysis,\n method: this.captureMethod,\n sourceDimensions: {\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n },\n });\n\n return {\n dataUrl: fallback.dataUrl,\n analysis: fallback.analysis,\n method: this.captureMethod,\n sourceDimensions: {\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n },\n cropDimensions: {\n width: effectiveCropArea.width,\n height: effectiveCropArea.height,\n },\n };\n }\n\n captureFrame(\n videoElement: HTMLVideoElement | null,\n canvasElement: HTMLCanvasElement | null\n ): string | null {\n if (!videoElement || !canvasElement || !videoElement.videoWidth) {\n return null;\n }\n\n const ctx = canvasElement.getContext(\"2d\");\n if (!ctx) return null;\n\n canvasElement.width = videoElement.videoWidth;\n canvasElement.height = videoElement.videoHeight;\n\n ctx.drawImage(\n videoElement,\n 0,\n 0,\n canvasElement.width,\n canvasElement.height\n );\n\n return canvasElement.toDataURL(\"image/jpeg\");\n }\n\n stopCamera() {\n if (this.stream) {\n this.stream.getTracks().forEach((track) => track.stop());\n this.stream = null;\n }\n\n this.videoTrack = null;\n this.imageCapture = null;\n this.lastTrackSettings = null;\n this.captureMethod = this.devMode ? \"mock\" : \"canvas\";\n }\n\n setDevMode(enabled: boolean): void {\n this.devMode = enabled;\n }\n\n setMockImage(imagePath: string): void {\n this.mockImagePath = imagePath;\n }\n\n isDevModeEnabled(): boolean {\n return this.devMode;\n }\n\n getCurrentCaptureMethod(): CaptureMethod {\n return this.captureMethod;\n }\n\n /**\n * Probes the camera to discover its maximum supported resolution.\n * Opens a temporary low-res stream, reads getCapabilities(), then closes it.\n * Returns null if capabilities cannot be determined (the caller should fallback to defaults).\n */\n private async getMaxCameraResolution(\n facingMode: string,\n deviceId?: string\n ): Promise<{ width: number; height: number } | null> {\n try {\n const constraints: MediaTrackConstraints = { facingMode };\n if (deviceId) {\n constraints.deviceId = { exact: deviceId };\n }\n\n const probeStream = await navigator.mediaDevices.getUserMedia({\n video: constraints,\n });\n\n const track = probeStream.getVideoTracks()[0];\n if (!track) {\n probeStream.getTracks().forEach((t) => t.stop());\n return null;\n }\n\n let maxWidth: number | undefined;\n let maxHeight: number | undefined;\n\n // getCapabilities() is supported on Chrome/Edge/Android but not all browsers\n if (typeof track.getCapabilities === \"function\") {\n const capabilities = track.getCapabilities();\n maxWidth = (capabilities as Record<string, any>).width?.max;\n maxHeight = (capabilities as Record<string, any>).height?.max;\n }\n\n // Stop the probe stream immediately\n probeStream.getTracks().forEach((t) => t.stop());\n\n if (maxWidth && maxHeight) {\n console.debug(\"[CameraService] Device max resolution\", {\n width: maxWidth,\n height: maxHeight,\n });\n return { width: maxWidth, height: maxHeight };\n }\n\n return null;\n } catch (error) {\n console.warn(\"[CameraService] Could not probe camera capabilities\", error);\n return null;\n }\n }\n\n private async waitForVideoReady(video: HTMLVideoElement): Promise<void> {\n // Explicitly call play() — required on some Android devices even with autoplay attribute\n try {\n await video.play();\n } catch (playError) {\n console.warn(\"[CameraService] video.play() failed, relying on autoplay\", playError);\n }\n\n if (\n video.readyState >= HTMLMediaElement.HAVE_CURRENT_DATA &&\n video.videoWidth > 0\n ) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const TIMEOUT_MS = 5000;\n\n const onReady = () => {\n clearTimeout(timeout);\n video.removeEventListener(\"loadeddata\", onReady);\n video.removeEventListener(\"playing\", onReady);\n resolve();\n };\n\n // Listen for both events — whichever fires first\n video.addEventListener(\"loadeddata\", onReady, { once: true });\n video.addEventListener(\"playing\", onReady, { once: true });\n\n // Safety timeout to avoid hanging indefinitely\n const timeout = setTimeout(() => {\n video.removeEventListener(\"loadeddata\", onReady);\n video.removeEventListener(\"playing\", onReady);\n console.warn(\"[CameraService] waitForVideoReady timed out after\", TIMEOUT_MS, \"ms\");\n resolve();\n }, TIMEOUT_MS);\n });\n }\n\n private async captureWithImageCapture(\n videoElement: HTMLVideoElement,\n cropArea: DocumentCropArea,\n options: Required<Pick<CaptureDocumentOptions, \"format\" | \"jpegQuality\">> & {\n facingMode: CameraFacingMode;\n }\n ): Promise<CaptureDocumentResult | null> {\n if (!this.imageCapture) {\n return null;\n }\n\n // Use the actual stream resolution for takePhoto to ensure consistency\n const photoSettings: PhotoSettings = {};\n if (this.lastTrackSettings?.width && this.lastTrackSettings?.height) {\n photoSettings.imageWidth = this.lastTrackSettings.width;\n photoSettings.imageHeight = this.lastTrackSettings.height;\n console.debug(\"[CameraService] takePhoto with explicit resolution\", photoSettings);\n }\n\n const blob = await this.imageCapture.takePhoto(photoSettings);\n const { source, width, height, cleanup } = await this.loadCanvasSourceFromBlob(\n blob\n );\n\n try {\n const ratioX = width / videoElement.videoWidth;\n const ratioY = height / videoElement.videoHeight;\n\n if (!isFinite(ratioX) || !isFinite(ratioY)) {\n throw new Error(\"Ratios de capture invalides\");\n }\n\n const scaled = this.scaleCropArea(cropArea, ratioX, ratioY, width, height);\n\n const analysis = professionalImageQuality.analyzeQuality(\n scaled.width,\n scaled.height,\n QUALITY_REQUIREMENTS\n );\n\n const outputWidth = Math.max(\n 1,\n Math.round(scaled.width * analysis.recommendedScale)\n );\n const outputHeight = Math.max(\n 1,\n Math.round(scaled.height * analysis.recommendedScale)\n );\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = outputWidth;\n canvas.height = outputHeight;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n throw new Error(\"Impossible de créer le contexte de rendu\");\n }\n\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = \"high\";\n\n if (options.facingMode === \"user\") {\n ctx.translate(outputWidth, 0);\n ctx.scale(-1, 1);\n }\n\n ctx.drawImage(\n source,\n scaled.x,\n scaled.y,\n scaled.width,\n scaled.height,\n 0,\n 0,\n outputWidth,\n outputHeight\n );\n\n const dataUrl =\n options.format === \"jpeg\"\n ? canvas.toDataURL(\"image/jpeg\", options.jpegQuality)\n : canvas.toDataURL(\"image/png\");\n\n console.debug(\"[CameraService] ImageCapture crop applied\", {\n originalDimensions: { width, height },\n crop: scaled,\n output: { width: outputWidth, height: outputHeight },\n analysis,\n });\n\n return {\n dataUrl,\n analysis,\n method: \"imageCapture\",\n sourceDimensions: { width, height },\n cropDimensions: {\n width: scaled.width,\n height: scaled.height,\n },\n };\n } finally {\n if (source instanceof ImageBitmap && typeof source.close === \"function\") {\n source.close();\n }\n\n cleanup?.();\n }\n }\n\n private async loadCanvasSourceFromBlob(blob: Blob): Promise<CanvasSource> {\n if (typeof createImageBitmap === \"function\") {\n try {\n const bitmap = await createImageBitmap(blob, {\n imageOrientation: \"from-image\",\n } as ImageBitmapOptions);\n\n return {\n source: bitmap,\n width: bitmap.width,\n height: bitmap.height,\n cleanup: () => {\n if (typeof bitmap.close === \"function\") {\n bitmap.close();\n }\n },\n };\n } catch (error) {\n console.warn(\"createImageBitmap a échoué, fallback sur HTMLImageElement\", error);\n }\n }\n\n const objectUrl = URL.createObjectURL(blob);\n\n const image = await new Promise<HTMLImageElement>((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = (event) => reject(event);\n img.src = objectUrl;\n });\n\n return {\n source: image,\n width: image.naturalWidth,\n height: image.naturalHeight,\n cleanup: () => URL.revokeObjectURL(objectUrl),\n };\n }\n\n private scaleCropArea(\n cropArea: DocumentCropArea,\n ratioX: number,\n ratioY: number,\n maxWidth: number,\n maxHeight: number\n ): { x: number; y: number; width: number; height: number } {\n const scaledX = Math.max(0, Math.round(cropArea.x * ratioX));\n const scaledY = Math.max(0, Math.round(cropArea.y * ratioY));\n const scaledWidth = Math.min(\n maxWidth - scaledX,\n Math.round(cropArea.width * ratioX)\n );\n const scaledHeight = Math.min(\n maxHeight - scaledY,\n Math.round(cropArea.height * ratioY)\n );\n\n if (scaledWidth <= 0 || scaledHeight <= 0) {\n throw new Error(\"Zone de capture invalide après scaling\");\n }\n\n return {\n x: scaledX,\n y: scaledY,\n width: scaledWidth,\n height: scaledHeight,\n };\n }\n}\n\nexport const cameraService = new CameraService();\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cameraService.js","sources":["../../../../src/services/cameraService.ts"],"sourcesContent":["import type { CameraFacingMode } from \"../types/camera\";\nimport { professionalImageQuality } from \"./professionalImageQuality\";\nimport type { QualityAnalysis } from \"./professionalImageQuality\";\n\n// Permit to enable development mode to test without a camera\nconst DEV_MODE = false; // import.meta.env.DEV;\n// Default image path for development mode\nconst DEFAULT_TEST_IMAGE = \"/mock-id-card.jpeg\";\n\ntype CaptureMethod = \"imageCapture\" | \"canvas\" | \"mock\";\n\nexport interface CameraStartOptions {\n facingMode?: CameraFacingMode;\n idealResolution?: {\n width?: number;\n height?: number;\n };\n deviceId?: string;\n advancedConstraints?: MediaTrackConstraints[];\n preferImageCapture?: boolean;\n}\n\nexport interface CameraStartResult {\n success: boolean;\n error?: string;\n settings?: MediaTrackSettings;\n captureMethod?: CaptureMethod;\n}\n\nexport interface DocumentCropArea {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface CaptureDocumentOptions {\n facingMode?: CameraFacingMode;\n format?: \"png\" | \"jpeg\";\n jpegQuality?: number;\n preferImageCapture?: boolean;\n}\n\nexport interface CaptureDocumentResult {\n dataUrl: string;\n method: CaptureMethod;\n analysis?: QualityAnalysis;\n sourceDimensions?: { width: number; height: number };\n cropDimensions?: { width: number; height: number };\n}\n\nconst DEFAULT_RESOLUTION = {\n width: 4096,\n height: 3072,\n};\n\nconst QUALITY_REQUIREMENTS = {\n minArea: 3500 * 2200,\n targetArea: 4800 * 3200,\n minLongSide: 3200,\n};\n\nconst supportsImageCapture = (): boolean =>\n typeof window !== \"undefined\" && \"ImageCapture\" in window;\n\ninterface CanvasSource {\n source: CanvasImageSource;\n width: number;\n height: number;\n cleanup?: () => void;\n}\n\nexport class CameraService {\n private stream: MediaStream | null = null;\n private videoTrack: MediaStreamTrack | null = null;\n private imageCapture: ImageCapture | null = null;\n private devMode: boolean = DEV_MODE;\n private mockImagePath: string = DEFAULT_TEST_IMAGE;\n private captureMethod: CaptureMethod = \"canvas\";\n private lastTrackSettings: MediaTrackSettings | null = null;\n private startingPromise: Promise<CameraStartResult> | null = null;\n\n private async startMockCamera(\n videoElement: HTMLVideoElement | null\n ): Promise<CameraStartResult> {\n try {\n if (!videoElement) {\n return { success: false, error: \"Élément vidéo non disponible\" };\n }\n\n const img = new Image();\n img.src = this.mockImagePath;\n\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () =>\n reject(\n new Error(`Impossible de charger l'image: ${this.mockImagePath}`)\n );\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n\n if (!ctx) {\n return { success: false, error: \"Contexte du canvas non disponible\" };\n }\n\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n const stream: MediaStream = canvas.captureStream(30);\n this.stream = stream;\n this.captureMethod = \"mock\";\n videoElement.srcObject = stream;\n\n return { success: true, captureMethod: \"mock\" };\n } catch (err) {\n console.error(\"Erreur lors de la création du flux vidéo mock:\", err);\n return {\n success: false,\n error: `Erreur lors de la création du flux vidéo mock: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n }\n\n async startCamera(\n videoElement: HTMLVideoElement | null,\n options: CameraStartOptions = {}\n ): Promise<CameraStartResult> {\n if (this.devMode) {\n return this.startMockCamera(videoElement);\n }\n\n if (!videoElement) {\n return { success: false, error: \"Élément vidéo non disponible\" };\n }\n\n if (!navigator?.mediaDevices?.getUserMedia) {\n return {\n success: false,\n error: \"La capture vidéo n'est pas supportée sur cet appareil.\",\n };\n }\n\n // Si un startCamera est déjà en cours, attendre qu'il se termine plutôt que d'en lancer un second\n if (this.startingPromise) {\n return this.startingPromise;\n }\n\n this.startingPromise = this._doStartCamera(videoElement!, options);\n try {\n return await this.startingPromise;\n } finally {\n this.startingPromise = null;\n }\n }\n\n private async _doStartCamera(\n videoElement: HTMLVideoElement,\n options: CameraStartOptions\n ): Promise<CameraStartResult> {\n const facingMode = options.facingMode ?? \"environment\";\n const preferImageCapture = options.preferImageCapture ?? true;\n const desiredWidth = options.idealResolution?.width ?? DEFAULT_RESOLUTION.width;\n const desiredHeight = options.idealResolution?.height ?? DEFAULT_RESOLUTION.height;\n\n try {\n // Close any existing stream before opening a new one\n if (this.stream) {\n this.stream.getTracks().forEach((t) => t.stop());\n this.stream = null;\n this.videoTrack = null;\n this.imageCapture = null;\n }\n\n // Step 1: Probe the camera to discover its maximum supported resolution\n const maxResolution = await this.getMaxCameraResolution(facingMode, options.deviceId);\n\n // Use the lesser of the desired and the device maximum\n const targetWidth = maxResolution\n ? Math.min(desiredWidth, maxResolution.width)\n : desiredWidth;\n const targetHeight = maxResolution\n ? Math.min(desiredHeight, maxResolution.height)\n : desiredHeight;\n\n console.debug(\"[CameraService] Resolution negotiation\", {\n desired: { width: desiredWidth, height: desiredHeight },\n deviceMax: maxResolution ?? \"unknown\",\n target: { width: targetWidth, height: targetHeight },\n });\n\n const videoConstraints: MediaTrackConstraints = {\n facingMode,\n width: { ideal: targetWidth },\n height: { ideal: targetHeight },\n };\n\n if (options.deviceId) {\n videoConstraints.deviceId = { exact: options.deviceId };\n }\n\n if (options.advancedConstraints?.length) {\n videoConstraints.advanced = options.advancedConstraints;\n }\n\n // Step 2: Open the stream with adapted constraints\n const stream = await navigator.mediaDevices.getUserMedia({\n video: videoConstraints,\n });\n\n this.stream = stream;\n this.videoTrack = stream.getVideoTracks()[0] ?? null;\n this.lastTrackSettings = this.videoTrack?.getSettings() ?? null;\n\n // Step 3: Apply continuous autofocus via applyConstraints after stream is open.\n // Done separately so a rejection (unsupported constraint) never kills the stream.\n if (this.videoTrack) {\n try {\n await this.videoTrack.applyConstraints({\n advanced: [{ focusMode: \"continuous\" } as MediaTrackConstraints],\n });\n } catch {\n // Device doesn't support focusMode — stream stays open, autofocus just won't activate\n }\n }\n\n if (supportsImageCapture() && this.videoTrack && preferImageCapture) {\n try {\n this.imageCapture = new ImageCapture(this.videoTrack);\n this.captureMethod = \"imageCapture\";\n } catch (error) {\n console.warn(\n \"ImageCapture API indisponible, fallback sur capture canvas\",\n error\n );\n this.imageCapture = null;\n this.captureMethod = \"canvas\";\n }\n } else {\n this.imageCapture = null;\n this.captureMethod = \"canvas\";\n }\n\n videoElement.srcObject = stream;\n\n await this.waitForVideoReady(videoElement);\n\n return {\n success: true,\n settings: this.lastTrackSettings ?? undefined,\n captureMethod: this.captureMethod,\n };\n } catch (err) {\n console.error(\"Erreur lors de l'accès à la caméra:\", err);\n\n let errorMessage =\n \"Une erreur inconnue s'est produite lors de l'accès à la caméra.\";\n\n if (err instanceof DOMException) {\n if (err.name === \"NotFoundError\") {\n errorMessage = \"Aucune caméra n'a été détectée sur votre appareil.\";\n } else if (err.name === \"NotAllowedError\") {\n errorMessage =\n \"L'accès à la caméra a été refusé. Veuillez autoriser l'accès dans les paramètres de votre navigateur.\";\n } else {\n errorMessage = `Impossible d'accéder à la caméra: ${err.message}`;\n }\n }\n\n return { success: false, error: errorMessage };\n }\n }\n\n async captureDocument(\n videoElement: HTMLVideoElement | null,\n cropArea?: DocumentCropArea | null,\n options: CaptureDocumentOptions = {}\n ): Promise<CaptureDocumentResult> {\n if (!videoElement) {\n throw new Error(\"Élément vidéo requis pour capturer le document\");\n }\n\n if (!videoElement.videoWidth || !videoElement.videoHeight) {\n throw new Error(\n \"La vidéo n'est pas prête. Impossible de déterminer les dimensions.\"\n );\n }\n\n const format = options.format ?? \"jpeg\";\n const jpegQuality = options.jpegQuality ?? 0.95;\n const facingMode = options.facingMode ?? \"environment\";\n const preferImageCapture = options.preferImageCapture ?? true;\n\n const effectiveCropArea: DocumentCropArea = cropArea ?? {\n x: 0,\n y: 0,\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n };\n\n console.debug(\"[CameraService] captureDocument request\", {\n format,\n jpegQuality,\n facingMode,\n preferImageCapture,\n cropArea: effectiveCropArea,\n videoDimensions: {\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n },\n });\n\n if (this.imageCapture && preferImageCapture) {\n try {\n const result = await this.captureWithImageCapture(\n videoElement,\n effectiveCropArea,\n {\n format,\n jpegQuality,\n facingMode,\n }\n );\n\n if (result) {\n console.debug(\"[CameraService] captureDocument via ImageCapture\", {\n cropArea: effectiveCropArea,\n result,\n });\n return result;\n }\n } catch (error) {\n console.warn(\n \"Capture haute résolution impossible, fallback sur capture vidéo\",\n error\n );\n }\n }\n\n const fallback = professionalImageQuality.autoEnhanceImage(\n videoElement,\n effectiveCropArea,\n {\n outputFormat: format,\n jpegQuality,\n flipHorizontal: facingMode === \"user\",\n ...QUALITY_REQUIREMENTS,\n }\n );\n\n console.debug(\"[CameraService] captureDocument via video fallback\", {\n cropArea: effectiveCropArea,\n analysis: fallback.analysis,\n method: this.captureMethod,\n sourceDimensions: {\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n },\n });\n\n return {\n dataUrl: fallback.dataUrl,\n analysis: fallback.analysis,\n method: this.captureMethod,\n sourceDimensions: {\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n },\n cropDimensions: {\n width: effectiveCropArea.width,\n height: effectiveCropArea.height,\n },\n };\n }\n\n captureFrame(\n videoElement: HTMLVideoElement | null,\n canvasElement: HTMLCanvasElement | null\n ): string | null {\n if (!videoElement || !canvasElement || !videoElement.videoWidth) {\n return null;\n }\n\n const ctx = canvasElement.getContext(\"2d\");\n if (!ctx) return null;\n\n canvasElement.width = videoElement.videoWidth;\n canvasElement.height = videoElement.videoHeight;\n\n ctx.drawImage(\n videoElement,\n 0,\n 0,\n canvasElement.width,\n canvasElement.height\n );\n\n return canvasElement.toDataURL(\"image/jpeg\");\n }\n\n stopCamera() {\n if (this.stream) {\n this.stream.getTracks().forEach((track) => track.stop());\n this.stream = null;\n }\n\n this.videoTrack = null;\n this.imageCapture = null;\n this.lastTrackSettings = null;\n this.captureMethod = this.devMode ? \"mock\" : \"canvas\";\n }\n\n setDevMode(enabled: boolean): void {\n this.devMode = enabled;\n }\n\n setMockImage(imagePath: string): void {\n this.mockImagePath = imagePath;\n }\n\n isDevModeEnabled(): boolean {\n return this.devMode;\n }\n\n getCurrentCaptureMethod(): CaptureMethod {\n return this.captureMethod;\n }\n\n /**\n * Probes the camera to discover its maximum supported resolution.\n * Opens a temporary low-res stream, reads getCapabilities(), then closes it.\n * Returns null if capabilities cannot be determined (the caller should fallback to defaults).\n */\n private async getMaxCameraResolution(\n facingMode: string,\n deviceId?: string\n ): Promise<{ width: number; height: number } | null> {\n try {\n const constraints: MediaTrackConstraints = { facingMode };\n if (deviceId) {\n constraints.deviceId = { exact: deviceId };\n }\n\n const probeStream = await navigator.mediaDevices.getUserMedia({\n video: constraints,\n });\n\n const track = probeStream.getVideoTracks()[0];\n if (!track) {\n probeStream.getTracks().forEach((t) => t.stop());\n return null;\n }\n\n let maxWidth: number | undefined;\n let maxHeight: number | undefined;\n\n // getCapabilities() is supported on Chrome/Edge/Android but not all browsers\n if (typeof track.getCapabilities === \"function\") {\n const capabilities = track.getCapabilities();\n maxWidth = (capabilities as Record<string, any>).width?.max;\n maxHeight = (capabilities as Record<string, any>).height?.max;\n }\n\n // Stop the probe stream immediately\n probeStream.getTracks().forEach((t) => t.stop());\n\n if (maxWidth && maxHeight) {\n console.debug(\"[CameraService] Device max resolution\", {\n width: maxWidth,\n height: maxHeight,\n });\n return { width: maxWidth, height: maxHeight };\n }\n\n return null;\n } catch (error) {\n console.warn(\"[CameraService] Could not probe camera capabilities\", error);\n return null;\n }\n }\n\n private async waitForVideoReady(video: HTMLVideoElement): Promise<void> {\n // Explicitly call play() — required on some Android devices even with autoplay attribute\n try {\n await video.play();\n } catch (playError) {\n console.warn(\"[CameraService] video.play() failed, relying on autoplay\", playError);\n }\n\n if (\n video.readyState >= HTMLMediaElement.HAVE_CURRENT_DATA &&\n video.videoWidth > 0\n ) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const TIMEOUT_MS = 5000;\n\n const onReady = () => {\n clearTimeout(timeout);\n video.removeEventListener(\"loadeddata\", onReady);\n video.removeEventListener(\"playing\", onReady);\n resolve();\n };\n\n // Listen for both events — whichever fires first\n video.addEventListener(\"loadeddata\", onReady, { once: true });\n video.addEventListener(\"playing\", onReady, { once: true });\n\n // Safety timeout to avoid hanging indefinitely\n const timeout = setTimeout(() => {\n video.removeEventListener(\"loadeddata\", onReady);\n video.removeEventListener(\"playing\", onReady);\n console.warn(\"[CameraService] waitForVideoReady timed out after\", TIMEOUT_MS, \"ms\");\n resolve();\n }, TIMEOUT_MS);\n });\n }\n\n private async captureWithImageCapture(\n videoElement: HTMLVideoElement,\n cropArea: DocumentCropArea,\n options: Required<Pick<CaptureDocumentOptions, \"format\" | \"jpegQuality\">> & {\n facingMode: CameraFacingMode;\n }\n ): Promise<CaptureDocumentResult | null> {\n if (!this.imageCapture) {\n return null;\n }\n\n // Use the actual stream resolution for takePhoto to ensure consistency\n const photoSettings: PhotoSettings = {};\n if (this.lastTrackSettings?.width && this.lastTrackSettings?.height) {\n photoSettings.imageWidth = this.lastTrackSettings.width;\n photoSettings.imageHeight = this.lastTrackSettings.height;\n console.debug(\"[CameraService] takePhoto with explicit resolution\", photoSettings);\n }\n\n const blob = await this.imageCapture.takePhoto(photoSettings);\n const { source, width, height, cleanup } = await this.loadCanvasSourceFromBlob(\n blob\n );\n\n try {\n const ratioX = width / videoElement.videoWidth;\n const ratioY = height / videoElement.videoHeight;\n\n if (!isFinite(ratioX) || !isFinite(ratioY)) {\n throw new Error(\"Ratios de capture invalides\");\n }\n\n const scaled = this.scaleCropArea(cropArea, ratioX, ratioY, width, height);\n\n const analysis = professionalImageQuality.analyzeQuality(\n scaled.width,\n scaled.height,\n QUALITY_REQUIREMENTS\n );\n\n const outputWidth = Math.max(\n 1,\n Math.round(scaled.width * analysis.recommendedScale)\n );\n const outputHeight = Math.max(\n 1,\n Math.round(scaled.height * analysis.recommendedScale)\n );\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = outputWidth;\n canvas.height = outputHeight;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n throw new Error(\"Impossible de créer le contexte de rendu\");\n }\n\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = \"high\";\n\n if (options.facingMode === \"user\") {\n ctx.translate(outputWidth, 0);\n ctx.scale(-1, 1);\n }\n\n ctx.drawImage(\n source,\n scaled.x,\n scaled.y,\n scaled.width,\n scaled.height,\n 0,\n 0,\n outputWidth,\n outputHeight\n );\n\n const dataUrl =\n options.format === \"jpeg\"\n ? canvas.toDataURL(\"image/jpeg\", options.jpegQuality)\n : canvas.toDataURL(\"image/png\");\n\n console.debug(\"[CameraService] ImageCapture crop applied\", {\n originalDimensions: { width, height },\n crop: scaled,\n output: { width: outputWidth, height: outputHeight },\n analysis,\n });\n\n return {\n dataUrl,\n analysis,\n method: \"imageCapture\",\n sourceDimensions: { width, height },\n cropDimensions: {\n width: scaled.width,\n height: scaled.height,\n },\n };\n } finally {\n if (source instanceof ImageBitmap && typeof source.close === \"function\") {\n source.close();\n }\n\n cleanup?.();\n }\n }\n\n private async loadCanvasSourceFromBlob(blob: Blob): Promise<CanvasSource> {\n if (typeof createImageBitmap === \"function\") {\n try {\n const bitmap = await createImageBitmap(blob, {\n imageOrientation: \"from-image\",\n } as ImageBitmapOptions);\n\n return {\n source: bitmap,\n width: bitmap.width,\n height: bitmap.height,\n cleanup: () => {\n if (typeof bitmap.close === \"function\") {\n bitmap.close();\n }\n },\n };\n } catch (error) {\n console.warn(\"createImageBitmap a échoué, fallback sur HTMLImageElement\", error);\n }\n }\n\n const objectUrl = URL.createObjectURL(blob);\n\n const image = await new Promise<HTMLImageElement>((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = (event) => reject(event);\n img.src = objectUrl;\n });\n\n return {\n source: image,\n width: image.naturalWidth,\n height: image.naturalHeight,\n cleanup: () => URL.revokeObjectURL(objectUrl),\n };\n }\n\n private scaleCropArea(\n cropArea: DocumentCropArea,\n ratioX: number,\n ratioY: number,\n maxWidth: number,\n maxHeight: number\n ): { x: number; y: number; width: number; height: number } {\n const scaledX = Math.max(0, Math.round(cropArea.x * ratioX));\n const scaledY = Math.max(0, Math.round(cropArea.y * ratioY));\n const scaledWidth = Math.min(\n maxWidth - scaledX,\n Math.round(cropArea.width * ratioX)\n );\n const scaledHeight = Math.min(\n maxHeight - scaledY,\n Math.round(cropArea.height * ratioY)\n );\n\n if (scaledWidth <= 0 || scaledHeight <= 0) {\n throw new Error(\"Zone de capture invalide après scaling\");\n }\n\n return {\n x: scaledX,\n y: scaledY,\n width: scaledWidth,\n height: scaledHeight,\n };\n }\n}\n\nexport const cameraService = new CameraService();\n"],"names":[],"mappings":";;;AAIA;AACA,IAAM,QAAQ,GAAG,KAAK,CAAC;AACvB;AACA,IAAM,kBAAkB,GAAG,oBAAoB;AA4C/C,IAAM,kBAAkB,GAAG;AACzB,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,MAAM,EAAE,IAAI;CACb;AAED,IAAM,oBAAoB,GAAG;IAC3B,OAAO,EAAE,IAAI,GAAG,IAAI;IACpB,UAAU,EAAE,IAAI,GAAG,IAAI;AACvB,IAAA,WAAW,EAAE,IAAI;CAClB;AAED,IAAM,oBAAoB,GAAG,YAAA;AAC3B,IAAA,OAAA,OAAO,MAAM,KAAK,WAAW,IAAI,cAAc,IAAI,MAAM;AAAzD,CAAyD;AAS3D,IAAA,aAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,aAAA,GAAA;QACU,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,UAAU,GAA4B,IAAI;QAC1C,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,OAAO,GAAY,QAAQ;QAC3B,IAAA,CAAA,aAAa,GAAW,kBAAkB;QAC1C,IAAA,CAAA,aAAa,GAAkB,QAAQ;QACvC,IAAA,CAAA,iBAAiB,GAA8B,IAAI;QACnD,IAAA,CAAA,eAAe,GAAsC,IAAI;IA8mBnE;IA5mBgB,aAAA,CAAA,SAAA,CAAA,eAAe,GAA7B,UACE,YAAqC,EAAA;;;;;;;;wBAGnC,IAAI,CAAC,YAAY,EAAE;4BACjB,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAA;wBAClE;wBAEM,KAAA,GAAM,IAAI,KAAK,EAAE;AACvB,wBAAA,KAAG,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa;AAE5B,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,OAAO,CAAO,UAAC,OAAO,EAAE,MAAM,EAAA;gCACtC,KAAG,CAAC,MAAM,GAAG,YAAA,EAAM,OAAA,OAAO,EAAE,CAAA,CAAT,CAAS;gCAC5B,KAAG,CAAC,OAAO,GAAG,YAAA;oCACZ,OAAA,MAAM,CACJ,IAAI,KAAK,CAAC,iCAAA,CAAA,MAAA,CAAkC,KAAI,CAAC,aAAa,CAAE,CAAC,CAClE;AAFD,gCAAA,CAEC;AACL,4BAAA,CAAC,CAAC,CAAA;;AANF,wBAAA,EAAA,CAAA,IAAA,EAME;AAEI,wBAAA,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,wBAAA,MAAM,CAAC,KAAK,GAAG,KAAG,CAAC,KAAK;AACxB,wBAAA,MAAM,CAAC,MAAM,GAAG,KAAG,CAAC,MAAM;AACpB,wBAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;wBAEnC,IAAI,CAAC,GAAG,EAAE;4BACR,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAA;wBACvE;AAEA,wBAAA,GAAG,CAAC,SAAS,CAAC,KAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;AAE/C,wBAAA,MAAM,GAAgB,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,wBAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,wBAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,wBAAA,YAAY,CAAC,SAAS,GAAG,MAAM;wBAE/B,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAA;;;AAE/C,wBAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAG,CAAC;wBACpE,OAAA,CAAA,CAAA,aAAO;AACL,gCAAA,OAAO,EAAE,KAAK;AACd,gCAAA,KAAK,EAAE,2DAAA,CAAA,MAAA,CACL,KAAG,YAAY,KAAK,GAAG,KAAG,CAAC,OAAO,GAAG,MAAM,CAAC,KAAG,CAAC,CAChD;6BACH,CAAA;;;;;AAEJ,IAAA,CAAA;AAEK,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAjB,UAAA,cAAA,EAAA;AACE,QAAA,OAAA,SAAA,CAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,YAAqC,EACrC,OAAgC,EAAA;;AAAhC,YAAA,IAAA,OAAA,KAAA,MAAA,EAAA,EAAA,OAAA,GAAA,EAAgC,CAAA,CAAA;;;;AAEhC,wBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,4BAAA,OAAA,CAAA,CAAA,aAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;wBAC3C;wBAEA,IAAI,CAAC,YAAY,EAAE;4BACjB,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAA;wBAClE;AAEA,wBAAA,IAAI,EAAC,CAAA,EAAA,GAAA,SAAS,aAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,CAAA,EAAE;4BAC1C,OAAA,CAAA,CAAA,aAAO;AACL,oCAAA,OAAO,EAAE,KAAK;AACd,oCAAA,KAAK,EAAE,wDAAwD;iCAChE,CAAA;wBACH;;AAGA,wBAAA,IAAI,IAAI,CAAC,eAAe,EAAE;4BACxB,OAAA,CAAA,CAAA,aAAO,IAAI,CAAC,eAAe,CAAA;wBAC7B;wBAEA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,YAAa,EAAE,OAAO,CAAC;;;;wBAEzD,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,eAAe,CAAA;AAAjC,oBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,aAAO,SAA0B,CAAA;;AAEjC,wBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;;;;;AAE9B,IAAA,CAAA;AAEa,IAAA,aAAA,CAAA,SAAA,CAAA,cAAc,GAA5B,UACE,YAA8B,EAC9B,OAA2B,EAAA;;;;;;;AAErB,wBAAA,UAAU,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,aAAa;AAChD,wBAAA,kBAAkB,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AACvD,wBAAA,YAAY,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC,KAAK;AACzE,wBAAA,aAAa,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC,MAAM;;;;;AAIhF,wBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,4BAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,IAAI,EAAE,CAAA,CAAR,CAAQ,CAAC;AAChD,4BAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,4BAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,4BAAA,IAAI,CAAC,YAAY,GAAG,IAAI;wBAC1B;wBAGsB,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;;AAA/E,wBAAA,aAAa,GAAG,EAAA,CAAA,IAAA,EAA+D;AAG/E,wBAAA,WAAW,GAAG;8BAChB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC,KAAK;8BAC1C,YAAY;AACV,wBAAA,YAAY,GAAG;8BACjB,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM;8BAC5C,aAAa;AAEjB,wBAAA,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE;4BACtD,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE;AACvD,4BAAA,SAAS,EAAE,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAb,aAAa,GAAI,SAAS;4BACrC,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE;AACrD,yBAAA,CAAC;AAEI,wBAAA,gBAAgB,GAA0B;AAC9C,4BAAA,UAAU,EAAA,UAAA;AACV,4BAAA,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;AAC7B,4BAAA,MAAM,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;yBAChC;AAED,wBAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;4BACpB,gBAAgB,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;wBACzD;AAEA,wBAAA,IAAI,MAAA,OAAO,CAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACvC,4BAAA,gBAAgB,CAAC,QAAQ,GAAG,OAAO,CAAC,mBAAmB;wBACzD;AAGe,wBAAA,OAAA,CAAA,CAAA,YAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;AACvD,gCAAA,KAAK,EAAE,gBAAgB;AACxB,6BAAA,CAAC,CAAA;;AAFI,wBAAA,MAAM,GAAG,EAAA,CAAA,IAAA,EAEb;AAEF,wBAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,wBAAA,IAAI,CAAC,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AACpD,wBAAA,IAAI,CAAC,iBAAiB,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;6BAI3D,IAAI,CAAC,UAAU,EAAf,OAAA,CAAA,CAAA,YAAA,CAAA,CAAA;;;;AAEA,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;AACrC,gCAAA,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAA2B,CAAC;AACjE,6BAAA,CAAC,CAAA;;AAFF,wBAAA,EAAA,CAAA,IAAA,EAEE;;;;;;wBAMN,IAAI,oBAAoB,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,kBAAkB,EAAE;AACnE,4BAAA,IAAI;gCACF,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AACrD,gCAAA,IAAI,CAAC,aAAa,GAAG,cAAc;4BACrC;4BAAE,OAAO,KAAK,EAAE;AACd,gCAAA,OAAO,CAAC,IAAI,CACV,4DAA4D,EAC5D,KAAK,CACN;AACD,gCAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gCAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;4BAC/B;wBACF;6BAAO;AACL,4BAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,4BAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;wBAC/B;AAEA,wBAAA,YAAY,CAAC,SAAS,GAAG,MAAM;AAE/B,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;;AAA1C,wBAAA,EAAA,CAAA,IAAA,EAA0C;wBAE1C,OAAA,CAAA,CAAA,aAAO;AACL,gCAAA,OAAO,EAAE,IAAI;AACb,gCAAA,QAAQ,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,mCAAI,SAAS;gCAC7C,aAAa,EAAE,IAAI,CAAC,aAAa;6BAClC,CAAA;;;AAED,wBAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAG,CAAC;wBAErD,YAAY,GACd,iEAAiE;AAEnE,wBAAA,IAAI,KAAG,YAAY,YAAY,EAAE;AAC/B,4BAAA,IAAI,KAAG,CAAC,IAAI,KAAK,eAAe,EAAE;gCAChC,YAAY,GAAG,oDAAoD;4BACrE;AAAO,iCAAA,IAAI,KAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE;gCACzC,YAAY;AACV,oCAAA,uGAAuG;4BAC3G;iCAAO;AACL,gCAAA,YAAY,GAAG,mDAAA,CAAA,MAAA,CAAqC,KAAG,CAAC,OAAO,CAAE;4BACnE;wBACF;wBAEA,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;;;;;AAEjD,IAAA,CAAA;AAEK,IAAA,aAAA,CAAA,SAAA,CAAA,eAAe,GAArB,UAAA,cAAA,EAAA,UAAA,EAAA;4DACE,YAAqC,EACrC,QAAkC,EAClC,OAAoC,EAAA;;;AAApC,YAAA,IAAA,OAAA,KAAA,MAAA,EAAA,EAAA,OAAA,GAAA,EAAoC,CAAA,CAAA;;;;wBAEpC,IAAI,CAAC,YAAY,EAAE;AACjB,4BAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;wBACnE;wBAEA,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AACzD,4BAAA,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE;wBACH;AAEM,wBAAA,MAAM,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,MAAM;AACjC,wBAAA,WAAW,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AACzC,wBAAA,UAAU,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,aAAa;AAChD,wBAAA,kBAAkB,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAEvD,wBAAA,iBAAiB,GAAqB,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAR,QAAQ,GAAI;AACtD,4BAAA,CAAC,EAAE,CAAC;AACJ,4BAAA,CAAC,EAAE,CAAC;4BACJ,KAAK,EAAE,YAAY,CAAC,UAAU;4BAC9B,MAAM,EAAE,YAAY,CAAC,WAAW;yBACjC;AAED,wBAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE;AACvD,4BAAA,MAAM,EAAA,MAAA;AACN,4BAAA,WAAW,EAAA,WAAA;AACX,4BAAA,UAAU,EAAA,UAAA;AACV,4BAAA,kBAAkB,EAAA,kBAAA;AAClB,4BAAA,QAAQ,EAAE,iBAAiB;AAC3B,4BAAA,eAAe,EAAE;gCACf,KAAK,EAAE,YAAY,CAAC,UAAU;gCAC9B,MAAM,EAAE,YAAY,CAAC,WAAW;AACjC,6BAAA;AACF,yBAAA,CAAC;AAEE,wBAAA,IAAA,EAAA,IAAI,CAAC,YAAY,IAAI,kBAAkB,CAAA,EAAvC,OAAA,CAAA,CAAA,YAAA,CAAA,CAAA;;;;AAEe,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,uBAAuB,CAC/C,YAAY,EACZ,iBAAiB,EACjB;AACE,gCAAA,MAAM,EAAA,MAAA;AACN,gCAAA,WAAW,EAAA,WAAA;AACX,gCAAA,UAAU,EAAA,UAAA;AACX,6BAAA,CACF,CAAA;;AARK,wBAAA,MAAM,GAAG,EAAA,CAAA,IAAA,EAQd;wBAED,IAAI,MAAM,EAAE;AACV,4BAAA,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE;AAC9D,gCAAA,QAAQ,EAAE,iBAAiB;AAC7B,gCAAA,MAAM,EAAA,MAAA;AACP,6BAAA,CAAC;AACF,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAA;wBACf;;;;AAEA,wBAAA,OAAO,CAAC,IAAI,CACV,iEAAiE,EACjE,OAAK,CACN;;;wBAIC,QAAQ,GAAG,wBAAwB,CAAC,gBAAgB,CACxD,YAAY,EACZ,iBAAiB,EAAA,QAAA,CAAA,EAEf,YAAY,EAAE,MAAM,EACpB,WAAW,EAAA,WAAA,EACX,cAAc,EAAE,UAAU,KAAK,MAAM,EAAA,EAClC,oBAAoB,CAAA,CAE1B;AAED,wBAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE;AAClE,4BAAA,QAAQ,EAAE,iBAAiB;4BAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;4BAC3B,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,4BAAA,gBAAgB,EAAE;gCAChB,KAAK,EAAE,YAAY,CAAC,UAAU;gCAC9B,MAAM,EAAE,YAAY,CAAC,WAAW;AACjC,6BAAA;AACF,yBAAA,CAAC;wBAEF,OAAA,CAAA,CAAA,aAAO;gCACL,OAAO,EAAE,QAAQ,CAAC,OAAO;gCACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gCAC3B,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,gCAAA,gBAAgB,EAAE;oCAChB,KAAK,EAAE,YAAY,CAAC,UAAU;oCAC9B,MAAM,EAAE,YAAY,CAAC,WAAW;AACjC,iCAAA;AACD,gCAAA,cAAc,EAAE;oCACd,KAAK,EAAE,iBAAiB,CAAC,KAAK;oCAC9B,MAAM,EAAE,iBAAiB,CAAC,MAAM;AACjC,iCAAA;6BACF,CAAA;;;;AACF,IAAA,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,UACE,YAAqC,EACrC,aAAuC,EAAA;QAEvC,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAC/D,YAAA,OAAO,IAAI;QACb;QAEA,IAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;AAErB,QAAA,aAAa,CAAC,KAAK,GAAG,YAAY,CAAC,UAAU;AAC7C,QAAA,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC,WAAW;AAE/C,QAAA,GAAG,CAAC,SAAS,CACX,YAAY,EACZ,CAAC,EACD,CAAC,EACD,aAAa,CAAC,KAAK,EACnB,aAAa,CAAC,MAAM,CACrB;AAED,QAAA,OAAO,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC;IAC9C,CAAC;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;AACE,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA,EAAK,OAAA,KAAK,CAAC,IAAI,EAAE,CAAA,CAAZ,CAAY,CAAC;AACxD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ;IACvD,CAAC;IAED,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,UAAW,OAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB,CAAC;IAED,aAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,UAAa,SAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;IAChC,CAAC;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,YAAA;QACE,OAAO,IAAI,CAAC,OAAO;IACrB,CAAC;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,uBAAuB,GAAvB,YAAA;QACE,OAAO,IAAI,CAAC,aAAa;IAC3B,CAAC;AAED;;;;AAIG;AACW,IAAA,aAAA,CAAA,SAAA,CAAA,sBAAsB,GAApC,UACE,UAAkB,EAClB,QAAiB,EAAA;;;;;;;;AAGT,wBAAA,WAAW,GAA0B,EAAE,UAAU,EAAA,UAAA,EAAE;wBACzD,IAAI,QAAQ,EAAE;4BACZ,WAAW,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;wBAC5C;AAEoB,wBAAA,OAAA,CAAA,CAAA,YAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;AAC5D,gCAAA,KAAK,EAAE,WAAW;AACnB,6BAAA,CAAC,CAAA;;AAFI,wBAAA,WAAW,GAAG,EAAA,CAAA,IAAA,EAElB;wBAEI,KAAK,GAAG,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;wBAC7C,IAAI,CAAC,KAAK,EAAE;AACV,4BAAA,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,IAAI,EAAE,CAAA,CAAR,CAAQ,CAAC;AAChD,4BAAA,OAAA,CAAA,CAAA,aAAO,IAAI,CAAA;wBACb;AAEI,wBAAA,QAAQ,SAAoB;AAC5B,wBAAA,SAAS,SAAoB;;AAGjC,wBAAA,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,UAAU,EAAE;AACzC,4BAAA,YAAY,GAAG,KAAK,CAAC,eAAe,EAAE;AAC5C,4BAAA,QAAQ,GAAG,CAAA,EAAA,GAAC,YAAoC,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG;AAC3D,4BAAA,SAAS,GAAG,CAAA,EAAA,GAAC,YAAoC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,GAAG;wBAC/D;;AAGA,wBAAA,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,IAAI,EAAE,CAAA,CAAR,CAAQ,CAAC;AAEhD,wBAAA,IAAI,QAAQ,IAAI,SAAS,EAAE;AACzB,4BAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE;AACrD,gCAAA,KAAK,EAAE,QAAQ;AACf,gCAAA,MAAM,EAAE,SAAS;AAClB,6BAAA,CAAC;4BACF,OAAA,CAAA,CAAA,aAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;wBAC/C;AAEA,wBAAA,OAAA,CAAA,CAAA,aAAO,IAAI,CAAA;;;AAEX,wBAAA,OAAO,CAAC,IAAI,CAAC,qDAAqD,EAAE,OAAK,CAAC;AAC1E,wBAAA,OAAA,CAAA,CAAA,aAAO,IAAI,CAAA;;;;;AAEd,IAAA,CAAA;IAEa,aAAA,CAAA,SAAA,CAAA,iBAAiB,GAA/B,UAAgC,KAAuB,EAAA;;;;;;;AAGnD,wBAAA,OAAA,CAAA,CAAA,YAAM,KAAK,CAAC,IAAI,EAAE,CAAA;;AAAlB,wBAAA,EAAA,CAAA,IAAA,EAAkB;;;;AAElB,wBAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,WAAS,CAAC;;;AAGrF,wBAAA,IACE,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,iBAAiB;AACtD,4BAAA,KAAK,CAAC,UAAU,GAAG,CAAC,EACpB;4BACA,OAAA,CAAA,CAAA,YAAA;wBACF;AAEA,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,OAAO,CAAO,UAAC,OAAO,EAAA;gCAC9B,IAAM,UAAU,GAAG,IAAI;AAEvB,gCAAA,IAAM,OAAO,GAAG,YAAA;oCACd,YAAY,CAAC,OAAO,CAAC;AACrB,oCAAA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC;AAChD,oCAAA,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;AAC7C,oCAAA,OAAO,EAAE;AACX,gCAAA,CAAC;;AAGD,gCAAA,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,gCAAA,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;gCAG1D,IAAM,OAAO,GAAG,UAAU,CAAC,YAAA;AACzB,oCAAA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC;AAChD,oCAAA,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;oCAC7C,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,UAAU,EAAE,IAAI,CAAC;AACnF,oCAAA,OAAO,EAAE;gCACX,CAAC,EAAE,UAAU,CAAC;AAChB,4BAAA,CAAC,CAAC,CAAA;;AArBF,wBAAA,EAAA,CAAA,IAAA,EAqBE;;;;;AACH,IAAA,CAAA;AAEa,IAAA,aAAA,CAAA,SAAA,CAAA,uBAAuB,GAArC,UACE,YAA8B,EAC9B,QAA0B,EAC1B,OAEC,EAAA;;;;;;;AAED,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,4BAAA,OAAA,CAAA,CAAA,aAAO,IAAI,CAAA;wBACb;wBAGM,aAAa,GAAkB,EAAE;AACvC,wBAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,0CAAE,KAAK,MAAI,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;4BACnE,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;4BACvD,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM;AACzD,4BAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,aAAa,CAAC;wBACpF;wBAEa,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;;AAAvD,wBAAA,IAAI,GAAG,EAAA,CAAA,IAAA,EAAgD;AAClB,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,wBAAwB,CAC5E,IAAI,CACL,CAAA;;AAFK,wBAAA,EAAA,GAAqC,EAAA,CAAA,IAAA,EAE1C,EAFO,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA;AAItC,wBAAA,IAAI;AACI,4BAAA,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC,UAAU;AACxC,4BAAA,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC,WAAW;AAEhD,4BAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1C,gCAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;4BAChD;AAEM,4BAAA,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;AAEpE,4BAAA,QAAQ,GAAG,wBAAwB,CAAC,cAAc,CACtD,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,oBAAoB,CACrB;4BAEK,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CACrD;4BACK,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CACtD;AAEK,4BAAA,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,4BAAA,MAAM,CAAC,KAAK,GAAG,WAAW;AAC1B,4BAAA,MAAM,CAAC,MAAM,GAAG,YAAY;AAEtB,4BAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;4BACnC,IAAI,CAAC,GAAG,EAAE;AACR,gCAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;4BAC7D;AAEA,4BAAA,GAAG,CAAC,qBAAqB,GAAG,IAAI;AAChC,4BAAA,GAAG,CAAC,qBAAqB,GAAG,MAAM;AAElC,4BAAA,IAAI,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE;AACjC,gCAAA,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;gCAC7B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAClB;AAEA,4BAAA,GAAG,CAAC,SAAS,CACX,MAAM,EACN,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,CAAC,EACD,CAAC,EACD,WAAW,EACX,YAAY,CACb;AAEK,4BAAA,OAAO,GACX,OAAO,CAAC,MAAM,KAAK;kCACf,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW;AACpD,kCAAE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;AAEnC,4BAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE;AACzD,gCAAA,kBAAkB,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE;AACrC,gCAAA,IAAI,EAAE,MAAM;gCACZ,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE;AACpD,gCAAA,QAAQ,EAAA,QAAA;AACT,6BAAA,CAAC;4BAEF,OAAA,CAAA,CAAA,aAAO;AACL,oCAAA,OAAO,EAAA,OAAA;AACP,oCAAA,QAAQ,EAAA,QAAA;AACR,oCAAA,MAAM,EAAE,cAAc;AACtB,oCAAA,gBAAgB,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE;AACnC,oCAAA,cAAc,EAAE;wCACd,KAAK,EAAE,MAAM,CAAC,KAAK;wCACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACtB,qCAAA;iCACF,CAAA;wBACH;gCAAU;4BACR,IAAI,MAAM,YAAY,WAAW,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;gCACvE,MAAM,CAAC,KAAK,EAAE;4BAChB;AAEA,4BAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,EAAI;wBACb;;;;;AACD,IAAA,CAAA;IAEa,aAAA,CAAA,SAAA,CAAA,wBAAwB,GAAtC,UAAuC,IAAU,EAAA;;;;;;AAC3C,wBAAA,IAAA,EAAA,OAAO,iBAAiB,KAAK,UAAU,CAAA,EAAvC,OAAA,CAAA,CAAA,YAAA,CAAA,CAAA;;;;wBAEe,OAAA,CAAA,CAAA,YAAM,iBAAiB,CAAC,IAAI,EAAE;AAC3C,gCAAA,gBAAgB,EAAE,YAAY;AACT,6BAAA,CAAC,CAAA;;AAFlB,wBAAA,QAAA,GAAS,EAAA,CAAA,IAAA,EAES;wBAExB,OAAA,CAAA,CAAA,aAAO;AACL,gCAAA,MAAM,EAAE,QAAM;gCACd,KAAK,EAAE,QAAM,CAAC,KAAK;gCACnB,MAAM,EAAE,QAAM,CAAC,MAAM;AACrB,gCAAA,OAAO,EAAE,YAAA;AACP,oCAAA,IAAI,OAAO,QAAM,CAAC,KAAK,KAAK,UAAU,EAAE;wCACtC,QAAM,CAAC,KAAK,EAAE;oCAChB;gCACF,CAAC;6BACF,CAAA;;;AAED,wBAAA,OAAO,CAAC,IAAI,CAAC,2DAA2D,EAAE,OAAK,CAAC;;;AAI9E,wBAAA,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AAE7B,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,OAAO,CAAmB,UAAC,OAAO,EAAE,MAAM,EAAA;AAChE,gCAAA,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE;gCACvB,GAAG,CAAC,MAAM,GAAG,YAAA,EAAM,OAAA,OAAO,CAAC,GAAG,CAAC,CAAA,CAAZ,CAAY;AAC/B,gCAAA,GAAG,CAAC,OAAO,GAAG,UAAC,KAAK,EAAA,EAAK,OAAA,MAAM,CAAC,KAAK,CAAC,CAAA,CAAb,CAAa;AACtC,gCAAA,GAAG,CAAC,GAAG,GAAG,SAAS;AACrB,4BAAA,CAAC,CAAC,CAAA;;AALI,wBAAA,KAAK,GAAG,EAAA,CAAA,IAAA,EAKZ;wBAEF,OAAA,CAAA,CAAA,aAAO;AACL,gCAAA,MAAM,EAAE,KAAK;gCACb,KAAK,EAAE,KAAK,CAAC,YAAY;gCACzB,MAAM,EAAE,KAAK,CAAC,aAAa;gCAC3B,OAAO,EAAE,YAAA,EAAM,OAAA,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA,CAA9B,CAA8B;6BAC9C,CAAA;;;;AACF,IAAA,CAAA;IAEO,aAAA,CAAA,SAAA,CAAA,aAAa,GAArB,UACE,QAA0B,EAC1B,MAAc,EACd,MAAc,EACd,QAAgB,EAChB,SAAiB,EAAA;AAEjB,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAC5D,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5D,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,QAAQ,GAAG,OAAO,EAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,CACpC;QACD,IAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,SAAS,GAAG,OAAO,EACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CACrC;QAED,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE;AACzC,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;QAC3D;QAEA,OAAO;AACL,YAAA,CAAC,EAAE,OAAO;AACV,YAAA,CAAC,EAAE,OAAO;AACV,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,MAAM,EAAE,YAAY;SACrB;IACH,CAAC;IACH,OAAA,aAAC;AAAD,CAAC,EAtnBD;AAwnBO,IAAM,aAAa,GAAG,IAAI,aAAa;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datakeen-session-react",
3
- "version": "1.1.140-dev.75",
3
+ "version": "1.1.140-dev.77",
4
4
  "description": "React SDK component to manage and render Datakeen session experiences easily.",
5
5
  "publishConfig": {
6
6
  "access": "public",