{"version":3,"file":"seniorsistemas-angular-components-speech-recognition.mjs","sources":["../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition.service.ts","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/text-to-speech.service.ts","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition/speech-recognition.component.ts","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition/speech-recognition.component.html","../../projects/angular-components/speech-recognition/src/lib/speech-recognition/speech-recognition.module.ts","../../projects/angular-components/speech-recognition/src/seniorsistemas-angular-components-speech-recognition.ts"],"sourcesContent":["import { Injectable, NgZone, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\nimport { ToastService } from '@seniorsistemas/angular-components/toast';\n\nexport type MicrophoneStatus = 'active' | 'inactive';\nexport interface SpeechResult {\n  text: string;\n  isFinal: boolean;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SpeechRecognitionService {\n  private readonly localeService = inject(LocaleService);\n  private readonly ngZone = inject(NgZone);\n  private readonly toastService = inject(ToastService);\n  private translateService = inject(TranslateService);\n\n  hasSupportSpeechRecognition = false;\n  isListening = false;\n  readonly microphoneStatus$ = new Subject<MicrophoneStatus>();\n  private recognition!: SpeechRecognition;\n  private readonly TIMEOUT_NO_MESSAGE = 3000;\n\n  constructor() {\n    this.setRecognition();\n  }\n\n  listen() {\n    const speechSubject = new Subject<SpeechResult>();\n    if (this.isListening) {\n      speechSubject.error('Already listening');\n    }\n    this.hasMicrophoneAccess.then((hasAccess) => {\n      if (!hasAccess) {\n        this.toastService.show({ severity: 'error', text: this.translateService.instant('platform.angular_components.no_microphone_permission') });\n        speechSubject.error('Microphone access is disabled');\n        return;\n      }\n      this.microphoneStatus$.next('active');\n\n      this.isListening = true;\n      this.recognition.continuous = true;\n      this.recognition.interimResults = true;\n      this.recognition.maxAlternatives = 1;\n      let silenceTimer: any;\n      const restartSilenceTimer = () => {\n        if (silenceTimer !== undefined) {\n          clearTimeout(silenceTimer);\n        }\n\n        silenceTimer = setTimeout(() => {\n          this.recognition.stop();\n        }, this.TIMEOUT_NO_MESSAGE);\n      };\n      let fullTranscript = '';\n      let interimTranscript = '';\n\n      this.recognition.onresult = (event: SpeechRecognitionEvent) => {\n        this.ngZone.run(() => {\n          restartSilenceTimer();\n          let interimTranscript = '';\n          for (let i = event.resultIndex; i < event.results.length; ++i) {\n            const transcript = event.results[i][0].transcript;\n            if (event.results[i].isFinal) {\n              fullTranscript += transcript + '\\n';\n            } else {\n              interimTranscript += transcript;\n            }\n          }\n          interimTranscript = interimTranscript;\n          speechSubject.next({ text: fullTranscript + interimTranscript, isFinal: false });\n        })\n      };\n      this.recognition.onerror = () => {\n        this.ngZone.run(() => {\n          if (silenceTimer !== undefined) {\n            clearTimeout(silenceTimer);\n          }\n          this.isListening = false;\n          speechSubject.error('Speech recognition error');\n          this.microphoneStatus$.next('inactive')\n        })\n      };\n\n      this.recognition.onend = () => {\n        this.ngZone.run(() => {\n          if (silenceTimer !== undefined) {\n            clearTimeout(silenceTimer);\n          }\n          speechSubject.next({ text: fullTranscript + interimTranscript, isFinal: true });\n          this.isListening = false;\n          speechSubject.complete();\n          this.microphoneStatus$.next('inactive')\n        })\n      };\n      this.recognition.start();\n    })\n    return speechSubject;\n  }\n\n\n  stop() {\n    this.recognition.stop();\n  }\n\n  private setRecognition() {\n    const SpeechRecognitionConstructor =\n      (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;\n\n    if (!SpeechRecognitionConstructor) {\n      console.warn('Speech recognition is not supported in this browser.');\n      return;\n    }\n    this.hasSupportSpeechRecognition = true;\n    this.recognition = new SpeechRecognitionConstructor();\n    this.recognition.lang = this.localeService.getLocaleOptions()?.locale || 'pt-BR';\n    this.recognition.interimResults = false;\n    this.recognition.maxAlternatives = 1;\n    this.localeService.getLocale().subscribe(locale => this.recognition.lang = locale);\n  }\n\n  private get hasMicrophoneAccess() {\n    return new Promise(async (resolve) => {\n      const permission = await navigator.permissions.query({ name: 'microphone' as PermissionName });\n      if (permission.state === 'denied') {\n        resolve(false);\n      } else if (permission.state === 'granted') {\n        resolve(true)\n      } else if (permission.state === 'prompt') {\n        try {\n          navigator.mediaDevices.getUserMedia({ audio: true }).then((stream) => {\n            stream.getTracks().forEach(t => t.stop());\n          }).catch(() => {\n            resolve(false);\n          });\n          permission.onchange = () => {\n            this.ngZone.run(() => {\n              resolve(permission.state === 'granted' ? true : false);\n            })\n          }\n        } catch (error) {\n          resolve(false);\n        }\n      }\n    })\n  }\n}\n","import { Injectable, NgZone, inject } from '@angular/core';\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TextToSpeechService {\n  private readonly locale = inject(LocaleService);\n  private readonly ngZone = inject(NgZone);\n\n  private readonly utterance = new SpeechSynthesisUtterance();\n  private activeVoice: SpeechSynthesisVoice | undefined;\n  voices: SpeechSynthesisVoice[] = [];\n  constructor() {\n    this.setVoices();\n  }\n\n  private setVoices() {\n    let _voices = speechSynthesis.getVoices();\n\n    if (!_voices.length) {\n      speechSynthesis.onvoiceschanged = () => {\n        this.ngZone.run(() => {\n          _voices = speechSynthesis.getVoices();\n          const currentLang = this.locale.getLocaleOptions()?.locale || 'pt-BR';\n          this.setActiveVoice(_voices, currentLang);\n          this.locale.getLocale().subscribe((locale) => {\n            this.setActiveVoice(_voices, locale);\n          })\n        })\n      }\n    }\n  }\n\n  /**\n   * Updates the active voice\n   * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SpeechSynthesisVoice/voiceURI)\n   * @param voiceUri\n   */\n  updateVoice(voiceUri: string) {\n    this.activeVoice = this.voices.find((voice) => voice.voiceURI === voiceUri);\n  }\n\n\n  speak(text: string, speed: number = 1) {\n    return new Promise((resolve) => {\n      if (!this.activeVoice) {\n        return resolve(true);\n      }\n      this.utterance.text = text;\n      this.utterance.voice = this.activeVoice as SpeechSynthesisVoice;\n      this.utterance.rate = speed;\n      speechSynthesis.speak(this.utterance);\n      this.utterance.onend = () => {\n        this.ngZone.run(() => {\n          resolve(true);\n        })\n      }\n    })\n  }\n\n  pause() {\n    speechSynthesis.pause();\n  }\n\n  resume() {\n    speechSynthesis.resume();\n  }\n\n  cancel() {\n    speechSynthesis.cancel();\n  }\n\n  get hasVoice() {\n    return !!this.activeVoice;\n  }\n\n  private setActiveVoice(voices: SpeechSynthesisVoice[], lang: string) {\n    const _voice = voices.find((voice) => voice.lang === lang);\n    if (_voice) {\n      this.activeVoice = _voice;\n    }\n  }\n}\n","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { SpeechRecognitionService } from '../speech-recognition.service';\nimport { TextToSpeechService } from '../text-to-speech.service';\n\n/**\n * @description Componente de reconhecimento de voz que integra a Web Speech API para\n * transcrever a fala do usuário em texto, inserída diretamente em um `<textarea>` fornecido.\n * Suporta também text-to-speech para leitura em voz alta do conteúdo do campo.\n *\n * @example\n * ```html\n * <s-speech-recognition\n *   [textAreaElement]=\"textAreaRef.nativeElement\"\n *   (recognizedText)=\"onTextoReconhecido($event)\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n    selector: 's-speech-recognition',\n    templateUrl: './speech-recognition.component.html',\n    styleUrls: ['./speech-recognition.component.scss'],\n})\nexport class SpeechRecognitionComponent implements OnInit, OnDestroy {\n    private readonly speechRecognitionService = inject(SpeechRecognitionService);\n    private readonly textToSpeechService = inject(TextToSpeechService);\n    private readonly translateService = inject(TranslateService);\n\n    private static TOOLBAR_ACTIVE = false;\n    /** @description Referência ao elemento `<textarea>` nativo que receberá o texto transcrito. Campo obrigatório. */\n    @Input({ required: true }) textAreaElement!: HTMLTextAreaElement;\n    /** @description Quando `true`, mantém o texto existente no campo ao iniciar novo reconhecimento. @default false */\n    @Input() keepContext = false;\n    /** @description Placeholder exibido no textarea durante o reconhecimento de voz. @default '' */\n    @Input() speechRecognitionPlaceholder = '';\n    private _recognizedText = '';\n    private originalTextAreaElementText = '';\n    private isDoneTextToSpeech = false;\n    private readonly onDestroy$ = new Subject<void>();\n    private readonly VOICE_SPEEDS = [0.5, 1, 1.5, 2];\n    private readonly keydownEventListener = (event: KeyboardEvent) => {\n        if (this.disabled) {\n            event.preventDefault();\n        }\n    };\n\n    disabled = false;\n    isListeningUserVoice = false;\n    voiceSpeed = 1;\n    isDisabledMicrophone = false;\n\n    canRenderMicrophone = true;\n    canRenderTextToSpeech = true;\n    canRenderListeningText = false;\n    canRenderDiscard = false;\n    canRenderAprove = false;\n    canRenderTextToSpeechToolbar = false;\n\n    isPlayingTextToSpeech = false;\n\n    /** @description Emitido quando o reconhecimento de voz é concluído, com o texto transcrito. */\n    @Output() recognizedText = new EventEmitter<string>();\n\n    ngOnInit(): void {\n        if (!this.hasSpeechRecognitionBrowserApi) {\n            return;\n        }\n        if (!this.textAreaElement) {\n            throw new Error('textAreaElement is required');\n        }\n        this.textAreaElement.placeholder = this.speechRecognitionPlaceholder\n            ? this.speechRecognitionPlaceholder\n            : this.translateService.instant('platform.angular_components.text_area_speech_recognition_placeholder');\n        this.textAreaElement.addEventListener('keydown', this.keydownEventListener);\n        this.speechRecognitionService.microphoneStatus$.pipe(takeUntil(this.onDestroy$)).subscribe((status) => {\n            if (status === 'active') {\n                this.onCloseToolbar();\n            }\n        });\n    }\n\n    onListen() {\n        if (this.isDisabledMicrophone || this.isListening) {\n            return;\n        }\n        this.disabled = true;\n        this.canRenderMicrophone = false;\n        this.canRenderListeningText = true;\n        this.originalTextAreaElementText = this.textAreaElement.value;\n        this.textAreaElement.value = '';\n        this.isListeningUserVoice = true;\n        this.speechRecognitionService\n            .listen()\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe(\n                ({ text, isFinal }) => {\n                    this._recognizedText = text;\n                    this.setTextAreaValue(text);\n                    this.scrollTextAreaBottom();\n                    if (isFinal) {\n                        this.canRenderAprove = true;\n                        this.canRenderDiscard = true;\n                        this.canRenderListeningText = false;\n                        this.isListeningUserVoice = false;\n                    }\n                },\n                () => {\n                    this.isListeningUserVoice = false;\n                    this.canRenderMicrophone = true;\n                    this.isDisabledMicrophone = false;\n                    this.canRenderListeningText = false;\n                    this.disabled = false;\n                },\n            );\n    }\n\n    private scrollTextAreaBottom() {\n        setTimeout(() => {\n            this.textAreaElement.scrollTop = this.textAreaElement.scrollHeight;\n        }, 120);\n    }\n\n    onOpenToolbar() {\n        if (this.isDisabledTextToSpeech) {\n            return;\n        }\n        this.canRenderTextToSpeechToolbar = true;\n        this.canRenderTextToSpeech = false;\n        SpeechRecognitionComponent.TOOLBAR_ACTIVE = true;\n        this.speak();\n    }\n\n    onCloseToolbar() {\n        this.canRenderTextToSpeechToolbar = false;\n        this.canRenderTextToSpeech = true;\n        this.stopTextToSpeech();\n        this.voiceSpeed = 1;\n        SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\n    }\n    onDiscard() {\n        this.canRenderAprove = false;\n        this.canRenderDiscard = false;\n        this.canRenderMicrophone = true;\n        this.canRenderTextToSpeechToolbar = false;\n        this.canRenderTextToSpeech = true;\n        this._recognizedText = '';\n        this.setTextAreaValue(this.originalTextAreaElementText);\n        this.disabled = false;\n        this.stopTextToSpeech();\n        SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\n    }\n\n    onAprove() {\n        this.canRenderAprove = false;\n        this.canRenderDiscard = false;\n        this.canRenderMicrophone = true;\n        this.canRenderTextToSpeechToolbar = false;\n        this.canRenderTextToSpeech = true;\n        if (this.keepContext) {\n            const breakLine = this.originalTextAreaElementText.length > 0 ? '\\n' : '';\n            this.originalTextAreaElementText += `${breakLine}${this._recognizedText}`;\n        } else {\n            this.originalTextAreaElementText = this._recognizedText;\n        }\n        this.recognizedText.emit(this.keepContext ? this.originalTextAreaElementText : this._recognizedText);\n        this.scrollTextAreaBottom();\n        this._recognizedText = '';\n        this.disabled = false;\n        this.textToSpeechService.cancel();\n        SpeechRecognitionComponent.TOOLBAR_ACTIVE = false;\n    }\n\n    ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n\n    toggleTextToSpeech() {\n        if (this.isPlayingTextToSpeech) {\n            this.textToSpeechService.pause();\n        } else {\n            if (this.isDoneTextToSpeech) {\n                this.speak();\n            } else {\n                this.textToSpeechService.resume();\n            }\n        }\n        this.isPlayingTextToSpeech = !this.isPlayingTextToSpeech;\n    }\n\n    restartTextToSpeech() {\n        this.textToSpeechService.cancel();\n        this.speak();\n    }\n\n    updateVoiceSpeed() {\n        const voiceSpeedIndex = this.VOICE_SPEEDS.indexOf(this.voiceSpeed);\n        const nextVoiceSpeedIndex = this.VOICE_SPEEDS[voiceSpeedIndex + 1] ? voiceSpeedIndex + 1 : 0;\n        this.voiceSpeed = this.VOICE_SPEEDS[nextVoiceSpeedIndex];\n        this.textToSpeechService.cancel();\n        this.speak();\n    }\n\n    stopListening() {\n        this.speechRecognitionService.stop();\n    }\n\n    get isListening() {\n        return this.speechRecognitionService.isListening;\n    }\n\n    get hasSpeechRecognitionBrowserApi() {\n        return this.speechRecognitionService.hasSupportSpeechRecognition;\n    }\n\n    get isDisabledTextToSpeech() {\n        const hasTextToSpeechVoice = this.textToSpeechService.hasVoice;\n        return (\n            !this.textToSpeech || !hasTextToSpeechVoice || this.isListening || SpeechRecognitionComponent.TOOLBAR_ACTIVE\n        );\n    }\n\n    private setTextAreaValue(value: string) {\n        this.textAreaElement.value = value;\n    }\n\n    private stopTextToSpeech() {\n        this.isPlayingTextToSpeech = false;\n        this.textToSpeechService.cancel();\n    }\n\n    private speak() {\n        this.isDoneTextToSpeech = false;\n        this.isPlayingTextToSpeech = true;\n        this.textToSpeechService.speak(this.textToSpeech, this.voiceSpeed).then(() => {\n            this.isPlayingTextToSpeech = false;\n            this.isDoneTextToSpeech = true;\n        });\n    }\n\n    private get textToSpeech() {\n        return this.textAreaElement.value;\n    }\n}\n\n","@if(hasSpeechRecognitionBrowserApi) {\n    <section class=\"speech-recognition\">\n        <div class=\"speech-recognition-text\">\n            @if(canRenderMicrophone) {\n                {{ 'platform.angular_components.text_area_before_speech' | translate }}\n            }\n\n            @if(isListeningUserVoice) {\n                {{ 'platform.angular_components.text_area_while_speech' | translate }}\n            }\n\n            @if(canRenderAprove && canRenderDiscard) {\n                {{ 'platform.angular_components.text_area_end_speech' | translate }}\n            }\n        </div>\n        <div class=\"speech-recognition-buttons\">\n            @if(canRenderListeningText) {\n                <span\n                    (click)=\"stopListening()\"\n                    class=\"speech-recognition-item speech-recognition-item-regular\">\n                    <i class=\"far fa-ellipsis-h\"></i>\n                </span>\n            }\n\n            @if(canRenderMicrophone) {\n                <span\n                    (click)=\"onListen()\"\n                    class=\"speech-recognition-item speech-recognition-item-microphone\"\n                    [class.speech-recognition-item-disabled]=\"isDisabledMicrophone || isListening || disabled\">\n                    <i class=\"fas fa-microphone\"></i>\n                </span>\n            }\n\n\n            @if(canRenderAprove) {\n                <span\n                    (click)=\"onAprove()\"\n                    class=\"speech-recognition-item speech-recognition-item-aprove\">\n                    <i class=\"fas fa-check\"></i>\n                </span>\n            }\n\n            @if(canRenderDiscard) {\n                <span\n                    (click)=\"onDiscard()\"\n                    class=\"speech-recognition-item speech-recognition-item-discard\">\n                    <i class=\"fas fa-times\"></i>\n                </span>\n            }\n\n            @if(canRenderTextToSpeech) {\n                <span\n                    (click)=\"onOpenToolbar()\"\n                    class=\"speech-recognition-item speech-recognition-item-regular\"\n                    [class.speech-recognition-item-disabled]=\"isDisabledTextToSpeech\">\n                    <i class=\"fas fa-volume-down\"></i>\n                </span>\n            }\n\n            @if(canRenderTextToSpeechToolbar) {\n                <span\n                    class=\"speech-recognition-item-toolbar\">\n                     <i class=\"fas\" [class.fa-pause]=\"isPlayingTextToSpeech\" [class.fa-play]=\"!isPlayingTextToSpeech\"\n                     (click)=\"toggleTextToSpeech()\"></i>\n                        <i class=\"fas fa-backward\" (click)=\"restartTextToSpeech()\"></i>\n                        <span (click)=\"updateVoiceSpeed()\">\n                            {{ voiceSpeed }}x\n                        </span>\n                        <i class=\"fas fa-times\" (click)=\"onCloseToolbar()\"></i>\n                </span>\n            }\n        </div>\n    </section>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SpeechRecognitionComponent } from './speech-recognition/speech-recognition.component';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n  declarations: [SpeechRecognitionComponent],\n  imports: [\n    CommonModule,\n    TranslateModule\n  ],\n  exports: [SpeechRecognitionComponent]\n})\nexport class SpeechRecognitionModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}