reneco-advanced-input-module 0.0.26 → 0.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/voice-input-module.cjs.entry.js +8 -0
- package/dist/cjs/voice-input-module.cjs.entry.js.map +1 -1
- package/dist/cjs/voice-input-module.entry.cjs.js.map +1 -1
- package/dist/collection/components/voice-input-module/voice-input-module.js +8 -0
- package/dist/collection/components/voice-input-module/voice-input-module.js.map +1 -1
- package/dist/components/voice-input-module.js +8 -0
- package/dist/components/voice-input-module.js.map +1 -1
- package/dist/esm/voice-input-module.entry.js +8 -0
- package/dist/esm/voice-input-module.entry.js.map +1 -1
- package/dist/voice-input-module/{p-f14c05d0.entry.js → p-20ef690a.entry.js} +2 -2
- package/dist/voice-input-module/p-20ef690a.entry.js.map +1 -0
- package/dist/voice-input-module/voice-input-module.entry.esm.js.map +1 -1
- package/dist/voice-input-module/voice-input-module.esm.js +1 -1
- package/package.json +1 -1
- package/www/build/{p-4e26fbbb.js → p-14ee7fca.js} +1 -1
- package/www/build/{p-f14c05d0.entry.js → p-20ef690a.entry.js} +2 -2
- package/www/build/p-20ef690a.entry.js.map +1 -0
- package/www/build/voice-input-module.entry.esm.js.map +1 -1
- package/www/build/voice-input-module.esm.js +1 -1
- package/www/index.html +1 -1
- package/dist/voice-input-module/p-f14c05d0.entry.js.map +0 -1
- package/www/build/p-f14c05d0.entry.js.map +0 -1
|
@@ -479,6 +479,8 @@ export class VoiceFormRecorder {
|
|
|
479
479
|
if (!originalField.Settings)
|
|
480
480
|
originalField.Settings = {};
|
|
481
481
|
originalField.Settings.Default_Value = field.value;
|
|
482
|
+
const rawConf = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);
|
|
483
|
+
originalField.confidence = isNaN(rawConf) ? null : rawConf;
|
|
482
484
|
}
|
|
483
485
|
});
|
|
484
486
|
}
|
|
@@ -492,6 +494,8 @@ export class VoiceFormRecorder {
|
|
|
492
494
|
originalField = updatedSchema[1].items.find((child) => child.label === field.name);
|
|
493
495
|
if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {
|
|
494
496
|
updatedSchema[2][originalField.name] = field.value;
|
|
497
|
+
const rawConf = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);
|
|
498
|
+
originalField.confidence = isNaN(rawConf) ? null : rawConf;
|
|
495
499
|
}
|
|
496
500
|
});
|
|
497
501
|
}
|
|
@@ -501,11 +505,14 @@ export class VoiceFormRecorder {
|
|
|
501
505
|
if (filledData === null || filledData === void 0 ? void 0 : filledData.fields) {
|
|
502
506
|
Object.entries(filledData.fields).forEach(([fieldID, field]) => {
|
|
503
507
|
if (field.value !== undefined && field.value !== null && field.value !== '') {
|
|
508
|
+
const rawConf = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);
|
|
509
|
+
const confidence = isNaN(rawConf) ? null : rawConf;
|
|
504
510
|
if (field.id) {
|
|
505
511
|
const schemaField = updatedSchema.fields[field.id];
|
|
506
512
|
if (schemaField) {
|
|
507
513
|
schemaField.value = field.value;
|
|
508
514
|
schemaField.default = field.value;
|
|
515
|
+
schemaField.confidence = confidence;
|
|
509
516
|
}
|
|
510
517
|
}
|
|
511
518
|
else {
|
|
@@ -515,6 +522,7 @@ export class VoiceFormRecorder {
|
|
|
515
522
|
if (schemaField.title === fieldName) {
|
|
516
523
|
schemaField.value = field.value;
|
|
517
524
|
schemaField.default = field.value;
|
|
525
|
+
schemaField.confidence = confidence;
|
|
518
526
|
break;
|
|
519
527
|
}
|
|
520
528
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice-input-module.js","sourceRoot":"","sources":["../../../src/components/voice-input-module/voice-input-module.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, Event, EventEmitter, State, h, Watch, Method } from '@stencil/core';\r\nimport { FormSchema, VoiceFormRecorderResult, FilledFormData, FormSchemaFieldsOnly, FormSchemaFieldsOnlyExtended } from '../../types/form-schema.types';\r\nimport { ServiceProviderConfig, TranscriptionProvider, CompletionProvider, TRANSCRIPTION_MODELS, COMPLETION_MODELS } from '../../types/service-providers.types';\r\nimport { AudioRecorderService } from '../../services/audio-recorder.service';\r\nimport { SpeechToTextServiceFactory } from '../../services/speech-to-text.service';\r\nimport { LLMServiceFactory } from '../../services/llm.service';\r\nimport { SchemaConverter } from '../../utils/schema-converter';\r\nimport { defineCustomElements } from 'ocr-file-uploader/loader';\r\n\r\n// Initialize OCR\r\ndefineCustomElements();\r\n\r\n@Component({\r\n tag: 'voice-input-module',\r\n styleUrl: 'voice-input-module.css',\r\n shadow: true,\r\n})\r\nexport class VoiceFormRecorder {\r\n @Prop() formJson: string = '{}';\r\n @Prop() serviceConfig: string = '{}';\r\n @Prop() apiKey: string;\r\n @Prop() apiProxyUrl: string = 'http://localhost:8492';\r\n @Prop() transcriptionModel: string = 'gpt-4o-transcribe';\r\n @Prop() completionModel: string = 'gpt-5-mini';\r\n @Prop() transcriptionProvider: TranscriptionProvider = 'openai';\r\n @Prop() completionProvider: CompletionProvider = 'openai';\r\n @Prop() context: 'track'|'ng'|'ecoll-veto'|'ecoteka' = undefined;\r\n @Prop() classificationRootUrl: string = 'http://localhost';\r\n @Prop() language: 'fr'|'en' = 'en';\r\n @Prop() inputTypes: string = '';\r\n @Prop() theme: string = '';\r\n \r\n private get parsedInputTypes(): ('voice' | 'ocr' | 'audio')[] {\r\n if (!this.inputTypes) return [];\r\n try {\r\n return JSON.parse(this.inputTypes.replace(/'/g, '\"'));\r\n } catch {\r\n return this.inputTypes.split(',').map(type => type.trim() as 'voice' | 'ocr' | 'audio');\r\n }\r\n }\r\n \r\n @Prop() debug: boolean = false;\r\n @Prop() renderForm: boolean = false;\r\n @Prop() displayStatus: boolean = false;\r\n \r\n @Event() formFilled: EventEmitter<VoiceFormRecorderResult>;\r\n @Event() recordingStateChanged: EventEmitter<{ isRecording: boolean; state: string }>;\r\n\r\n @State() isRecording: boolean = false;\r\n @State() isProcessing: boolean = false;\r\n @State() statusMessage: string;\r\n @State() hasError: boolean = false;\r\n @State() hasTransientError: boolean = false;\r\n @State() transcription: string = '';\r\n @State() filledData: FilledFormData | null = null;\r\n @State() confidenceScores: Record<string, number> | null = null;\r\n @State() debugInfo: any = {};\r\n @State() isReadonlyMode: boolean = true; // Start in readonly preview mode\r\n @State() isInitializing: boolean = true;\r\n\r\n private audioRecorder: AudioRecorderService;\r\n private speechToTextService: any;\r\n private llmService: any;\r\n private parsedSchema: any; // Support both simple FormSchema and complex nested schema\r\n private parsedConfig: ServiceProviderConfig;\r\n private parsedTheme: any;\r\n\r\n constructor() {\r\n this.audioRecorder = new AudioRecorderService();\r\n }\r\n\r\n componentWillLoad() {\r\n // Parse theme only so the skeleton can be styled correctly on first render.\r\n // Full initialization runs in componentDidLoad() to give the skeleton time to paint.\r\n try {\r\n this.parsedTheme = this.theme ? JSON.parse(this.theme) : this.getDefaultTheme();\r\n } catch {\r\n this.parsedTheme = this.getDefaultTheme();\r\n }\r\n }\r\n\r\n componentDidLoad() {\r\n this.initializeServices();\r\n this.isInitializing = false;\r\n }\r\n\r\n @Watch('formJson')\r\n @Watch('serviceConfig')\r\n @Watch('theme')\r\n @Watch('transcriptionProvider')\r\n @Watch('completionProvider')\r\n @Watch('transcriptionModel')\r\n @Watch('completionModel')\r\n initializeServices() {\r\n // Parse theme\r\n try {\r\n this.parsedTheme = this.theme ? JSON.parse(this.theme) : this.getDefaultTheme();\r\n } catch {\r\n this.parsedTheme = this.getDefaultTheme();\r\n }\r\n try {\r\n if (!this.context){\r\n this.hasError = true;\r\n const errorMessage = (this.language == 'en' ? `Initialization error: context is '${this.context}'` : `Erreur d'initialisation: le contexte est '${this.context}'`);\r\n this.statusMessage = errorMessage;\r\n this.updateDebugInfo(errorMessage, { error: errorMessage });\r\n }\r\n else{\r\n // Validate transcription provider/model\r\n const allowedTranscriptionModels = TRANSCRIPTION_MODELS[this.transcriptionProvider];\r\n if (!allowedTranscriptionModels) {\r\n throw new Error(`Unsupported transcription provider: '${this.transcriptionProvider}'. Allowed: openai, mistral`);\r\n }\r\n if (!allowedTranscriptionModels.includes(this.transcriptionModel)) {\r\n throw new Error(`Model '${this.transcriptionModel}' is not allowed for transcription provider '${this.transcriptionProvider}'. Allowed: ${allowedTranscriptionModels.join(', ')}`);\r\n }\r\n\r\n // Validate completion provider/model\r\n const allowedCompletionModels = COMPLETION_MODELS[this.completionProvider];\r\n if (!allowedCompletionModels) {\r\n throw new Error(`Unsupported completion provider: '${this.completionProvider}'. Allowed: openai, anthropic, mistral`);\r\n }\r\n if (!allowedCompletionModels.includes(this.completionModel)) {\r\n throw new Error(`Model '${this.completionModel}' is not allowed for completion provider '${this.completionProvider}'. Allowed: ${allowedCompletionModels.join(', ')}`);\r\n }\r\n\r\n // Parse form schema\r\n this.parsedSchema = JSON.parse(this.formJson || '{}');\r\n \r\n // Parse service configuration\r\n this.parsedConfig = JSON.parse(this.serviceConfig || '{}');\r\n \r\n // Add API key to config if provided via prop\r\n if (this.apiKey) {\r\n this.parsedConfig = {\r\n ...this.parsedConfig,\r\n speechToText: { ...this.parsedConfig.speechToText, provider: this.transcriptionProvider, apiKey: this.apiKey, model: this.transcriptionModel },\r\n llm: { ...this.parsedConfig.llm, provider: this.completionProvider, apiKey: this.apiKey, model: this.completionModel }\r\n };\r\n } else {\r\n // Use proxy API if no API key provided\r\n this.parsedConfig = {\r\n ...this.parsedConfig,\r\n speechToText: { ...this.parsedConfig.speechToText, provider: this.transcriptionProvider, useProxy: true, proxyUrl: this.apiProxyUrl, model: this.transcriptionModel },\r\n llm: { ...this.parsedConfig.llm, provider: this.completionProvider, useProxy: true, proxyUrl: this.apiProxyUrl, model: this.completionModel }\r\n };\r\n }\r\n \r\n // Initialize services\r\n this.speechToTextService = SpeechToTextServiceFactory.create(this.parsedConfig);\r\n this.llmService = LLMServiceFactory.create(this.parsedConfig);\r\n \r\n this.updateDebugInfo('Initialized', {\r\n schema: this.parsedSchema,\r\n config: this.parsedConfig\r\n });\r\n \r\n this.hasError = false;\r\n this.hasTransientError = false;\r\n this.statusMessage = this.parsedTheme.texts?.idle || (this.language == 'en' ? 'Select an input method' : 'Sélectionner une méthode de saisie');\r\n if (this.parsedInputTypes.length === 0){\r\n this.inputTypes = 'voice';\r\n }\r\n }\r\n } catch (error) {\r\n this.hasError = true;\r\n this.statusMessage = (this.language == 'en' ? `Initialization error: ${error.message}` : `Erreur d'initialisation: ${error.message}`);\r\n this.updateDebugInfo('Initialization Error', { error: error.message });\r\n }\r\n }\r\n\r\n private updateDebugInfo(action: string, data: any) {\r\n if (this.debug) {\r\n this.debugInfo = {\r\n ...this.debugInfo,\r\n [action]: {\r\n timestamp: new Date().toISOString(),\r\n data\r\n }\r\n };\r\n }\r\n }\r\n\r\n private getMicErrorMessage(error: Error): string {\r\n const isEn = this.language === 'en';\r\n const errorName = (error as any).name || '';\r\n if (errorName === 'NotAllowedError' || errorName === 'PermissionDeniedError') {\r\n return isEn\r\n ? 'Microphone access denied. Allow microphone access in your browser settings and try again.'\r\n : \"Accès au microphone refusé. Autorisez l'accès au microphone dans les paramètres du navigateur et réessayez.\";\r\n }\r\n if (errorName === 'NotFoundError' || errorName === 'DevicesNotFoundError') {\r\n return isEn\r\n ? 'No microphone found. Please connect a microphone and try again.'\r\n : 'Aucun microphone trouvé. Connectez un microphone et réessayez.';\r\n }\r\n if (errorName === 'NotReadableError' || errorName === 'TrackStartError') {\r\n return isEn\r\n ? 'Microphone is busy or unavailable. Close other apps using the microphone and try again.'\r\n : 'Le microphone est occupé ou indisponible. Fermez les autres applications utilisant le microphone et réessayez.';\r\n }\r\n if (errorName === 'AbortError') {\r\n return isEn\r\n ? 'Microphone access was interrupted. Please try again.'\r\n : \"L'accès au microphone a été interrompu. Veuillez réessayer.\";\r\n }\r\n if (errorName === 'OverconstrainedError') {\r\n return isEn\r\n ? 'Microphone does not support the required audio settings.'\r\n : 'Le microphone ne supporte pas les paramètres audio requis.';\r\n }\r\n if (error.message?.includes('HTTPS') || error.message?.includes('not supported')) {\r\n return isEn\r\n ? 'Microphone access requires HTTPS or localhost.'\r\n : \"L'accès au microphone nécessite HTTPS ou localhost.\";\r\n }\r\n return isEn ? `Microphone error: ${error.message}` : `Erreur microphone : ${error.message}`;\r\n }\r\n\r\n private getReadableErrorMessage(error: Error, phase: string): string {\r\n const isEn = this.language === 'en';\r\n const msg = error.message || '';\r\n if (/401|unauthorized|invalid.{0,20}(api )?key|authentication failed/i.test(msg)) {\r\n return isEn\r\n ? 'Authentication failed: invalid API key. Check your configuration.'\r\n : \"Échec d'authentification : clé API invalide. Vérifiez votre configuration.\";\r\n }\r\n if (/403|forbidden/i.test(msg)) {\r\n return isEn\r\n ? 'Access denied: check your API permissions.'\r\n : 'Accès refusé : vérifiez vos permissions API.';\r\n }\r\n if (/429|rate.{0,10}limit|too many requests/i.test(msg)) {\r\n return isEn\r\n ? 'Rate limit exceeded. Please wait a moment and try again.'\r\n : 'Limite de requêtes dépassée. Veuillez attendre quelques secondes et réessayer.';\r\n }\r\n if (/404|not found/i.test(msg)) {\r\n return isEn\r\n ? 'API endpoint not found. Check your proxy URL configuration.'\r\n : \"Endpoint API introuvable. Vérifiez l'URL de votre proxy.\";\r\n }\r\n if (/5\\d\\d|server error|internal server|bad gateway|service unavailable/i.test(msg)) {\r\n return isEn\r\n ? 'Server error. Please try again in a moment.'\r\n : 'Erreur serveur. Veuillez réessayer dans un instant.';\r\n }\r\n if (/network|failed to fetch|err_connection|connection refused/i.test(msg)) {\r\n return isEn\r\n ? 'Network error: check your connection and proxy server.'\r\n : 'Erreur réseau : vérifiez votre connexion et le serveur proxy.';\r\n }\r\n if (/json|parse error|unexpected token|invalid response/i.test(msg)) {\r\n return isEn\r\n ? 'Unexpected response from AI service. Please try again.'\r\n : 'Réponse inattendue du service IA. Veuillez réessayer.';\r\n }\r\n if (phase === 'transcription') {\r\n return isEn ? `Transcription failed: ${msg}` : `Échec de la transcription : ${msg}`;\r\n }\r\n if (phase === 'llm') {\r\n return isEn ? `Form filling failed: ${msg}` : `Échec du remplissage du formulaire : ${msg}`;\r\n }\r\n if (phase === 'ocr') {\r\n return isEn ? `OCR processing failed: ${msg}` : `Échec du traitement OCR : ${msg}`;\r\n }\r\n return isEn ? `Processing error: ${msg}` : `Erreur de traitement : ${msg}`;\r\n }\r\n\r\n private async handleRecordClick() {\r\n if (this.isProcessing) return;\r\n\r\n if (this.isRecording) {\r\n await this.stopRecordingAndProcess();\r\n } else {\r\n await this.startRecording();\r\n }\r\n }\r\n\r\n private async startRecording() {\r\n try {\r\n this.hasTransientError = false;\r\n this.statusMessage = (this.language == 'en' ? 'Starting recording...' : `Enregistrement ...`);\r\n this.updateDebugInfo('Start Recording Attempt', {});\r\n\r\n await this.audioRecorder.startRecording();\r\n \r\n this.isRecording = true;\r\n this.statusMessage = this.parsedTheme.texts?.recording || (this.language == 'en' ? 'Recording... Click to stop' : 'Enregistrement ... Cliquer pour stopper');\r\n this.updateDebugInfo('Recording Started', {});\r\n \r\n this.recordingStateChanged.emit({ \r\n isRecording: true, \r\n state: 'recording' \r\n });\r\n } catch (error) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getMicErrorMessage(error);\r\n this.updateDebugInfo('Recording Error', { error: error.message });\r\n \r\n this.formFilled.emit({\r\n success: false,\r\n error: error.message\r\n });\r\n }\r\n }\r\n\r\n private async processJsonForm(ocrData: any) {\r\n if (this.isProcessing || this.isRecording) return;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.confidenceScores = null;\r\n this.statusMessage = this.parsedTheme.texts?.processing || (this.language == 'en' ? 'Processing document...' : 'Traitement du document ...');\r\n\r\n try {\r\n const extractedData = ocrData?.content || ocrData;\r\n const jsonForm = JSON.stringify(extractedData);\r\n\r\n if (!extractedData) {\r\n throw Object.assign(new Error('OCR returned no data'), { phase: 'ocr' });\r\n }\r\n\r\n this.statusMessage = this.parsedTheme.texts?.filling || (this.language == 'en' ? 'Filling form fields...' : 'Remplissage du formulaire ...');\r\n const trimmedSchema = await this.trimSchemaForAI(this.parsedSchema);\r\n let filledSchema: any;\r\n try {\r\n filledSchema = await this.llmService.fillFormFromJson(jsonForm, trimmedSchema);\r\n } catch (llmError) {\r\n throw Object.assign(new Error(llmError.message), { phase: 'llm' });\r\n }\r\n\r\n this.filledData = this.extractFilledData(filledSchema);\r\n this.confidenceScores = this.extractConfidenceScores(filledSchema);\r\n this.updateDebugInfo('Form Filled', { filledSchema, extractedData: this.filledData, confidence: this.confidenceScores });\r\n this.parsedSchema = this.filledData;\r\n\r\n this.statusMessage = this.parsedTheme.texts?.completed || (this.language == 'en' ? 'Form completed!' : 'Formulaire rempli !');\r\n this.formFilled.emit({ success: true, data: this.filledData, jsonForm, confidence: this.confidenceScores });\r\n\r\n } catch (error) {\r\n console.error('OCR processing error:', error);\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getReadableErrorMessage(error, (error as any).phase || 'llm');\r\n this.updateDebugInfo('OCR Processing Error', { phase: (error as any).phase, error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, jsonForm: JSON.stringify(ocrData) });\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n private async processAudioContent(audioFile: File) {\r\n if (this.isProcessing || this.isRecording) return;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.confidenceScores = null;\r\n this.updateDebugInfo('Audio Captured', { size: audioFile.size, type: audioFile.type });\r\n\r\n try {\r\n // Validate audio file before sending to API\r\n const MAX_AUDIO_SIZE = 25 * 1024 * 1024; // 25MB (API limit)\r\n if (audioFile.size <= 44) { // WAV header alone is 44 bytes; effectively empty\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? 'Recording is empty or too short. Please try again.'\r\n : \"L'enregistrement est vide ou trop court. Veuillez réessayer.\";\r\n this.formFilled.emit({ success: false, error: 'Empty or too short audio' });\r\n return;\r\n }\r\n if (audioFile.size > MAX_AUDIO_SIZE) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? `File too large (${Math.round(audioFile.size / 1024 / 1024)}MB). Maximum is 25MB.`\r\n : `Fichier trop volumineux (${Math.round(audioFile.size / 1024 / 1024)}Mo). Maximum : 25Mo.`;\r\n this.formFilled.emit({ success: false, error: 'Audio file too large' });\r\n return;\r\n }\r\n\r\n let transcription: string;\r\n try {\r\n this.statusMessage = this.parsedTheme.texts?.transcribing || (this.language == 'en' ? 'Transcribing speech...' : 'Transcription du texte ...');\r\n transcription = await this.speechToTextService.transcribe(audioFile, this.language);\r\n this.transcription = transcription;\r\n this.updateDebugInfo('Transcription Complete', { transcription });\r\n } catch (transcriptionError) {\r\n throw Object.assign(new Error(transcriptionError.message), { phase: 'transcription' });\r\n }\r\n\r\n if (!transcription.trim()) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? 'No speech detected. Please speak clearly and try again.'\r\n : 'Aucune parole détectée. Parlez clairement et réessayez.';\r\n this.formFilled.emit({ success: false, error: 'No speech detected', transcription: '' });\r\n return;\r\n }\r\n\r\n let filledSchema: any;\r\n try {\r\n this.statusMessage = this.parsedTheme.texts?.filling || (this.language == 'en' ? 'Filling form fields...' : 'Remplissage du formulaire ...');\r\n const trimmedSchema = await this.trimSchemaForAI(this.parsedSchema);\r\n filledSchema = await this.llmService.fillFormFromTranscription(transcription, trimmedSchema);\r\n } catch (llmError) {\r\n throw Object.assign(new Error(llmError.message), { phase: 'llm' });\r\n }\r\n\r\n this.filledData = this.extractFilledData(filledSchema);\r\n this.confidenceScores = this.extractConfidenceScores(filledSchema);\r\n this.updateDebugInfo('Form Filled', { filledSchema, extractedData: this.filledData, confidence: this.confidenceScores });\r\n this.parsedSchema = this.filledData;\r\n\r\n this.statusMessage = this.parsedTheme.texts?.completed || (this.language == 'en' ? 'Form completed!' : 'Formulaire rempli !');\r\n this.formFilled.emit({ success: true, data: this.filledData, transcription, confidence: this.confidenceScores });\r\n\r\n } catch (error) {\r\n console.error('Audio processing error:', error);\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getReadableErrorMessage(error, (error as any).phase || 'audio-upload');\r\n this.updateDebugInfo('Audio Processing Error', { phase: (error as any).phase, error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, transcription: this.transcription });\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n private async stopRecordingAndProcess() {\r\n this.isRecording = false;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.statusMessage = this.parsedTheme.texts?.processing || (this.language == 'en' ? 'Processing audio...' : `Traitement de l'audio ...`);\r\n this.updateDebugInfo('Stop Recording', {});\r\n\r\n this.recordingStateChanged.emit({ isRecording: false, state: 'processing' });\r\n\r\n try {\r\n const audioBlob = await this.audioRecorder.stopRecording();\r\n const audioContent = new File([audioBlob], 'audio.wav', { type: 'audio/wav' });\r\n // Reset isProcessing so the guard inside processAudioContent doesn't block this internal call\r\n this.isProcessing = false;\r\n await this.processAudioContent(audioContent);\r\n } catch (error) {\r\n // Only reached if audioRecorder.stopRecording() itself throws\r\n this.hasTransientError = true;\r\n this.isProcessing = false;\r\n this.statusMessage = (this.language == 'en'\r\n ? `Failed to stop recording: ${error.message}`\r\n : `Impossible d'arrêter l'enregistrement : ${error.message}`);\r\n this.updateDebugInfo('Stop Recording Error', { error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, transcription: this.transcription });\r\n } finally {\r\n this.recordingStateChanged.emit({ isRecording: false, state: 'idle' });\r\n }\r\n }\r\n\r\n private extractConfidenceScores(filledData: any): Record<string, number> {\r\n const scores: Record<string, number> = {};\r\n if (!filledData) return scores;\r\n\r\n // Fields array format: [{\"id\": \"...\", \"name\": \"...\", \"value\": \"...\", \"confidence\": 0.87}]\r\n if (filledData.fields && Array.isArray(filledData.fields)) {\r\n filledData.fields.forEach((field: any) => {\r\n const raw = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);\r\n if (!isNaN(raw)) {\r\n const clamped = Math.min(0.99, Math.max(0.01, Math.round(raw * 100) / 100));\r\n // Store under both id and name so label-based lookups always work\r\n if (field.id) scores[field.id] = clamped;\r\n if (field.name) scores[field.name] = clamped;\r\n }\r\n });\r\n }\r\n\r\n // Simple schema format: {\"schema\": {...}, \"confidence\": {\"field_name\": 0.87}}\r\n if (filledData.confidence && typeof filledData.confidence === 'object') {\r\n Object.entries(filledData.confidence).forEach(([k, v]) => {\r\n const raw = typeof v === 'number' ? v : parseFloat(v as string);\r\n if (!isNaN(raw)) {\r\n scores[k] = Math.min(0.99, Math.max(0.01, Math.round(raw * 100) / 100));\r\n }\r\n });\r\n }\r\n\r\n return scores;\r\n }\r\n\r\n private getFieldConfidence(primary: string, fallback?: string): number | null {\r\n if (!this.confidenceScores) return null;\r\n return this.confidenceScores[primary] ?? (fallback ? (this.confidenceScores[fallback] ?? null) : null);\r\n }\r\n\r\n private renderConfidenceIndicator(confidence: number | null) {\r\n if (confidence === null || confidence >= 0.95) return null;\r\n const pct = Math.round(confidence * 100);\r\n const isApproximate = confidence >= 0.85;\r\n return (\r\n <span\r\n class={`confidence-badge ${isApproximate ? 'confidence-medium' : 'confidence-low'}`}\r\n title={this.language === 'en' ? `Confidence: ${pct}%` : `Confiance : ${pct}%`}\r\n >\r\n {pct}%\r\n </span>\r\n );\r\n }\r\n\r\n private extractFilledData(filledData: any): any {\r\n const updatedSchema = JSON.parse(JSON.stringify(this.parsedSchema));\r\n switch(this.context){\r\n case \"ecoteka\":\r\n case \"ng\": \r\n if (filledData?.fields) {\r\n // Map AI response back to original schema structure\r\n filledData.fields.forEach((field: any) => {\r\n const originalField = updatedSchema.Children.find((child: any) => \r\n child.System_Name === field.name || child.Settings?.Label === field.name\r\n );\r\n \r\n if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {\r\n if (!originalField.Settings) originalField.Settings = {};\r\n originalField.Settings.Default_Value = field.value;\r\n }\r\n });\r\n }\r\n \r\n break;\r\n case \"ecoll-veto\":\r\n if (filledData?.fields) {\r\n // Map AI response back to original schema structure\r\n filledData.fields.forEach((field: any) => {\r\n let originalField = updatedSchema[0].items.find((child: any) => \r\n child.label === field.name\r\n );\r\n if (!originalField)\r\n originalField = updatedSchema[1].items.find((child: any) =>\r\n child.label === field.name\r\n );\r\n \r\n if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {\r\n updatedSchema[2][originalField.name] = field.value;\r\n }\r\n });\r\n }\r\n break;\r\n case \"track\":\r\n default:\r\n if (filledData?.fields) {\r\n Object.entries(filledData.fields).forEach(([fieldID, field]: [string, any]) => {\r\n if (field.value !== undefined && field.value !== null && field.value !== '') {\r\n if (field.id) {\r\n const schemaField = updatedSchema.fields[field.id];\r\n if (schemaField) {\r\n schemaField.value = field.value;\r\n schemaField.default = field.value;\r\n }\r\n } else {\r\n const fieldName = field.name;\r\n for (const key in updatedSchema.fields) {\r\n const schemaField = updatedSchema.fields[key];\r\n if (schemaField.title === fieldName) {\r\n schemaField.value = field.value;\r\n schemaField.default = field.value;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n return updatedSchema;\r\n }\r\n\r\n private async trimSchemaForAI(schema: any): Promise<any> {\r\n switch(this.context){\r\n case \"ecoteka\":\r\n case \"ng\":\r\n const trimmed = { fields: [] };\r\n schema.Children.forEach((child: any) => {\r\n if (!child.System_Name || !child.Type) return;\r\n \r\n const fieldData: any = {\r\n name: child.Label || child.Settings?.Label || child.System_Name,\r\n type: this.mapFieldType(child.Type),\r\n default: child.Settings?.Default_Value\r\n };\r\n \r\n // Add options for classification/select/multiselect fields\r\n const selectTypes = ['InputClassification', 'select', 'multiselect', 'InputMultiSelect']\r\n if (selectTypes.includes(child.Type) && child.Children && child.Children.length > 0) {\r\n fieldData.options = child.Children.map((option: any) => \r\n option.System_Name || option.Label || option.toString()\r\n );\r\n }\r\n \r\n trimmed.fields.push(fieldData);\r\n });\r\n \r\n return trimmed;\r\n case \"ecoll-veto\":\r\n const mergedItemsSchema = (this.parsedSchema[0].items).concat(this.parsedSchema[1].items);\r\n\r\n if (mergedItemsSchema) {\r\n const trimmedSchema: FormSchema = {\r\n title: 'Form Name',\r\n description: 'Form Description',\r\n schema: {}\r\n };\r\n\r\n Object.entries(mergedItemsSchema).forEach(async ([key, field]: [string, any]) => {\r\n const fieldName = field.name;\r\n const fieldType = this.mapFieldType(field.type) as any;\r\n const fieldLabel = field.label || fieldName;\r\n const isRequired = field.required || false;\r\n const fieldValue = ''; //TODO\r\n\r\n if (['position', 'thesaurus'].includes(fieldType)) {\r\n try {\r\n const response = await fetch(`${this.classificationRootUrl}/ng/api/v1/classification/getList/${fieldType.toLowerCase() == 'position' ? \"Position\" : \"Thesaurus\"}/?StartNodeID=${field.config.options.options.startNode}`);\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n const data = await response.json();\r\n if (Array.isArray(data)) {\r\n const options = data.map(item => ({\r\n value: item.ID,\r\n label: item.System_Name\r\n }));\r\n if (options.length > 0) {\r\n field.pickerOptions = options;\r\n // TODO on degage les quotes simples temporairement, a corriger\r\n field.options = options.map(option => option.label.replace(\"'\", \"\"));\r\n }\r\n } else {\r\n console.error(\"Unexpected API response format:\", data);\r\n }\r\n } catch (error) {\r\n console.error(\"Error fetching classification data:\", error);\r\n }\r\n }\r\n \r\n trimmedSchema.schema[fieldName] = {\r\n type: fieldType,\r\n title: fieldLabel,\r\n options: field.options,\r\n readonly: field.readonly === true,\r\n default: '',\r\n };\r\n });\r\n return trimmedSchema;\r\n }\r\n case \"track\":\r\n default:\r\n if (schema?.schema ?? schema?.fields) {\r\n const trimmedSchema: FormSchema = {\r\n title: schema.title,\r\n description: schema.description,\r\n schema: {}\r\n };\r\n\r\n const finalSchema = schema?.schema ?? schema?.fields;\r\n\r\n Object.entries(finalSchema).forEach(([fieldName, field]: [string, any]) => {\r\n trimmedSchema.schema[fieldName] = {\r\n id: fieldName,\r\n type: field.type,\r\n title: field.title,\r\n options: field.options,\r\n readonly: field.type === 'header' || field.Enabled === false,\r\n default: field.default || field.DefaultValue,\r\n pattern: field.Mask,\r\n min: field.ValidationMin,\r\n max: field.ValidationMax\r\n };\r\n });\r\n\r\n return trimmedSchema;\r\n }\r\n break;\r\n }\r\n \r\n return schema;\r\n }\r\n\r\n private mapFieldType(type: string): string {\r\n const typeMapping = {\r\n 'InputAutocomplete': 'string',\r\n 'InputInteger': 'number',\r\n 'InputTextArea': 'string',\r\n 'InputDateTimePicker': 'datetime',\r\n 'InputDecimal': 'number',\r\n 'InputClassification': 'classification',\r\n 'InputCheckbox': 'boolean',\r\n 'InputTextTranslation': 'string',\r\n 'InputMultiSelect': 'multiselect',\r\n 'thesaurus': 'thesaurus',\r\n 'position': 'position',\r\n 'text': 'string',\r\n 'textarea': 'string',\r\n 'number': 'number',\r\n 'date': 'date',\r\n 'datetime': 'datetime',\r\n 'select': 'select',\r\n 'multiselect': 'multiselect',\r\n 'checkbox': 'checkbox'\r\n };\r\n \r\n return typeMapping[type] || 'string';\r\n }\r\n\r\n // Utility methods exposed as public API\r\n @Method() public async convertXmlToJson(xmlForm: string): Promise<FormSchemaFieldsOnly> {\r\n return SchemaConverter.convertXmlToJson(xmlForm, this.classificationRootUrl, this.language);\r\n }\r\n\r\n @Method() public async convertJsonToXml(jsonForm: FormSchemaFieldsOnlyExtended): Promise<string> {\r\n return SchemaConverter.convertJsonToXml(jsonForm);\r\n }\r\n\r\n // Utility methods exposed as public API\r\n @Method() public async convertXmlToJsonLegacy(xmlForm: string): Promise<FormSchema> {\r\n return SchemaConverter.convertXmlToJsonLegacy(xmlForm);\r\n }\r\n\r\n @Method() public async convertJsonToXmlLegacy(jsonForm: FormSchema): Promise<string> {\r\n return SchemaConverter.convertJsonToXmlLegacy(jsonForm);\r\n }\r\n\r\n private renderUploadButton() {\r\n if (!this.parsedInputTypes.includes('ocr'))\r\n return;\r\n const ocrStyle = this.parsedTheme.buttons?.ocr || {};\r\n const size = ocrStyle.size || '50px';\r\n \r\n // Prepare OCR theme to pass to ocr-file-uploader component\r\n const ocrTheme = {\r\n button: {\r\n size: size,\r\n backgroundColor: ocrStyle.backgroundColor || '#10b981',\r\n hoverColor: ocrStyle.hoverColor || '#059669',\r\n textColor: ocrStyle.textColor || '#ffffff'\r\n }\r\n };\r\n \r\n const isDisabled = this.isProcessing || this.hasError || this.isRecording;\r\n \r\n return(\r\n <div style={{ width: size, height: size, flexShrink: '0', opacity: isDisabled ? '0.6' : '1', pointerEvents: isDisabled ? 'none' : 'auto' }}>\r\n <ocr-file-uploader\r\n batch={false}\r\n json-schema={this.convertSchemaToOcrFormat(this.parsedSchema)}\r\n callback={(data) => {this.processJsonForm(data);}}\r\n theme={JSON.stringify(ocrTheme)}\r\n style={{ width: '100%', height: '100%' }}\r\n >\r\n </ocr-file-uploader>\r\n </div>\r\n );\r\n }\r\n\r\n private convertSchemaToOcrFormat(schema: any): string {\r\n const ocrSchema = {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n meta: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n page: { type: \"integer\" },\r\n confiance_global: { type: \"number\" }\r\n },\r\n required: [\"page\", \"confiance_global\"]\r\n },\r\n content: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {},\r\n required: []\r\n }\r\n },\r\n required: [\"meta\", \"content\"]\r\n };\r\n\r\n if (schema?.Children) {\r\n schema.Children.forEach((child: any) => {\r\n if (child.System_Name && child.Type) {\r\n const fieldLabel = child.Settings?.Label || child.System_Name;\r\n const fieldType = this.mapOcrFieldType(child.Type);\r\n ocrSchema.properties.content.properties[fieldLabel] = {\r\n anyOf: [{ type: fieldType }, { type: \"null\" }]\r\n };\r\n }\r\n });\r\n }\r\n\r\n return JSON.stringify(ocrSchema);\r\n }\r\n\r\n private mapOcrFieldType(type: string): string {\r\n const typeMapping = {\r\n 'InputInteger': 'number',\r\n 'InputDecimal': 'number',\r\n 'InputDateTimePicker': 'string',\r\n 'InputCheckbox': 'boolean'\r\n };\r\n return typeMapping[type] || 'string';\r\n }\r\n\r\n private fileInputAudioRecord!: HTMLInputElement;\r\n\r\n private triggerAudioRecordUpload = () => {\r\n this.fileInputAudioRecord.click();\r\n };\r\n\r\n private handleAudioRecordChange = async (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files || input.files.length === 0) return;\r\n if (this.isProcessing || this.isRecording) {\r\n input.value = '';\r\n return;\r\n }\r\n\r\n const file = input.files[0];\r\n const isEn = this.language === 'en';\r\n\r\n // Validate file type\r\n const validAudioTypes = /^audio\\//;\r\n const validAudioExtensions = /\\.(mp3|wav|webm|m4a|ogg|flac|aac|opus)$/i;\r\n if (!validAudioTypes.test(file.type) && !validAudioExtensions.test(file.name)) {\r\n this.hasTransientError = true;\r\n this.statusMessage = isEn\r\n ? `Invalid file type: \"${file.name}\". Please select an audio file.`\r\n : `Type de fichier invalide : \"${file.name}\". Veuillez sélectionner un fichier audio.`;\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Reset the input so the same file can be re-selected after an error\r\n input.value = '';\r\n await this.processAudioContent(file);\r\n };\r\n\r\n private renderUploadRecordButton() {\r\n if (!this.parsedInputTypes.includes('audio'))\r\n return;\r\n \r\n const audioStyle = this.parsedTheme.buttons?.audio || {};\r\n const size = audioStyle.size || '50px';\r\n const isDisabled = this.isProcessing || this.hasError || this.isRecording;\r\n const buttonStyle = {\r\n stroke: audioStyle.backgroundColor || '#3b82f6',\r\n fill: audioStyle.backgroundColor || '#3b82f6',\r\n width: size,\r\n height: size,\r\n opacity: isDisabled ? '0.6' : '1'\r\n };\r\n \r\n return (\r\n <div class=\"upload-record-container\" onClick={isDisabled ? null : this.triggerAudioRecordUpload} style={{ width: size, height: size, cursor: isDisabled ? 'not-allowed' : 'pointer' }}>\r\n <input\r\n type=\"file\"\r\n ref={el => (this.fileInputAudioRecord = el!)}\r\n onChange={this.handleAudioRecordChange}\r\n style={{ display: 'none' }}\r\n />\r\n <div class='upload-record-button'>\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={buttonStyle}>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 2.75C6.89137 2.75 2.75 6.89137 2.75 12C2.75 17.1086 6.89137 21.25 12 21.25C12.6345 21.25 13.2534 21.1862 13.8508 21.065C14.2567 20.9826 14.6526 21.2448 14.735 21.6508C14.8174 22.0567 14.5551 22.4526 14.1492 22.535C13.4541 22.6761 12.7353 22.75 12 22.75C6.06294 22.75 1.25 17.9371 1.25 12C1.25 6.06294 6.06294 1.25 12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 12.7353 22.6761 13.4541 22.535 14.1492C22.4526 14.5551 22.0567 14.8174 21.6508 14.735C21.2448 14.6526 20.9826 14.2567 21.065 13.8508C21.1862 13.2534 21.25 12.6345 21.25 12C21.25 6.89137 17.1086 2.75 12 2.75ZM12.7676 8.52584C12.7661 8.53409 12.7604 8.56729 12.7564 8.64336C12.7502 8.76101 12.75 8.91982 12.75 9.17082C12.75 9.27795 12.7501 9.33904 12.7518 9.38529C12.7528 9.41425 12.7542 9.42649 12.7546 9.42955C12.7662 9.48945 12.7993 9.54303 12.8477 9.58021C12.8502 9.58194 12.8606 9.58864 12.886 9.60252C12.9266 9.62468 12.9812 9.65209 13.0771 9.7L14.3938 10.3584C14.6183 10.4706 14.7604 10.5414 14.8684 10.5885C14.9382 10.6189 14.9705 10.6287 14.9785 10.631C15.0885 10.6405 15.1917 10.5767 15.2324 10.4742C15.2339 10.4659 15.2396 10.4327 15.2436 10.3566C15.2498 10.239 15.25 10.0802 15.25 9.82918C15.25 9.72205 15.2499 9.66096 15.2482 9.61471C15.2472 9.58575 15.2458 9.57351 15.2454 9.57045C15.2338 9.51055 15.2007 9.45697 15.1523 9.41979C15.1498 9.41805 15.1394 9.41136 15.114 9.39748C15.0734 9.37533 15.0188 9.34791 14.9229 9.3L13.6062 8.64164C13.3817 8.52939 13.2396 8.45859 13.1316 8.41151C13.0617 8.38107 13.0295 8.37131 13.0215 8.36896C12.9115 8.35945 12.8083 8.42327 12.7676 8.52584ZM12.75 11.2135L13.7396 11.7083C13.9425 11.8098 14.1204 11.8987 14.269 11.9635C14.4199 12.0293 14.5988 12.097 14.7972 12.1202C15.6037 12.2142 16.3689 11.7413 16.6454 10.978C16.7134 10.7901 16.7328 10.5998 16.7415 10.4355C16.75 10.2735 16.75 10.0747 16.75 9.8479V9.82918C16.75 9.81565 16.75 9.80205 16.75 9.78837C16.7503 9.62647 16.7505 9.45474 16.7188 9.28904C16.638 8.86674 16.4045 8.48898 16.0629 8.22783C15.9289 8.12535 15.7752 8.04877 15.6303 7.97658C15.618 7.97048 15.6059 7.96441 15.5938 7.95836L14.2603 7.29164C14.0575 7.19022 13.8796 7.10128 13.731 7.03647C13.5801 6.97071 13.4012 6.90297 13.2028 6.87982C12.3963 6.78575 11.6311 7.25868 11.3546 8.02203C11.2866 8.20986 11.2672 8.40019 11.2585 8.56454C11.2519 8.68919 11.2504 8.83571 11.2501 9L11.25 9.11944C11.25 9.13026 11.25 9.14115 11.25 9.1521V9.17082C11.25 9.18435 11.25 9.19795 11.25 9.21163C11.2499 9.23918 11.2499 9.26701 11.25 9.29505V12.5499C10.875 12.3581 10.4501 12.25 10 12.25C8.48122 12.25 7.25 13.4812 7.25 15C7.25 16.5188 8.48122 17.75 10 17.75C11.5188 17.75 12.75 16.5188 12.75 15V11.2135ZM11.25 15C11.25 14.3096 10.6904 13.75 10 13.75C9.30964 13.75 8.75 14.3096 8.75 15C8.75 15.6904 9.30964 16.25 10 16.25C10.6904 16.25 11.25 15.6904 11.25 15ZM17.4697 14.4697C17.7626 14.1768 18.2374 14.1768 18.5303 14.4697L21.0303 16.9697C21.3232 17.2626 21.3232 17.7374 21.0303 18.0303C20.7374 18.3232 20.2626 18.3232 19.9697 18.0303L18.75 16.8107V22C18.75 22.4142 18.4142 22.75 18 22.75C17.5858 22.75 17.25 22.4142 17.25 22V16.8107L16.0303 18.0303C15.7374 18.3232 15.2626 18.3232 14.9697 18.0303C14.6768 17.7374 14.6768 17.2626 14.9697 16.9697L17.4697 14.4697Z\" />\r\n </svg>\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n private renderRecordButton() {\r\n if (!this.parsedInputTypes.includes('voice'))\r\n return;\r\n\r\n const buttonClass = [\r\n 'record-button',\r\n this.isRecording && 'recording',\r\n this.isProcessing && 'processing'\r\n ].filter(Boolean).join(' ');\r\n\r\n const isDisabled = this.isProcessing || this.hasError;\r\n \r\n const voiceStyle = this.parsedTheme.buttons?.voice || {};\r\n const size = voiceStyle.size || '50px';\r\n const buttonStyle = {\r\n background: voiceStyle.backgroundColor || '#ee4444',\r\n width: size,\r\n height: size\r\n };\r\n\r\n return (\r\n <button \r\n class={buttonClass}\r\n style={buttonStyle}\r\n onClick={() => this.handleRecordClick()}\r\n disabled={isDisabled}\r\n aria-label={this.isRecording ? 'Stop recording' : 'Start recording'}\r\n >\r\n {this.isProcessing ? (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <circle cx=\"12\" cy=\"12\" r=\"3\">\r\n <animate attributeName=\"r\" values=\"3;6;3\" dur=\"1s\" repeatCount=\"indefinite\" />\r\n <animate attributeName=\"opacity\" values=\"1;0.3;1\" dur=\"1s\" repeatCount=\"indefinite\" />\r\n </circle>\r\n </svg>\r\n ) : this.isRecording ? (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\r\n </svg>\r\n ) : (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\r\n </svg>\r\n )}\r\n </button>\r\n );\r\n }\r\n\r\n private renderLoadingSkeleton() {\r\n const types = this.parsedInputTypes.length > 0 ? this.parsedInputTypes : ['voice'];\r\n const containerStyle = this.getContainerStyle();\r\n const buttons = (this.parsedTheme?.buttons || {}) as any;\r\n const getSize = (type: string) => buttons[type]?.size || buttons.voice?.size || '50px';\r\n\r\n return (\r\n <div>\r\n <div\r\n class={\"voice-recorder-container\" + (this.debug || this.renderForm ? \"-debug\" : \"\")}\r\n style={containerStyle}\r\n >\r\n <div class=\"row-audio-area\">\r\n {types.map(type => {\r\n const size = getSize(type);\r\n return <div class=\"skeleton-circle\" style={{ width: size, height: size }} />;\r\n })}\r\n </div>\r\n {this.displayStatus && <div class=\"skeleton-status\" />}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderStatusMessage() {\r\n const hasAnyError = this.hasError || this.hasTransientError;\r\n const statusClass = [\r\n 'status-text',\r\n hasAnyError && 'error',\r\n this.filledData && !hasAnyError && 'success'\r\n ].filter(Boolean).join(' ');\r\n const statusStyle = this.getStatusStyle();\r\n\r\n return <div class={statusClass} style={statusStyle}>{this.statusMessage}</div>;\r\n }\r\n\r\n private renderFormPreview() {\r\n if (!this.parsedSchema) return null;\r\n\r\n const isPreview = this.isReadonlyMode && !this.filledData;\r\n const title = isPreview ? 'Form Preview (Voice input to fill)' : 'Voice-Filled Form:';\r\n \r\n return (\r\n <div class=\"form-preview\">\r\n <div class=\"form-preview-title\">{title}</div>\r\n <form class=\"voice-filled-form\">\r\n {this.renderFormFields()}\r\n </form>\r\n </div>\r\n );\r\n }\r\n\r\n private renderFormFields() {\r\n if (!this.parsedSchema) return null;\r\n \r\n const largeFieldTypes = ['select', 'multiselect', 'classification', 'thesaurus', 'position'];\r\n \r\n switch(this.context){\r\n case \"ecoteka\":\r\n case \"ng\":\r\n return this.parsedSchema.Children.map((child: any) => {\r\n if (!child.System_Name || !child.Type) return null;\r\n \r\n const fieldName = child.System_Name;\r\n const fieldType = this.mapFieldType(child.Type);\r\n const fieldLabel = child.Settings?.Label || child.System_Name;\r\n const isRequired = child.Required || false;\r\n const fieldValue = child.Settings?.Default_Value;\r\n const isLargeField = largeFieldTypes.includes(fieldType) || (child.Children && child.Children.length > 5);\r\n \r\n return (\r\n <div class={isLargeField ? \"form-group full-width\" : \"form-group\"} key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n {fieldLabel}\r\n {isRequired && <span class=\"required\">*</span>}\r\n {this.renderConfidenceIndicator(this.getFieldConfidence(fieldLabel, fieldName))}\r\n </label>\r\n {this.renderFormField(fieldName, {\r\n type: fieldType,\r\n title: fieldLabel,\r\n required: isRequired,\r\n options: child.Children?.map((option: any) => \r\n option.System_Name || option.Label || option.toString()\r\n )\r\n }, fieldValue)}\r\n </div>\r\n );\r\n }).filter(Boolean);\r\n case \"ecoll-veto\":\r\n const mergedItemsSchema = (this.parsedSchema[0].items).concat(this.parsedSchema[1].items);\r\n return Object.entries(mergedItemsSchema).map(([key, field]: [string, any]) => {\r\n \r\n const fieldName = field.name;\r\n field.type = this.mapFieldType(field.type);\r\n const fieldLabel = field.label || fieldName;\r\n const isRequired = field.required || false;\r\n const fieldValue = this.parsedSchema[2][fieldName];\r\n\r\n // if (['position', 'thesaurus'].includes(field.type)) {\r\n // try {\r\n // const response = await fetch(`${this.classificationRootUrl}/ng/api/v1/classification/getList/${fieldType.toLowerCase() == 'position' ? \"Position\" : \"Thesaurus\"}/?StartNodeID=${field.config.options.options.startNode}`);\r\n // if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n // const data = await response.json();\r\n // if (Array.isArray(data)) {\r\n // const options = data.map(item => ({\r\n // value: item.ID,\r\n // label: item.System_Name\r\n // }));\r\n // if (options.length > 0) {\r\n // field.pickerOptions = options;\r\n // // TODO on degage les quotes simples temporairement, a corriger\r\n // field.options = options.map(option => option.label.replace(\"'\", \"\"));\r\n // }\r\n // } else {\r\n // console.error(\"Unexpected API response format:\", data);\r\n // }\r\n // } catch (error) {\r\n // console.error(\"Error fetching classification data:\", error);\r\n // }\r\n // }\r\n\r\n return (\r\n <div class=\"form-group\" key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n { fieldLabel }\r\n {isRequired && <span class=\"required\">*</span>}\r\n {this.renderConfidenceIndicator(this.getFieldConfidence(fieldLabel, fieldName))}\r\n </label>\r\n {this.renderFormField(fieldName, field, (this.filledData?.[fieldName] ?? fieldValue))}\r\n </div>\r\n );\r\n });\r\n case \"track\":\r\n default:\r\n return Object.entries(this.parsedSchema.fields).map(([fieldName, field]: [string, any]) => {\r\n if (field.type === 'header') {\r\n return (\r\n <div class=\"form-header\" key={fieldName}>\r\n {field.title || fieldName}\r\n </div>\r\n );\r\n }\r\n \r\n return (\r\n <div class=\"form-group\" key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n {field.title || fieldName}\r\n {field.required && <span class=\"required\">*</span>}\r\n {this.renderConfidenceIndicator(this.getFieldConfidence(fieldName))}\r\n </label>\r\n {this.renderFormField(fieldName, field, (this.filledData?.[fieldName] ?? field.value))}\r\n </div>\r\n );\r\n });\r\n }\r\n }\r\n\r\n private renderFormField(fieldName: string, field: any, value: any) {\r\n const isReadonly = this.isReadonlyMode && !this.filledData;\r\n const commonProps = {\r\n id: fieldName,\r\n name: fieldName,\r\n class: 'form-input',\r\n required: field.required,\r\n disabled: isReadonly\r\n };\r\n\r\n switch (field.type) {\r\n case 'multiselect':\r\n if (isReadonly) {\r\n return (\r\n <div class=\"readonly-select\">\r\n <div class=\"select-placeholder\">Available options:</div>\r\n <ul class=\"select-options-list\">\r\n {field.options?.map(option => (\r\n <li class=\"select-option\">{option}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n const selectedValues = Array.isArray(value) ? value : (value ? [value] : []);\r\n return (\r\n <div class=\"multiselect-container\">\r\n {field.options?.map(option => {\r\n const isChecked = selectedValues.some(v => \r\n v?.toString().toLowerCase() === option?.toString().toLowerCase()\r\n );\r\n return (\r\n <label class=\"multiselect-option\">\r\n <input \r\n type=\"checkbox\" \r\n name={fieldName}\r\n value={option}\r\n checked={isChecked}\r\n disabled={isReadonly}\r\n />\r\n <span class=\"multiselect-label\">{option}</span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n );\r\n \r\n case 'select':\r\n if (isReadonly) {\r\n // In readonly mode, show all options as a list instead of dropdown\r\n return (\r\n <div class=\"readonly-select\">\r\n <div class=\"select-placeholder\">Available options:</div>\r\n <ul class=\"select-options-list\">\r\n {field.options?.map(option => (\r\n <li class=\"select-option\">{option}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n return (\r\n <select id={fieldName} name={fieldName} class=\"form-input\" required={field.required}>\r\n <option value=\"\">-- Select --</option>\r\n {field.options?.map(option => (\r\n <option value={option} selected={value === option}>\r\n {option}\r\n </option>\r\n ))}\r\n </select>\r\n );\r\n \r\n case 'boolean':\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"checkbox\" \r\n class=\"form-checkbox\"\r\n checked={value === true || value === 'true'}\r\n />\r\n );\r\n \r\n case 'number':\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"number\" \r\n min={field.min}\r\n max={field.max}\r\n step=\"any\"\r\n value={value || ''}\r\n />\r\n );\r\n \r\n case 'date':\r\n return (\r\n <input \r\n {...commonProps}\r\n type='date'\r\n value={value ? (([d, m, y]) => `${y}-${m}-${d}`)(value.split(\"/\")) : ''}\r\n />\r\n );\r\n\r\n case 'datetime':\r\n return (\r\n <input \r\n {...commonProps}\r\n type='datetime-local'\r\n value={value || ''}\r\n />\r\n );\r\n \r\n default: // string\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"text\" \r\n pattern={field.pattern}\r\n placeholder={field.description}\r\n value={value || ''}\r\n />\r\n );\r\n }\r\n }\r\n\r\n private renderDebugPanel() {\r\n if (!this.debug) return null;\r\n\r\n return (\r\n <div class=\"debug-panel\">\r\n <div class=\"debug-title\">Debug Information:</div>\r\n <div class=\"debug-content\">\r\n {JSON.stringify(this.debugInfo, null, 2)}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private getDefaultTheme() {\r\n return {\r\n texts: {\r\n idle: this.language === 'en' ? 'Select an input method' : 'Sélectionner une méthode de saisie',\r\n recording: this.language === 'en' ? 'Recording... Click to stop' : 'Enregistrement ... Cliquer pour stopper',\r\n processing: this.language === 'en' ? 'Processing...' : 'Traitement en cours...',\r\n transcribing: this.language === 'en' ? 'Transcribing speech...' : 'Transcription du texte...',\r\n filling: this.language === 'en' ? 'Filling form fields...' : 'Remplissage du formulaire...',\r\n completed: this.language === 'en' ? 'Form completed!' : 'Formulaire rempli !'\r\n },\r\n container: {\r\n width: 'auto',\r\n height: 'auto',\r\n backgroundColor: '#ffffff',\r\n borderColor: '#e2e8f0',\r\n borderRadius: '8px',\r\n padding: '20px',\r\n gap: '8px'\r\n },\r\n buttons: {\r\n voice: { backgroundColor: '#ee4444', textColor: '#ffffff', hoverColor: '#dd3333', size: '50px' },\r\n audio: { backgroundColor: '#3b82f6', textColor: '#ffffff', hoverColor: '#2563eb', size: '50px' },\r\n ocr: { backgroundColor: '#10b981', textColor: '#ffffff', hoverColor: '#059669', size: '50px' }\r\n },\r\n statusText: { color: '#1e293b', fontSize: '14px' }\r\n };\r\n }\r\n\r\n private getContainerStyle() {\r\n const c = this.parsedTheme?.container || {};\r\n return {\r\n width: c.width || 'auto',\r\n height: c.height || 'auto',\r\n backgroundColor: c.backgroundColor || '#ffffff',\r\n border: `1px solid ${c.borderColor || '#e2e8f0'}`,\r\n borderRadius: c.borderRadius || '8px',\r\n padding: c.padding || '20px',\r\n gap: c.gap || '8px'\r\n };\r\n }\r\n\r\n private getStatusStyle() {\r\n const s = this.parsedTheme?.statusText || {};\r\n return {\r\n color: s.color || '#1e293b',\r\n fontSize: s.fontSize || '14px'\r\n };\r\n }\r\n\r\n render() {\r\n if (this.isInitializing) {\r\n return this.renderLoadingSkeleton();\r\n }\r\n\r\n const containerStyle = this.getContainerStyle();\r\n \r\n return (\r\n <div>\r\n <div \r\n class={\"voice-recorder-container\" + (this.debug || this.renderForm ? \"-debug\" : \"\")}\r\n style={containerStyle}\r\n >\r\n <div class=\"row-audio-area\">\r\n {this.renderRecordButton()}\r\n {this.renderUploadRecordButton()}\r\n {this.renderUploadButton()}\r\n </div>\r\n {this.displayStatus ? this.renderStatusMessage() : \"\"}\r\n {this.renderForm ? this.renderFormPreview() : \"\"}\r\n {this.debug ? this.renderDebugPanel() : \"\"}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"voice-input-module.js","sourceRoot":"","sources":["../../../src/components/voice-input-module/voice-input-module.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, Event, EventEmitter, State, h, Watch, Method } from '@stencil/core';\r\nimport { FormSchema, VoiceFormRecorderResult, FilledFormData, FormSchemaFieldsOnly, FormSchemaFieldsOnlyExtended } from '../../types/form-schema.types';\r\nimport { ServiceProviderConfig, TranscriptionProvider, CompletionProvider, TRANSCRIPTION_MODELS, COMPLETION_MODELS } from '../../types/service-providers.types';\r\nimport { AudioRecorderService } from '../../services/audio-recorder.service';\r\nimport { SpeechToTextServiceFactory } from '../../services/speech-to-text.service';\r\nimport { LLMServiceFactory } from '../../services/llm.service';\r\nimport { SchemaConverter } from '../../utils/schema-converter';\r\nimport { defineCustomElements } from 'ocr-file-uploader/loader';\r\n\r\n// Initialize OCR\r\ndefineCustomElements();\r\n\r\n@Component({\r\n tag: 'voice-input-module',\r\n styleUrl: 'voice-input-module.css',\r\n shadow: true,\r\n})\r\nexport class VoiceFormRecorder {\r\n @Prop() formJson: string = '{}';\r\n @Prop() serviceConfig: string = '{}';\r\n @Prop() apiKey: string;\r\n @Prop() apiProxyUrl: string = 'http://localhost:8492';\r\n @Prop() transcriptionModel: string = 'gpt-4o-transcribe';\r\n @Prop() completionModel: string = 'gpt-5-mini';\r\n @Prop() transcriptionProvider: TranscriptionProvider = 'openai';\r\n @Prop() completionProvider: CompletionProvider = 'openai';\r\n @Prop() context: 'track'|'ng'|'ecoll-veto'|'ecoteka' = undefined;\r\n @Prop() classificationRootUrl: string = 'http://localhost';\r\n @Prop() language: 'fr'|'en' = 'en';\r\n @Prop() inputTypes: string = '';\r\n @Prop() theme: string = '';\r\n \r\n private get parsedInputTypes(): ('voice' | 'ocr' | 'audio')[] {\r\n if (!this.inputTypes) return [];\r\n try {\r\n return JSON.parse(this.inputTypes.replace(/'/g, '\"'));\r\n } catch {\r\n return this.inputTypes.split(',').map(type => type.trim() as 'voice' | 'ocr' | 'audio');\r\n }\r\n }\r\n \r\n @Prop() debug: boolean = false;\r\n @Prop() renderForm: boolean = false;\r\n @Prop() displayStatus: boolean = false;\r\n \r\n @Event() formFilled: EventEmitter<VoiceFormRecorderResult>;\r\n @Event() recordingStateChanged: EventEmitter<{ isRecording: boolean; state: string }>;\r\n\r\n @State() isRecording: boolean = false;\r\n @State() isProcessing: boolean = false;\r\n @State() statusMessage: string;\r\n @State() hasError: boolean = false;\r\n @State() hasTransientError: boolean = false;\r\n @State() transcription: string = '';\r\n @State() filledData: FilledFormData | null = null;\r\n @State() confidenceScores: Record<string, number> | null = null;\r\n @State() debugInfo: any = {};\r\n @State() isReadonlyMode: boolean = true; // Start in readonly preview mode\r\n @State() isInitializing: boolean = true;\r\n\r\n private audioRecorder: AudioRecorderService;\r\n private speechToTextService: any;\r\n private llmService: any;\r\n private parsedSchema: any; // Support both simple FormSchema and complex nested schema\r\n private parsedConfig: ServiceProviderConfig;\r\n private parsedTheme: any;\r\n\r\n constructor() {\r\n this.audioRecorder = new AudioRecorderService();\r\n }\r\n\r\n componentWillLoad() {\r\n // Parse theme only so the skeleton can be styled correctly on first render.\r\n // Full initialization runs in componentDidLoad() to give the skeleton time to paint.\r\n try {\r\n this.parsedTheme = this.theme ? JSON.parse(this.theme) : this.getDefaultTheme();\r\n } catch {\r\n this.parsedTheme = this.getDefaultTheme();\r\n }\r\n }\r\n\r\n componentDidLoad() {\r\n this.initializeServices();\r\n this.isInitializing = false;\r\n }\r\n\r\n @Watch('formJson')\r\n @Watch('serviceConfig')\r\n @Watch('theme')\r\n @Watch('transcriptionProvider')\r\n @Watch('completionProvider')\r\n @Watch('transcriptionModel')\r\n @Watch('completionModel')\r\n initializeServices() {\r\n // Parse theme\r\n try {\r\n this.parsedTheme = this.theme ? JSON.parse(this.theme) : this.getDefaultTheme();\r\n } catch {\r\n this.parsedTheme = this.getDefaultTheme();\r\n }\r\n try {\r\n if (!this.context){\r\n this.hasError = true;\r\n const errorMessage = (this.language == 'en' ? `Initialization error: context is '${this.context}'` : `Erreur d'initialisation: le contexte est '${this.context}'`);\r\n this.statusMessage = errorMessage;\r\n this.updateDebugInfo(errorMessage, { error: errorMessage });\r\n }\r\n else{\r\n // Validate transcription provider/model\r\n const allowedTranscriptionModels = TRANSCRIPTION_MODELS[this.transcriptionProvider];\r\n if (!allowedTranscriptionModels) {\r\n throw new Error(`Unsupported transcription provider: '${this.transcriptionProvider}'. Allowed: openai, mistral`);\r\n }\r\n if (!allowedTranscriptionModels.includes(this.transcriptionModel)) {\r\n throw new Error(`Model '${this.transcriptionModel}' is not allowed for transcription provider '${this.transcriptionProvider}'. Allowed: ${allowedTranscriptionModels.join(', ')}`);\r\n }\r\n\r\n // Validate completion provider/model\r\n const allowedCompletionModels = COMPLETION_MODELS[this.completionProvider];\r\n if (!allowedCompletionModels) {\r\n throw new Error(`Unsupported completion provider: '${this.completionProvider}'. Allowed: openai, anthropic, mistral`);\r\n }\r\n if (!allowedCompletionModels.includes(this.completionModel)) {\r\n throw new Error(`Model '${this.completionModel}' is not allowed for completion provider '${this.completionProvider}'. Allowed: ${allowedCompletionModels.join(', ')}`);\r\n }\r\n\r\n // Parse form schema\r\n this.parsedSchema = JSON.parse(this.formJson || '{}');\r\n \r\n // Parse service configuration\r\n this.parsedConfig = JSON.parse(this.serviceConfig || '{}');\r\n \r\n // Add API key to config if provided via prop\r\n if (this.apiKey) {\r\n this.parsedConfig = {\r\n ...this.parsedConfig,\r\n speechToText: { ...this.parsedConfig.speechToText, provider: this.transcriptionProvider, apiKey: this.apiKey, model: this.transcriptionModel },\r\n llm: { ...this.parsedConfig.llm, provider: this.completionProvider, apiKey: this.apiKey, model: this.completionModel }\r\n };\r\n } else {\r\n // Use proxy API if no API key provided\r\n this.parsedConfig = {\r\n ...this.parsedConfig,\r\n speechToText: { ...this.parsedConfig.speechToText, provider: this.transcriptionProvider, useProxy: true, proxyUrl: this.apiProxyUrl, model: this.transcriptionModel },\r\n llm: { ...this.parsedConfig.llm, provider: this.completionProvider, useProxy: true, proxyUrl: this.apiProxyUrl, model: this.completionModel }\r\n };\r\n }\r\n \r\n // Initialize services\r\n this.speechToTextService = SpeechToTextServiceFactory.create(this.parsedConfig);\r\n this.llmService = LLMServiceFactory.create(this.parsedConfig);\r\n \r\n this.updateDebugInfo('Initialized', {\r\n schema: this.parsedSchema,\r\n config: this.parsedConfig\r\n });\r\n \r\n this.hasError = false;\r\n this.hasTransientError = false;\r\n this.statusMessage = this.parsedTheme.texts?.idle || (this.language == 'en' ? 'Select an input method' : 'Sélectionner une méthode de saisie');\r\n if (this.parsedInputTypes.length === 0){\r\n this.inputTypes = 'voice';\r\n }\r\n }\r\n } catch (error) {\r\n this.hasError = true;\r\n this.statusMessage = (this.language == 'en' ? `Initialization error: ${error.message}` : `Erreur d'initialisation: ${error.message}`);\r\n this.updateDebugInfo('Initialization Error', { error: error.message });\r\n }\r\n }\r\n\r\n private updateDebugInfo(action: string, data: any) {\r\n if (this.debug) {\r\n this.debugInfo = {\r\n ...this.debugInfo,\r\n [action]: {\r\n timestamp: new Date().toISOString(),\r\n data\r\n }\r\n };\r\n }\r\n }\r\n\r\n private getMicErrorMessage(error: Error): string {\r\n const isEn = this.language === 'en';\r\n const errorName = (error as any).name || '';\r\n if (errorName === 'NotAllowedError' || errorName === 'PermissionDeniedError') {\r\n return isEn\r\n ? 'Microphone access denied. Allow microphone access in your browser settings and try again.'\r\n : \"Accès au microphone refusé. Autorisez l'accès au microphone dans les paramètres du navigateur et réessayez.\";\r\n }\r\n if (errorName === 'NotFoundError' || errorName === 'DevicesNotFoundError') {\r\n return isEn\r\n ? 'No microphone found. Please connect a microphone and try again.'\r\n : 'Aucun microphone trouvé. Connectez un microphone et réessayez.';\r\n }\r\n if (errorName === 'NotReadableError' || errorName === 'TrackStartError') {\r\n return isEn\r\n ? 'Microphone is busy or unavailable. Close other apps using the microphone and try again.'\r\n : 'Le microphone est occupé ou indisponible. Fermez les autres applications utilisant le microphone et réessayez.';\r\n }\r\n if (errorName === 'AbortError') {\r\n return isEn\r\n ? 'Microphone access was interrupted. Please try again.'\r\n : \"L'accès au microphone a été interrompu. Veuillez réessayer.\";\r\n }\r\n if (errorName === 'OverconstrainedError') {\r\n return isEn\r\n ? 'Microphone does not support the required audio settings.'\r\n : 'Le microphone ne supporte pas les paramètres audio requis.';\r\n }\r\n if (error.message?.includes('HTTPS') || error.message?.includes('not supported')) {\r\n return isEn\r\n ? 'Microphone access requires HTTPS or localhost.'\r\n : \"L'accès au microphone nécessite HTTPS ou localhost.\";\r\n }\r\n return isEn ? `Microphone error: ${error.message}` : `Erreur microphone : ${error.message}`;\r\n }\r\n\r\n private getReadableErrorMessage(error: Error, phase: string): string {\r\n const isEn = this.language === 'en';\r\n const msg = error.message || '';\r\n if (/401|unauthorized|invalid.{0,20}(api )?key|authentication failed/i.test(msg)) {\r\n return isEn\r\n ? 'Authentication failed: invalid API key. Check your configuration.'\r\n : \"Échec d'authentification : clé API invalide. Vérifiez votre configuration.\";\r\n }\r\n if (/403|forbidden/i.test(msg)) {\r\n return isEn\r\n ? 'Access denied: check your API permissions.'\r\n : 'Accès refusé : vérifiez vos permissions API.';\r\n }\r\n if (/429|rate.{0,10}limit|too many requests/i.test(msg)) {\r\n return isEn\r\n ? 'Rate limit exceeded. Please wait a moment and try again.'\r\n : 'Limite de requêtes dépassée. Veuillez attendre quelques secondes et réessayer.';\r\n }\r\n if (/404|not found/i.test(msg)) {\r\n return isEn\r\n ? 'API endpoint not found. Check your proxy URL configuration.'\r\n : \"Endpoint API introuvable. Vérifiez l'URL de votre proxy.\";\r\n }\r\n if (/5\\d\\d|server error|internal server|bad gateway|service unavailable/i.test(msg)) {\r\n return isEn\r\n ? 'Server error. Please try again in a moment.'\r\n : 'Erreur serveur. Veuillez réessayer dans un instant.';\r\n }\r\n if (/network|failed to fetch|err_connection|connection refused/i.test(msg)) {\r\n return isEn\r\n ? 'Network error: check your connection and proxy server.'\r\n : 'Erreur réseau : vérifiez votre connexion et le serveur proxy.';\r\n }\r\n if (/json|parse error|unexpected token|invalid response/i.test(msg)) {\r\n return isEn\r\n ? 'Unexpected response from AI service. Please try again.'\r\n : 'Réponse inattendue du service IA. Veuillez réessayer.';\r\n }\r\n if (phase === 'transcription') {\r\n return isEn ? `Transcription failed: ${msg}` : `Échec de la transcription : ${msg}`;\r\n }\r\n if (phase === 'llm') {\r\n return isEn ? `Form filling failed: ${msg}` : `Échec du remplissage du formulaire : ${msg}`;\r\n }\r\n if (phase === 'ocr') {\r\n return isEn ? `OCR processing failed: ${msg}` : `Échec du traitement OCR : ${msg}`;\r\n }\r\n return isEn ? `Processing error: ${msg}` : `Erreur de traitement : ${msg}`;\r\n }\r\n\r\n private async handleRecordClick() {\r\n if (this.isProcessing) return;\r\n\r\n if (this.isRecording) {\r\n await this.stopRecordingAndProcess();\r\n } else {\r\n await this.startRecording();\r\n }\r\n }\r\n\r\n private async startRecording() {\r\n try {\r\n this.hasTransientError = false;\r\n this.statusMessage = (this.language == 'en' ? 'Starting recording...' : `Enregistrement ...`);\r\n this.updateDebugInfo('Start Recording Attempt', {});\r\n\r\n await this.audioRecorder.startRecording();\r\n \r\n this.isRecording = true;\r\n this.statusMessage = this.parsedTheme.texts?.recording || (this.language == 'en' ? 'Recording... Click to stop' : 'Enregistrement ... Cliquer pour stopper');\r\n this.updateDebugInfo('Recording Started', {});\r\n \r\n this.recordingStateChanged.emit({ \r\n isRecording: true, \r\n state: 'recording' \r\n });\r\n } catch (error) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getMicErrorMessage(error);\r\n this.updateDebugInfo('Recording Error', { error: error.message });\r\n \r\n this.formFilled.emit({\r\n success: false,\r\n error: error.message\r\n });\r\n }\r\n }\r\n\r\n private async processJsonForm(ocrData: any) {\r\n if (this.isProcessing || this.isRecording) return;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.confidenceScores = null;\r\n this.statusMessage = this.parsedTheme.texts?.processing || (this.language == 'en' ? 'Processing document...' : 'Traitement du document ...');\r\n\r\n try {\r\n const extractedData = ocrData?.content || ocrData;\r\n const jsonForm = JSON.stringify(extractedData);\r\n\r\n if (!extractedData) {\r\n throw Object.assign(new Error('OCR returned no data'), { phase: 'ocr' });\r\n }\r\n\r\n this.statusMessage = this.parsedTheme.texts?.filling || (this.language == 'en' ? 'Filling form fields...' : 'Remplissage du formulaire ...');\r\n const trimmedSchema = await this.trimSchemaForAI(this.parsedSchema);\r\n let filledSchema: any;\r\n try {\r\n filledSchema = await this.llmService.fillFormFromJson(jsonForm, trimmedSchema);\r\n } catch (llmError) {\r\n throw Object.assign(new Error(llmError.message), { phase: 'llm' });\r\n }\r\n\r\n this.filledData = this.extractFilledData(filledSchema);\r\n this.confidenceScores = this.extractConfidenceScores(filledSchema);\r\n this.updateDebugInfo('Form Filled', { filledSchema, extractedData: this.filledData, confidence: this.confidenceScores });\r\n this.parsedSchema = this.filledData;\r\n\r\n this.statusMessage = this.parsedTheme.texts?.completed || (this.language == 'en' ? 'Form completed!' : 'Formulaire rempli !');\r\n this.formFilled.emit({ success: true, data: this.filledData, jsonForm, confidence: this.confidenceScores });\r\n\r\n } catch (error) {\r\n console.error('OCR processing error:', error);\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getReadableErrorMessage(error, (error as any).phase || 'llm');\r\n this.updateDebugInfo('OCR Processing Error', { phase: (error as any).phase, error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, jsonForm: JSON.stringify(ocrData) });\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n private async processAudioContent(audioFile: File) {\r\n if (this.isProcessing || this.isRecording) return;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.confidenceScores = null;\r\n this.updateDebugInfo('Audio Captured', { size: audioFile.size, type: audioFile.type });\r\n\r\n try {\r\n // Validate audio file before sending to API\r\n const MAX_AUDIO_SIZE = 25 * 1024 * 1024; // 25MB (API limit)\r\n if (audioFile.size <= 44) { // WAV header alone is 44 bytes; effectively empty\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? 'Recording is empty or too short. Please try again.'\r\n : \"L'enregistrement est vide ou trop court. Veuillez réessayer.\";\r\n this.formFilled.emit({ success: false, error: 'Empty or too short audio' });\r\n return;\r\n }\r\n if (audioFile.size > MAX_AUDIO_SIZE) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? `File too large (${Math.round(audioFile.size / 1024 / 1024)}MB). Maximum is 25MB.`\r\n : `Fichier trop volumineux (${Math.round(audioFile.size / 1024 / 1024)}Mo). Maximum : 25Mo.`;\r\n this.formFilled.emit({ success: false, error: 'Audio file too large' });\r\n return;\r\n }\r\n\r\n let transcription: string;\r\n try {\r\n this.statusMessage = this.parsedTheme.texts?.transcribing || (this.language == 'en' ? 'Transcribing speech...' : 'Transcription du texte ...');\r\n transcription = await this.speechToTextService.transcribe(audioFile, this.language);\r\n this.transcription = transcription;\r\n this.updateDebugInfo('Transcription Complete', { transcription });\r\n } catch (transcriptionError) {\r\n throw Object.assign(new Error(transcriptionError.message), { phase: 'transcription' });\r\n }\r\n\r\n if (!transcription.trim()) {\r\n this.hasTransientError = true;\r\n this.statusMessage = this.language == 'en'\r\n ? 'No speech detected. Please speak clearly and try again.'\r\n : 'Aucune parole détectée. Parlez clairement et réessayez.';\r\n this.formFilled.emit({ success: false, error: 'No speech detected', transcription: '' });\r\n return;\r\n }\r\n\r\n let filledSchema: any;\r\n try {\r\n this.statusMessage = this.parsedTheme.texts?.filling || (this.language == 'en' ? 'Filling form fields...' : 'Remplissage du formulaire ...');\r\n const trimmedSchema = await this.trimSchemaForAI(this.parsedSchema);\r\n filledSchema = await this.llmService.fillFormFromTranscription(transcription, trimmedSchema);\r\n } catch (llmError) {\r\n throw Object.assign(new Error(llmError.message), { phase: 'llm' });\r\n }\r\n\r\n this.filledData = this.extractFilledData(filledSchema);\r\n this.confidenceScores = this.extractConfidenceScores(filledSchema);\r\n this.updateDebugInfo('Form Filled', { filledSchema, extractedData: this.filledData, confidence: this.confidenceScores });\r\n this.parsedSchema = this.filledData;\r\n\r\n this.statusMessage = this.parsedTheme.texts?.completed || (this.language == 'en' ? 'Form completed!' : 'Formulaire rempli !');\r\n this.formFilled.emit({ success: true, data: this.filledData, transcription, confidence: this.confidenceScores });\r\n\r\n } catch (error) {\r\n console.error('Audio processing error:', error);\r\n this.hasTransientError = true;\r\n this.statusMessage = this.getReadableErrorMessage(error, (error as any).phase || 'audio-upload');\r\n this.updateDebugInfo('Audio Processing Error', { phase: (error as any).phase, error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, transcription: this.transcription });\r\n } finally {\r\n this.isProcessing = false;\r\n }\r\n }\r\n\r\n private async stopRecordingAndProcess() {\r\n this.isRecording = false;\r\n this.isProcessing = true;\r\n this.hasTransientError = false;\r\n this.statusMessage = this.parsedTheme.texts?.processing || (this.language == 'en' ? 'Processing audio...' : `Traitement de l'audio ...`);\r\n this.updateDebugInfo('Stop Recording', {});\r\n\r\n this.recordingStateChanged.emit({ isRecording: false, state: 'processing' });\r\n\r\n try {\r\n const audioBlob = await this.audioRecorder.stopRecording();\r\n const audioContent = new File([audioBlob], 'audio.wav', { type: 'audio/wav' });\r\n // Reset isProcessing so the guard inside processAudioContent doesn't block this internal call\r\n this.isProcessing = false;\r\n await this.processAudioContent(audioContent);\r\n } catch (error) {\r\n // Only reached if audioRecorder.stopRecording() itself throws\r\n this.hasTransientError = true;\r\n this.isProcessing = false;\r\n this.statusMessage = (this.language == 'en'\r\n ? `Failed to stop recording: ${error.message}`\r\n : `Impossible d'arrêter l'enregistrement : ${error.message}`);\r\n this.updateDebugInfo('Stop Recording Error', { error: error.message });\r\n this.formFilled.emit({ success: false, error: error.message, transcription: this.transcription });\r\n } finally {\r\n this.recordingStateChanged.emit({ isRecording: false, state: 'idle' });\r\n }\r\n }\r\n\r\n private extractConfidenceScores(filledData: any): Record<string, number> {\r\n const scores: Record<string, number> = {};\r\n if (!filledData) return scores;\r\n\r\n // Fields array format: [{\"id\": \"...\", \"name\": \"...\", \"value\": \"...\", \"confidence\": 0.87}]\r\n if (filledData.fields && Array.isArray(filledData.fields)) {\r\n filledData.fields.forEach((field: any) => {\r\n const raw = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);\r\n if (!isNaN(raw)) {\r\n const clamped = Math.min(0.99, Math.max(0.01, Math.round(raw * 100) / 100));\r\n // Store under both id and name so label-based lookups always work\r\n if (field.id) scores[field.id] = clamped;\r\n if (field.name) scores[field.name] = clamped;\r\n }\r\n });\r\n }\r\n\r\n // Simple schema format: {\"schema\": {...}, \"confidence\": {\"field_name\": 0.87}}\r\n if (filledData.confidence && typeof filledData.confidence === 'object') {\r\n Object.entries(filledData.confidence).forEach(([k, v]) => {\r\n const raw = typeof v === 'number' ? v : parseFloat(v as string);\r\n if (!isNaN(raw)) {\r\n scores[k] = Math.min(0.99, Math.max(0.01, Math.round(raw * 100) / 100));\r\n }\r\n });\r\n }\r\n\r\n return scores;\r\n }\r\n\r\n private getFieldConfidence(primary: string, fallback?: string): number | null {\r\n if (!this.confidenceScores) return null;\r\n return this.confidenceScores[primary] ?? (fallback ? (this.confidenceScores[fallback] ?? null) : null);\r\n }\r\n\r\n private renderConfidenceIndicator(confidence: number | null) {\r\n if (confidence === null || confidence >= 0.95) return null;\r\n const pct = Math.round(confidence * 100);\r\n const isApproximate = confidence >= 0.85;\r\n return (\r\n <span\r\n class={`confidence-badge ${isApproximate ? 'confidence-medium' : 'confidence-low'}`}\r\n title={this.language === 'en' ? `Confidence: ${pct}%` : `Confiance : ${pct}%`}\r\n >\r\n {pct}%\r\n </span>\r\n );\r\n }\r\n\r\n private extractFilledData(filledData: any): any {\r\n const updatedSchema = JSON.parse(JSON.stringify(this.parsedSchema));\r\n switch(this.context){\r\n case \"ecoteka\":\r\n case \"ng\": \r\n if (filledData?.fields) {\r\n // Map AI response back to original schema structure\r\n filledData.fields.forEach((field: any) => {\r\n const originalField = updatedSchema.Children.find((child: any) => \r\n child.System_Name === field.name || child.Settings?.Label === field.name\r\n );\r\n \r\n if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {\r\n if (!originalField.Settings) originalField.Settings = {};\r\n originalField.Settings.Default_Value = field.value;\r\n const rawConf = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);\r\n originalField.confidence = isNaN(rawConf) ? null : rawConf;\r\n }\r\n });\r\n }\r\n \r\n break;\r\n case \"ecoll-veto\":\r\n if (filledData?.fields) {\r\n // Map AI response back to original schema structure\r\n filledData.fields.forEach((field: any) => {\r\n let originalField = updatedSchema[0].items.find((child: any) => \r\n child.label === field.name\r\n );\r\n if (!originalField)\r\n originalField = updatedSchema[1].items.find((child: any) =>\r\n child.label === field.name\r\n );\r\n \r\n if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {\r\n updatedSchema[2][originalField.name] = field.value;\r\n const rawConf = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);\r\n originalField.confidence = isNaN(rawConf) ? null : rawConf;\r\n }\r\n });\r\n }\r\n break;\r\n case \"track\":\r\n default:\r\n if (filledData?.fields) {\r\n Object.entries(filledData.fields).forEach(([fieldID, field]: [string, any]) => {\r\n if (field.value !== undefined && field.value !== null && field.value !== '') {\r\n const rawConf = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);\r\n const confidence = isNaN(rawConf) ? null : rawConf;\r\n if (field.id) {\r\n const schemaField = updatedSchema.fields[field.id];\r\n if (schemaField) {\r\n schemaField.value = field.value;\r\n schemaField.default = field.value;\r\n schemaField.confidence = confidence;\r\n }\r\n } else {\r\n const fieldName = field.name;\r\n for (const key in updatedSchema.fields) {\r\n const schemaField = updatedSchema.fields[key];\r\n if (schemaField.title === fieldName) {\r\n schemaField.value = field.value;\r\n schemaField.default = field.value;\r\n schemaField.confidence = confidence;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n return updatedSchema;\r\n }\r\n\r\n private async trimSchemaForAI(schema: any): Promise<any> {\r\n switch(this.context){\r\n case \"ecoteka\":\r\n case \"ng\":\r\n const trimmed = { fields: [] };\r\n schema.Children.forEach((child: any) => {\r\n if (!child.System_Name || !child.Type) return;\r\n \r\n const fieldData: any = {\r\n name: child.Label || child.Settings?.Label || child.System_Name,\r\n type: this.mapFieldType(child.Type),\r\n default: child.Settings?.Default_Value\r\n };\r\n \r\n // Add options for classification/select/multiselect fields\r\n const selectTypes = ['InputClassification', 'select', 'multiselect', 'InputMultiSelect']\r\n if (selectTypes.includes(child.Type) && child.Children && child.Children.length > 0) {\r\n fieldData.options = child.Children.map((option: any) => \r\n option.System_Name || option.Label || option.toString()\r\n );\r\n }\r\n \r\n trimmed.fields.push(fieldData);\r\n });\r\n \r\n return trimmed;\r\n case \"ecoll-veto\":\r\n const mergedItemsSchema = (this.parsedSchema[0].items).concat(this.parsedSchema[1].items);\r\n\r\n if (mergedItemsSchema) {\r\n const trimmedSchema: FormSchema = {\r\n title: 'Form Name',\r\n description: 'Form Description',\r\n schema: {}\r\n };\r\n\r\n Object.entries(mergedItemsSchema).forEach(async ([key, field]: [string, any]) => {\r\n const fieldName = field.name;\r\n const fieldType = this.mapFieldType(field.type) as any;\r\n const fieldLabel = field.label || fieldName;\r\n const isRequired = field.required || false;\r\n const fieldValue = ''; //TODO\r\n\r\n if (['position', 'thesaurus'].includes(fieldType)) {\r\n try {\r\n const response = await fetch(`${this.classificationRootUrl}/ng/api/v1/classification/getList/${fieldType.toLowerCase() == 'position' ? \"Position\" : \"Thesaurus\"}/?StartNodeID=${field.config.options.options.startNode}`);\r\n if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n const data = await response.json();\r\n if (Array.isArray(data)) {\r\n const options = data.map(item => ({\r\n value: item.ID,\r\n label: item.System_Name\r\n }));\r\n if (options.length > 0) {\r\n field.pickerOptions = options;\r\n // TODO on degage les quotes simples temporairement, a corriger\r\n field.options = options.map(option => option.label.replace(\"'\", \"\"));\r\n }\r\n } else {\r\n console.error(\"Unexpected API response format:\", data);\r\n }\r\n } catch (error) {\r\n console.error(\"Error fetching classification data:\", error);\r\n }\r\n }\r\n \r\n trimmedSchema.schema[fieldName] = {\r\n type: fieldType,\r\n title: fieldLabel,\r\n options: field.options,\r\n readonly: field.readonly === true,\r\n default: '',\r\n };\r\n });\r\n return trimmedSchema;\r\n }\r\n case \"track\":\r\n default:\r\n if (schema?.schema ?? schema?.fields) {\r\n const trimmedSchema: FormSchema = {\r\n title: schema.title,\r\n description: schema.description,\r\n schema: {}\r\n };\r\n\r\n const finalSchema = schema?.schema ?? schema?.fields;\r\n\r\n Object.entries(finalSchema).forEach(([fieldName, field]: [string, any]) => {\r\n trimmedSchema.schema[fieldName] = {\r\n id: fieldName,\r\n type: field.type,\r\n title: field.title,\r\n options: field.options,\r\n readonly: field.type === 'header' || field.Enabled === false,\r\n default: field.default || field.DefaultValue,\r\n pattern: field.Mask,\r\n min: field.ValidationMin,\r\n max: field.ValidationMax\r\n };\r\n });\r\n\r\n return trimmedSchema;\r\n }\r\n break;\r\n }\r\n \r\n return schema;\r\n }\r\n\r\n private mapFieldType(type: string): string {\r\n const typeMapping = {\r\n 'InputAutocomplete': 'string',\r\n 'InputInteger': 'number',\r\n 'InputTextArea': 'string',\r\n 'InputDateTimePicker': 'datetime',\r\n 'InputDecimal': 'number',\r\n 'InputClassification': 'classification',\r\n 'InputCheckbox': 'boolean',\r\n 'InputTextTranslation': 'string',\r\n 'InputMultiSelect': 'multiselect',\r\n 'thesaurus': 'thesaurus',\r\n 'position': 'position',\r\n 'text': 'string',\r\n 'textarea': 'string',\r\n 'number': 'number',\r\n 'date': 'date',\r\n 'datetime': 'datetime',\r\n 'select': 'select',\r\n 'multiselect': 'multiselect',\r\n 'checkbox': 'checkbox'\r\n };\r\n \r\n return typeMapping[type] || 'string';\r\n }\r\n\r\n // Utility methods exposed as public API\r\n @Method() public async convertXmlToJson(xmlForm: string): Promise<FormSchemaFieldsOnly> {\r\n return SchemaConverter.convertXmlToJson(xmlForm, this.classificationRootUrl, this.language);\r\n }\r\n\r\n @Method() public async convertJsonToXml(jsonForm: FormSchemaFieldsOnlyExtended): Promise<string> {\r\n return SchemaConverter.convertJsonToXml(jsonForm);\r\n }\r\n\r\n // Utility methods exposed as public API\r\n @Method() public async convertXmlToJsonLegacy(xmlForm: string): Promise<FormSchema> {\r\n return SchemaConverter.convertXmlToJsonLegacy(xmlForm);\r\n }\r\n\r\n @Method() public async convertJsonToXmlLegacy(jsonForm: FormSchema): Promise<string> {\r\n return SchemaConverter.convertJsonToXmlLegacy(jsonForm);\r\n }\r\n\r\n private renderUploadButton() {\r\n if (!this.parsedInputTypes.includes('ocr'))\r\n return;\r\n const ocrStyle = this.parsedTheme.buttons?.ocr || {};\r\n const size = ocrStyle.size || '50px';\r\n \r\n // Prepare OCR theme to pass to ocr-file-uploader component\r\n const ocrTheme = {\r\n button: {\r\n size: size,\r\n backgroundColor: ocrStyle.backgroundColor || '#10b981',\r\n hoverColor: ocrStyle.hoverColor || '#059669',\r\n textColor: ocrStyle.textColor || '#ffffff'\r\n }\r\n };\r\n \r\n const isDisabled = this.isProcessing || this.hasError || this.isRecording;\r\n \r\n return(\r\n <div style={{ width: size, height: size, flexShrink: '0', opacity: isDisabled ? '0.6' : '1', pointerEvents: isDisabled ? 'none' : 'auto' }}>\r\n <ocr-file-uploader\r\n batch={false}\r\n json-schema={this.convertSchemaToOcrFormat(this.parsedSchema)}\r\n callback={(data) => {this.processJsonForm(data);}}\r\n theme={JSON.stringify(ocrTheme)}\r\n style={{ width: '100%', height: '100%' }}\r\n >\r\n </ocr-file-uploader>\r\n </div>\r\n );\r\n }\r\n\r\n private convertSchemaToOcrFormat(schema: any): string {\r\n const ocrSchema = {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n meta: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {\r\n page: { type: \"integer\" },\r\n confiance_global: { type: \"number\" }\r\n },\r\n required: [\"page\", \"confiance_global\"]\r\n },\r\n content: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {},\r\n required: []\r\n }\r\n },\r\n required: [\"meta\", \"content\"]\r\n };\r\n\r\n if (schema?.Children) {\r\n schema.Children.forEach((child: any) => {\r\n if (child.System_Name && child.Type) {\r\n const fieldLabel = child.Settings?.Label || child.System_Name;\r\n const fieldType = this.mapOcrFieldType(child.Type);\r\n ocrSchema.properties.content.properties[fieldLabel] = {\r\n anyOf: [{ type: fieldType }, { type: \"null\" }]\r\n };\r\n }\r\n });\r\n }\r\n\r\n return JSON.stringify(ocrSchema);\r\n }\r\n\r\n private mapOcrFieldType(type: string): string {\r\n const typeMapping = {\r\n 'InputInteger': 'number',\r\n 'InputDecimal': 'number',\r\n 'InputDateTimePicker': 'string',\r\n 'InputCheckbox': 'boolean'\r\n };\r\n return typeMapping[type] || 'string';\r\n }\r\n\r\n private fileInputAudioRecord!: HTMLInputElement;\r\n\r\n private triggerAudioRecordUpload = () => {\r\n this.fileInputAudioRecord.click();\r\n };\r\n\r\n private handleAudioRecordChange = async (event: Event) => {\r\n const input = event.target as HTMLInputElement;\r\n if (!input.files || input.files.length === 0) return;\r\n if (this.isProcessing || this.isRecording) {\r\n input.value = '';\r\n return;\r\n }\r\n\r\n const file = input.files[0];\r\n const isEn = this.language === 'en';\r\n\r\n // Validate file type\r\n const validAudioTypes = /^audio\\//;\r\n const validAudioExtensions = /\\.(mp3|wav|webm|m4a|ogg|flac|aac|opus)$/i;\r\n if (!validAudioTypes.test(file.type) && !validAudioExtensions.test(file.name)) {\r\n this.hasTransientError = true;\r\n this.statusMessage = isEn\r\n ? `Invalid file type: \"${file.name}\". Please select an audio file.`\r\n : `Type de fichier invalide : \"${file.name}\". Veuillez sélectionner un fichier audio.`;\r\n input.value = '';\r\n return;\r\n }\r\n\r\n // Reset the input so the same file can be re-selected after an error\r\n input.value = '';\r\n await this.processAudioContent(file);\r\n };\r\n\r\n private renderUploadRecordButton() {\r\n if (!this.parsedInputTypes.includes('audio'))\r\n return;\r\n \r\n const audioStyle = this.parsedTheme.buttons?.audio || {};\r\n const size = audioStyle.size || '50px';\r\n const isDisabled = this.isProcessing || this.hasError || this.isRecording;\r\n const buttonStyle = {\r\n stroke: audioStyle.backgroundColor || '#3b82f6',\r\n fill: audioStyle.backgroundColor || '#3b82f6',\r\n width: size,\r\n height: size,\r\n opacity: isDisabled ? '0.6' : '1'\r\n };\r\n \r\n return (\r\n <div class=\"upload-record-container\" onClick={isDisabled ? null : this.triggerAudioRecordUpload} style={{ width: size, height: size, cursor: isDisabled ? 'not-allowed' : 'pointer' }}>\r\n <input\r\n type=\"file\"\r\n ref={el => (this.fileInputAudioRecord = el!)}\r\n onChange={this.handleAudioRecordChange}\r\n style={{ display: 'none' }}\r\n />\r\n <div class='upload-record-button'>\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" style={buttonStyle}>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M12 2.75C6.89137 2.75 2.75 6.89137 2.75 12C2.75 17.1086 6.89137 21.25 12 21.25C12.6345 21.25 13.2534 21.1862 13.8508 21.065C14.2567 20.9826 14.6526 21.2448 14.735 21.6508C14.8174 22.0567 14.5551 22.4526 14.1492 22.535C13.4541 22.6761 12.7353 22.75 12 22.75C6.06294 22.75 1.25 17.9371 1.25 12C1.25 6.06294 6.06294 1.25 12 1.25C17.9371 1.25 22.75 6.06294 22.75 12C22.75 12.7353 22.6761 13.4541 22.535 14.1492C22.4526 14.5551 22.0567 14.8174 21.6508 14.735C21.2448 14.6526 20.9826 14.2567 21.065 13.8508C21.1862 13.2534 21.25 12.6345 21.25 12C21.25 6.89137 17.1086 2.75 12 2.75ZM12.7676 8.52584C12.7661 8.53409 12.7604 8.56729 12.7564 8.64336C12.7502 8.76101 12.75 8.91982 12.75 9.17082C12.75 9.27795 12.7501 9.33904 12.7518 9.38529C12.7528 9.41425 12.7542 9.42649 12.7546 9.42955C12.7662 9.48945 12.7993 9.54303 12.8477 9.58021C12.8502 9.58194 12.8606 9.58864 12.886 9.60252C12.9266 9.62468 12.9812 9.65209 13.0771 9.7L14.3938 10.3584C14.6183 10.4706 14.7604 10.5414 14.8684 10.5885C14.9382 10.6189 14.9705 10.6287 14.9785 10.631C15.0885 10.6405 15.1917 10.5767 15.2324 10.4742C15.2339 10.4659 15.2396 10.4327 15.2436 10.3566C15.2498 10.239 15.25 10.0802 15.25 9.82918C15.25 9.72205 15.2499 9.66096 15.2482 9.61471C15.2472 9.58575 15.2458 9.57351 15.2454 9.57045C15.2338 9.51055 15.2007 9.45697 15.1523 9.41979C15.1498 9.41805 15.1394 9.41136 15.114 9.39748C15.0734 9.37533 15.0188 9.34791 14.9229 9.3L13.6062 8.64164C13.3817 8.52939 13.2396 8.45859 13.1316 8.41151C13.0617 8.38107 13.0295 8.37131 13.0215 8.36896C12.9115 8.35945 12.8083 8.42327 12.7676 8.52584ZM12.75 11.2135L13.7396 11.7083C13.9425 11.8098 14.1204 11.8987 14.269 11.9635C14.4199 12.0293 14.5988 12.097 14.7972 12.1202C15.6037 12.2142 16.3689 11.7413 16.6454 10.978C16.7134 10.7901 16.7328 10.5998 16.7415 10.4355C16.75 10.2735 16.75 10.0747 16.75 9.8479V9.82918C16.75 9.81565 16.75 9.80205 16.75 9.78837C16.7503 9.62647 16.7505 9.45474 16.7188 9.28904C16.638 8.86674 16.4045 8.48898 16.0629 8.22783C15.9289 8.12535 15.7752 8.04877 15.6303 7.97658C15.618 7.97048 15.6059 7.96441 15.5938 7.95836L14.2603 7.29164C14.0575 7.19022 13.8796 7.10128 13.731 7.03647C13.5801 6.97071 13.4012 6.90297 13.2028 6.87982C12.3963 6.78575 11.6311 7.25868 11.3546 8.02203C11.2866 8.20986 11.2672 8.40019 11.2585 8.56454C11.2519 8.68919 11.2504 8.83571 11.2501 9L11.25 9.11944C11.25 9.13026 11.25 9.14115 11.25 9.1521V9.17082C11.25 9.18435 11.25 9.19795 11.25 9.21163C11.2499 9.23918 11.2499 9.26701 11.25 9.29505V12.5499C10.875 12.3581 10.4501 12.25 10 12.25C8.48122 12.25 7.25 13.4812 7.25 15C7.25 16.5188 8.48122 17.75 10 17.75C11.5188 17.75 12.75 16.5188 12.75 15V11.2135ZM11.25 15C11.25 14.3096 10.6904 13.75 10 13.75C9.30964 13.75 8.75 14.3096 8.75 15C8.75 15.6904 9.30964 16.25 10 16.25C10.6904 16.25 11.25 15.6904 11.25 15ZM17.4697 14.4697C17.7626 14.1768 18.2374 14.1768 18.5303 14.4697L21.0303 16.9697C21.3232 17.2626 21.3232 17.7374 21.0303 18.0303C20.7374 18.3232 20.2626 18.3232 19.9697 18.0303L18.75 16.8107V22C18.75 22.4142 18.4142 22.75 18 22.75C17.5858 22.75 17.25 22.4142 17.25 22V16.8107L16.0303 18.0303C15.7374 18.3232 15.2626 18.3232 14.9697 18.0303C14.6768 17.7374 14.6768 17.2626 14.9697 16.9697L17.4697 14.4697Z\" />\r\n </svg>\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n private renderRecordButton() {\r\n if (!this.parsedInputTypes.includes('voice'))\r\n return;\r\n\r\n const buttonClass = [\r\n 'record-button',\r\n this.isRecording && 'recording',\r\n this.isProcessing && 'processing'\r\n ].filter(Boolean).join(' ');\r\n\r\n const isDisabled = this.isProcessing || this.hasError;\r\n \r\n const voiceStyle = this.parsedTheme.buttons?.voice || {};\r\n const size = voiceStyle.size || '50px';\r\n const buttonStyle = {\r\n background: voiceStyle.backgroundColor || '#ee4444',\r\n width: size,\r\n height: size\r\n };\r\n\r\n return (\r\n <button \r\n class={buttonClass}\r\n style={buttonStyle}\r\n onClick={() => this.handleRecordClick()}\r\n disabled={isDisabled}\r\n aria-label={this.isRecording ? 'Stop recording' : 'Start recording'}\r\n >\r\n {this.isProcessing ? (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <circle cx=\"12\" cy=\"12\" r=\"3\">\r\n <animate attributeName=\"r\" values=\"3;6;3\" dur=\"1s\" repeatCount=\"indefinite\" />\r\n <animate attributeName=\"opacity\" values=\"1;0.3;1\" dur=\"1s\" repeatCount=\"indefinite\" />\r\n </circle>\r\n </svg>\r\n ) : this.isRecording ? (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <rect x=\"6\" y=\"6\" width=\"12\" height=\"12\" rx=\"2\" />\r\n </svg>\r\n ) : (\r\n <svg class=\"record-icon\" viewBox=\"0 0 24 24\">\r\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\r\n </svg>\r\n )}\r\n </button>\r\n );\r\n }\r\n\r\n private renderLoadingSkeleton() {\r\n const types = this.parsedInputTypes.length > 0 ? this.parsedInputTypes : ['voice'];\r\n const containerStyle = this.getContainerStyle();\r\n const buttons = (this.parsedTheme?.buttons || {}) as any;\r\n const getSize = (type: string) => buttons[type]?.size || buttons.voice?.size || '50px';\r\n\r\n return (\r\n <div>\r\n <div\r\n class={\"voice-recorder-container\" + (this.debug || this.renderForm ? \"-debug\" : \"\")}\r\n style={containerStyle}\r\n >\r\n <div class=\"row-audio-area\">\r\n {types.map(type => {\r\n const size = getSize(type);\r\n return <div class=\"skeleton-circle\" style={{ width: size, height: size }} />;\r\n })}\r\n </div>\r\n {this.displayStatus && <div class=\"skeleton-status\" />}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private renderStatusMessage() {\r\n const hasAnyError = this.hasError || this.hasTransientError;\r\n const statusClass = [\r\n 'status-text',\r\n hasAnyError && 'error',\r\n this.filledData && !hasAnyError && 'success'\r\n ].filter(Boolean).join(' ');\r\n const statusStyle = this.getStatusStyle();\r\n\r\n return <div class={statusClass} style={statusStyle}>{this.statusMessage}</div>;\r\n }\r\n\r\n private renderFormPreview() {\r\n if (!this.parsedSchema) return null;\r\n\r\n const isPreview = this.isReadonlyMode && !this.filledData;\r\n const title = isPreview ? 'Form Preview (Voice input to fill)' : 'Voice-Filled Form:';\r\n \r\n return (\r\n <div class=\"form-preview\">\r\n <div class=\"form-preview-title\">{title}</div>\r\n <form class=\"voice-filled-form\">\r\n {this.renderFormFields()}\r\n </form>\r\n </div>\r\n );\r\n }\r\n\r\n private renderFormFields() {\r\n if (!this.parsedSchema) return null;\r\n \r\n const largeFieldTypes = ['select', 'multiselect', 'classification', 'thesaurus', 'position'];\r\n \r\n switch(this.context){\r\n case \"ecoteka\":\r\n case \"ng\":\r\n return this.parsedSchema.Children.map((child: any) => {\r\n if (!child.System_Name || !child.Type) return null;\r\n \r\n const fieldName = child.System_Name;\r\n const fieldType = this.mapFieldType(child.Type);\r\n const fieldLabel = child.Settings?.Label || child.System_Name;\r\n const isRequired = child.Required || false;\r\n const fieldValue = child.Settings?.Default_Value;\r\n const isLargeField = largeFieldTypes.includes(fieldType) || (child.Children && child.Children.length > 5);\r\n \r\n return (\r\n <div class={isLargeField ? \"form-group full-width\" : \"form-group\"} key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n {fieldLabel}\r\n {isRequired && <span class=\"required\">*</span>}\r\n {this.renderConfidenceIndicator(this.getFieldConfidence(fieldLabel, fieldName))}\r\n </label>\r\n {this.renderFormField(fieldName, {\r\n type: fieldType,\r\n title: fieldLabel,\r\n required: isRequired,\r\n options: child.Children?.map((option: any) => \r\n option.System_Name || option.Label || option.toString()\r\n )\r\n }, fieldValue)}\r\n </div>\r\n );\r\n }).filter(Boolean);\r\n case \"ecoll-veto\":\r\n const mergedItemsSchema = (this.parsedSchema[0].items).concat(this.parsedSchema[1].items);\r\n return Object.entries(mergedItemsSchema).map(([key, field]: [string, any]) => {\r\n \r\n const fieldName = field.name;\r\n field.type = this.mapFieldType(field.type);\r\n const fieldLabel = field.label || fieldName;\r\n const isRequired = field.required || false;\r\n const fieldValue = this.parsedSchema[2][fieldName];\r\n\r\n // if (['position', 'thesaurus'].includes(field.type)) {\r\n // try {\r\n // const response = await fetch(`${this.classificationRootUrl}/ng/api/v1/classification/getList/${fieldType.toLowerCase() == 'position' ? \"Position\" : \"Thesaurus\"}/?StartNodeID=${field.config.options.options.startNode}`);\r\n // if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);\r\n\r\n // const data = await response.json();\r\n // if (Array.isArray(data)) {\r\n // const options = data.map(item => ({\r\n // value: item.ID,\r\n // label: item.System_Name\r\n // }));\r\n // if (options.length > 0) {\r\n // field.pickerOptions = options;\r\n // // TODO on degage les quotes simples temporairement, a corriger\r\n // field.options = options.map(option => option.label.replace(\"'\", \"\"));\r\n // }\r\n // } else {\r\n // console.error(\"Unexpected API response format:\", data);\r\n // }\r\n // } catch (error) {\r\n // console.error(\"Error fetching classification data:\", error);\r\n // }\r\n // }\r\n\r\n return (\r\n <div class=\"form-group\" key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n { fieldLabel }\r\n {isRequired && <span class=\"required\">*</span>}\r\n {this.renderConfidenceIndicator(this.getFieldConfidence(fieldLabel, fieldName))}\r\n </label>\r\n {this.renderFormField(fieldName, field, (this.filledData?.[fieldName] ?? fieldValue))}\r\n </div>\r\n );\r\n });\r\n case \"track\":\r\n default:\r\n return Object.entries(this.parsedSchema.fields).map(([fieldName, field]: [string, any]) => {\r\n if (field.type === 'header') {\r\n return (\r\n <div class=\"form-header\" key={fieldName}>\r\n {field.title || fieldName}\r\n </div>\r\n );\r\n }\r\n \r\n return (\r\n <div class=\"form-group\" key={fieldName}>\r\n <label htmlFor={fieldName} class=\"form-label\">\r\n {field.title || fieldName}\r\n {field.required && <span class=\"required\">*</span>}\r\n {this.renderConfidenceIndicator(this.getFieldConfidence(fieldName))}\r\n </label>\r\n {this.renderFormField(fieldName, field, (this.filledData?.[fieldName] ?? field.value))}\r\n </div>\r\n );\r\n });\r\n }\r\n }\r\n\r\n private renderFormField(fieldName: string, field: any, value: any) {\r\n const isReadonly = this.isReadonlyMode && !this.filledData;\r\n const commonProps = {\r\n id: fieldName,\r\n name: fieldName,\r\n class: 'form-input',\r\n required: field.required,\r\n disabled: isReadonly\r\n };\r\n\r\n switch (field.type) {\r\n case 'multiselect':\r\n if (isReadonly) {\r\n return (\r\n <div class=\"readonly-select\">\r\n <div class=\"select-placeholder\">Available options:</div>\r\n <ul class=\"select-options-list\">\r\n {field.options?.map(option => (\r\n <li class=\"select-option\">{option}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n const selectedValues = Array.isArray(value) ? value : (value ? [value] : []);\r\n return (\r\n <div class=\"multiselect-container\">\r\n {field.options?.map(option => {\r\n const isChecked = selectedValues.some(v => \r\n v?.toString().toLowerCase() === option?.toString().toLowerCase()\r\n );\r\n return (\r\n <label class=\"multiselect-option\">\r\n <input \r\n type=\"checkbox\" \r\n name={fieldName}\r\n value={option}\r\n checked={isChecked}\r\n disabled={isReadonly}\r\n />\r\n <span class=\"multiselect-label\">{option}</span>\r\n </label>\r\n );\r\n })}\r\n </div>\r\n );\r\n \r\n case 'select':\r\n if (isReadonly) {\r\n // In readonly mode, show all options as a list instead of dropdown\r\n return (\r\n <div class=\"readonly-select\">\r\n <div class=\"select-placeholder\">Available options:</div>\r\n <ul class=\"select-options-list\">\r\n {field.options?.map(option => (\r\n <li class=\"select-option\">{option}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n }\r\n return (\r\n <select id={fieldName} name={fieldName} class=\"form-input\" required={field.required}>\r\n <option value=\"\">-- Select --</option>\r\n {field.options?.map(option => (\r\n <option value={option} selected={value === option}>\r\n {option}\r\n </option>\r\n ))}\r\n </select>\r\n );\r\n \r\n case 'boolean':\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"checkbox\" \r\n class=\"form-checkbox\"\r\n checked={value === true || value === 'true'}\r\n />\r\n );\r\n \r\n case 'number':\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"number\" \r\n min={field.min}\r\n max={field.max}\r\n step=\"any\"\r\n value={value || ''}\r\n />\r\n );\r\n \r\n case 'date':\r\n return (\r\n <input \r\n {...commonProps}\r\n type='date'\r\n value={value ? (([d, m, y]) => `${y}-${m}-${d}`)(value.split(\"/\")) : ''}\r\n />\r\n );\r\n\r\n case 'datetime':\r\n return (\r\n <input \r\n {...commonProps}\r\n type='datetime-local'\r\n value={value || ''}\r\n />\r\n );\r\n \r\n default: // string\r\n return (\r\n <input \r\n {...commonProps}\r\n type=\"text\" \r\n pattern={field.pattern}\r\n placeholder={field.description}\r\n value={value || ''}\r\n />\r\n );\r\n }\r\n }\r\n\r\n private renderDebugPanel() {\r\n if (!this.debug) return null;\r\n\r\n return (\r\n <div class=\"debug-panel\">\r\n <div class=\"debug-title\">Debug Information:</div>\r\n <div class=\"debug-content\">\r\n {JSON.stringify(this.debugInfo, null, 2)}\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n private getDefaultTheme() {\r\n return {\r\n texts: {\r\n idle: this.language === 'en' ? 'Select an input method' : 'Sélectionner une méthode de saisie',\r\n recording: this.language === 'en' ? 'Recording... Click to stop' : 'Enregistrement ... Cliquer pour stopper',\r\n processing: this.language === 'en' ? 'Processing...' : 'Traitement en cours...',\r\n transcribing: this.language === 'en' ? 'Transcribing speech...' : 'Transcription du texte...',\r\n filling: this.language === 'en' ? 'Filling form fields...' : 'Remplissage du formulaire...',\r\n completed: this.language === 'en' ? 'Form completed!' : 'Formulaire rempli !'\r\n },\r\n container: {\r\n width: 'auto',\r\n height: 'auto',\r\n backgroundColor: '#ffffff',\r\n borderColor: '#e2e8f0',\r\n borderRadius: '8px',\r\n padding: '20px',\r\n gap: '8px'\r\n },\r\n buttons: {\r\n voice: { backgroundColor: '#ee4444', textColor: '#ffffff', hoverColor: '#dd3333', size: '50px' },\r\n audio: { backgroundColor: '#3b82f6', textColor: '#ffffff', hoverColor: '#2563eb', size: '50px' },\r\n ocr: { backgroundColor: '#10b981', textColor: '#ffffff', hoverColor: '#059669', size: '50px' }\r\n },\r\n statusText: { color: '#1e293b', fontSize: '14px' }\r\n };\r\n }\r\n\r\n private getContainerStyle() {\r\n const c = this.parsedTheme?.container || {};\r\n return {\r\n width: c.width || 'auto',\r\n height: c.height || 'auto',\r\n backgroundColor: c.backgroundColor || '#ffffff',\r\n border: `1px solid ${c.borderColor || '#e2e8f0'}`,\r\n borderRadius: c.borderRadius || '8px',\r\n padding: c.padding || '20px',\r\n gap: c.gap || '8px'\r\n };\r\n }\r\n\r\n private getStatusStyle() {\r\n const s = this.parsedTheme?.statusText || {};\r\n return {\r\n color: s.color || '#1e293b',\r\n fontSize: s.fontSize || '14px'\r\n };\r\n }\r\n\r\n render() {\r\n if (this.isInitializing) {\r\n return this.renderLoadingSkeleton();\r\n }\r\n\r\n const containerStyle = this.getContainerStyle();\r\n \r\n return (\r\n <div>\r\n <div \r\n class={\"voice-recorder-container\" + (this.debug || this.renderForm ? \"-debug\" : \"\")}\r\n style={containerStyle}\r\n >\r\n <div class=\"row-audio-area\">\r\n {this.renderRecordButton()}\r\n {this.renderUploadRecordButton()}\r\n {this.renderUploadButton()}\r\n </div>\r\n {this.displayStatus ? this.renderStatusMessage() : \"\"}\r\n {this.renderForm ? this.renderFormPreview() : \"\"}\r\n {this.debug ? this.renderDebugPanel() : \"\"}\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"]}
|
|
@@ -4811,6 +4811,8 @@ const VoiceFormRecorder = /*@__PURE__*/ proxyCustomElement(class VoiceFormRecord
|
|
|
4811
4811
|
if (!originalField.Settings)
|
|
4812
4812
|
originalField.Settings = {};
|
|
4813
4813
|
originalField.Settings.Default_Value = field.value;
|
|
4814
|
+
const rawConf = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);
|
|
4815
|
+
originalField.confidence = isNaN(rawConf) ? null : rawConf;
|
|
4814
4816
|
}
|
|
4815
4817
|
});
|
|
4816
4818
|
}
|
|
@@ -4824,6 +4826,8 @@ const VoiceFormRecorder = /*@__PURE__*/ proxyCustomElement(class VoiceFormRecord
|
|
|
4824
4826
|
originalField = updatedSchema[1].items.find((child) => child.label === field.name);
|
|
4825
4827
|
if (originalField && field.value !== undefined && field.value !== null && field.value !== '') {
|
|
4826
4828
|
updatedSchema[2][originalField.name] = field.value;
|
|
4829
|
+
const rawConf = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);
|
|
4830
|
+
originalField.confidence = isNaN(rawConf) ? null : rawConf;
|
|
4827
4831
|
}
|
|
4828
4832
|
});
|
|
4829
4833
|
}
|
|
@@ -4833,11 +4837,14 @@ const VoiceFormRecorder = /*@__PURE__*/ proxyCustomElement(class VoiceFormRecord
|
|
|
4833
4837
|
if (filledData === null || filledData === void 0 ? void 0 : filledData.fields) {
|
|
4834
4838
|
Object.entries(filledData.fields).forEach(([fieldID, field]) => {
|
|
4835
4839
|
if (field.value !== undefined && field.value !== null && field.value !== '') {
|
|
4840
|
+
const rawConf = typeof field.confidence === 'number' ? field.confidence : parseFloat(field.confidence);
|
|
4841
|
+
const confidence = isNaN(rawConf) ? null : rawConf;
|
|
4836
4842
|
if (field.id) {
|
|
4837
4843
|
const schemaField = updatedSchema.fields[field.id];
|
|
4838
4844
|
if (schemaField) {
|
|
4839
4845
|
schemaField.value = field.value;
|
|
4840
4846
|
schemaField.default = field.value;
|
|
4847
|
+
schemaField.confidence = confidence;
|
|
4841
4848
|
}
|
|
4842
4849
|
}
|
|
4843
4850
|
else {
|
|
@@ -4847,6 +4854,7 @@ const VoiceFormRecorder = /*@__PURE__*/ proxyCustomElement(class VoiceFormRecord
|
|
|
4847
4854
|
if (schemaField.title === fieldName) {
|
|
4848
4855
|
schemaField.value = field.value;
|
|
4849
4856
|
schemaField.default = field.value;
|
|
4857
|
+
schemaField.confidence = confidence;
|
|
4850
4858
|
break;
|
|
4851
4859
|
}
|
|
4852
4860
|
}
|