{"version":3,"file":"openvidu-angular-gmi.mjs","sources":["../../../projects/openvidu-angular/src/lib/models/storage.model.ts","../../../projects/openvidu-angular/src/lib/services/config/openvidu-angular.config.service.ts","../../../projects/openvidu-angular/src/lib/services/logger/logger.service.ts","../../../projects/openvidu-angular/src/lib/services/storage/storage.service.ts","../../../projects/openvidu-angular/src/lib/services/translate/translate.service.ts","../../../projects/openvidu-angular/src/lib/pipes/translate.pipe.ts","../../../projects/openvidu-angular/src/lib/components/dialogs/delete-recording.component.ts","../../../projects/openvidu-angular/src/lib/components/dialogs/dialog.component.ts","../../../projects/openvidu-angular/src/lib/components/dialogs/pro-feature-dialog.component.ts","../../../projects/openvidu-angular/src/lib/components/dialogs/recording-dialog.component.ts","../../../projects/openvidu-angular/src/lib/services/action/action.service.ts","../../../projects/openvidu-angular/src/lib/models/recording.model.ts","../../../projects/openvidu-angular/src/lib/services/recording/recording.service.ts","../../../projects/openvidu-angular/src/lib/pipes/recording.pipe.ts","../../../projects/openvidu-angular/src/lib/admin/dashboard/dashboard.component.ts","../../../projects/openvidu-angular/src/lib/admin/dashboard/dashboard.component.html","../../../projects/openvidu-angular/src/lib/admin/login/login.component.ts","../../../projects/openvidu-angular/src/lib/admin/login/login.component.html","../../../projects/openvidu-angular/src/lib/directives/template/openvidu-angular.directive.ts","../../../projects/openvidu-angular/src/lib/models/layout.model.ts","../../../projects/openvidu-angular/src/lib/services/layout/layout.service.ts","../../../projects/openvidu-angular/src/lib/models/video-type.model.ts","../../../projects/openvidu-angular/src/lib/models/participant.model.ts","../../../projects/openvidu-angular/src/lib/services/participant/participant.service.ts","../../../projects/openvidu-angular/src/lib/models/panel.model.ts","../../../projects/openvidu-angular/src/lib/services/panel/panel.service.ts","../../../projects/openvidu-angular/src/lib/services/caption/caption.service.ts","../../../projects/openvidu-angular/src/lib/models/device.model.ts","../../../projects/openvidu-angular/src/lib/models/openvidu.model.ts","../../../projects/openvidu-angular/src/lib/services/platform/platform.service.ts","../../../projects/openvidu-angular/src/lib/services/device/device.service.ts","../../../projects/openvidu-angular/src/lib/services/openvidu/openvidu.service.ts","../../../projects/openvidu-angular/src/lib/components/captions/captions.component.ts","../../../projects/openvidu-angular/src/lib/components/captions/captions.component.html","../../../projects/openvidu-angular/src/lib/pipes/participant.pipe.ts","../../../projects/openvidu-angular/src/lib/components/layout/layout.component.ts","../../../projects/openvidu-angular/src/lib/components/layout/layout.component.html","../../../projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity/recording-activity.component.ts","../../../projects/openvidu-angular/src/lib/components/panel/activities-panel/recording-activity/recording-activity.component.html","../../../projects/openvidu-angular/src/lib/models/broadcasting.model.ts","../../../projects/openvidu-angular/src/lib/services/broadcasting/broadcasting.service.ts","../../../projects/openvidu-angular/src/lib/models/linkifier.model.ts","../../../projects/openvidu-angular/src/lib/pipes/linkify.pipe.ts","../../../projects/openvidu-angular/src/lib/components/panel/activities-panel/broadcasting-activity/broadcasting-activity.component.ts","../../../projects/openvidu-angular/src/lib/components/panel/activities-panel/broadcasting-activity/broadcasting-activity.component.html","../../../projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.ts","../../../projects/openvidu-angular/src/lib/components/panel/activities-panel/activities-panel.component.html","../../../projects/openvidu-angular/src/lib/models/signal.model.ts","../../../projects/openvidu-angular/src/lib/services/chat/chat.service.ts","../../../projects/openvidu-angular/src/lib/components/panel/chat-panel/chat-panel.component.ts","../../../projects/openvidu-angular/src/lib/components/panel/chat-panel/chat-panel.component.html","../../../projects/openvidu-angular/src/lib/components/panel/panel.component.ts","../../../projects/openvidu-angular/src/lib/components/panel/panel.component.html","../../../projects/openvidu-angular/src/lib/components/panel/participants-panel/participant-panel-item/participant-panel-item.component.ts","../../../projects/openvidu-angular/src/lib/components/panel/participants-panel/participant-panel-item/participant-panel-item.component.html","../../../projects/openvidu-angular/src/lib/components/panel/participants-panel/participants-panel/participants-panel.component.ts","../../../projects/openvidu-angular/src/lib/components/panel/participants-panel/participants-panel/participants-panel.component.html","../../../projects/openvidu-angular/src/lib/models/icon.model.ts","../../../projects/openvidu-angular/src/lib/config/custom-cdk-overlay.ts","../../../projects/openvidu-angular/src/lib/services/cdk-overlay/cdk-overlay.service.ts","../../../projects/openvidu-angular/src/lib/components/audio-wave/audio-wave.component.ts","../../../projects/openvidu-angular/src/lib/components/audio-wave/audio-wave.component.html","../../../projects/openvidu-angular/src/lib/components/avatar-profile/avatar-profile.component.ts","../../../projects/openvidu-angular/src/lib/components/video/video.component.ts","../../../projects/openvidu-angular/src/lib/components/stream/stream.component.ts","../../../projects/openvidu-angular/src/lib/components/stream/stream.component.html","../../../projects/openvidu-angular/src/lib/services/document/document.service.ts","../../../projects/openvidu-angular/src/lib/directives/api/internals.directive.ts","../../../projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.ts","../../../projects/openvidu-angular/src/lib/components/toolbar/toolbar.component.html","../../../projects/openvidu-angular/src/lib/directives/api/stream.directive.ts","../../../projects/openvidu-angular/src/lib/models/background-effect.model.ts","../../../projects/openvidu-angular/src/lib/services/virtual-background/virtual-background.service.ts","../../../projects/openvidu-angular/src/lib/components/session/session.component.ts","../../../projects/openvidu-angular/src/lib/components/session/session.component.html","../../../projects/openvidu-angular/src/lib/components/panel/background-effects-panel/background-effects-panel.component.ts","../../../projects/openvidu-angular/src/lib/components/panel/background-effects-panel/background-effects-panel.component.html","../../../projects/openvidu-angular/src/lib/components/settings/video-devices/video-devices.component.ts","../../../projects/openvidu-angular/src/lib/components/settings/video-devices/video-devices.component.html","../../../projects/openvidu-angular/src/lib/components/settings/audio-devices/audio-devices.component.ts","../../../projects/openvidu-angular/src/lib/components/settings/audio-devices/audio-devices.component.html","../../../projects/openvidu-angular/src/lib/components/settings/nickname-input/nickname-input.component.ts","../../../projects/openvidu-angular/src/lib/components/settings/nickname-input/nickname-input.component.html","../../../projects/openvidu-angular/src/lib/components/settings/lang-selector/lang-selector.component.ts","../../../projects/openvidu-angular/src/lib/components/settings/lang-selector/lang-selector.component.html","../../../projects/openvidu-angular/src/lib/config/custom-flexlayout-breakpoints.ts","../../../projects/openvidu-angular/src/lib/components/pre-join/pre-join.component.ts","../../../projects/openvidu-angular/src/lib/components/pre-join/pre-join.component.html","../../../projects/openvidu-angular/src/lib/components/settings/captions/captions.component.ts","../../../projects/openvidu-angular/src/lib/components/settings/captions/captions.component.html","../../../projects/openvidu-angular/src/lib/components/panel/settings-panel/settings-panel.component.ts","../../../projects/openvidu-angular/src/lib/components/panel/settings-panel/settings-panel.component.html","../../../projects/openvidu-angular/src/lib/components/videoconference/videoconference.component.ts","../../../projects/openvidu-angular/src/lib/components/videoconference/videoconference.component.html","../../../projects/openvidu-angular/src/lib/directives/api/activities-panel.directive.ts","../../../projects/openvidu-angular/src/lib/directives/api/admin.directive.ts","../../../projects/openvidu-angular/src/lib/directives/api/broadcasting-activity.directive.ts","../../../projects/openvidu-angular/src/lib/directives/api/participant-panel-item.directive.ts","../../../projects/openvidu-angular/src/lib/directives/api/recording-activity.directive.ts","../../../projects/openvidu-angular/src/lib/directives/api/toolbar.directive.ts","../../../projects/openvidu-angular/src/lib/directives/api/videoconference.directive.ts","../../../projects/openvidu-angular/src/lib/directives/api/api.directive.module.ts","../../../projects/openvidu-angular/src/lib/directives/template/openvidu-angular.directive.module.ts","../../../projects/openvidu-angular/src/lib/openvidu-angular.material.module.ts","../../../projects/openvidu-angular/src/lib/openvidu-angular.module.ts"],"sourcesContent":["/**\n * @internal\n */\nexport enum Storage {\n\tUSER_NICKNAME = 'openviduCallNickname',\n\tVIDEO_DEVICE = 'openviduCallVideoDevice',\n\tAUDIO_DEVICE = 'openviduCallAudioDevice',\n\tAUDIO_MUTED = 'openviduCallAudioMuted',\n\tVIDEO_MUTED = 'openviduCallVideoMuted',\n\tLANG = 'openviduCallLang',\n\tCAPTION_LANG = 'openviduCallCaptionLang',\n\tBACKGROUND = \"openviduCallBackground\"\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { OpenViduAngularConfig, ParticipantFactoryFunction } from '../../config/openvidu-angular.config';\nimport { BroadcastingError } from '../../models/broadcasting.model';\nimport { RecordingInfo } from '../../models/recording.model';\n\n// import { version } from '../../../../package.json';\n\n/**\n * @internal\n */\n@Injectable()\nexport class OpenViduAngularConfigService {\n\tprivate configuration: OpenViduAngularConfig;\n\tminimal = <BehaviorSubject<boolean>>new BehaviorSubject(false);\n\tminimalObs: Observable<boolean>;\n\tparticipantName = <BehaviorSubject<string>>new BehaviorSubject('');\n\tparticipantNameObs: Observable<string>;\n\tprejoin = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tprejoinObs: Observable<boolean>;\n\n\tvideoMuted = <BehaviorSubject<boolean>>new BehaviorSubject(false);\n\tvideoMutedObs: Observable<boolean>;\n\taudioMuted = <BehaviorSubject<boolean>>new BehaviorSubject(false);\n\taudioMutedObs: Observable<boolean>;\n\tscreenshareButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tscreenshareButtonObs: Observable<boolean>;\n\n\tfullscreenButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tfullscreenButtonObs: Observable<boolean>;\n\n\tcaptionsButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tcaptionsButtonObs: Observable<boolean>;\n\n\ttoolbarSettingsButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\ttoolbarSettingsButtonObs: Observable<boolean>;\n\n\tleaveButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tleaveButtonObs: Observable<boolean>;\n\n\tparticipantsPanelButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tparticipantsPanelButtonObs: Observable<boolean>;\n\n\tchatPanelButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tchatPanelButtonObs: Observable<boolean>;\n\n\tactivitiesPanelButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tactivitiesPanelButtonObs: Observable<boolean>;\n\n\tdisplaySessionName = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tdisplaySessionNameObs: Observable<boolean>;\n\n\tdisplayLogo = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tdisplayLogoObs: Observable<boolean>;\n\tdisplayParticipantName = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tdisplayParticipantNameObs: Observable<boolean>;\n\tdisplayAudioDetection = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tdisplayAudioDetectionObs: Observable<boolean>;\n\tstreamSettingsButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tstreamSettingsButtonObs: Observable<boolean>;\n\tparticipantItemMuteButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tparticipantItemMuteButtonObs: Observable<boolean>;\n\tbackgroundEffectsButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tbackgroundEffectsButtonObs: Observable<boolean>;\n\trecordingsList: BehaviorSubject<RecordingInfo[]> = new BehaviorSubject(<RecordingInfo[]>[]);\n\trecordingsListObs: Observable<RecordingInfo[]>;\n\trecordingButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\trecordingButtonObs: Observable<boolean>;\n\tbroadcastingButton = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tbroadcastingButtonObs: Observable<boolean>;\n\trecordingActivity = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\trecordingActivityObs: Observable<boolean>;\n\tbroadcastingActivity = <BehaviorSubject<boolean>>new BehaviorSubject(true);\n\tbroadcastingActivityObs: Observable<boolean>;\n\trecordingError = <BehaviorSubject<any>>new BehaviorSubject(null);\n\trecordingErrorObs: Observable<any>;\n\tbroadcastingErrorObs: Observable<BroadcastingError | undefined>;\n\tbroadcastingError = <BehaviorSubject<BroadcastingError | undefined>>new BehaviorSubject(undefined);\n\t// Admin\n\tadminRecordingsList: BehaviorSubject<RecordingInfo[]> = new BehaviorSubject(<RecordingInfo[]>[]);\n\tadminRecordingsListObs: Observable<RecordingInfo[]>;\n\tadminLoginError = <BehaviorSubject<any>>new BehaviorSubject(null);\n\tadminLoginErrorObs: Observable<any>;\n\n\tconstructor(@Inject('OPENVIDU_ANGULAR_CONFIG') config: OpenViduAngularConfig) {\n\t\tthis.configuration = config;\n\t\tconsole.log(this.configuration);\n\t\tif (this.isProduction()) console.log('OpenVidu Angular Production Mode');\n\t\tthis.minimalObs = this.minimal.asObservable();\n\t\tthis.participantNameObs = this.participantName.asObservable();\n\t\tthis.prejoinObs = this.prejoin.asObservable();\n\t\tthis.videoMutedObs = this.videoMuted.asObservable();\n\t\tthis.audioMutedObs = this.audioMuted.asObservable();\n\t\t//Toolbar observables\n\t\tthis.screenshareButtonObs = this.screenshareButton.asObservable();\n\t\tthis.fullscreenButtonObs = this.fullscreenButton.asObservable();\n\t\tthis.backgroundEffectsButtonObs = this.backgroundEffectsButton.asObservable();\n\t\tthis.leaveButtonObs = this.leaveButton.asObservable();\n\t\tthis.participantsPanelButtonObs = this.participantsPanelButton.asObservable();\n\t\tthis.chatPanelButtonObs = this.chatPanelButton.asObservable();\n\t\tthis.activitiesPanelButtonObs = this.activitiesPanelButton.asObservable();\n\t\tthis.displaySessionNameObs = this.displaySessionName.asObservable();\n\t\tthis.displayLogoObs = this.displayLogo.asObservable();\n\t\tthis.recordingButtonObs = this.recordingButton.asObservable();\n\t\tthis.broadcastingButtonObs = this.broadcastingButton.asObservable();\n\t\tthis.toolbarSettingsButtonObs = this.toolbarSettingsButton.asObservable();\n\t\tthis.captionsButtonObs = this.captionsButton.asObservable();\n\t\t//Stream observables\n\t\tthis.displayParticipantNameObs = this.displayParticipantName.asObservable();\n\t\tthis.displayAudioDetectionObs = this.displayAudioDetection.asObservable();\n\t\tthis.streamSettingsButtonObs = this.streamSettingsButton.asObservable();\n\t\t// Participant item observables\n\t\tthis.participantItemMuteButtonObs = this.participantItemMuteButton.asObservable();\n\t\t// Recording activity observables\n\t\tthis.recordingActivityObs = this.recordingActivity.asObservable();\n\t\tthis.recordingsListObs = this.recordingsList.asObservable();\n\t\tthis.recordingErrorObs = this.recordingError.asObservable();\n\t\t// Broadcasting activity\n\t\tthis.broadcastingActivityObs = this.broadcastingActivity.asObservable();\n\t\tthis.broadcastingErrorObs = this.broadcastingError.asObservable();\n\t\t// Admin dashboard\n\t\tthis.adminRecordingsListObs = this.adminRecordingsList.asObservable();\n\t\tthis.adminLoginErrorObs = this.adminLoginError.asObservable();\n\t}\n\n\tgetConfig(): OpenViduAngularConfig {\n\t\treturn this.configuration;\n\t}\n\tisProduction(): boolean {\n\t\treturn this.configuration?.production || false;\n\t}\n\n\thasParticipantFactory(): boolean {\n\t\treturn typeof this.getConfig().participantFactory === 'function';\n\t}\n\n\tgetParticipantFactory(): ParticipantFactoryFunction {\n\t\treturn this.getConfig().participantFactory;\n\t}\n\n\tisRecordingEnabled(): boolean {\n\t\treturn this.recordingButton.getValue() && this.recordingActivity.getValue();\n\t}\n\n\tisBroadcastingEnabled(): boolean {\n\t\treturn this.broadcastingButton.getValue() && this.broadcastingActivity.getValue();\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { ILogService } from '../../models/logger.model';\n\nimport { OpenViduAngularConfigService } from '../config/openvidu-angular.config.service';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class LoggerService implements ILogService {\n\tpublic log;\n\tpublic LOG_FNS = [];\n\tpublic MSG_PREFIXES = [\n\t\t['[', ']'],\n\t\t['[', '] WARN: '],\n\t\t['[', '] ERROR: ']\n\t];\n\n\tconstructor(private openviduAngularConfigSrv: OpenViduAngularConfigService) {\n\t}\n\n\tprivate getLoggerFns(prefix: string) {\n\t\tthis.log = window.console;\n\t\tthis.LOG_FNS = [this.log.log, this.log.warn, this.log.error];\n\t\tconst loggerFns = this.LOG_FNS.map((logTemplFn, i) => {\n\t\t\treturn logTemplFn.bind(this.log, this.MSG_PREFIXES[i][0] + prefix + this.MSG_PREFIXES[i][1]);\n\t\t});\n\t\treturn loggerFns;\n\t}\n\n\tpublic get(prefix: string) {\n\t\tconst prodMode = this.openviduAngularConfigSrv.isProduction();\n\t\tconst loggerService = this;\n\t\treturn {\n\t\t\td: function(...args: any[]) {\n\t\t\t\tif (!prodMode) {\n\t\t\t\t\tloggerService.getLoggerFns(prefix)[0].apply(this.log, arguments);\n\t\t\t\t}\n\t\t\t},\n\t\t\tw: function(...args: any[]) {\n\t\t\t\tloggerService.getLoggerFns(prefix)[1].apply(this.log, arguments);\n\n\t\t\t},\n\t\t\te: function(...args: any[]) {\n\t\t\t\tloggerService.getLoggerFns(prefix)[2].apply(this.log, arguments);\n\t\t\t}\n\t\t};\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { ILogger } from '../../models/logger.model';\nimport { Storage } from '../../models/storage.model';\nimport { LoggerService } from '../logger/logger.service';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class StorageService {\n\tpublic storage = window.localStorage;\n\tpublic log: ILogger;\n\n\tconstructor(private loggerSrv: LoggerService) {\n\t\tthis.log = this.loggerSrv.get('StorageService');\n\t}\n\n\tgetNickname(): string {\n\t\treturn this.get(Storage.USER_NICKNAME);\n\t}\n\n\tsetNickname(name: string) {\n\t\tthis.set(Storage.USER_NICKNAME, name);\n\t}\n\tgetVideoDevice() {\n\t\treturn this.get(Storage.VIDEO_DEVICE);\n\t}\n\n\tsetVideoDevice(device: any) {\n\t\tthis.set(Storage.VIDEO_DEVICE, device);\n\t}\n\n\tgetAudioDevice() {\n\t\treturn this.get(Storage.AUDIO_DEVICE);\n\t}\n\n\tsetAudioDevice(device: any) {\n\t\tthis.set(Storage.AUDIO_DEVICE, device);\n\t}\n\tisVideoMuted(): boolean {\n\t\treturn this.get(Storage.VIDEO_MUTED) === 'true';\n\t}\n\tsetVideoMuted(muted: boolean) {\n\t\tthis.set(Storage.VIDEO_MUTED, `${muted}`);\n\t}\n\n\tisAudioMuted(): boolean {\n\t\treturn this.get(Storage.AUDIO_MUTED) === 'true';\n\t}\n\n\tsetAudioMuted(muted: boolean) {\n\t\tthis.set(Storage.AUDIO_MUTED, `${muted}`);\n\t}\n\n\tsetLang(lang: string) {\n\t\tthis.set(Storage.LANG, lang);\n\t}\n\n\tgetLang(): string {\n\t\treturn this.get(Storage.LANG);\n\t}\n\n\tsetCaptionLang(lang: string) {\n\t\tthis.set(Storage.CAPTION_LANG, lang);\n\t}\n\n\tgetCaptionsLang(): string {\n\t\treturn this.get(Storage.CAPTION_LANG);\n\t}\n\n\tsetBackground(id: string) {\n\t\tthis.set(Storage.BACKGROUND, id);\n\t}\n\n\tgetBackground(): string {\n\t\treturn this.get(Storage.BACKGROUND);\n\t}\n\n\tremoveBackground() {\n\t\tthis.remove(Storage.BACKGROUND);\n\t}\n\n\tprivate set(key: string, item: any) {\n\t\tconst value = JSON.stringify({ item: item });\n\t\t// this.log.d('Storing on localStorage \"' + key + '\" with value \"' + value + '\"');\n\t\tthis.storage.setItem(key, value);\n\t}\n\tprivate get(key: string): any {\n\t\tconst str = this.storage.getItem(key);\n\t\tif (!!str) {\n\t\t\treturn JSON.parse(str).item;\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate remove(key: string) {\n\t\tthis.storage.removeItem(key);\n\t}\n\n\tpublic clear() {\n\t\tthis.log.d('Clearing localStorage');\n\t\tthis.storage.clear();\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport * as cn from '../../lang/cn.json';\nimport * as de from '../../lang/de.json';\nimport * as en from '../../lang/en.json';\nimport * as es from '../../lang/es.json';\nimport * as fr from '../../lang/fr.json';\nimport * as hi from '../../lang/hi.json';\nimport * as it from '../../lang/it.json';\nimport * as ja from '../../lang/ja.json';\nimport * as nl from '../../lang/nl.json';\nimport * as pt from '../../lang/pt.json';\nimport { StorageService } from '../storage/storage.service';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class TranslateService {\n\tprivate availableLanguages = { en, es, de, fr, cn, hi, it, ja, nl, pt };\n\tprivate langTitles = [\n\t\t{ name: 'English', ISO: 'en' },\n\t\t{ name: 'Español', ISO: 'es' },\n\t\t{ name: 'Deutsch', ISO: 'de' },\n\t\t{ name: 'Français', ISO: 'fr' },\n\t\t{ name: '中国', ISO: 'cn' },\n\t\t{ name: 'हिन्दी', ISO: 'hi' },\n\t\t{ name: 'Italiano', ISO: 'it' },\n\t\t{ name: 'やまと', ISO: 'ja' },\n\t\t{ name: 'Dutch', ISO: 'nl' },\n\t\t{ name: 'Português', ISO: 'pt' }\n\t];\n\tprivate currentLang: any;\n\tlangSelected: { name: string; ISO: string };\n\n\tconstructor(private storageService: StorageService) {\n\t\tconst iso = this.storageService.getLang() || 'en';\n\t\tthis.langSelected = this.langTitles.find((lang) => lang.ISO === iso) || this.langTitles[0];\n\t\tthis.currentLang = this.availableLanguages[this.langSelected.ISO];\n\t}\n\n\tsetLanguage(lang: string) {\n\t\tif(this.langTitles.some(l => l.ISO === lang)){\n\t\t\tthis.currentLang = this.availableLanguages[lang];\n\t\t\tthis.langSelected = this.langTitles.find((l) => l.ISO === lang);\n\t\t}\n\t}\n\n\tgetLangSelected(): { name: string; ISO: string } {\n\t\treturn this.langSelected;\n\t}\n\n\tgetLanguagesInfo() {\n\t\treturn this.langTitles;\n\t}\n\n\ttranslate(key: string): string {\n\t\tlet result = this.currentLang;\n\n\t\tkey.split('.').forEach((prop) => {\n\t\t\ttry {\n\t\t\t\tresult = result[prop];\n\t\t\t} catch (error) {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t});\n\t\treturn result;\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '../services/translate/translate.service';\n\n/**\n * @internal\n */\n@Pipe({ name: 'translate', pure: false })\nexport class TranslatePipe implements PipeTransform {\n\tconstructor(private translateService: TranslateService) {}\n\n\ttransform(str: string): string {\n\t\tconst translation = this.translateService.translate(str);\n\t\tif (translation?.includes('OpenVidu PRO')) {\n\t\t\treturn translation.replace(\n\t\t\t\t'OpenVidu PRO',\n\t\t\t\t'<a href=\"https://docs.openvidu.io/en/stable/openvidu-pro/\" target=\"_blank\">OpenVidu PRO</a>'\n\t\t\t);\n\t\t}\n\t\treturn translation;\n\t}\n}\n","import { Component } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'app-delete-dialog',\n\ttemplate: `\n\t\t<div mat-dialog-content>{{'PANEL.RECORDING.DELETE_QUESTION' | translate}}</div>\n\t\t<div mat-dialog-actions>\n\t\t\t<button mat-button (click)=\"close()\">{{'PANEL.RECORDING.CANCEL' | translate }}</button>\n\t\t\t<button mat-button cdkFocusInitial (click)=\"close(true)\" id=\"delete-recording-confirm-btn\">{{'PANEL.RECORDING.DELETE' | translate}}</button>\n\t\t</div>\n\t`,\n\tstyles: [``]\n})\nexport class DeleteDialogComponent {\n\tconstructor(public dialogRef: MatDialogRef<DeleteDialogComponent>) {}\n\n\tclose(succsess = false) {\n\t\tthis.dialogRef.close(succsess);\n\t}\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { DialogData } from '../../models/dialog.model';\n\n/**\n * @internal\n */\n\n@Component({\n\tselector: 'ov-dialog-template',\n\ttemplate: `\n\t\t<h1 mat-dialog-title>{{ data.title }}</h1>\n\t\t<div mat-dialog-content>{{ data.description }}</div>\n\t\t<div mat-dialog-actions *ngIf=\"data.showActionButtons\">\n\t\t\t<button mat-button (click)=\"close()\">{{'PANEL.CLOSE' | translate}}</button>\n\t\t</div>\n\t`\n})\nexport class DialogTemplateComponent {\n\tconstructor(public dialogRef: MatDialogRef<DialogTemplateComponent>, @Inject(MAT_DIALOG_DATA) public data: DialogData) {}\n\n\tclose() {\n\t\tthis.dialogRef.close();\n\t}\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { DialogData } from '../../models/dialog.model';\n\n\n/**\n * @internal\n */\n\n@Component({\n\tselector: 'ov-pro-feature-template',\n\ttemplate: `\n\t\t<h1 mat-dialog-title>{{ data.title }}</h1>\n\t\t<div mat-dialog-content>{{ data.description }}</div>\n\t\t<div mat-dialog-actions *ngIf=\"data.showActionButtons\">\n\t\t\t<button mat-button (click)=\"seeMore()\">\n\t\t\t\t<span>{{'PANEL.SEE_MORE' | translate}}</span>\n\t\t\t\t<mat-icon>open_in_new</mat-icon>\n\t\t\t</button>\n\t\t\t<button mat-button (click)=\"close()\">{{'PANEL.CLOSE' | translate}}</button>\n\t\t</div>\n\t`\n})\nexport class ProFeatureDialogTemplateComponent {\n\tconstructor(public dialogRef: MatDialogRef<ProFeatureDialogTemplateComponent>, @Inject(MAT_DIALOG_DATA) public data: DialogData) {}\n\n\tclose() {\n\t\tthis.dialogRef.close();\n\t}\n\n\tseeMore() {\n\t\twindow.open('https://docs.openvidu.io/en/stable/openvidu-pro/', '_blank')?.focus();\n\t}\n}\n","import { Component, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { RecordingDialogData } from '../../models/dialog.model';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'app-recording-dialog',\n\ttemplate: `\n\t\t<div mat-dialog-content>\n\t\t\t<video controls autoplay [src]=\"src\"></video>\n\t\t</div>\n\t\t<div mat-dialog-actions *ngIf=\"data.showActionButtons\" align=\"end\">\n\t\t\t<button mat-button (click)=\"close()\">{{ 'PANEL.CLOSE' | translate }}</button>\n\t\t</div>\n\t`,\n\tstyles: [\n\t\t`\n\t\t\tvideo {\n\t\t\t\tmax-height: 64vh;\n\t\t\t\tmax-width: 100%;\n\t\t\t}\n\t\t`\n\t]\n})\nexport class RecordingDialogComponent {\n\tsrc: string;\n\n\tconstructor(public dialogRef: MatDialogRef<RecordingDialogComponent>, @Inject(MAT_DIALOG_DATA) public data: RecordingDialogData) {\n\t\tthis.src = data.src;\n\t}\n\tclose() {\n\t\tthis.dialogRef.close();\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Subscription } from 'rxjs';\nimport { DeleteDialogComponent } from '../../components/dialogs/delete-recording.component';\nimport { DialogTemplateComponent } from '../../components/dialogs/dialog.component';\nimport { ProFeatureDialogTemplateComponent } from '../../components/dialogs/pro-feature-dialog.component';\nimport { RecordingDialogComponent } from '../../components/dialogs/recording-dialog.component';\nimport { INotificationOptions } from '../../models/notification-options.model';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ActionService {\n\tprivate dialogRef:\n\t\t| MatDialogRef<DialogTemplateComponent | RecordingDialogComponent | DeleteDialogComponent | ProFeatureDialogTemplateComponent>\n\t\t| undefined;\n\tprivate dialogSubscription: Subscription;\n\tconstructor(private snackBar: MatSnackBar, public dialog: MatDialog) {}\n\n\tlaunchNotification(options: INotificationOptions, callback): void {\n\t\tif (!options.config) {\n\t\t\toptions.config = {\n\t\t\t\tduration: 3000,\n\t\t\t\tverticalPosition: 'top',\n\t\t\t\thorizontalPosition: 'end'\n\t\t\t};\n\t\t}\n\n\t\tconst notification = this.snackBar.open(options.message, options.buttonActionText, options.config);\n\t\tif (callback) {\n\t\t\tnotification.onAction().subscribe(() => {\n\t\t\t\tcallback();\n\t\t\t});\n\t\t}\n\t}\n\n\topenDialog(titleMessage: string, descriptionMessage: string, allowClose = true) {\n\t\ttry {\n\t\t\tthis.closeDialog();\n\t\t} catch (error) {\n\t\t} finally {\n\t\t\tconst config: MatDialogConfig = {\n\t\t\t\tminWidth: '250px',\n\t\t\t\tdata: { title: titleMessage, description: descriptionMessage, showActionButtons: allowClose },\n\t\t\t\tdisableClose: !allowClose\n\t\t\t};\n\t\t\tthis.dialogRef = this.dialog.open(DialogTemplateComponent, config);\n\t\t\tthis.dialogSubscription = this.dialogRef.afterClosed().subscribe((result) => {\n\t\t\t\tthis.dialogRef = undefined;\n\t\t\t});\n\t\t}\n\t}\n\n\topenProFeatureDialog(titleMessage: string, descriptionMessage: string, allowClose = true) {\n\t\ttry {\n\t\t\tthis.closeDialog();\n\t\t} catch (error) {\n\t\t} finally {\n\t\t\tconst config: MatDialogConfig = {\n\t\t\t\tminWidth: '250px',\n\t\t\t\tdata: { title: titleMessage, description: descriptionMessage, showActionButtons: allowClose },\n\t\t\t\tdisableClose: !allowClose\n\t\t\t};\n\t\t\tthis.dialogRef = this.dialog.open(ProFeatureDialogTemplateComponent, config);\n\t\t\tthis.dialogSubscription = this.dialogRef.afterClosed().subscribe((result) => {\n\t\t\t\tthis.dialogRef = undefined;\n\t\t\t});\n\t\t}\n\t}\n\n\topenDeleteRecordingDialog(succsessCallback) {\n\t\ttry {\n\t\t\tthis.closeDialog();\n\t\t} catch (error) {\n\t\t} finally {\n\t\t\tthis.dialogRef = this.dialog.open(DeleteDialogComponent);\n\n\t\t\tthis.dialogSubscription = this.dialogRef.afterClosed().subscribe((result) => {\n\t\t\t\tif (result) {\n\t\t\t\t\tsuccsessCallback();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\topenRecordingPlayerDialog(src: string, allowClose = true) {\n\t\ttry {\n\t\t\tthis.closeDialog();\n\t\t} catch (error) {\n\t\t} finally {\n\t\t\tconst config: MatDialogConfig = {\n\t\t\t\tminWidth: '250px',\n\t\t\t\tdata: { src, showActionButtons: allowClose },\n\t\t\t\tdisableClose: !allowClose\n\t\t\t};\n\t\t\tthis.dialogRef = this.dialog.open(RecordingDialogComponent, config);\n\t\t}\n\t}\n\n\tcloseDialog() {\n\t\tthis.dialogRef?.close();\n\t\tif (this.dialogSubscription) this.dialogSubscription.unsubscribe();\n\t}\n}\n","export enum RecordingStatus {\n\tSTARTING = 'starting',\n\tSTARTED = 'started',\n\tSTOPPING = 'stopping',\n\tSTOPPED = 'stopped',\n\tFAILED = 'failed',\n\tREADY = 'ready'\n}\n\nexport interface RecordingInfo {\n\tstatus: RecordingStatus;\n\tid?: string;\n\tname?: string;\n\treason?: string;\n\tcreatedAt?: number;\n\tduration?: number;\n\tsize?: string;\n\turl?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { RecordingEvent } from 'openvidu-browser';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { RecordingInfo, RecordingStatus } from '../../models/recording.model';\nimport { ActionService } from '../action/action.service';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class RecordingService {\n\t/**\n\t * Recording status Observable which pushes the recording state in every update.\n\t */\n\trecordingStatusObs: Observable<{ info: RecordingInfo; time?: Date } | undefined>;\n\n\tprivate recordingTime: Date | undefined;\n\tprivate recordingTimeInterval: NodeJS.Timer;\n\tprivate currentRecording: RecordingInfo = { status: RecordingStatus.STOPPED };\n\tprivate recordingStatus = <BehaviorSubject<{ info: RecordingInfo; time?: Date } | undefined>>new BehaviorSubject(undefined);\n\tprivate baseUrl = '/' + (!!window.location.pathname.split('/')[1] ? window.location.pathname.split('/')[1] + '/' : '');\n\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(private actionService: ActionService) {\n\t\tthis.recordingStatusObs = this.recordingStatus.asObservable();\n\t}\n\n\t/**\n\t * @param status {@link RecordingStatus}\n\t * Update the recording status. This method is used by the OpenVidu Angular library to update the recording status.\n\t */\n\tupdateStatus(status: RecordingStatus) {\n\t\tthis.currentRecording = {\n\t\t\tstatus: status\n\t\t};\n\t\tthis.recordingStatus.next({ info: this.currentRecording });\n\t}\n\n\t/**\n\t * @internal\n\t * @param event\n\t */\n\tstartRecording(event: RecordingEvent) {\n\t\tthis.currentRecording = {\n\t\t\tstatus: RecordingStatus.STARTED,\n\t\t\tid: event.id,\n\t\t\tname: event.name,\n\t\t\treason: event.reason\n\t\t};\n\t\tthis.startRecordingTime();\n\t\tthis.recordingStatus.next({ info: this.currentRecording, time: this.recordingTime });\n\t}\n\n\t/**\n\t * @internal\n\t * @param event\n\t */\n\tstopRecording(event: RecordingEvent) {\n\t\tthis.currentRecording.status = RecordingStatus.STOPPED;\n\t\tthis.currentRecording.reason = event.reason;\n\t\tthis.recordingStatus.next({ info: this.currentRecording, time: undefined });\n\t\tthis.stopRecordingTime();\n\t}\n\n\t/**\n\t * @internal\n\t * Play the recording blob received as parameter. This parameter must be obtained from backend using the OpenVidu REST API\n\t */\n\tplayRecording(recording: RecordingInfo) {\n\t\tconst recordingId = recording.id;\n\t\t// Only COMPOSED recording is supported. The extension will allways be 'mp4'.\n\t\tconst extension = 'mp4'; //recording.url?.split('.').pop()  || 'mp4';\n\t\tthis.actionService.openRecordingPlayerDialog(`${this.baseUrl}recordings/${recordingId}/${recordingId}.${extension}`);\n\t}\n\n\t/**\n\t * @internal\n\t * Download the the recording file received .\n\t * @param recording\n\t */\n\tdownloadRecording(recording: RecordingInfo) {\n\t\tconst recordingId = recording.id;\n\t\t// Only COMPOSED recording is supported. The extension will allways be 'mp4'.\n\t\tconst extension = 'mp4'; //recording.url?.split('.').pop()  || 'mp4';\n\n\t\tconst link = document.createElement('a');\n\t\tlink.href = `/recordings/${recordingId}/${recordingId}.${extension}`;\n\t\tlink.download = `${recordingId}.${extension}`;\n\t\tlink.dispatchEvent(\n\t\t\tnew MouseEvent('click', {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true,\n\t\t\t\tview: window\n\t\t\t})\n\t\t);\n\n\t\tsetTimeout(() => {\n\t\t\t// For Firefox it is necessary to delay revoking the ObjectURL\n\t\t\tlink.remove();\n\t\t}, 100);\n\t}\n\n\tprivate startRecordingTime() {\n\t\tthis.recordingTime = new Date();\n\t\tthis.recordingTime.setHours(0, 0, 0, 0);\n\t\tthis.recordingTimeInterval = setInterval(() => {\n\t\t\tif(this.recordingTime) {\n\t\t\t\tthis.recordingTime.setSeconds(this.recordingTime.getSeconds() + 1);\n\t\t\t\tthis.recordingTime = new Date(this.recordingTime.getTime());\n\t\t\t\tthis.recordingStatus.next({ info: this.currentRecording, time: this.recordingTime });\n\t\t\t}\n\t\t}, 1000);\n\t}\n\n\tprivate stopRecordingTime() {\n\t\tclearInterval(this.recordingTimeInterval);\n\t\tthis.recordingTime = undefined;\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @internal\n */\n@Pipe({\n\tname: 'duration'\n})\nexport class DurationFromSecondsPipe implements PipeTransform {\n\ttransform(durationInSeconds: number): string {\n\t\tif (durationInSeconds < 60) {\n\t\t\treturn Math.floor(durationInSeconds) + 's';\n\t\t} else if (durationInSeconds < 3600) {\n\t\t\treturn Math.floor(durationInSeconds / 60) + 'm ' + Math.floor(durationInSeconds % 60) + 's';\n\t\t} else {\n\t\t\tconst hours = Math.floor(durationInSeconds / 3600);\n\t\t\tconst minutes = Math.floor((durationInSeconds - hours * 3600) / 60);\n\t\t\treturn hours + 'h ' + minutes + 'm';\n\t\t}\n\t}\n}\n\n/**\n * @internal\n */\n @Pipe({\n\tname: 'searchByStringProperty'\n})\nexport class SearchByStringPropertyPipe implements PipeTransform {\n\ttransform(items: any[], props: { properties: string[], filter: string }): any {\n\t\tif (!items || !props || props.properties.length === 0 || !props.filter) {\n\t\t  return items;\n\t\t}\n\t\treturn items.filter(item => {\n\t\t  return props.properties.some(prop => {\n\t\t\tconst multipleProps = prop.split('.');\n\t\t\tlet recursiveProp = item;\n\t\t\ttry {\n\t\t\t  multipleProps.forEach(p => {\n\t\t\t\trecursiveProp = recursiveProp[p];\n\t\t\t\tif (recursiveProp === null || recursiveProp === undefined) {\n\t\t\t\t  throw new Error('Property not found');\n\t\t\t\t}\n\t\t\t  });\n\t\t\t} catch (error) {\n\t\t\t  return false;\n\t\t\t}\n\t\t\treturn recursiveProp.indexOf(props.filter) !== -1;\n\t\t  })\n\t\t});\n\t  }\n}\n\n/**\n * @internal\n */\n @Pipe({\n\tname: 'thumbnailUrl'\n})\nexport class ThumbnailFromUrlPipe implements PipeTransform {\n\ttransform(url: string): string {\n\t\tif(url.includes('.mp4')){\n\t\t\tconst lastPart = url.split('/').pop();\n\t\t\tlet thumbnailUrl = lastPart?.replace('mp4', 'jpg');\n\t\t\tthumbnailUrl = `recordings/${thumbnailUrl?.split('.')[0]}/${thumbnailUrl}`;\n\t\t\treturn thumbnailUrl;\n\t\t}\n\t\treturn url;\n\t}\n}\n","import { Component, OnInit, Output, EventEmitter, OnDestroy } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { RecordingInfo } from '../../models/recording.model';\nimport { ActionService } from '../../services/action/action.service';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\nimport { RecordingService } from '../../services/recording/recording.service';\n\n@Component({\n\tselector: 'ov-admin-dashboard',\n\ttemplateUrl: './dashboard.component.html',\n\tstyleUrls: ['./dashboard.component.css']\n})\nexport class AdminDashboardComponent implements OnInit, OnDestroy {\n\n\t/**\n\t * Provides event notifications that fire when delete recording button has been clicked.\n\t * The recording should be deleted using the REST API.\n\t * @param recordingId\n\t */\n\t@Output() onDeleteRecordingClicked: EventEmitter<string> = new EventEmitter<string>();\n\n\t/**\n\t * Provides event notifications that fire when refresh recordings button has been clicked.\n\t * The recordings should be updated using the REST API.\n\t */\n\t@Output() onRefreshRecordingsClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when logout button has been clicked.\n\t */\n\t@Output() onLogoutClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * @internal\n\t */\n\trecordings: RecordingInfo[] = [];\n\t/**\n\t * @internal\n\t */\n\tsortDescendent = true;\n\t/**\n\t * @internal\n\t */\n\tsortByLegend = 'Sort by';\n\t/**\n\t * @internal\n\t */\n\tsearchValue = '';\n\tprivate adminSubscription: Subscription;\n\t/**\n\t * @internal\n\t */\n\tconstructor(\n\t\tprivate actionService: ActionService,\n\t\tprivate recordingService: RecordingService,\n\t\tprivate libService: OpenViduAngularConfigService\n\t) {}\n\n\t/**\n\t * @internal\n\t */\n\tngOnInit(): void {\n\t\tthis.subscribeToAdminDirectives();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tngOnDestroy() {\n\t\tif (this.adminSubscription) this.adminSubscription.unsubscribe();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tlogout() {\n\t\tthis.onLogoutClicked.emit();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsortRecordingsByDate() {\n\t\tthis.recordings.sort((a, b) => {\n\t\t\tif (a.createdAt > b.createdAt) {\n\t\t\t\treturn this.sortDescendent ? -1 : 1;\n\t\t\t} else if (a.createdAt < b.createdAt) {\n\t\t\t\treturn this.sortDescendent ? 1 : -1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t\tthis.sortByLegend = 'Date';\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsortRecordingsByDuration() {\n\t\tthis.recordings.sort((a, b) => {\n\t\t\tif (a.duration > b.duration) {\n\t\t\t\treturn this.sortDescendent ? -1 : 1;\n\t\t\t} else if (a.duration < b.duration) {\n\t\t\t\treturn this.sortDescendent ? 1 : -1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t\tthis.sortByLegend = 'Duration';\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsortRecordingsBySize() {\n\t\tthis.recordings.sort((a, b) => {\n\t\t\tif (a.size > b.size) {\n\t\t\t\treturn this.sortDescendent ? -1 : 1;\n\t\t\t} else if (a.size < b.size) {\n\t\t\t\treturn this.sortDescendent ? 1 : -1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t\tthis.sortByLegend = 'Size';\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tdeleteRecording(recordingId: string) {\n\t\tconst succsessCallback = () => {\n\t\t\tthis.onDeleteRecordingClicked.emit(recordingId);\n\t\t};\n\t\tthis.actionService.openDeleteRecordingDialog(succsessCallback);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tdownload(recording: RecordingInfo) {\n\t\tthis.recordingService.downloadRecording(recording);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\trefreshRecordings() {\n\t\tthis.onRefreshRecordingsClicked.emit();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tasync play(recording: RecordingInfo) {\n\t\tthis.recordingService.playRecording(recording);\n\t}\n\n\tprivate subscribeToAdminDirectives() {\n\t\tthis.adminSubscription = this.libService.adminRecordingsListObs.subscribe((recordings: RecordingInfo[]) => {\n\t\t\tthis.recordings = recordings;\n\t\t});\n\t}\n}\n","<div class=\"dashboard-container\">\n\t<mat-toolbar class=\"header\">\n\t\t<span>{{ 'ADMIN.DASHBOARD' | translate }}</span>\n\t\t<div class=\"refresh-btn\">\n\t\t\t<button matSuffix mat-icon-button aria-label=\"Refresh\" (click)=\"logout()\">\n\t\t\t\t<mat-icon>logout</mat-icon>\n\t\t\t</button>\n\t\t</div>\n\t</mat-toolbar>\n\n\t<div class=\"dashboard-body\">\n\t\t<div id=\"toolbar-search\">\n\t\t\t<div class=\"search-bar\">\n\t\t\t\t<textarea\n\t\t\t\t\tid=\"search-input\"\n\t\t\t\t\tmaxlength=\"100\"\n\t\t\t\t\trows=\"4\"\n\t\t\t\t\tplaceholder=\"{{ 'ADMIN.SEARCH' | translate }}\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t[(ngModel)]=\"searchValue\"\n\t\t\t\t></textarea>\n\t\t\t\t<div>\n\t\t\t\t\t<button *ngIf=\"searchValue\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"searchValue = ''\">\n\t\t\t\t\t\t<mat-icon>close</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t\t<button *ngIf=\"!searchValue\" matSuffix mat-icon-button aria-label=\"Search\">\n\t\t\t\t\t\t<mat-icon>search</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<button id=\"sort-menu-btn\" color=\"primary\" mat-flat-button [matMenuTriggerFor]=\"sortMenu\">\n\t\t\t\t\t{{ sortByLegend }}\n\t\t\t\t\t<mat-icon>arrow_drop_down</mat-icon>\n\t\t\t\t</button>\n\n\t\t\t\t<mat-menu #sortMenu=\"matMenu\">\n\t\t\t\t\t<button mat-menu-item class=\"order-select-btn\" (click)=\"sortRecordingsByDate()\">{{ 'ADMIN.DATE' | translate }}</button>\n\t\t\t\t\t<button mat-menu-item class=\"order-select-btn\" (click)=\"sortRecordingsByDuration()\">\n\t\t\t\t\t\t{{ 'ADMIN.DURATION' | translate }}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button mat-menu-item class=\"order-select-btn\" (click)=\"sortRecordingsBySize()\">{{ 'ADMIN.SIZE' | translate }}</button>\n\t\t\t\t</mat-menu>\n\n\t\t\t\t<div class=\"refresh-btn\">\n\t\t\t\t\t<button matSuffix mat-icon-button aria-label=\"Refresh\" (click)=\"refreshRecordings()\">\n\t\t\t\t\t\t<mat-icon>refresh</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"recordings-container\">\n\t\t\t<div *ngIf=\"!recordings || recordings.length === 0\" class=\"no-recordings-warn\">\n\t\t\t\t<span>{{ 'ADMIN.NO_RECORDINGS' | translate }}</span>\n\t\t\t</div>\n\n\t\t\t<div\n\t\t\t\t*ngFor=\"\n\t\t\t\t\tlet recording of recordings\n\t\t\t\t\t\t| searchByStringProperty: { properties: ['sessionId', 'properties?.name || name'], filter: searchValue }\n\t\t\t\t\"\n\t\t\t\tclass=\"item\"\n\t\t\t>\n\t\t\t\t<mat-card class=\"recording-card\">\n\t\t\t\t\t<mat-card-content>\n\t\t\t\t\t\t<div class=\"video-div-container\">\n\t\t\t\t\t\t\t<img *ngIf=\"!!recording.url\" [src]=\"recording.url | thumbnailUrl\" />\n\t\t\t\t\t\t\t<div class=\"video-btns\">\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t*ngIf=\"recording.status !== 'failed' && recording.status !== 'stopped'\"\n\t\t\t\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\t\t\t\t(click)=\"play(recording)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<mat-icon id=\"play\" aria-label=\"Play\" title=\"{{ 'PANEL.RECORDING.PLAY' | translate }}\"\n\t\t\t\t\t\t\t\t\t\t>play_arrow</mat-icon\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t(click)=\"download(recording)\"\n\t\t\t\t\t\t\t\t\t*ngIf=\"!!recording.url && recording.status !== 'failed' && recording.status !== 'stopped'\"\n\t\t\t\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\t\t\t\taria-label=\"Download\"\n\t\t\t\t\t\t\t\t\ttitle=\"{{ 'PANEL.RECORDING.DOWNLOAD' | translate }}\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<mat-icon id=\"download\">download</mat-icon>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t<button mat-icon-button class=\"delete-recording-btn\" (click)=\"deleteRecording(recording.id)\">\n\t\t\t\t\t\t\t\t\t<mat-icon id=\"delete\" aria-label=\"Delete\" title=\"{{ 'PANEL.RECORDING.DELETE' | translate }}\"\n\t\t\t\t\t\t\t\t\t\t>delete</mat-icon\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"video-info-container\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<div class=\"video-div-tag\">\n\t\t\t\t\t\t\t\t\t<span class=\"video-card-tag\">{{ 'ADMIN.NAME' | translate }}</span\n\t\t\t\t\t\t\t\t\t><span class=\"video-card-value\">{{ recording.properties?.name || recording.name }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"video-div-tag\">\n\t\t\t\t\t\t\t\t\t<span class=\"video-card-tag\">{{ 'ADMIN.SESSION' | translate }}</span\n\t\t\t\t\t\t\t\t\t><span class=\"video-card-value\">{{ recording.sessionId }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"video-div-tag\">\n\t\t\t\t\t\t\t\t\t<span class=\"video-card-tag\">{{ 'ADMIN.OUTPUT' | translate }}</span\n\t\t\t\t\t\t\t\t\t><span class=\"video-card-value\">{{ recording.properties?.outputMode || recording.outputMode }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"video-div-tag\">\n\t\t\t\t\t\t\t\t\t<span class=\"video-card-tag\">{{ 'ADMIN.DATE' | translate }}</span\n\t\t\t\t\t\t\t\t\t><span class=\"video-card-value\">{{ recording.createdAt | date: 'M/d/yy, H:mm' }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"video-div-tag\">\n\t\t\t\t\t\t\t\t\t<span class=\"video-card-tag\">{{ 'ADMIN.DURATION' | translate }}</span\n\t\t\t\t\t\t\t\t\t><span class=\"video-card-value\">{{ recording.duration | duration }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"video-div-tag\">\n\t\t\t\t\t\t\t\t\t<span class=\"video-card-tag\">{{ 'ADMIN.SIZE' | translate }}</span\n\t\t\t\t\t\t\t\t\t><span class=\"video-card-value\">{{ recording.size / 1024 / 1024 | number: '1.1-2' }} MBs</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"video-div-tag\" style=\"margin-top: 11px\">\n\t\t\t\t\t\t\t\t\t<span class=\"video-card-tag\">{{ 'ADMIN.STATUS' | translate }}</span\n\t\t\t\t\t\t\t\t\t><span class=\"video-card-value status-value\" [ngClass]=\"recording.status\">{{ recording.status }}</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</mat-card-content>\n\t\t\t\t</mat-card>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<mat-toolbar class=\"footer\" fxLayout fxLayout.xs=\"row\" fxLayoutGap=\"2px\" id=\"footer\" role=\"heading\">\n\t\t<span>{{ 'ADMIN.POWERED_BY' | translate }}</span>\n\t\t<a href=\"https://openvidu.io/\">OpenVidu</a>\n\t</mat-toolbar>\n</div>\n","import { Component, ElementRef, EventEmitter, OnInit, Output, ViewChild } from '@angular/core';\nimport { UntypedFormControl, Validators, FormGroupDirective, NgForm } from '@angular/forms';\nimport { ErrorStateMatcher } from '@angular/material/core';\nimport { Subscription } from 'rxjs';\nimport { ActionService } from '../../services/action/action.service';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\n\n@Component({\n\tselector: 'ov-admin-login',\n\ttemplateUrl: './login.component.html',\n\tstyleUrls: ['./login.component.css']\n})\nexport class AdminLoginComponent implements OnInit {\n\t/**\n\t * Provides event notifications that fire when login button has been clicked.\n\t * The event will contain the password value.\n\t */\n\t@Output() onLoginButtonClicked: EventEmitter<string> = new EventEmitter<string>();\n\n\t/**\n\t * @internal\n\t */\n\tcheckingLogged = false;\n\t/**\n\t * @internal\n\t */\n\tsecret: string;\n\t/**\n\t * @internal\n\t */\n\tshowSpinner = false;\n\n\t/**\n\t * @internal\n\t */\n\tloginFormControl = new UntypedFormControl('', [Validators.required]);\n\t/**\n\t * @internal\n\t */\n\tmatcher = new FormErrorStateMatcher();\n\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('submitBtn') submitBtn: ElementRef;\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('loginForm', { read: ElementRef }) loginForm: ElementRef;\n\n\tprivate errorSub: Subscription;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(private libService: OpenViduAngularConfigService, private actionService: ActionService) {}\n\n\t/**\n\t * @internal\n\t */\n\tngOnInit() {\n\t\tthis.subscribeToAdminLoginDirectives();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tngOnDestroy() {\n\t\tthis.showSpinner = false;\n\t\tif (this.errorSub) this.errorSub.unsubscribe();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tlogin() {\n\t\tthis.showSpinner = true;\n\t\tthis.onLoginButtonClicked.emit(this.secret);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsubmitForm() {\n\t\tif (this.loginForm.nativeElement.checkValidity()) {\n\t\t\tthis.login();\n\t\t} else {\n\t\t\tthis.submitBtn.nativeElement.click();\n\t\t}\n\t}\n\n\tprivate subscribeToAdminLoginDirectives() {\n\t\tthis.errorSub = this.libService.adminLoginErrorObs.subscribe((value) => {\n\t\t\tconst errorExists = !!value;\n\t\t\tif (errorExists) {\n\t\t\t\tthis.showSpinner = false;\n\t\t\t\tthis.actionService.openDialog(value.error, value.message, true);\n\t\t\t}\n\t\t});\n\t}\n}\n/**\n * @internal\n */\nexport class FormErrorStateMatcher implements ErrorStateMatcher {\n\tisErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean {\n\t\tconst isSubmitted = form && form.submitted;\n\t\treturn !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));\n\t}\n}\n","<mat-toolbar class=\"header\">\n</mat-toolbar>\n\n<div *ngIf=\"checkingLogged\" class=\"outer\">\n\t<div class=\"middle\">\n\t\t<div class=\"inner\">\n\t\t\t<mat-spinner *ngIf=\"checkingLogged\"></mat-spinner>\n\t\t</div>\n\t</div>\n</div>\n\n<mat-card *ngIf=\"!checkingLogged\">\n\t<mat-card-content>\n\t\t<form ngNativeValidate #loginForm (ngSubmit)=\"login()\">\n\t\t\t<table class=\"full-width\" cellspacing=\"0\">\n\t\t\t\t<tr>\n\t\t\t\t\t<td>\n\t\t\t\t\t\t<mat-form-field id=\"secret-field\" class=\"full-width\" appearance=\"outline\">\n\t\t\t\t\t\t\t<mat-label>{{ 'ADMIN.SECRET' | translate }}</mat-label>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tid=\"secret-input\"\n\t\t\t\t\t\t\t\tmatInput\n\t\t\t\t\t\t\t\t[(ngModel)]=\"secret\"\n\t\t\t\t\t\t\t\t[disabled]=\"showSpinner\"\n\t\t\t\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t\t\t\tname=\"secret\"\n\t\t\t\t\t\t\t\tautocomplete=\"current-password\"\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<mat-error *ngIf=\"loginFormControl.hasError('required')\"> {{ 'ADMIN.SECRET_REQURED' | translate }} </mat-error>\n\t\t\t\t\t\t</mat-form-field>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</table>\n\t\t\t<input #submitBtn type=\"submit\" [style.display]=\"'none'\" />\n\t\t</form>\n\t\t<mat-spinner [style.display]=\"showSpinner ? 'block' : 'none'\"></mat-spinner>\n\t</mat-card-content>\n\t<mat-card-actions>\n\t\t<button mat-flat-button id=\"login-btn\" type=\"submit\" (click)=\"submitForm()\" color=\"primary\" class=\"full-width\">\n\t\t\t{{ 'ADMIN.LOGIN' | translate }}\n\t\t</button>\n\t</mat-card-actions>\n</mat-card>\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core';\n\n/**\n * The ***ovToolbar** directive allows to replace the default toolbar component with a custom one.\n * In the example below we've replaced the default toolbar and added the **toggleAudio** and **toggleVideo** buttons.\n * Here we are using the {@link OpenViduService} for publishing/unpublishing the audio and video.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-custom-toolbar#running-this-tutorial).\n *\n *```html\n *<ov-videoconference [tokens]=\"tokens\">\n *\t<div *ovToolbar style=\"text-align: center;\">\n *\t\t<button (click)=\"toggleVideo()\">Toggle Video</button>\n *\t\t<button (click)=\"toggleAudio()\">Toggle Audio</button>\n *\t</div>\n *</ov-videoconference>\n * ```\n *\n * ```javascript\n * export class ToolbarDirectiveComponent {\n *\n *\tsessionId = 'toolbar-directive-example';\n *\ttokens!: TokenModel;\n *\n *\tpublishVideo = true;\n *\tpublishAudio = true;\n *\n *\tconstructor(private httpClient: HttpClient, private openviduService: OpenViduService) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken()\n *\t\t};\n *\t}\n *\n *\ttoggleVideo() {\n *\t\tthis.publishVideo = !this.publishVideo;\n *\t\tthis.openviduService.publishVideo(this.publishVideo);\n *\t}\n *\n *\ttoggleAudio() {\n *\t\tthis.publishAudio = !this.publishAudio;\n *\t\tthis.openviduService.publishAudio(this.publishAudio);\n *\t}\n *\n *\tasync getToken(): Promise<string> {\n * \t\t// Returns an OpeVidu token\n * \t}\n * \n * }\n * ```\n *\n */\n@Directive({\n\tselector: '[ovToolbar]'\n})\nexport class ToolbarDirective {\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n/**\n * The ***ovToolbarAdditionalButtons** directive allows to add additional buttons to center buttons group.\n * In the example below we've added the same buttons as the {@link ToolbarDirective}.\n * Here we are using the {@link ParticipantService} to check the audio or video status.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-toolbar-buttons#running-this-tutorial).\n *\n *```html\n *<ov-videoconference [tokens]=\"tokens\" [toolbarDisplaySessionName]=\"false\">\n *\t<div *ovToolbarAdditionalButtons style=\"text-align: center;\">\n *\t\t<button mat-icon-button (click)=\"toggleVideo()\">\n *\t\t\t<mat-icon>videocam</mat-icon>\n *\t\t</button>\n *\t\t<button mat-icon-button (click)=\"toggleAudio()\">\n *\t\t\t<mat-icon>mic</mat-icon>\n *\t\t</button>\n *\t</div>\n *</ov-videoconference>\n * ```\n *\n * ```javascript\n * export class ToolbarAdditionalButtonsDirectiveComponent {\n *\n    sessionId = \"panel-directive-example\";\n    tokens!: TokenModel;\n\n   \n *\tsessionId = 'toolbar-additionalbtn-directive-example';\n *\ttokens!: TokenModel;\n *\n *\tconstructor(\n *\t\tprivate httpClient: HttpClient,\n *\t\tprivate openviduService: OpenViduService,\n *\t\tprivate participantService: ParticipantService\n *\t) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken()\n *\t\t};\n *\t}\n *\n *\ttoggleVideo() {\n *\t\tconst publishVideo = !this.participantService.isMyVideoActive();\n *\t\tthis.openviduService.publishVideo(publishVideo);\n *\t}\n *\n *\ttoggleAudio() {\n *\t\tconst publishAudio = !this.participantService.isMyAudioActive();\n *\t\tthis.openviduService.publishAudio(publishAudio);\n *\t}\n *\n *\tasync getToken(): Promise<string> {\n * \t\t// Returns an OpeVidu token\n * \t}\n * \n * }\n * ```\n */\n@Directive({\n\tselector: '[ovToolbarAdditionalButtons]'\n})\nexport class ToolbarAdditionalButtonsDirective {\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n\n/**\n * The ***ovToolbarAdditionalPanelButtons** directive allows to add additional **panel buttons** to the toolbar.\n * In the example below we've added a simple button without any functionality. To learn how to toggle the panel check the {@link AdditionalPanelsDirective}.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-toolbar-panel-buttons#running-this-tutorial).\n *\n *```html\n *<ov-videoconference [tokens]=\"tokens\" [toolbarDisplaySessionName]=\"false\">\n *\t<div *ovToolbarAdditionalPanelButtons style=\"text-align: center;\">\n *\t\t<button (click)=\"onButtonClicked()\">MY PANEL</button>\n *\t</div>\n *</ov-videoconference>\n * ```\n *\n * ```javascript\n * export class ToolbarAdditionalPanelButtonsDirectiveComponent {\n * \n *  sessionId = \"toolbar-additionalPanelbtn\";\n *  tokens!: TokenModel;\n *\n *  constructor(private httpClient: HttpClient) { }\n *\n * async ngOnInit() {\n *    this.tokens = {\n *     webcam: await this.getToken(),\n *      screen: await this.getToken(),\n *    };\n *  }\n *\n *  onButtonClicked() {\n *    alert('button clicked');\n *  }\n *\n *  async getToken(): Promise<string> {\n *    // Returns an OpeVidu token\n *  }\n * \n * }\n * ```\n */\n@Directive({\n\tselector: '[ovToolbarAdditionalPanelButtons]'\n})\nexport class ToolbarAdditionalPanelButtonsDirective {\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n\n/**\n * The ***ovPanel** directive allows to replace the default panels with your own custom panels. This directive also allows to insert elements\n * tagged with the {@link ChatPanelDirective}, {@link ParticipantsPanelDirective} and {@link AdditionalPanelsDirective}.\n *\n * In the example below we replace the entire {@link PanelComponent} using the ***ovPanel** directive. Inside of it, we customize\n * the {@link ParticipantsPanelComponent} and {@link ChatPanelcomponent} using their own directives.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-custom-panels#running-this-tutorial).\n *\n *```html\n *<ov-videoconference [tokens]=\"tokens\">\n *\t<ov-panel *ovPanel>\n *\t\t<div *ovChatPanel id=\"my-chat-panel\">This is my custom chat panel</div>\n *\t\t<div *ovParticipantsPanel id=\"my-participants-panel\">\n *\t\t\tThis is my custom participants panel\n *\t\t</div>\n *\t</ov-panel>\n *</ov-videoconference>\n * ```\n *\n * ```javascript\n * export class PanelDirectiveComponent {\n * \n *\tsessionId = \"panel-directive-example\";\n *\ttokens!: TokenModel;\n *\n *\tconstructor(private httpClient: HttpClient) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken(),\n *\t\t};\n *\t}\n *\n *\tasync getToken(): Promise<string> {\n *\t\t// Returns an OpeVidu token\n *\t}\n * \n * }\n * ```\n */\n@Directive({\n\tselector: '[ovPanel]'\n})\nexport class PanelDirective {\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n\n/**\n * The ***ovAdditionalPanels** directive allows to add more extra panels to the {@link PanelComponent}. In this example we add a new\n * panel alongside the default ones.\n *\n * To mimic the toggling behavior of the default panels, we need to add a new button in the {@link ToolbarComponent}\n * using the {@link ToolbarAdditionalPanelButtonsDirective}.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-additional-panels#running-this-tutorial).\n *\n *```html\n *<ov-videoconference [tokens]=\"tokens\" [toolbarDisplaySessionName]=\"false\">\n *\t<div *ovToolbarAdditionalPanelButtons style=\"text-align: center;\">\n *\t\t<button mat-icon-button (click)=\"toggleMyPanel('my-panel')\">\n *\t\t\t<mat-icon>360</mat-icon>\n *\t\t</button>\n *\t\t<button mat-icon-button (click)=\"toggleMyPanel('my-panel2')\">\n *\t\t\t<mat-icon>star</mat-icon>\n *\t\t</button>\n *\t</div>\n *\t<div *ovAdditionalPanels id=\"my-panels\">\n *\t\t<div id=\"my-panel1\" *ngIf=\"showExternalPanel\">\n *\t\t\t<h2>NEW PANEL</h2>\n *\t\t\t<p>This is my new additional panel</p>\n *\t\t</div>\n *\t\t<div id=\"my-panel2\" *ngIf=\"showExternalPanel2\">\n *\t\t\t<h2>NEW PANEL 2</h2>\n *\t\t\t<p>This is other new panel</p>\n *\t\t</div>\n *\t</div>\n *</ov-videoconference>\n * ```\n * <br/>\n *\n * We need to subscribe to the {@link ../injectables/PanelService.html#panelOpenedObs panelOpenedObs} Observable to listen to the panel status and update our boolean variables\n * (`showExternalPanel` and `showExternalPanel2`) in charge of showing or hiding them.\n *\n * ```javascript\n * export class AdditionalPanelsDirectiveComponent implements OnInit {\n * \n *\tsessionId = \"toolbar-additionalbtn-directive-example\";\n *\ttokens!: TokenModel;\n *\n *\tshowExternalPanel: boolean = false;\n *\tshowExternalPanel2: boolean = false;\n *\n *\tconstructor(\n *\t\tprivate httpClient: HttpClient,\n *\t\tprivate panelService: PanelService\n *\t) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.subscribeToPanelToggling();\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken(),\n *\t\t};\n *\t}\n *\n *\tsubscribeToPanelToggling() {\n *\t\tthis.panelService.panelOpenedObs.subscribe(\n *\t\t\t(ev: { opened: boolean; type?: PanelType | string }) => {\n *\t\t\t\tthis.showExternalPanel = ev.opened && ev.type === \"my-panel\";\n *\t\t\t\tthis.showExternalPanel2 = ev.opened && ev.type === \"my-panel2\";\n *\t\t\t}\n *\t\t);\n *\t}\n *\n *\ttoggleMyPanel(type: string) {\n *\t\tthis.panelService.togglePanel(type);\n *\t}\n *\n *\tasync getToken(): Promise<string> {\n *\t\t// Returns an OpeVidu token\n *\t}\n *\n * }\n * ```\n */\n@Directive({\n\tselector: '[ovAdditionalPanels]'\n})\nexport class AdditionalPanelsDirective {\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n\n/**\n * The ***ovChatPanel** directive allows to replace the default chat panel template with a custom one.\n * In the example below we replace the chat template in a few lines of code.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-custom-chat-panel#running-this-tutorial).\n *\n * ```html\n *<ov-videoconference\n *\t(onSessionCreated)=\"onSessionCreated($event)\"\n *\t[tokens]=\"tokens\"\n *\t[toolbarDisplaySessionName]=\"false\">\n *\t<div *ovChatPanel id=\"my-panel\">\n *\t\t<h3>Chat</h3>\n *\t\t<div>\n *\t\t\t<ul>\n *\t\t\t\t<li *ngFor=\"let msg of messages\">{{ msg }}</li>\n *\t\t\t</ul>\n *\t\t</div>\n *\t\t<input value=\"Hello\" #input />\n *\t\t<button (click)=\"send(input.value)\">Send</button>\n *\t</div>\n *</ov-videoconference>\n *```\n * <br/>\n *\n * As we need to get the openvidu-browser **[Session](https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/Session.html)**\n * object for sending messages to others, we can get it from the `onSessionCreated` event fired by the {@link VideoconferenceComponent}\n * when the session has been created.\n *\n * Once we have the session created, we can use the\n * [signal](https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/Session.html#signal) method to send our messages.\n *\n * ```javascript\n * export class ChatPanelDirectiveComponent {\n *\n *\tsessionId = \"chat-panel-directive-example\";\n *\ttokens!: TokenModel;\n *\n *\tsession!: Session;\n *\tmessages: string[] = [];\n *\n *\tconstructor(private httpClient: HttpClient) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken(),\n *\t\t};\n *\t}\n *\n *\tonSessionCreated(session: Session) {\n *\t\tthis.session = session;\n *\t\tthis.session.on(`signal:${Signal.CHAT}`, (event: any) => {\n *\t\t\tconst msg = JSON.parse(event.data).message;\n *\t\t\tthis.messages.push(msg);\n *\t\t});\n *\t}\n *\n *\tsend(message: string): void {\n *\t\tconst signalOptions: SignalOptions = {\n *\t\t\tdata: JSON.stringify({ message }),\n *\t\t\ttype: Signal.CHAT,\n *\t\t\tto: undefined,\n *\t\t};\n *\t\tthis.session.signal(signalOptions);\n *\t}\n *\n *\tasync getToken(): Promise<string> {\n *\t\t// Returns an OpeVidu token\n *\t}\n *\n * }\n * ```\n *\n */\n@Directive({\n\tselector: '[ovChatPanel]'\n})\nexport class ChatPanelDirective {\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n/**\n * backgroundEffectsPanel does not provide any customization for now\n * @internal\n */\n@Directive({\n\tselector: '[ovBackgroundEffectsPanel]'\n})\nexport class BackgroundEffectsPanelDirective {\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n\n/**\n * The ***ovActivitiesPanel** directive allows to replace the default activities panel template with a custom one.\n * In the example below we replace the activities template in a few lines of code.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-custom-activities-panel#running-this-tutorial).\n *\n * ```html\n *<ov-videoconference\n *\t[tokens]=\"tokens\"\n *\t[toolbarRecordingButton]=\"false\"\n *\t[toolbarDisplaySessionName]=\"false\">\n *\t<div *ovActivitiesPanel id=\"my-panel\">\n *\t\t<h3>ACTIVITIES</h3>\n *\t\t<div>\n *\t\t\tCUSTOM ACTIVITIES\n *\t\t</div>\n *\t</div>\n *</ov-videoconference>\n *```\n * <br/>\n *\n * As we need to assign the OpenVidu Tokens to the {@link VideoconferenceComponent}, we request them on the ngOnInit Angular lifecycle hook.\n *\n * ```javascript\n * export class AppComponent implements OnInit {\n * \n *\tsessionId = \"activities-panel-directive-example\";\n *\ttokens!: TokenModel;\n *\n *\tconstructor(private httpClient: HttpClient) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken(),\n *\t\t};\n *\t}\n *\n *\tasync getToken(): Promise<string> {\n *\t\t// Returns an OpeVidu token\n *\t}\n *\n *}\n * ```\n *\n */\n@Directive({\n\tselector: '[ovActivitiesPanel]'\n})\nexport class ActivitiesPanelDirective {\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n/**\n * The ***ovParticipantsPanel** directive allows to replace the default participants panel template with a custom one.\n * In the example below we replace the participants template in a few lines of code.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-custom-participants-panel#running-this-tutorial).\n *\n * ```html\n *<ov-videoconference [tokens]=\"tokens\" [toolbarDisplaySessionName]=\"false\" (onSessionCreated)=\"subscribeToParticipants()\">\n *\t<div *ovParticipantsPanel id=\"my-panel\">\n *\t\t<ul id=\"local\">\n *\t\t\t<li>{{localParticipant.nickname}}</li>\n *\t\t</ul>\n *\t\t<ul id=\"remote\">\n *\t\t\t<li *ngFor=\"let p of remoteParticipants\">{{p.nickname}}</li>\n *\t\t</ul>\n *\t</div>\n *</ov-videoconference>\n *```\n * <br/>\n *\n * We need to get the participants in our Session, so we use the {@link ParticipantService} to subscribe to the required Observables.\n * We'll get the local participant and the remote participants to update our custom participants panel on any change.\n *\n * ```javascript\n * export class ParticipantsPanelDirectiveComponent implements OnInit, OnDestroy {\n *\n *\tsessionId = 'participants-panel-directive-example';\n *\ttokens!: TokenModel;\n *\n *\tlocalParticipant!: ParticipantAbstractModel;\n *\tremoteParticipants!: ParticipantAbstractModel[];\n *\tlocalParticipantSubs!: Subscription;\n *\tremoteParticipantsSubs!: Subscription;\n *\n *\tconstructor(private httpClient: HttpClient, private participantService: ParticipantService) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken()\n *\t\t};\n *\t}\n *\n *\tngOnDestroy() {\n *\t\tthis.localParticipantSubs.unsubscribe();\n *\t\tthis.remoteParticipantsSubs.unsubscribe();\n *\t}\n *\n *\tsubscribeToParticipants() {\n *\t\tthis.localParticipantSubs = this.participantService.localParticipantObs.subscribe((p) => {\n *\t\t\tthis.localParticipant = p;\n *\t\t});\n *\t\tthis.remoteParticipantsSubs = this.participantService.remoteParticipantsObs.subscribe((participants) => {\n *\t\t\tthis.remoteParticipants = participants;\n *\t\t});\n *\t}\n *\n *\tasync getToken(): Promise<string> {\n *\t\t// Returns an OpeVidu token\n *\t}\n *\n * }\n * ```\n *\n */\n@Directive({\n\tselector: '[ovParticipantsPanel]'\n})\nexport class ParticipantsPanelDirective {\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n\n/**\n * The ***ovParticipantPanelItem** directive allows to replace the default participant panel item template in the {@link ParticipantsPanelComponent} with a custom one.\n *\n * With ***ovParticipantPanelItem** directive we can access the participant object from its context using the `let` keyword and referencing the `participant`\n * variable: `*ovParticipantPanelItem=\"let participant\"`. Now we can access the {@link ParticipantAbstractModel} object.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-custom-participant-panel-item#running-this-tutorial).\n *\n * ```html\n *<ov-videoconference [tokens]=\"tokens\" [toolbarDisplaySessionName]=\"false\">\n *\t<div *ovParticipantPanelItem=\"let participant\" style=\"display: flex\">\n *\t\t<p>{{ participant.nickname }}</p>\n *\t\t<button mat-icon-button [matMenuTriggerFor]=\"menu\"><mat-icon>more_vert</mat-icon></button>\n *\t\t<mat-menu #menu=\"matMenu\">\n *\t\t\t<button mat-menu-item>Button 1</button>\n *\t\t\t<button mat-menu-item>Button 2</button>\n *\t\t</mat-menu>\n *\t</div>\n *</ov-videoconference>\n *```\n *\n * ```javascript\n * export class ParticipantPanelItemDirectiveComponent {\n *\n *\tsessionId = 'participants-panel-directive-example';\n *\ttokens!: TokenModel;\n *\n *\tconstructor(private httpClient: HttpClient) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken()\n *\t\t};\n *\t}\n *\n * \tasync getToken(): Promise<string> {\n *\t\t// Returns an OpeVidu token\n *\t}\n * \n * }\n * ```\n *\n */\n@Directive({\n\tselector: '[ovParticipantPanelItem]'\n})\nexport class ParticipantPanelItemDirective {\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n/**\n * The ***ovParticipantPanelItemElements** directive allows to add elements to the {@link ParticipantsPanelItemComponent}.\n * In the example below we add a simple button to disconnect from the session.\n *\n * With ***ovParticipantPanelItemElements** directive we can access the participant object from its context using\n * the `let` keyword and referencing the `participant` variable: `*ovParticipantPanelItem=\"let participant\"`.\n * Now we can access the {@link ParticipantAbstractModel} object and enable the button just for the local participant.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-custom-participant-panel-item-element#running-this-tutorial).\n *\n * ```html\n *<ov-videoconference\n *\t*ngIf=\"connected\"\n *\t[tokens]=\"tokens\"\n *\t[toolbarDisplaySessionName]=\"false\">\n *\t<div *ovParticipantPanelItemElements=\"let participant\">\n *\t\t<button *ngIf=\"participant.local\" (click)=\"leaveSession()\">\n *\t\t\tLeave\n *\t\t</button>\n *\t</div>\n *</ov-videoconference>\n *<div *ngIf=\"!connected\" style=\"text-align: center;\">Session disconnected</div>\n *```\n *\n * ```javascript\n * export class ParticipantPanelItemElementsDirectiveComponent {\n *\n *\tsessionId = \"participants-panel-directive-example\";\n *\ttokens!: TokenModel;\n *\n *\tconnected = true;\n *\n *\tconstructor(private httpClient: HttpClient, private openviduService: OpenViduService) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken(),\n *\t\t};\n *\t}\n *\n *\tleaveSession() {\n *\t\tthis.openviduService.disconnect();\n *\t\tthis.connected = false;\n *\t}\n *\n * \tasync getToken(): Promise<string> {\n *\t\t// Returns an OpeVidu token\n *\t}\n *\n * }\n * ```\n */\n@Directive({\n\tselector: '[ovParticipantPanelItemElements]'\n})\nexport class ParticipantPanelItemElementsDirective {\n\tconstructor(public template: TemplateRef<any>, public viewContainer: ViewContainerRef) {}\n}\n\n\n/**\n * The ***ovLayout** directive allows to replace the default session layout with a custom one.\n *\n * As the deafult {@link StreamComponent} needs the participant stream, and as the participants streams extraction is not trivial,\n * openvidu-angular provides a {@link ParticipantStreamsPipe} for easy extraction of the stream of each participant. In the example\n * below you can see that on the HTML template, as the last component of the `*ngFor` statements (`| streams`).\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-custom-layout#running-this-tutorial).\n *\n * ```html\n *<ov-videoconference [tokens]=\"tokens\" (onSessionCreated)=\"subscribeToParticipants()\">\n *\t<div *ovLayout>\n *\t\t<div class=\"container\">\n *\t\t\t<div class=\"item\" *ngFor=\"let stream of localParticipant | streams\">\n *\t\t\t\t<ov-stream [stream]=\"stream\"></ov-stream>\n *\t\t\t</div>\n *\t\t\t<div class=\"item\" *ngFor=\"let stream of remoteParticipants | streams\">\n *\t\t\t\t<ov-stream [stream]=\"stream\"></ov-stream>\n *\t\t\t</div>\n *\t\t</div>\n *\t</div>\n *</ov-videoconference>\n *```\n *\n * We need to get the participants in our Session, so we use the {@link ParticipantService} to subscribe to the required Observables.\n * We'll get the local participant and the remote participants to display their streams in our custom session layout.\n * \n * ```javascript\n * export class LayoutDirectiveComponent implements OnInit, OnDestroy {\n * \n * \tsessionId = 'layout-directive-example';\n *\ttokens!: TokenModel;\n *\n *\tlocalParticipant!: ParticipantAbstractModel;\n *\tremoteParticipants!: ParticipantAbstractModel[];\n *\tlocalParticipantSubs!: Subscription;\n *\tremoteParticipantsSubs!: Subscription;\n *\n *\tconstructor(private httpClient: HttpClient, private participantService: ParticipantService) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken()\n *\t\t};\n *\t}\n *\n *\tngOnDestroy() {\n *\t\tthis.localParticipantSubs.unsubscribe();\n *\t\tthis.remoteParticipantsSubs.unsubscribe();\n *\t}\n *\n *\tsubscribeToParticipants() {\n *\t\tthis.localParticipantSubs = this.participantService.localParticipantObs.subscribe((p) => {\n *\t\t\tthis.localParticipant = p;\n *\t\t});\n *\n *\t\tthis.remoteParticipantsSubs = this.participantService.remoteParticipantsObs.subscribe((participants) => {\n *\t\t\tthis.remoteParticipants = participants;\n *\t\t});\n *\t}\n *\n * \tasync getToken(): Promise<string> {\n *\t\t// Returns an OpeVidu token\n *\t}\n * \n * }\n * ```\n */\n@Directive({\n\tselector: '[ovLayout]'\n})\nexport class LayoutDirective {\n\tconstructor(public template: TemplateRef<any>, public container: ViewContainerRef) {}\n}\n\n/**\n * The ***ovStream** directive allows to replace the default {@link StreamComponent} template injecting a custom one.\n * In the example below we customize the participant's nickname position and styles, replacing the default stream component.\n *\n * With ***ovStream** directive we can access to the stream object from its context using the `let` keyword and\n * referencing the `stream` variable: `*ovStream=\"let stream\"`. Now we can access the {@link StreamModel} object.\n *\n * You can run the associated tutorial [here](https://docs.openvidu.io/en/stable/components/openvidu-custom-stream#running-this-tutorial).\n *\n * ```html\n *<ov-videoconference [tokens]=\"tokens\">\n *\t<div *ovStream=\"let stream\">\n *\t\t<ov-stream [stream]=\"stream\" [displayParticipantName]=\"false\"></ov-stream>\n *\t\t<p>{{ stream.participant.nickname }}</p>\n *\t</div>\n *</ov-videoconference>\n * ```\n *\n * ```javascript\n * export class StreamDirectiveComponent {\n *\n *\tsessionId = 'toolbar-directive-example';\n *\ttokens!: TokenModel;\n *\n *\tconstructor(private httpClient: HttpClient) { }\n *\n *\tasync ngOnInit() {\n *\t\tthis.tokens = {\n *\t\t\twebcam: await this.getToken(),\n *\t\t\tscreen: await this.getToken()\n *\t\t};\n *\t}\n *\n * \tasync getToken(): Promise<string> {\n *\t\t// Returns an OpeVidu token\n *\t}\n *\n * }\n * ```\n */\n@Directive({\n\tselector: '[ovStream]'\n})\nexport class StreamDirective {\n\tconstructor(public template: TemplateRef<any>, public container: ViewContainerRef) {}\n}\n","/**\n * @internal\n */\nexport enum LayoutClass {\n\tROOT_ELEMENT = 'OT_root',\n\tBIG_ELEMENT = 'OV_big',\n\tSMALL_ELEMENT = 'OV_small',\n\tIGNORED_ELEMENT = 'OV_ignored',\n\tSIDENAV_CONTAINER = 'sidenav-container',\n\tNO_SIZE_ELEMENT = 'no-size',\n\tCLASS_NAME = 'layout'\n}\n\n/**\n * @internal\n */\nexport enum SidenavMode {\n\tOVER = 'over',\n\tSIDE = 'side'\n}\n\nexport enum LayoutAlignment {\n\tSTART = 'start',\n\tCENTER = 'center',\n\tEND = 'end'\n}\n\n/**\n * @internal\n */\nexport interface OpenViduLayoutOptions {\n\t/**\n\t * The narrowest ratio that will be used (*2x3* by default)\n\t */\n\tmaxRatio: number;\n\n\t/**\n\t * The widest ratio that will be used (*16x9* by default)\n\t */\n\tminRatio: number;\n\n\t/**\n\t * If this is true then the aspect ratio of the video is maintained and minRatio and maxRatio are ignored (*false* by default)\n\t */\n\tfixedRatio: boolean;\n\t/**\n\t * Whether you want to animate the transitions\n\t */\n\tanimate: any;\n\t/**\n\t * The class to add to elements that should be sized bigger\n\t */\n\tbigClass: string;\n\n\t/**\n\t * The class to add to elements that should be sized smaller\n\t */\n\tsmallClass: string;\n\n\t/**\n\t * The class to add to elements that should be ignored\n\t */\n\tignoredClass: string;\n\n\t/**\n\t * The maximum percentage of space the big ones should take up\n\t */\n\tbigPercentage: any;\n\n\t/**\n\t * If this is set then it will scale down the big space if there is left over whitespace down to this minimum size\n\t */\n\tminBigPercentage: number;\n\n\t/**\n\t * FixedRatio for the big ones\n\t */\n\tbigFixedRatio: any;\n\n\t/**\n\t * The narrowest ratio to use for the big elements (*2x3* by default)\n\t */\n\tbigMaxRatio: any;\n\n\t/**\n\t * The widest ratio to use for the big elements (*16x9* by default)\n\t */\n\tbigMinRatio: any;\n\n\t/**\n\t * Whether to place the big one in the top left `true` or bottom right\n\t */\n\tbigFirst: boolean | 'column' | 'row';\n\n\t/**\n\t *\n\t */\n\talignItems: LayoutAlignment;\n\t/**\n\t *\n\t */\n\tbigAlignItems: LayoutAlignment;\n\t/**\n\t *\n\t */\n\tsmallAlignItems: LayoutAlignment;\n\t/**\n\t *  The maximum width of the elements\n\t */\n\tmaxWidth: number;\n\t/**\n\t * The maximum height of the elements\n\t */\n\tmaxHeight: number;\n\tsmallMaxWidth: number;\n\tsmallMaxHeight: number;\n\tbigMaxWidth: number;\n\tbigMaxHeight: number;\n\n\t/**\n\t *  If there are less elements on the last row then we can scale them up to take up more space\n\t */\n\tscaleLastRow?: boolean;\n\t/**\n\t * Scale last row for the big elements\n\t */\n\tbigScaleLastRow?: boolean;\n}\n\n/**\n * @internal\n */\nexport class OpenViduLayout {\n\t/**\n\t * @hidden\n\t */\n\tprivate layoutContainer: HTMLElement;\n\n\t/**\n\t * @hidden\n\t */\n\tprivate opts: OpenViduLayoutOptions;\n\n\t/**\n\t * Update the layout container\n\t * module export layout\n\t */\n\tupdateLayout(container: HTMLElement, opts: any) {\n\t\tsetTimeout(() => {\n\t\t\tthis.layoutContainer = container;\n\t\t\tthis.opts = opts;\n\n\t\t\tif (this.css(this.layoutContainer, 'display') === 'none') {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet id = this.layoutContainer.id;\n\t\t\tif (!id) {\n\t\t\t\tid = 'OT_' + this.cheapUUID();\n\t\t\t\tthis.layoutContainer.id = id;\n\t\t\t}\n\n\t\t\topts.containerHeight =\n\t\t\t\tthis.getHeight(this.layoutContainer) -\n\t\t\t\tthis.getCSSNumber(this.layoutContainer, 'border-top') -\n\t\t\t\tthis.getCSSNumber(this.layoutContainer, 'border-bottom');\n\t\t\topts.containerWidth =\n\t\t\t\tthis.getWidth(this.layoutContainer) -\n\t\t\t\tthis.getCSSNumber(this.layoutContainer, 'border-left') -\n\t\t\t\tthis.getCSSNumber(this.layoutContainer, 'border-right');\n\n\t\t\tconst children = Array.prototype.filter.call(\n\t\t\t\tthis.layoutContainer.querySelectorAll(`#${id}>*:not(.${LayoutClass.IGNORED_ELEMENT})`),\n\t\t\t\t() => this.filterDisplayNone\n\t\t\t);\n\t\t\tconst elements = children.map((element) => {\n\t\t\t\tconst res = this.getChildDims(element);\n\t\t\t\tres.big = element.classList.contains(this.opts.bigClass);\n\t\t\t\treturn res;\n\t\t\t});\n\n\t\t\tconst layout = this.getLayout(opts, elements);\n\t\t\tlayout.boxes.forEach((box, idx) => {\n\t\t\t\tconst elem = children[idx];\n\t\t\t\tthis.css(elem, 'position', 'absolute');\n\t\t\t\tconst actualWidth =\n\t\t\t\t\tbox.width -\n\t\t\t\t\t-this.getCSSNumber(elem, 'margin-left') -\n\t\t\t\t\tthis.getCSSNumber(elem, 'margin-right') -\n\t\t\t\t\t(this.css(elem, 'box-sizing') !== 'border-box'\n\t\t\t\t\t\t? this.getCSSNumber(elem, 'padding-left') +\n\t\t\t\t\t\t  this.getCSSNumber(elem, 'padding-right') +\n\t\t\t\t\t\t  this.getCSSNumber(elem, 'border-left') +\n\t\t\t\t\t\t  this.getCSSNumber(elem, 'border-right')\n\t\t\t\t\t\t: 0);\n\n\t\t\t\tconst actualHeight =\n\t\t\t\t\tbox.height -\n\t\t\t\t\t-this.getCSSNumber(elem, 'margin-top') -\n\t\t\t\t\tthis.getCSSNumber(elem, 'margin-bottom') -\n\t\t\t\t\t(this.css(elem, 'box-sizing') !== 'border-box'\n\t\t\t\t\t\t? this.getCSSNumber(elem, 'padding-top') +\n\t\t\t\t\t\t  this.getCSSNumber(elem, 'padding-bottom') +\n\t\t\t\t\t\t  this.getCSSNumber(elem, 'border-top') +\n\t\t\t\t\t\t  this.getCSSNumber(elem, 'border-bottom')\n\t\t\t\t\t\t: 0);\n\n\t\t\t\tthis.positionElement(elem, box.left, box.top, actualWidth, actualHeight, this.opts.animate);\n\t\t\t});\n\t\t}, 50);\n\t}\n\n\t/**\n\t * Initialize the layout inside of the container with the options required\n\t * @param container\n\t * @param opts\n\t */\n\tinitLayoutContainer(container: HTMLElement, opts: OpenViduLayoutOptions) {\n\t\t// this.opts = this.defaults(opts, {\n\t\t//   maxRatio: 3 / 2,\n\t\t//   minRatio: 9 / 16,\n\t\t//   fixedRatio: false,\n\t\t//   animate: false,\n\t\t//   bigClass: LayoutClass.BIG_ELEMENT,\n\t\t//   smallClass: LayoutClass.SMALL_ELEMENT,\n\t\t//   bigPercentage: 0.8,\n\t\t//   bigFixedRatio: false,\n\t\t//   bigMaxRatio: 3 / 2,\n\t\t//   bigMinRatio: 9 / 16,\n\t\t//   bigFirst: true,\n\t\t//   alignItems: 'center',\n\t\t//   bigAlignItems: 'center',\n\t\t//   smallAlignItems: 'center'\n\t\t// });\n\t\tthis.opts = opts;\n\t\tthis.layoutContainer = container;\n\t\tthis.updateLayout(container, opts);\n\t}\n\n\tgetLayoutContainer(): HTMLElement {\n\t\treturn this.layoutContainer;\n\t}\n\n\t/**\n\t * Set the layout configuration\n\t * @param options\n\t */\n\t// private setLayoutOptions(options: OpenViduLayoutOptions) {\n\t// \tthis.opts = options;\n\t// }\n\n\tprivate css(el: HTMLVideoElement | HTMLElement, propertyName: any, value?: string) {\n\t\tif (!!value) {\n\t\t\t// We are setting one css property\n\t\t\tel.style[propertyName] = value;\n\t\t\treturn NaN;\n\t\t} else if (typeof propertyName === 'object') {\n\t\t\t// We are setting several CSS properties at once\n\t\t\tObject.keys(propertyName).forEach((key) => {\n\t\t\t\tthis.css(el, key, propertyName[key]);\n\t\t\t});\n\t\t\treturn NaN;\n\t\t} else {\n\t\t\t// We are getting the css property\n\t\t\tvar computedStyle = /*(this.opts && this.opts.window) ||*/ window.getComputedStyle(el);\n\t\t\tvar currentValue = computedStyle.getPropertyValue(propertyName);\n\n\t\t\tif (currentValue === '') {\n\t\t\t\tcurrentValue = el.style[propertyName];\n\t\t\t}\n\n\t\t\treturn currentValue;\n\t\t}\n\t}\n\n\tprivate height(el) {\n\t\tif (el.offsetHeight > 0) {\n\t\t\treturn `${el.offsetHeight}px`;\n\t\t}\n\t\treturn this.css(el, 'height');\n\t}\n\tprivate width(el) {\n\t\tif (el.offsetWidth > 0) {\n\t\t\treturn `${el.offsetWidth}px`;\n\t\t}\n\t\treturn this.css(el, 'width');\n\t}\n\tprivate defaults(custom: OpenViduLayoutOptions, defaults: OpenViduLayoutOptions): OpenViduLayoutOptions {\n\t\tvar res = defaults;\n\t\tObject.keys(defaults).forEach((key) => {\n\t\t\tif (custom.hasOwnProperty(key)) {\n\t\t\t\tres[key] = custom[key];\n\t\t\t}\n\t\t});\n\t\treturn res;\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tprivate fixAspectRatio(elem: HTMLVideoElement, width: number) {\n\t\tconst sub: HTMLVideoElement = <HTMLVideoElement>elem.querySelector(`.${LayoutClass.ROOT_ELEMENT}`);\n\t\tif (sub) {\n\t\t\t// If this is the parent of a subscriber or publisher then we need\n\t\t\t// to force the mutation observer on the publisher or subscriber to\n\t\t\t// trigger to get it to fix it's layout\n\t\t\tconst oldWidth = sub.style.width;\n\t\t\tsub.style.width = `${width}px`;\n\t\t\t// sub.style.height = height + 'px';\n\t\t\tsub.style.width = oldWidth || '';\n\t\t}\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tprivate positionElement(elem: HTMLVideoElement, x: number, y: number, width: number, height: number, animate: any) {\n\t\tconst targetPosition = {\n\t\t\tleft: `${x}px`,\n\t\t\ttop: `${y}px`,\n\t\t\twidth: `${width}px`,\n\t\t\theight: `${height}px`\n\t\t};\n\n\t\tthis.fixAspectRatio(elem, width);\n\n\t\tif (animate) {\n\t\t\tsetTimeout(() => {\n\t\t\t\t// animation added in css transition: all .1s linear;\n\t\t\t\telem.style.left = targetPosition.left;\n\t\t\t\telem.style.top = targetPosition.top;\n\t\t\t\telem.style.width = targetPosition.width;\n\t\t\t\telem.style.height = targetPosition.height;\n\t\t\t\tthis.fixAspectRatio(elem, width);\n\t\t\t}, 10);\n\t\t} else {\n\t\t\tthis.css(elem, targetPosition);\n\t\t\tif (!elem.classList.contains(LayoutClass.CLASS_NAME)) {\n\t\t\t\telem.classList.add(LayoutClass.CLASS_NAME);\n\t\t\t}\n\t\t}\n\t\tthis.fixAspectRatio(elem, width);\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tprivate getChildDims(child: HTMLVideoElement): {\n\t\theight: number;\n\t\twidth: number;\n\t\tbig?: boolean;\n\t} {\n\t\tif (child) {\n\t\t\tif (child.videoHeight && child.videoWidth) {\n\t\t\t\treturn {\n\t\t\t\t\theight: child.videoHeight,\n\t\t\t\t\twidth: child.videoWidth\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst video: HTMLVideoElement = <HTMLVideoElement>child.querySelector('video');\n\t\t\tif (video && video.videoHeight && video.videoWidth) {\n\t\t\t\treturn {\n\t\t\t\t\theight: video.videoHeight,\n\t\t\t\t\twidth: video.videoWidth\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\theight: 480,\n\t\t\twidth: 640\n\t\t};\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tprivate getCSSNumber(elem: HTMLElement, prop: string) {\n\t\tconst cssStr = this.css(elem, prop);\n\n\t\treturn cssStr ? parseInt(cssStr.toString(), 10) : 0;\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\t// Really cheap UUID function\n\tprivate cheapUUID() {\n\t\treturn (Math.random() * 100000000).toFixed(0);\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tprivate getHeight(elem: HTMLElement) {\n\t\tconst heightStr = this.height(elem);\n\t\treturn heightStr ? parseInt(heightStr.toString(), 10) : 0;\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\tprivate getWidth(elem: HTMLElement) {\n\t\tconst widthStr = this.width(elem);\n\t\treturn widthStr ? parseInt(widthStr.toString(), 10) : 0;\n\t}\n\n\t/**\n\t * @hidden\n\t */\n\t// private arrange(\n\t//   children: HTMLVideoElement[],\n\t//   containerWidth: number,\n\t//   containerHeight: number,\n\t//   offsetLeft: number,\n\t//   offsetTop: number,\n\t//   fixedRatio: boolean,\n\t//   minRatio: number,\n\t//   maxRatio: number,\n\t//   animate: any\n\t// ) {\n\t// const boxes = this.getLayout(\n\t//   {\n\t//     containerWidth,\n\t//     containerHeight,\n\t//     minRatio,\n\t//     maxRatio,\n\t//     fixedRatio,\n\t//   },\n\t//   children.map((child) => this.getVideoRatio(child))\n\t// );\n\n\t// boxes.forEach((box, idx) => {\n\t//   const elem = children[idx];\n\t//   this.css(elem, 'position', 'absolute');\n\t//   const actualWidth =\n\t//     box.width -\n\t//     this.getCSSNumber(elem, 'paddingLeft') -\n\t//     this.getCSSNumber(elem, 'paddingRight') -\n\t//     this.getCSSNumber(elem, 'marginLeft') -\n\t//     this.getCSSNumber(elem, 'marginRight') -\n\t//     this.getCSSNumber(elem, 'borderLeft') -\n\t//     this.getCSSNumber(elem, 'borderRight');\n\n\t//   const actualHeight =\n\t//     box.height -\n\t//     this.getCSSNumber(elem, 'paddingTop') -\n\t//     this.getCSSNumber(elem, 'paddingBottom') -\n\t//     this.getCSSNumber(elem, 'marginTop') -\n\t//     this.getCSSNumber(elem, 'marginBottom') -\n\t//     this.getCSSNumber(elem, 'borderTop') -\n\t//     this.getCSSNumber(elem, 'borderBottom');\n\n\t//   this.positionElement(\n\t//     elem,\n\t//     box.left + offsetLeft,\n\t//     box.top + offsetTop,\n\t//     actualWidth,\n\t//     actualHeight,\n\t//     animate\n\t//   );\n\t// });\n\t// }\n\n\t/**\n\t * @hidden\n\t */\n\t// private attachElements(\n\t//   bigOnes: HTMLVideoElement[],\n\t//   normalOnes: HTMLVideoElement[],\n\t//   smallOnes: HTMLVideoElement[]\n\t// ) {\n\t//   const containerHeight =\n\t//     this.getHeight(this.layoutContainer) -\n\t//     this.getCSSNumber(this.layoutContainer, 'borderTop') -\n\t//     this.getCSSNumber(this.layoutContainer, 'borderBottom');\n\t//   const containerWidth =\n\t//     this.getWidth(this.layoutContainer) -\n\t//     this.getCSSNumber(this.layoutContainer, 'borderLeft') -\n\t//     this.getCSSNumber(this.layoutContainer, 'borderRight');\n\t//   const offsetLeft = 0;\n\t//   const offsetTop = 0;\n\t//   if (this.existBigAndNormalOnes(bigOnes, normalOnes, smallOnes)) {\n\t//     const smallOnesAux = smallOnes.length > 0 ? smallOnes : normalOnes;\n\t//     const bigOnesAux = bigOnes.length > 0 ? bigOnes : normalOnes;\n\t//     this.arrangeBigAndSmallOnes(bigOnesAux, smallOnesAux, {\n\t//       containerHeight,\n\t//       containerWidth,\n\t//     });\n\t//   } else if (this.onlyExistBigOnes(bigOnes, normalOnes, smallOnes)) {\n\t//     // We only have one bigOne just center it\n\t//     this.arrange(\n\t//       bigOnes,\n\t//       containerWidth,\n\t//       containerHeight,\n\t//       0,\n\t//       0,\n\t//       this.opts.bigFixedRatio,\n\t//       this.opts.bigMinRatio,\n\t//       this.opts.bigMaxRatio,\n\t//       this.opts.animate\n\t//     );\n\t//   } else if (\n\t//     this.existBigAndNormalAndSmallOnes(bigOnes, normalOnes, smallOnes)\n\t//   ) {\n\t//     this.arrangeBigAndSmallOnes(bigOnes, normalOnes.concat(smallOnes), {\n\t//       containerHeight,\n\t//       containerWidth,\n\t//     });\n\t//   } else {\n\t//     const normalOnesAux = normalOnes.concat(smallOnes);\n\t//     this.arrange(\n\t//       normalOnesAux,\n\t//       containerWidth - offsetLeft,\n\t//       containerHeight - offsetTop,\n\t//       offsetLeft,\n\t//       offsetTop,\n\t//       this.opts.fixedRatio,\n\t//       this.opts.minRatio,\n\t//       this.opts.maxRatio,\n\t//       this.opts.animate\n\t//     );\n\t//   }\n\t// }\n\n\t/**\n\t * @hidden\n\t */\n\t// private arrangeBigAndSmallOnes(\n\t//   bigOnesAux: HTMLVideoElement[],\n\t//   smallOnesAux: HTMLVideoElement[],\n\t//   data: { containerHeight: number; containerWidth: number }\n\t// ) {\n\t//   const { containerWidth, containerHeight } = data;\n\t//   let offsetLeft = 0;\n\t//   let offsetTop = 0;\n\t//   const availableRatio = containerHeight / containerWidth;\n\t//   let bigOffsetTop = 0;\n\t//   let bigOffsetLeft = 0;\n\t//   let bigWidth, bigHeight;\n\t//   if (availableRatio > this.getVideoRatio(bigOnesAux[0])) {\n\t//     // We are tall, going to take up the whole width and arrange small\n\t//     // guys at the bottom\n\t//     bigWidth = containerWidth;\n\t//     bigHeight = Math.floor(containerHeight * this.opts.bigPercentage);\n\t//     offsetTop = bigHeight;\n\t//     bigOffsetTop = containerHeight - offsetTop;\n\t//   } else {\n\t//     // We are wide, going to take up the whole height and arrange the small\n\t//     // guys on the right\n\t//     bigHeight = containerHeight;\n\t//     bigWidth = Math.floor(containerWidth * this.opts.bigPercentage);\n\t//     offsetLeft = bigWidth;\n\t//     bigOffsetLeft = containerWidth - offsetLeft;\n\t//   }\n\t//   if (this.opts.bigFirst) {\n\t//     this.arrange(\n\t//       bigOnesAux,\n\t//       bigWidth,\n\t//       bigHeight,\n\t//       0,\n\t//       0,\n\t//       this.opts.bigFixedRatio,\n\t//       this.opts.bigMinRatio,\n\t//       this.opts.bigMaxRatio,\n\t//       this.opts.animate\n\t//     );\n\t//     this.arrange(\n\t//       smallOnesAux,\n\t//       containerWidth - offsetLeft,\n\t//       containerHeight - offsetTop,\n\t//       offsetLeft,\n\t//       offsetTop,\n\t//       this.opts.fixedRatio,\n\t//       this.opts.minRatio,\n\t//       this.opts.maxRatio,\n\t//       this.opts.animate\n\t//     );\n\t//   } else {\n\t//     this.arrange(\n\t//       smallOnesAux,\n\t//       containerWidth - offsetLeft,\n\t//       containerHeight - offsetTop,\n\t//       0,\n\t//       0,\n\t//       this.opts.fixedRatio,\n\t//       this.opts.minRatio,\n\t//       this.opts.maxRatio,\n\t//       this.opts.animate\n\t//     );\n\t//     this.arrange(\n\t//       bigOnesAux,\n\t//       bigWidth,\n\t//       bigHeight,\n\t//       bigOffsetLeft,\n\t//       bigOffsetTop,\n\t//       this.opts.bigFixedRatio,\n\t//       this.opts.bigMinRatio,\n\t//       this.opts.bigMaxRatio,\n\t//       this.opts.animate\n\t//     );\n\t//   }\n\t// }\n\n\t/**\n\t * @hidden\n\t */\n\t// private existBigAndNormalOnes(\n\t//   bigOnes: HTMLVideoElement[],\n\t//   normalOnes: HTMLVideoElement[],\n\t//   smallOnes: HTMLVideoElement[]\n\t// ) {\n\t//   return (\n\t//     (bigOnes.length > 0 && normalOnes.length > 0 && smallOnes.length === 0) ||\n\t//     (bigOnes.length > 0 && normalOnes.length === 0 && smallOnes.length > 0) ||\n\t//     (bigOnes.length === 0 && normalOnes.length > 0 && smallOnes.length > 0)\n\t//   );\n\t// }\n\n\t/**\n\t * @hidden\n\t */\n\t// private onlyExistBigOnes(\n\t//   bigOnes: HTMLVideoElement[],\n\t//   normalOnes: HTMLVideoElement[],\n\t//   smallOnes: HTMLVideoElement[]\n\t// ): boolean {\n\t//   return (\n\t//     bigOnes.length > 0 && normalOnes.length === 0 && smallOnes.length === 0\n\t//   );\n\t// }\n\n\t/**\n\t * @hidden\n\t */\n\t// private existBigAndNormalAndSmallOnes(\n\t//   bigOnes: HTMLVideoElement[],\n\t//   normalOnes: HTMLVideoElement[],\n\t//   smallOnes: HTMLVideoElement[]\n\t// ): boolean {\n\t//   return bigOnes.length > 0 && normalOnes.length > 0 && smallOnes.length > 0;\n\t// }\n\n\t/**\n\t * @hidden\n\t */\n\tprivate filterDisplayNone(element: HTMLElement) {\n\t\treturn this.css(element, 'display') !== 'none';\n\t}\n\n\t/**\n\t *\n\t * --------------------------------------------------------------------------------\n\t *\n\t * GET LAYOUT\n\t *\n\t *\n\t */\n\n\t/**\n\t * @hidden\n\t */\n\tprivate getBestDimensions(\n\t\tminRatio: number,\n\t\tmaxRatio: number,\n\t\twidth: number,\n\t\theight: number,\n\t\tcount: number,\n\t\tmaxWidth: number,\n\t\tmaxHeight: number\n\t) {\n\t\tlet maxArea: number;\n\t\tlet targetCols: number;\n\t\tlet targetRows: number;\n\t\tlet targetHeight: number;\n\t\tlet targetWidth: number;\n\t\tlet tWidth: number;\n\t\tlet tHeight: number;\n\t\tlet tRatio: number;\n\n\t\t// Iterate through every possible combination of rows and columns\n\t\t// and see which one has the least amount of whitespace\n\t\tfor (let i = 1; i <= count; i++) {\n\t\t\tconst cols = i;\n\t\t\tconst rows = Math.ceil(count / cols);\n\n\t\t\t// Try taking up the whole height and width\n\t\t\ttHeight = Math.floor(height / rows);\n\t\t\ttWidth = Math.floor(width / cols);\n\n\t\t\ttRatio = tHeight / tWidth;\n\t\t\tif (tRatio > maxRatio) {\n\t\t\t\t// We went over decrease the height\n\t\t\t\ttRatio = maxRatio;\n\t\t\t\ttHeight = tWidth * tRatio;\n\t\t\t} else if (tRatio < minRatio) {\n\t\t\t\t// We went under decrease the width\n\t\t\t\ttRatio = minRatio;\n\t\t\t\ttWidth = tHeight / tRatio;\n\t\t\t}\n\n\t\t\ttWidth = Math.min(maxWidth, tWidth);\n\t\t\ttHeight = Math.min(maxHeight, tHeight);\n\t\t\tconst area = tWidth * tHeight * count;\n\n\t\t\t// If this width and height takes up the most space then we're going with that\n\t\t\tif (maxArea === undefined || area >= maxArea) {\n\t\t\t\tif (!(area === maxArea && count % (cols * rows) > count % (targetRows * targetCols))) {\n\t\t\t\t\t// Favour even numbers of participants in each row, eg. 2 on each row\n\t\t\t\t\t// instead of 3 in one row and then 1 on the next\n\t\t\t\t\tmaxArea = area;\n\t\t\t\t\ttargetHeight = tHeight;\n\t\t\t\t\ttargetWidth = tWidth;\n\t\t\t\t\ttargetCols = cols;\n\t\t\t\t\ttargetRows = rows;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tmaxArea,\n\t\t\ttargetCols,\n\t\t\ttargetRows,\n\t\t\ttargetHeight,\n\t\t\ttargetWidth,\n\t\t\tratio: targetHeight / targetWidth\n\t\t};\n\t}\n\n\tprivate getVideoRatio(element: { height: number; width: number; big?: boolean }) {\n\t\treturn element.height / element.width;\n\t}\n\tprivate getLayout(opts: any, elements: { height: number; width: number; big?: boolean }[]) {\n\t\tconst {\n\t\t\tmaxRatio = 3 / 2,\n\t\t\tminRatio = 9 / 16,\n\t\t\tfixedRatio = false,\n\t\t\tbigPercentage = 0.8,\n\t\t\tminBigPercentage = 0,\n\t\t\tbigFixedRatio = false,\n\t\t\tbigMaxRatio = 3 / 2,\n\t\t\tbigMinRatio = 9 / 16,\n\t\t\tbigFirst = true,\n\t\t\tcontainerWidth = 640,\n\t\t\tcontainerHeight = 480,\n\t\t\talignItems = 'center',\n\t\t\tbigAlignItems = 'center',\n\t\t\tsmallAlignItems = 'center',\n\t\t\tmaxWidth = Infinity,\n\t\t\tmaxHeight = Infinity,\n\t\t\tsmallMaxWidth = Infinity,\n\t\t\tsmallMaxHeight = Infinity,\n\t\t\tbigMaxWidth = Infinity,\n\t\t\tbigMaxHeight = Infinity,\n\t\t\tscaleLastRow = true,\n\t\t\tbigScaleLastRow = true\n\t\t} = opts;\n\t\tconst availableRatio = containerHeight / containerWidth;\n\t\tlet offsetLeft = 0;\n\t\tlet offsetTop = 0;\n\t\tlet bigOffsetTop = 0;\n\t\tlet bigOffsetLeft = 0;\n\t\tconst bigIndices = [];\n\t\tlet bigBoxes = [];\n\t\tlet smallBoxes = [];\n\t\tlet areas: { big: any; small: any } = { big: null, small: null };\n\n\t\t// Move to Get Layout\n\t\tconst smallOnes = elements.filter((element) => !element.big);\n\t\tconst bigOnes = elements.filter((element, idx) => {\n\t\t\tif (element.big) {\n\t\t\t\tbigIndices.push(idx);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t\t//TODO: Habia un codigo personalizado que servía para\n\t\t//TODO: tener videos grandes, pequeños y normales\n\t\t//.filter((x) => !smallOnes.includes(x));\n\n\t\t// const normalOnes: HTMLVideoElement[] = Array.prototype.filter\n\t\t//   .call(\n\t\t//     this.layoutContainer.querySelectorAll(\n\t\t//       `#${id}>*:not(.${this.opts.bigClass})`\n\t\t//     ),\n\t\t//     () => this.filterDisplayNone\n\t\t//   )\n\t\t//   .filter((x) => !smallOnes.includes(x));\n\t\t// this.attachElements(bigOnes, normalOnes, smallOnes);\n\t\tif (bigOnes.length > 0 && smallOnes.length > 0) {\n\t\t\tlet bigWidth;\n\t\t\tlet bigHeight;\n\t\t\tlet showBigFirst = bigFirst;\n\n\t\t\tif (availableRatio > this.getVideoRatio(bigOnes[0])) {\n\t\t\t\t// We are tall, going to take up the whole width and arrange small\n\t\t\t\t// guys at the bottom\n\t\t\t\tbigWidth = containerWidth;\n\t\t\t\tbigHeight = Math.floor(containerHeight * bigPercentage);\n\t\t\t\tif (minBigPercentage > 0) {\n\t\t\t\t\t// Find the best size for the big area\n\t\t\t\t\tlet bigDimensions;\n\t\t\t\t\tif (!bigFixedRatio) {\n\t\t\t\t\t\tbigDimensions = this.getBestDimensions(\n\t\t\t\t\t\t\tbigMinRatio,\n\t\t\t\t\t\t\tbigMaxRatio,\n\t\t\t\t\t\t\tbigWidth,\n\t\t\t\t\t\t\tbigHeight,\n\t\t\t\t\t\t\tbigOnes.length,\n\t\t\t\t\t\t\tbigMaxWidth,\n\t\t\t\t\t\t\tbigMaxHeight\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Use the ratio of the first video element we find to approximate\n\t\t\t\t\t\tconst ratio = bigOnes[0].height / bigOnes[0].width;\n\t\t\t\t\t\tbigDimensions = this.getBestDimensions(\n\t\t\t\t\t\t\tratio,\n\t\t\t\t\t\t\tratio,\n\t\t\t\t\t\t\tbigWidth,\n\t\t\t\t\t\t\tbigHeight,\n\t\t\t\t\t\t\tbigOnes.length,\n\t\t\t\t\t\t\tbigMaxWidth,\n\t\t\t\t\t\t\tbigMaxHeight\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbigHeight = Math.max(\n\t\t\t\t\t\tcontainerHeight * minBigPercentage,\n\t\t\t\t\t\tMath.min(bigHeight, bigDimensions.targetHeight * bigDimensions.targetRows)\n\t\t\t\t\t);\n\t\t\t\t\t// Don't awkwardly scale the small area bigger than we need to and end up with floating\n\t\t\t\t\t// videos in the middle\n\t\t\t\t\tconst smallDimensions = this.getBestDimensions(\n\t\t\t\t\t\tminRatio,\n\t\t\t\t\t\tmaxRatio,\n\t\t\t\t\t\tcontainerWidth,\n\t\t\t\t\t\tcontainerHeight - bigHeight,\n\t\t\t\t\t\tsmallOnes.length,\n\t\t\t\t\t\tsmallMaxWidth,\n\t\t\t\t\t\tsmallMaxHeight\n\t\t\t\t\t);\n\t\t\t\t\tbigHeight = Math.max(bigHeight, containerHeight - smallDimensions.targetRows * smallDimensions.targetHeight);\n\t\t\t\t}\n\t\t\t\toffsetTop = bigHeight;\n\t\t\t\tbigOffsetTop = containerHeight - offsetTop;\n\t\t\t\tif (bigFirst === 'column') {\n\t\t\t\t\tshowBigFirst = false;\n\t\t\t\t} else if (bigFirst === 'row') {\n\t\t\t\t\tshowBigFirst = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We are wide, going to take up the whole height and arrange the small\n\t\t\t\t// guys on the right\n\t\t\t\tbigHeight = containerHeight;\n\t\t\t\tbigWidth = Math.floor(containerWidth * bigPercentage);\n\t\t\t\tif (minBigPercentage > 0) {\n\t\t\t\t\t// Find the best size for the big area\n\t\t\t\t\tlet bigDimensions;\n\t\t\t\t\tif (!bigFixedRatio) {\n\t\t\t\t\t\tbigDimensions = this.getBestDimensions(\n\t\t\t\t\t\t\tbigMinRatio,\n\t\t\t\t\t\t\tbigMaxRatio,\n\t\t\t\t\t\t\tbigWidth,\n\t\t\t\t\t\t\tbigHeight,\n\t\t\t\t\t\t\tbigOnes.length,\n\t\t\t\t\t\t\tbigMaxWidth,\n\t\t\t\t\t\t\tbigMaxHeight\n\t\t\t\t\t\t);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Use the ratio of the first video element we find to approximate\n\t\t\t\t\t\tconst ratio = bigOnes[0].height / bigOnes[0].width;\n\t\t\t\t\t\tbigDimensions = this.getBestDimensions(\n\t\t\t\t\t\t\tratio,\n\t\t\t\t\t\t\tratio,\n\t\t\t\t\t\t\tbigWidth,\n\t\t\t\t\t\t\tbigHeight,\n\t\t\t\t\t\t\tbigOnes.length,\n\t\t\t\t\t\t\tbigMaxWidth,\n\t\t\t\t\t\t\tbigMaxHeight\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tbigWidth = Math.max(\n\t\t\t\t\t\tcontainerWidth * minBigPercentage,\n\t\t\t\t\t\tMath.min(bigWidth, bigDimensions.targetWidth * bigDimensions.targetCols)\n\t\t\t\t\t);\n\t\t\t\t\t// Don't awkwardly scale the small area bigger than we need to and end up with floating\n\t\t\t\t\t// videos in the middle\n\t\t\t\t\tconst smallDimensions = this.getBestDimensions(\n\t\t\t\t\t\tminRatio,\n\t\t\t\t\t\tmaxRatio,\n\t\t\t\t\t\tcontainerWidth - bigWidth,\n\t\t\t\t\t\tcontainerHeight,\n\t\t\t\t\t\tsmallOnes.length,\n\t\t\t\t\t\tsmallMaxWidth,\n\t\t\t\t\t\tsmallMaxHeight\n\t\t\t\t\t);\n\t\t\t\t\tbigWidth = Math.max(bigWidth, containerWidth - smallDimensions.targetCols * smallDimensions.targetWidth);\n\t\t\t\t}\n\t\t\t\toffsetLeft = bigWidth;\n\t\t\t\tbigOffsetLeft = containerWidth - offsetLeft;\n\t\t\t\tif (bigFirst === 'column') {\n\t\t\t\t\tshowBigFirst = true;\n\t\t\t\t} else if (bigFirst === 'row') {\n\t\t\t\t\tshowBigFirst = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (showBigFirst) {\n\t\t\t\tareas.big = {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: bigWidth,\n\t\t\t\t\theight: bigHeight\n\t\t\t\t};\n\t\t\t\tareas.small = {\n\t\t\t\t\ttop: offsetTop,\n\t\t\t\t\tleft: offsetLeft,\n\t\t\t\t\twidth: containerWidth - offsetLeft,\n\t\t\t\t\theight: containerHeight - offsetTop\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tareas.big = {\n\t\t\t\t\tleft: bigOffsetLeft,\n\t\t\t\t\ttop: bigOffsetTop,\n\t\t\t\t\twidth: bigWidth,\n\t\t\t\t\theight: bigHeight\n\t\t\t\t};\n\t\t\t\tareas.small = {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: containerWidth - offsetLeft,\n\t\t\t\t\theight: containerHeight - offsetTop\n\t\t\t\t};\n\t\t\t}\n\t\t} else if (bigOnes.length > 0 && smallOnes.length === 0) {\n\t\t\t// We only have one bigOne just center it\n\t\t\tareas.big = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\twidth: containerWidth,\n\t\t\t\theight: containerHeight\n\t\t\t};\n\t\t} else {\n\t\t\tareas.small = {\n\t\t\t\ttop: offsetTop,\n\t\t\t\tleft: offsetLeft,\n\t\t\t\twidth: containerWidth - offsetLeft,\n\t\t\t\theight: containerHeight - offsetTop\n\t\t\t};\n\t\t}\n\n\t\tif (areas.big) {\n\t\t\tbigBoxes = this.getLayoutAux(\n\t\t\t\t{\n\t\t\t\t\tcontainerWidth: areas.big.width,\n\t\t\t\t\tcontainerHeight: areas.big.height,\n\t\t\t\t\toffsetLeft: areas.big.left,\n\t\t\t\t\toffsetTop: areas.big.top,\n\t\t\t\t\tfixedRatio: bigFixedRatio,\n\t\t\t\t\tminRatio: bigMinRatio,\n\t\t\t\t\tmaxRatio: bigMaxRatio,\n\t\t\t\t\talignItems: bigAlignItems,\n\t\t\t\t\tmaxWidth: bigMaxWidth,\n\t\t\t\t\tmaxHeight: bigMaxHeight,\n\t\t\t\t\tscaleLastRow: bigScaleLastRow\n\t\t\t\t},\n\t\t\t\tbigOnes\n\t\t\t);\n\t\t}\n\t\tif (areas.small) {\n\t\t\tsmallBoxes = this.getLayoutAux(\n\t\t\t\t{\n\t\t\t\t\tcontainerWidth: areas.small.width,\n\t\t\t\t\tcontainerHeight: areas.small.height,\n\t\t\t\t\toffsetLeft: areas.small.left,\n\t\t\t\t\toffsetTop: areas.small.top,\n\t\t\t\t\tfixedRatio,\n\t\t\t\t\tminRatio,\n\t\t\t\t\tmaxRatio,\n\t\t\t\t\talignItems: areas.big ? smallAlignItems : alignItems,\n\t\t\t\t\tmaxWidth: areas.big ? smallMaxWidth : maxWidth,\n\t\t\t\t\tmaxHeight: areas.big ? smallMaxHeight : maxHeight,\n\t\t\t\t\tscaleLastRow\n\t\t\t\t},\n\t\t\t\tsmallOnes\n\t\t\t);\n\t\t}\n\n\t\tconst boxes = [];\n\t\tlet bigBoxesIdx = 0;\n\t\tlet smallBoxesIdx = 0;\n\t\t// Rebuild the array in the right order based on where the bigIndices should be\n\t\telements.forEach((element, idx) => {\n\t\t\tif (bigIndices.indexOf(idx) > -1) {\n\t\t\t\tboxes[idx] = bigBoxes[bigBoxesIdx];\n\t\t\t\tbigBoxesIdx += 1;\n\t\t\t} else {\n\t\t\t\tboxes[idx] = smallBoxes[smallBoxesIdx];\n\t\t\t\tsmallBoxesIdx += 1;\n\t\t\t}\n\t\t});\n\t\treturn { boxes, areas };\n\t}\n\n\tprivate getLayoutAux(opts: any, elements: { height: number; width: number; big?: boolean }[]) {\n\t\tconst {\n\t\t\tmaxRatio = 3 / 2,\n\t\t\tminRatio = 9 / 16,\n\t\t\tfixedRatio = false,\n\t\t\tcontainerWidth = 640,\n\t\t\tcontainerHeight = 480,\n\t\t\toffsetLeft = 0,\n\t\t\toffsetTop = 0,\n\t\t\talignItems = 'center',\n\t\t\tmaxWidth = Infinity,\n\t\t\tmaxHeight = Infinity,\n\t\t\tscaleLastRow = true\n\t\t} = opts;\n\t\tconst ratios = elements.map((element) => element.height / element.width);\n\t\tconst count = ratios.length;\n\n\t\tlet dimensions;\n\n\t\tif (!fixedRatio) {\n\t\t\tdimensions = this.getBestDimensions(minRatio, maxRatio, containerWidth, containerHeight, count, maxWidth, maxHeight);\n\t\t} else {\n\t\t\t// Use the ratio of the first video element we find to approximate\n\t\t\tconst ratio = ratios.length > 0 ? ratios[0] : null;\n\t\t\tdimensions = this.getBestDimensions(ratio, ratio, containerWidth, containerHeight, count, maxWidth, maxHeight);\n\t\t}\n\n\t\t// Loop through each stream in the container and place it inside\n\t\tlet x = 0;\n\t\tlet y = 0;\n\t\tconst rows = [];\n\t\tlet row;\n\t\tconst boxes = [];\n\n\t\t// Iterate through the children and create an array with a new item for each row\n\t\t// and calculate the width of each row so that we know if we go over the size and need\n\t\t// to adjust\n\t\tfor (let i = 0; i < ratios.length; i++) {\n\t\t\tif (i % dimensions.targetCols === 0) {\n\t\t\t\t// This is a new row\n\t\t\t\trow = {\n\t\t\t\t\tratios: [],\n\t\t\t\t\twidth: 0,\n\t\t\t\t\theight: 0\n\t\t\t\t};\n\t\t\t\trows.push(row);\n\t\t\t}\n\t\t\tconst ratio = ratios[i];\n\t\t\trow.ratios.push(ratio);\n\t\t\tlet targetWidth = dimensions.targetWidth;\n\t\t\tconst targetHeight = dimensions.targetHeight;\n\t\t\t// If we're using a fixedRatio then we need to set the correct ratio for this element\n\t\t\tif (fixedRatio) {\n\t\t\t\ttargetWidth = targetHeight / ratio;\n\t\t\t}\n\t\t\trow.width += targetWidth;\n\t\t\trow.height = targetHeight;\n\t\t}\n\t\t// Calculate total row height adjusting if we go too wide\n\t\tlet totalRowHeight = 0;\n\t\tlet remainingShortRows = 0;\n\t\tfor (let i = 0; i < rows.length; i++) {\n\t\t\trow = rows[i];\n\t\t\tif (row.width > containerWidth) {\n\t\t\t\t// Went over on the width, need to adjust the height proportionally\n\t\t\t\trow.height = Math.floor(row.height * (containerWidth / row.width));\n\t\t\t\trow.width = containerWidth;\n\t\t\t} else if (row.width < containerWidth && row.height < maxHeight) {\n\t\t\t\tremainingShortRows += 1;\n\t\t\t}\n\t\t\ttotalRowHeight += row.height;\n\t\t}\n\t\tif (scaleLastRow && totalRowHeight < containerHeight && remainingShortRows > 0) {\n\t\t\t// We can grow some of the rows, we're not taking up the whole height\n\t\t\tlet remainingHeightDiff = containerHeight - totalRowHeight;\n\t\t\ttotalRowHeight = 0;\n\t\t\tfor (let i = 0; i < rows.length; i++) {\n\t\t\t\trow = rows[i];\n\t\t\t\tif (row.width < containerWidth) {\n\t\t\t\t\t// Evenly distribute the extra height between the short rows\n\t\t\t\t\tlet extraHeight = remainingHeightDiff / remainingShortRows;\n\t\t\t\t\tif (extraHeight / row.height > (containerWidth - row.width) / row.width) {\n\t\t\t\t\t\t// We can't go that big or we'll go too wide\n\t\t\t\t\t\textraHeight = Math.floor(((containerWidth - row.width) / row.width) * row.height);\n\t\t\t\t\t}\n\t\t\t\t\trow.width += Math.floor((extraHeight / row.height) * row.width);\n\t\t\t\t\trow.height += extraHeight;\n\t\t\t\t\tremainingHeightDiff -= extraHeight;\n\t\t\t\t\tremainingShortRows -= 1;\n\t\t\t\t}\n\t\t\t\ttotalRowHeight += row.height;\n\t\t\t}\n\t\t}\n\t\t// vertical centering\n\t\tswitch (alignItems) {\n\t\t\tcase 'start':\n\t\t\t\ty = 0;\n\t\t\t\tbreak;\n\t\t\tcase 'end':\n\t\t\t\ty = containerHeight - totalRowHeight;\n\t\t\t\tbreak;\n\t\t\tcase 'center':\n\t\t\tdefault:\n\t\t\t\ty = (containerHeight - totalRowHeight) / 2;\n\t\t\t\tbreak;\n\t\t}\n\t\t// Iterate through each row and place each child\n\t\tfor (let i = 0; i < rows.length; i++) {\n\t\t\trow = rows[i];\n\t\t\tlet rowMarginLeft;\n\t\t\tswitch (alignItems) {\n\t\t\t\tcase 'start':\n\t\t\t\t\trowMarginLeft = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'end':\n\t\t\t\t\trowMarginLeft = containerWidth - row.width;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'center':\n\t\t\t\tdefault:\n\t\t\t\t\trowMarginLeft = (containerWidth - row.width) / 2;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tx = rowMarginLeft;\n\t\t\tlet targetHeight;\n\t\t\tfor (let j = 0; j < row.ratios.length; j++) {\n\t\t\t\tconst ratio = row.ratios[j];\n\n\t\t\t\tlet targetWidth = dimensions.targetWidth;\n\t\t\t\ttargetHeight = row.height;\n\t\t\t\t// If we're using a fixedRatio then we need to set the correct ratio for this element\n\t\t\t\tif (fixedRatio) {\n\t\t\t\t\ttargetWidth = Math.floor(targetHeight / ratio);\n\t\t\t\t} else if (targetHeight / targetWidth !== dimensions.targetHeight / dimensions.targetWidth) {\n\t\t\t\t\t// We grew this row, we need to adjust the width to account for the increase in height\n\t\t\t\t\ttargetWidth = Math.floor((dimensions.targetWidth / dimensions.targetHeight) * targetHeight);\n\t\t\t\t}\n\n\t\t\t\tboxes.push({\n\t\t\t\t\tleft: x + offsetLeft,\n\t\t\t\t\ttop: y + offsetTop,\n\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\theight: targetHeight\n\t\t\t\t});\n\t\t\t\tx += targetWidth;\n\t\t\t}\n\t\t\ty += targetHeight;\n\t\t}\n\t\treturn boxes;\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { LayoutAlignment, LayoutClass, OpenViduLayout, OpenViduLayoutOptions } from '../../models/layout.model';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class LayoutService {\n\tlayoutContainer: HTMLElement | null = null;\n\tlayoutWidthObs: Observable<number>;\n\tcaptionsTogglingObs: Observable<boolean>;\n\tprivate layoutWidth: BehaviorSubject<number> = new BehaviorSubject(0);\n\tprivate openviduLayout: OpenViduLayout;\n\tprivate openviduLayoutOptions: OpenViduLayoutOptions;\n\tprivate captionsToggling: BehaviorSubject<boolean> = new BehaviorSubject(false);\n\n\tconstructor() {\n\t\tthis.layoutWidthObs = this.layoutWidth.asObservable();\n\t\tthis.captionsTogglingObs = this.captionsToggling.asObservable();\n\t}\n\n\tinitialize(container: HTMLElement) {\n\t\tthis.layoutContainer = container;\n\t\tthis.openviduLayout = new OpenViduLayout();\n\t\tthis.openviduLayoutOptions = this.getOptions();\n\t\tif (this.layoutContainer) {\n\t\t\tthis.openviduLayout.initLayoutContainer(this.layoutContainer, this.openviduLayoutOptions);\n\t\t}\n\t\tthis.sendLayoutWidthEvent();\n\t}\n\n\tprivate getOptions(): OpenViduLayoutOptions {\n\t\tconst options = {\n\t\t\tmaxRatio: 3 / 2, // The narrowest ratio that will be used (default 2x3)\n\t\t\tminRatio: 9 / 16, // The widest ratio that will be used (default 16x9)\n\t\t\tfixedRatio: false /* If this is true then the aspect ratio of the video is maintained\n      and minRatio and maxRatio are ignored (default false) */,\n\t\t\tbigClass: LayoutClass.BIG_ELEMENT, // The class to add to elements that should be sized bigger\n\t\t\tsmallClass: LayoutClass.SMALL_ELEMENT,\n\t\t\tignoredClass: LayoutClass.IGNORED_ELEMENT,\n\t\t\tbigPercentage: 0.8, // The maximum percentage of space the big ones should take up\n\t\t\tminBigPercentage: 0, // If this is set then it will scale down the big space if there is left over whitespace down to this minimum size\n\t\t\tbigFixedRatio: false, // fixedRatio for the big ones\n\t\t\tbigMaxRatio: 9 / 16, // The narrowest ratio to use for the big elements (default 2x3)\n\t\t\tbigMinRatio: 9 / 16, // The widest ratio to use for the big elements (default 16x9)\n\t\t\tbigFirst: true, // Whether to place the big one in the top left (true) or bottom right\n\t\t\tanimate: true, // Whether you want to animate the transitions. Deprecated property, to disable it remove the transaction property on OT_publisher css class\n\t\t\talignItems: LayoutAlignment.CENTER,\n\t\t\tbigAlignItems: LayoutAlignment.CENTER,\n\t\t\tsmallAlignItems: LayoutAlignment.CENTER,\n\t\t\tmaxWidth: Infinity, // The maximum width of the elements\n\t\t\tmaxHeight: Infinity, // The maximum height of the elements\n\t\t\tsmallMaxWidth: Infinity,\n\t\t\tsmallMaxHeight: Infinity,\n\t\t\tbigMaxWidth: Infinity,\n\t\t\tbigMaxHeight: Infinity,\n\t\t\tscaleLastRow: true,\n\t\t\tbigScaleLastRow: true\n\t\t};\n\t\treturn options;\n\t}\n\n\ttoggleCaptions() {\n\t\tthis.captionsToggling.next(!this.captionsToggling.getValue());\n\t}\n\n\tupdate(timeout: number = null) {\n\t\tconst updateAux = () => {\n\t\t\tif (!!this.openviduLayout) {\n\t\t\t\tthis.openviduLayout.updateLayout(this.layoutContainer, this.openviduLayoutOptions);\n\t\t\t\tthis.sendLayoutWidthEvent();\n\t\t\t}\n\t\t};\n\t\tif (typeof timeout === 'number' && timeout >= 0) {\n\t\t\tsetTimeout(() => updateAux(), timeout);\n\t\t} else {\n\t\t\tupdateAux();\n\t\t}\n\t}\n\n\tgetLayout() {\n\t\treturn this.openviduLayout;\n\t}\n\n\tclear() {\n\t\tthis.openviduLayout = null;\n\t}\n\n\tprivate sendLayoutWidthEvent() {\n\t\tconst sidenavLayoutElement = this.getHTMLElementByClassName(\n\t\t\tthis.openviduLayout?.getLayoutContainer(),\n\t\t\tLayoutClass.SIDENAV_CONTAINER\n\t\t);\n\t\tif (sidenavLayoutElement && sidenavLayoutElement.clientWidth) {\n\t\t\tthis.layoutWidth.next(sidenavLayoutElement.clientWidth);\n\t\t}\n\t}\n\n\tprivate getHTMLElementByClassName(element: HTMLElement | null, className: string): HTMLElement | null {\n\t\twhile (!!element && element !== document.body) {\n\t\t\tif (element.className.includes(className)) {\n\t\t\t\treturn element;\n\t\t\t}\n\t\t\telement = element.parentElement;\n\t\t}\n\t\treturn null;\n\t}\n}\n","export enum VideoType {\n\tCAMERA = 'CAMERA',\n\tSCREEN = 'SCREEN',\n\tCUSTOM = 'CUSTOM'\n}\n\n/**\n * @internal\n */\nexport enum ScreenType {\n\tWINDOW = 'window',\n\tSCREEN = 'screen'\n}\n","import { Publisher, StreamManager } from 'openvidu-browser';\nimport { VideoType } from './video-type.model';\n\n/**\n * @internal\n */\nexport enum OpenViduRole {\n\tMODERATOR = 'MODERATOR',\n\tPUBLISHER = 'PUBLISHER'\n}\n\nexport interface StreamModel {\n\t/**\n\t * Whether the stream is available or not\n\t */\n\tconnected: boolean;\n\t/**\n\t * The stream type.{@link VideoType}\n\t */\n\ttype: VideoType;\n\t/**\n\t * The streamManager object from openvidu-browser library.{@link https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/StreamManager.html}\n\t */\n\tstreamManager: StreamManager;\n\t/**\n\t * Whether the stream is enlarged or not\n\t */\n\tvideoEnlarged: boolean;\n\t/**\n\t * Unique identifier of the stream\n\t */\n\tconnectionId: string;\n\t/**\n\t * The participant object\n\t */\n\tparticipant?: ParticipantAbstractModel;\n}\n\nexport interface ParticipantProperties {\n\t/**\n\t * Whether the participant is local or not\n\t */\n\tlocal: boolean;\n\t/**\n\t * The participant nickname\n\t */\n\tnickname: string;\n\t/**\n\t * Unique identifier of the participant\n\t */\n\tid?: string;\n\t/**\n\t * The participant color profile\n\t */\n\tcolorProfile?: string;\n\t/**\n\t * Whether the participant is muted forcibly or not\n\t */\n\tisMutedForcibly?: boolean;\n}\n\nexport abstract class ParticipantAbstractModel {\n\tstreams: Map<VideoType, StreamModel> = new Map();\n\tid: string;\n\tlocal: boolean;\n\tnickname: string;\n\tcolorProfile: string;\n\tisMutedForcibly: boolean;\n\n\tconstructor(props: ParticipantProperties, model?: StreamModel) {\n\t\tthis.id = props.id ? props.id : Math.random().toString(32).replace('.','_');\n\t\tthis.local = props.local;\n\t\tthis.nickname = props.nickname;\n\t\tthis.colorProfile = !!props.colorProfile ? props.colorProfile : `hsl(${Math.random() * 360}, 100%, 80%)`;\n\t\tthis.isMutedForcibly = typeof props.isMutedForcibly === 'boolean' ? props.isMutedForcibly : false;\n\t\tlet streamModel: StreamModel = {\n\t\t\tconnected: model ? model.connected : true,\n\t\t\ttype: model ? model.type : VideoType.CAMERA,\n\t\t\tstreamManager: model ? model.streamManager : null,\n\t\t\tvideoEnlarged: model ? model.videoEnlarged : false,\n\t\t\tconnectionId: model ? model.connectionId : null,\n\t\t\tparticipant: this\n\t\t};\n\t\tthis.streams.set(streamModel.type, streamModel);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\taddConnection(streamModel: StreamModel) {\n\t\tstreamModel.participant = this;\n\t\tthis.streams.set(streamModel.type, streamModel);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\thasAudioActive(): boolean {\n\t\tconst cameraConnection = this.getCameraConnection();\n\t\tconst screenConnection = this.getScreenConnection();\n\n\t\tif (cameraConnection.connected) {\n\t\t\treturn this.isCameraAudioActive();\n\t\t} else if (screenConnection.connected) {\n\t\t\treturn this.isScreenAudioActive();\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate isCameraAudioActive(): boolean {\n\t\tconst cameraConnection = this.getCameraConnection();\n\t\tif (cameraConnection?.connected) {\n\t\t\treturn cameraConnection.streamManager?.stream?.audioActive;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic isCameraVideoActive(): boolean {\n\t\tconst cameraConnection = this.getCameraConnection();\n\t\treturn cameraConnection?.connected && cameraConnection?.streamManager?.stream?.videoActive;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisScreenAudioActive(): boolean {\n\t\tconst screenConnection = this.getScreenConnection();\n\t\tif (screenConnection?.connected) {\n\t\t\treturn screenConnection?.streamManager?.stream?.audioActive;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\thasConnectionType(type: VideoType): boolean {\n\t\treturn this.streams.has(type);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic getCameraConnection(): StreamModel {\n\t\treturn this.streams.get(VideoType.CAMERA);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpublic getScreenConnection(): StreamModel {\n\t\treturn this.streams.get(VideoType.SCREEN);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetConnectionTypesActive(): VideoType[] {\n\t\tlet connType = [];\n\t\tif (this.isCameraActive()) connType.push(VideoType.CAMERA);\n\t\tif (this.isScreenActive()) connType.push(VideoType.SCREEN);\n\n\t\treturn connType;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetCameraConnectionId(connectionId: string) {\n\t\tthis.getCameraConnection().connectionId = connectionId;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetScreenConnectionId(connectionId: string) {\n\t\tthis.getScreenConnection().connectionId = connectionId;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tremoveConnection(connectionId: string): StreamModel {\n\t\tconst removeStream = this.getConnectionById(connectionId);\n\t\tthis.streams.delete(removeStream.type);\n\t\treturn removeStream;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\thasConnectionId(connectionId: string): boolean {\n\t\treturn Array.from(this.streams.values()).some((conn) => conn.connectionId === connectionId);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetConnectionById(connectionId: string): StreamModel {\n\t\treturn Array.from(this.streams.values()).find((conn) => conn.connectionId === connectionId);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetAvailableConnections(): StreamModel[] {\n\t\treturn Array.from(this.streams.values()).filter((conn) => conn.connected);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisLocal(): boolean {\n\t\treturn this.local;\n\t\t// return Array.from(this.streams.values()).every((conn) => conn.local);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetNickname(nickname: string) {\n\t\tthis.nickname = nickname;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetNickname() {\n\t\treturn this.nickname;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetCameraPublisher(publisher: Publisher) {\n\t\tconst cameraConnection = this.getCameraConnection();\n\t\tif (cameraConnection) cameraConnection.streamManager = publisher;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetScreenPublisher(publisher: Publisher) {\n\t\tconst screenConnection = this.getScreenConnection();\n\t\tif (screenConnection) screenConnection.streamManager = publisher;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetPublisher(connType: VideoType, publisher: StreamManager) {\n\t\tconst connection = this.streams.get(connType);\n\t\tif (connection) {\n\t\t\tconnection.streamManager = publisher;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisCameraActive(): boolean {\n\t\treturn this.getCameraConnection()?.connected;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tenableCamera() {\n\t\tconst cameraConnection = this.getCameraConnection();\n\t\tif (cameraConnection) cameraConnection.connected = true;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tdisableCamera() {\n\t\tconst cameraConnection = this.getCameraConnection();\n\t\tif (cameraConnection) cameraConnection.connected = false;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisScreenActive(): boolean {\n\t\treturn this.getScreenConnection()?.connected;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tenableScreen() {\n\t\tconst screenConnection = this.getScreenConnection();\n\t\tif (screenConnection) screenConnection.connected = true;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tdisableScreen() {\n\t\tconst screenConnection = this.getScreenConnection();\n\t\tif (screenConnection) screenConnection.connected = false;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetAllVideoEnlarged(enlarged: boolean) {\n\t\tthis.streams.forEach((conn) => (conn.videoEnlarged = enlarged));\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetCameraEnlarged(enlarged: boolean) {\n\t\tthis.streams.get(VideoType.CAMERA).videoEnlarged = enlarged;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetScreenEnlarged(enlarged: boolean) {\n\t\tthis.streams.get(VideoType.SCREEN).videoEnlarged = enlarged;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\ttoggleVideoEnlarged(connectionId: string) {\n\t\tthis.streams.forEach((conn) => {\n\t\t\tif (conn.connectionId === connectionId) {\n\t\t\t\tconn.videoEnlarged = !conn.videoEnlarged;\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsomeHasVideoEnlarged(): boolean {\n\t\treturn Array.from(this.streams.values()).some((conn) => conn.videoEnlarged);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetMutedForcibly(muted: boolean) {\n\t\tthis.isMutedForcibly = muted;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetRole(): OpenViduRole {\n\t\treturn <OpenViduRole>this.streams.get(VideoType.CAMERA)?.streamManager?.stream?.connection?.role;\n\t}\n}\n\n/**\n * @internal\n */\nexport class ParticipantModel extends ParticipantAbstractModel {}\n","import { Injectable } from '@angular/core';\nimport { Publisher, Subscriber } from 'openvidu-browser';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ILogger } from '../../models/logger.model';\nimport { OpenViduRole, ParticipantAbstractModel, ParticipantModel, ParticipantProperties, StreamModel } from '../../models/participant.model';\nimport { VideoType } from '../../models/video-type.model';\nimport { OpenViduAngularConfigService } from '../config/openvidu-angular.config.service';\nimport { LoggerService } from '../logger/logger.service';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ParticipantService {\n\t/**\n\t * Local participant Observable which pushes the local participant object in every update.\n\t */\n\tlocalParticipantObs: Observable<ParticipantAbstractModel>;\n\tprotected _localParticipant: BehaviorSubject<ParticipantAbstractModel | null> = new BehaviorSubject<ParticipantAbstractModel | null>(\n\t\tnull\n\t);\n\n\t/**\n\t * Remote participants Observable which pushes the remote participants array in every update.\n\t */\n\tremoteParticipantsObs: Observable<ParticipantAbstractModel[]>;\n\tprotected _remoteParticipants: BehaviorSubject<ParticipantAbstractModel[]> = new BehaviorSubject<ParticipantAbstractModel[]>([]);\n\n\tprotected localParticipant: ParticipantAbstractModel;\n\tprotected remoteParticipants: ParticipantAbstractModel[] = [];\n\n\tprotected log: ILogger;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(protected openviduAngularConfigSrv: OpenViduAngularConfigService, protected loggerSrv: LoggerService) {\n\t\tthis.log = this.loggerSrv.get('ParticipantService');\n\n\t\tthis.localParticipantObs = this._localParticipant.asObservable();\n\t\tthis.remoteParticipantsObs = this._remoteParticipants.asObservable();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tinitLocalParticipant(props: ParticipantProperties) {\n\t\tthis.localParticipant = this.newParticipant(props);\n\t\tthis.updateLocalParticipant();\n\t}\n\n\tgetLocalParticipant(): ParticipantAbstractModel {\n\t\treturn this.localParticipant;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetMyCameraPublisher(): Publisher {\n\t\treturn <Publisher>this.localParticipant.getCameraConnection().streamManager;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetMyCameraPublisher(publisher: Publisher) {\n\t\tthis.localParticipant.setCameraPublisher(publisher);\n\t}\n\t/**\n\t * @internal\n\t */\n\tsetMyCameraConnectionId(connectionId: string) {\n\t\tthis.localParticipant.setCameraConnectionId(connectionId);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetMyScreenPublisher(): Publisher {\n\t\treturn <Publisher>this.localParticipant.getScreenConnection()?.streamManager;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetMyScreenPublisher(publisher: Publisher) {\n\t\tthis.localParticipant.setScreenPublisher(publisher);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetMyScreenConnectionId(connectionId: string) {\n\t\tthis.localParticipant.setScreenConnectionId(connectionId);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tenableWebcamStream() {\n\t\tthis.localParticipant.enableCamera();\n\t\tthis.updateLocalParticipant();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tdisableWebcamStream() {\n\t\tthis.localParticipant.disableCamera();\n\t\tthis.updateLocalParticipant();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tactiveMyScreenShare(screenPublisher: Publisher) {\n\t\tthis.log.d('Enabling screen publisher');\n\n\t\tconst steramModel: StreamModel = {\n\t\t\ttype: VideoType.SCREEN,\n\t\t\tvideoEnlarged: true,\n\t\t\tstreamManager: screenPublisher,\n\t\t\tconnected: true,\n\t\t\tconnectionId: ''\n\t\t};\n\n\t\tthis.resetRemoteStreamsToNormalSize();\n\t\tthis.resetMyStreamsToNormalSize();\n\t\tthis.localParticipant.addConnection(steramModel);\n\t\tthis.updateLocalParticipant();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tdisableScreenStream() {\n\t\tthis.localParticipant.disableScreen();\n\t\tthis.updateLocalParticipant();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetMyNickname(nickname: string) {\n\t\tthis.localParticipant.setNickname(nickname);\n\t\tthis.updateLocalParticipant();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetMyNickname(): string {\n\t\treturn this.localParticipant.nickname;\n\t}\n\n\tgetMyRole(): string {\n\t\treturn this.localParticipant.getRole();\n\t}\n\n\tamIModerator(): boolean {\n\t\treturn this.getMyRole() === OpenViduRole.MODERATOR;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\ttoggleMyVideoEnlarged(connectionId: string) {\n\t\tthis.localParticipant.toggleVideoEnlarged(connectionId);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tresetMyStreamsToNormalSize() {\n\t\tif (this.localParticipant.someHasVideoEnlarged()) {\n\t\t\tthis.localParticipant.setAllVideoEnlarged(false);\n\t\t\tthis.updateLocalParticipant();\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tclear() {\n\t\tthis.disableScreenStream();\n\t\tthis.remoteParticipants = [];\n\t\tthis.updateRemoteParticipants();\n\t\tthis.updateLocalParticipant();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisMyCameraActive(): boolean {\n\t\treturn this.localParticipant.isCameraActive();\n\t}\n\n\tisMyVideoActive(): boolean {\n\t\treturn this.localParticipant.isCameraVideoActive();\n\t}\n\n\tisMyAudioActive(): boolean {\n\t\treturn this.localParticipant?.hasAudioActive();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisMyScreenActive(): boolean {\n\t\treturn this.localParticipant.isScreenActive();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisOnlyMyCameraActive(): boolean {\n\t\treturn this.isMyCameraActive() && !this.isMyScreenActive();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisOnlyMyScreenActive(): boolean {\n\t\treturn this.isMyScreenActive() && !this.isMyCameraActive();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\thaveICameraAndScreenActive(): boolean {\n\t\treturn this.isMyCameraActive() && this.isMyScreenActive();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\thasScreenAudioActive(): boolean {\n\t\treturn this.localParticipant.isScreenAudioActive();\n\t}\n\n\t/**\n\t * Force to update the local participant object and fire a new {@link localParticipantObs} Observable event.\n\t */\n\tupdateLocalParticipant() {\n\t\tthis._localParticipant.next(Object.assign(Object.create(this.localParticipant), this.localParticipant));\n\t}\n\n\t/**\n\t * REMOTE USERS\n\t */\n\n\t/**\n\t * @internal\n\t */\n\taddRemoteConnection(connectionId: string, data: string, subscriber: Subscriber) {\n\t\tconst type: VideoType = this.getTypeConnectionData(data);\n\t\tconst streamModel: StreamModel = {\n\t\t\ttype,\n\t\t\tvideoEnlarged: type === VideoType.SCREEN,\n\t\t\tstreamManager: subscriber,\n\t\t\tconnected: true,\n\t\t\tconnectionId\n\t\t};\n\n\t\t// Avoiding create a new participant if participantId param is not exist in connection data\n\t\t// participant Id is necessary for allowing to have multiple connection in one participant\n\t\tconst participantId = this.getParticipantIdFromData(data) || connectionId;\n\n\t\tconst participantAdded = this.getRemoteParticipantById(participantId);\n\t\tif (!!participantAdded) {\n\t\t\tthis.log.d('Adding connection to existing participant: ', participantId);\n\t\t\tif (participantAdded.hasConnectionType(streamModel.type)) {\n\t\t\t\tthis.log.d('Participant has publisher, updating it');\n\t\t\t\tparticipantAdded.setPublisher(streamModel.type, subscriber);\n\t\t\t} else {\n\t\t\t\tthis.log.d('Participant has not publisher, adding it');\n\t\t\t\tif (streamModel.type === VideoType.SCREEN) {\n\t\t\t\t\tthis.resetRemoteStreamsToNormalSize();\n\t\t\t\t\tthis.resetMyStreamsToNormalSize();\n\t\t\t\t}\n\t\t\t\tparticipantAdded.addConnection(streamModel);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.log.w('Creating new participant with id: ', participantId);\n\t\t\tconst props: ParticipantProperties = {\n\t\t\t\tnickname: this.getNicknameFromConnectionData(data),\n\t\t\t\tlocal: false,\n\t\t\t\tid: participantId\n\t\t\t};\n\t\t\tconst remoteParticipant = this.newParticipant(props, streamModel);\n\t\t\tthis.remoteParticipants.push(remoteParticipant);\n\t\t}\n\t\tthis.updateRemoteParticipants();\n\t}\n\n\tgetRemoteParticipants(): ParticipantAbstractModel[] {\n\t\treturn this.remoteParticipants;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tresetRemoteStreamsToNormalSize() {\n\t\tthis.remoteParticipants.forEach((participant) => participant.setAllVideoEnlarged(false));\n\t\tthis.updateRemoteParticipants();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tremoveConnectionByConnectionId(connectionId: string) {\n\t\tthis.log.w('Deleting connection: ', connectionId);\n\t\tlet participant: ParticipantAbstractModel | undefined;\n\t\tif (this.localParticipant.hasConnectionId(connectionId)) {\n\t\t\tparticipant = this.localParticipant;\n\t\t} else {\n\t\t\tparticipant = this.getRemoteParticipantByConnectionId(connectionId);\n\t\t}\n\n\t\tif (participant) {\n\t\t\tconst removeStream: StreamModel = participant.removeConnection(connectionId);\n\t\t\t//TODO: Timeout of X seconds?? Its possible sometimes the connections map was empty but must not be deleted\n\t\t\tif (participant.streams.size === 0) {\n\t\t\t\t// Remove participants without connections\n\t\t\t\tthis.remoteParticipants = this.remoteParticipants.filter((p) => p !== participant);\n\t\t\t}\n\t\t\tif (removeStream.type === VideoType.SCREEN) {\n\t\t\t\tconst remoteScreens = this.remoteParticipants.filter((p) => p.isScreenActive());\n\t\t\t\tif (remoteScreens.length > 0) {\n\t\t\t\t\t// Enlarging the last screen connection active\n\t\t\t\t\tconst lastScreenActive = remoteScreens[remoteScreens.length - 1];\n\t\t\t\t\tlastScreenActive.setScreenEnlarged(true);\n\t\t\t\t} else if (this.localParticipant.isScreenActive()) {\n\t\t\t\t\t// Enlarging my screen if thereare not any remote screen active\n\t\t\t\t\tthis.localParticipant.setScreenEnlarged(true);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.updateRemoteParticipants();\n\t\t}\n\t}\n\t/**\n\t * @internal\n\t */\n\tgetRemoteParticipantByConnectionId(connectionId: string): ParticipantAbstractModel | undefined {\n\t\treturn this.remoteParticipants.find((p) => p.hasConnectionId(connectionId));\n\t}\n\n\tprotected getRemoteParticipantById(id: string): ParticipantAbstractModel | undefined {\n\t\treturn this.remoteParticipants.find((p) => p.id === id);\n\t}\n\t/**\n\t * @internal\n\t */\n\tsomeoneIsSharingScreen(): boolean {\n\t\treturn this.remoteParticipants.some((p) => p.someHasVideoEnlarged());\n\t}\n\n\t/**\n\t * @internal\n\t */\n\ttoggleRemoteVideoEnlarged(connectionId: string) {\n\t\tconst participant = this.getRemoteParticipantByConnectionId(connectionId);\n\t\tparticipant?.toggleVideoEnlarged(connectionId);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetNicknameFromConnectionData(data: string): string {\n\t\ttry {\n\t\t\tconst nickname = JSON.parse(data.split(\"%/%\")[0]).clientData;\n            \t\treturn nickname;\n\t\t\t//return JSON.parse(data).clientData;\n\t\t} catch (error) {\n\t\t\treturn 'OpenVidu_User';\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetRemoteNickname(connectionId: string, nickname: string) {\n\t\tconst participant = this.getRemoteParticipantByConnectionId(connectionId);\n\t\tif (participant) {\n\t\t\tparticipant.setNickname(nickname);\n\t\t\tthis.updateRemoteParticipants();\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetRemoteMutedForcibly(id: string, value: boolean) {\n\t\tconst participant = this.getRemoteParticipantById(id);\n\t\tif (participant) {\n\t\t\tparticipant.setMutedForcibly(value);\n\t\t\tthis.updateRemoteParticipants();\n\t\t}\n\t}\n\n\t/**\n\t * Force to update the remote participants object and fire a new {@link remoteParticipantsObs} Observable event.\n\t */\n\tupdateRemoteParticipants() {\n\t\tthis._remoteParticipants.next([...this.remoteParticipants]);\n\t}\n\n\t/**\n\t * @internal\n\t * @param data\n\t * @returns Stream video type\n\t */\n\tgetTypeConnectionData(data: string): VideoType {\n\t\ttry {\n\t\t\treturn JSON.parse(data).type;\n\t\t} catch (error) {\n\t\t\treturn VideoType.CAMERA;\n\t\t}\n\t}\n\n\tprotected getParticipantIdFromData(data: string): string {\n\t\ttry {\n\t\t\treturn JSON.parse(data).participantId;\n\t\t} catch (error) {\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tprotected newParticipant(props: ParticipantProperties, streamModel?: StreamModel) {\n\t\tif (this.openviduAngularConfigSrv.hasParticipantFactory()) {\n\t\t\treturn this.openviduAngularConfigSrv.getParticipantFactory().apply(this, [props, streamModel]);\n\t\t}\n\t\treturn new ParticipantModel(props, streamModel);\n\t}\n}\n","export enum PanelType {\n\tCHAT = 'chat',\n\tPARTICIPANTS = 'participants',\n\tBACKGROUND_EFFECTS = 'background-effects',\n\tACTIVITIES = 'activities',\n\tSETTINGS = 'settings'\n\n}\n\nexport interface PanelEvent {\n\topened: boolean;\n\ttype?: PanelType | string;\n\texpand?: string;\n\toldType?: PanelType | string;\n}\n\nexport enum PanelSettingsOptions {\n\tGENERAL = 'general',\n\tAUDIO = 'audio',\n\tVIDEO = 'video',\n\tCAPTIONS = 'captions'\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ILogger } from '../../models/logger.model';\nimport { PanelEvent, PanelSettingsOptions, PanelType } from '../../models/panel.model';\nimport { LoggerService } from '../logger/logger.service';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class PanelService {\n\t/**\n\t * Panel Observable which pushes the panel status in every update.\n\t */\n\tpanelOpenedObs: Observable<PanelEvent>;\n\tprotected log: ILogger;\n\tprivate isExternalOpened: boolean = false;\n\tprivate externalType: string;\n\tprotected _panelOpened = <BehaviorSubject<PanelEvent>>new BehaviorSubject({ opened: false });\n\tprivate panelMap: Map<string, boolean> = new Map();\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(protected loggerSrv: LoggerService) {\n\t\tthis.log = this.loggerSrv.get('PanelService');\n\t\tthis.panelOpenedObs = this._panelOpened.asObservable();\n\t\tObject.values(PanelType).forEach((panel) => this.panelMap.set(panel, false));\n\t}\n\n\t/**\n\t * Open or close the panel type received. Calling this method with the panel opened and the same type panel, will close the panel.\n\t * If the type is differente, it will switch to the properly panel.\n\t */\n\ttogglePanel(type: PanelType | string, expand?: PanelSettingsOptions | string) {\n\t\tlet nextOpenedValue: boolean = false;\n\t\tif (this.panelMap.has(type)) {\n\t\t\tthis.log.d(`Toggling ${type} menu`);\n\n\t\t\tthis.panelMap.forEach((opened: boolean, panel: string) => {\n\t\t\t\tif (panel === type) {\n\t\t\t\t\t// Toggle panel\n\t\t\t\t\tthis.panelMap.set(panel, !opened);\n\t\t\t\t\tnextOpenedValue = !opened;\n\t\t\t\t} else {\n\t\t\t\t\t// Close others\n\t\t\t\t\tthis.panelMap.set(panel, false);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Panel is external\n\t\t\tthis.log.d('Toggling external panel');\n\t\t\t// Close all panels\n\t\t\tthis.panelMap.forEach((_, panel: string) => this.panelMap.set(panel, false));\n\t\t\t// Opening when external panel is closed or is opened with another type\n\t\t\tthis.isExternalOpened = !this.isExternalOpened || this.externalType !== type;\n\t\t\tthis.externalType = !this.isExternalOpened ? '' : type;\n\t\t\tnextOpenedValue = this.isExternalOpened;\n\t\t}\n\n\t\tconst oldType = this._panelOpened.getValue().type;\n\t\tthis._panelOpened.next({ opened: nextOpenedValue, type, expand, oldType });\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisPanelOpened(): boolean {\n\t\tconst anyOpened = Array.from(this.panelMap.values()).some((opened) => opened);\n\t\treturn anyOpened || this.isExternalPanelOpened();\n\t}\n\n\t/**\n\t * Closes the panel (if opened)\n\t */\n\tclosePanel(): void {\n\t\tthis.panelMap.forEach((_, panel: string) => this.panelMap.set(panel, false));\n\t\tthis._panelOpened.next({ opened: false });\n\t}\n\n\t/**\n\t * Whether the chat panel is opened or not.\n\t */\n\tisChatPanelOpened(): boolean {\n\t\treturn !!this.panelMap.get(PanelType.CHAT);\n\t}\n\n\t/**\n\t * Whether the participants panel is opened or not.\n\t */\n\tisParticipantsPanelOpened(): boolean {\n\t\treturn !!this.panelMap.get(PanelType.PARTICIPANTS);\n\t}\n\n\t/**\n\t * Whether the activities panel is opened or not.\n\t */\n\tisActivitiesPanelOpened(): boolean {\n\t\treturn !!this.panelMap.get(PanelType.ACTIVITIES);\n\t}\n\n\t/**\n\t * Whether the settings panel is opened or not.\n\t */\n\tisSettingsPanelOpened(): boolean {\n\t\treturn !!this.panelMap.get(PanelType.SETTINGS);\n\t}\n\n\t/**\n\t * Whether the background effects panel is opened or not.\n\t */\n\tisBackgroundEffectsPanelOpened(): boolean {\n\t\treturn !!this.panelMap.get(PanelType.BACKGROUND_EFFECTS);\n\t}\n\n\tisExternalPanelOpened(): boolean {\n\t\treturn this.isExternalOpened;\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { CaptionsLangOption } from '../../models/caption.model';\nimport { StorageService } from '../storage/storage.service';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class CaptionService {\n\tprivate langsOptions: CaptionsLangOption [] = [\n\t\t{ name: 'English', lang: 'en-US' },\n\t\t{ name: 'Español', lang: 'es-ES' },\n\t\t{ name: 'Deutsch', lang: 'de-DE' },\n\t\t{ name: 'Français', lang: 'fr-FR' },\n\t\t{ name: '中国', lang: 'zh-CN' },\n\t\t{ name: 'हिन्दी', lang: 'hi-IN' },\n\t\t{ name: 'Italiano', lang: 'it-IT' },\n\t\t{ name: 'やまと', lang: 'jp-JP' },\n\t\t{ name: 'Português', lang: 'pt-PT' }\n\t];\n\tcaptionLangSelected: CaptionsLangOption;\n\tcaptionLangObs: Observable<CaptionsLangOption>;\n\tprivate _captionLang: Subject<CaptionsLangOption> = new Subject();\n\tprivate captionsEnabled: boolean = false;\n\n\tconstructor(private storageService: StorageService) {\n\t\tthis.updateLangSelected();\n\t\tthis.captionLangObs = this._captionLang.asObservable();\n\n\t}\n\n\tsetLanguageOptions(options: CaptionsLangOption [] | undefined) {\n\t\tif(options && options.length > 0) {\n\t\t\tthis.langsOptions = options;\n\t\t\tthis.updateLangSelected();\n\t\t}\n\t}\n\n\tsetCaptionsEnabled(value: boolean) {\n\t\tthis.captionsEnabled = value;\n\t}\n\n\tareCaptionsEnabled(): boolean {\n\t\treturn this.captionsEnabled;\n\t}\n\n\tsetLanguage(lang: string) {\n\t\tconst newLangOpt = this.langsOptions.find((opt) => opt.lang === lang);\n\t\tif (!!newLangOpt && newLangOpt.lang !== this.captionLangSelected.lang) {\n\t\t\tthis.captionLangSelected = newLangOpt;\n\t\t\tthis.storageService.setCaptionLang(lang);\n\t\t\tthis._captionLang.next(this.captionLangSelected);\n\t\t}\n\t}\n\n\tgetLangSelected(): CaptionsLangOption {\n\t\treturn this.captionLangSelected;\n\t}\n\n\tgetCaptionLanguages(): CaptionsLangOption[] {\n\t\treturn this.langsOptions;\n\t}\n\n\tprivate updateLangSelected(): void {\n\t\tconst storageLang = this.storageService.getCaptionsLang();\n\t\tconst langOpt = this.langsOptions.find((opt) => opt.lang === storageLang);\n\t\tif (storageLang && langOpt) {\n\t\t\tthis.captionLangSelected = langOpt;\n\t\t} else {\n\t\t\tthis.captionLangSelected = this.langsOptions[0];\n\t\t}\n\t}\n}\n","/**\n * @internal\n */\nexport interface CustomDevice {\n\tlabel: string;\n\tdevice: string;\n\ttype?: CameraType;\n}\n\n/**\n * @internal\n */\nexport enum CameraType {\n\tFRONT = 'FRONT',\n\tBACK = 'BACK'\n}\n\n/**\n * @internal\n */\nexport enum DeviceType {\n\tAUDIO_INPUT = 'audioinput',\n\tVIDEO_INPUT = 'videoinput'\n}\n","/**\n * @internal\n */\n export enum OpenViduEdition {\n\tCE = 'CE',\n\tPRO = 'PRO',\n\tENTERPRISE = 'ENTERPRISE'\n}","import { Injectable } from '@angular/core';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class PlatformService {\n\tconstructor() {}\n\n\tisMobile(): boolean {\n\t\treturn this.isAndroid() || this.isIos();\n\t}\n\n\tisFirefox(): boolean {\n\t\treturn /Firefox[\\/\\s](\\d+\\.\\d+)/.test(navigator.userAgent);\n\t}\n\n\tisAndroid(): boolean {\n\t\treturn /\\b(\\w*Android\\w*)\\b/.test(navigator.userAgent) && /\\b(\\w*Mobile\\w*)\\b/.test(navigator.userAgent);\n\t}\n\n\tisIos(): boolean {\n\t\treturn this.isIPhoneOrIPad(navigator?.userAgent);\n\t}\n\tprivate isIPhoneOrIPad(userAgent): boolean {\n\t\tconst isIPad = /\\b(\\w*Macintosh\\w*)\\b/.test(userAgent);\n\t\tconst isIPhone = /\\b(\\w*iPhone\\w*)\\b/.test(userAgent) && /\\b(\\w*Mobile\\w*)\\b/.test(userAgent);\n\t\t// && /\\b(\\w*iPhone\\w*)\\b/.test(navigator.platform);\n\t\tconst isTouchable = 'ontouchend' in document;\n\n\t\treturn (isIPad || isIPhone) && isTouchable;\n\t}\n\n\tprivate isSafariIos(): boolean {\n\t\treturn this.isIos() && this.isIOSWithSafari(navigator?.userAgent);\n\t}\n\n\tprivate isIOSWithSafari(userAgent): boolean {\n\t\treturn (\n\t\t\t/\\b(\\w*Apple\\w*)\\b/.test(navigator.vendor) &&\n\t\t\t/\\b(\\w*Safari\\w*)\\b/.test(userAgent) &&\n\t\t\t!/\\b(\\w*CriOS\\w*)\\b/.test(userAgent) &&\n\t\t\t!/\\b(\\w*FxiOS\\w*)\\b/.test(userAgent)\n\t\t);\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { Device, OpenVidu, OpenViduError, OpenViduErrorName } from 'openvidu-browser';\n\nimport { CameraType, CustomDevice, DeviceType } from '../../models/device.model';\nimport { ILogger } from '../../models/logger.model';\nimport { OpenViduAngularConfigService } from '../config/openvidu-angular.config.service';\n\nimport { LoggerService } from '../logger/logger.service';\nimport { PlatformService } from '../platform/platform.service';\nimport { StorageService } from '../storage/storage.service';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class DeviceService {\n\tprivate OV: OpenVidu | null = null;\n\tprivate devices: Device[];\n\tprivate cameras: CustomDevice[] = [];\n\tprivate microphones: CustomDevice[] = [];\n\tprivate cameraSelected: CustomDevice | null;\n\tprivate microphoneSelected: CustomDevice | null;\n\tprivate log: ILogger;\n\tprivate videoDevicesEnabled: boolean = true;\n\tprivate audioDevicesEnabled: boolean = true;\n\n\t// Initialized with Storage.VIDEO_MUTED info saved on storage\n\tprivate _isVideoMuted: boolean;\n\t// Initialized with Storage.AUDIO_MUTED info saved on storage\n\tprivate _isAudioMuted: boolean;\n\t// Whether the media devices permission have been rejected or not\n\tprivate deviceAccessDeniedError: boolean = false;\n\n\tconstructor(\n\t\tprivate loggerSrv: LoggerService,\n\t\tprivate platformSrv: PlatformService,\n\t\tprivate storageSrv: StorageService,\n\t\tprivate libSrv: OpenViduAngularConfigService\n\t) {\n\t\tthis.log = this.loggerSrv.get('DevicesService');\n\t}\n\n\t/**\n\t * Initialize media devices and select a devices checking in local storage (if exists) or\n\t * first devices found by default\n\t */\n\tasync forceInitDevices() {\n\t\tthis.clear();\n\t\tthis.OV = new OpenVidu();\n\n\t\ttry {\n\t\t\t// if (this.devices?.some((device) => !device.deviceId || !device.label)) {\n\t\t\t// Forcing media permissions request.\n\t\t\t// Sometimes, browser doesn't request the media permissions.\n\t\t\tawait this.OV.getUserMedia({ audioSource: undefined, videoSource: undefined });\n\t\t\t// }\n\t\t\tthis.devices = await this.getOpenViduDevices();\n\t\t} catch (error) {\n\t\t\tthis.deviceAccessDeniedError = (<OpenViduError>error).name === OpenViduErrorName.DEVICE_ACCESS_DENIED;\n\t\t\tif (this.deviceAccessDeniedError) {\n\t\t\t\tthis.disableVideoDevices();\n\t\t\t\tthis.disableAudioDevices();\n\t\t\t}\n\t\t} finally {\n\t\t\tif (this.deviceAccessDeniedError) {\n\t\t\t\tthis.log.w('Media devices permissions were not granted.');\n\t\t\t} else {\n\t\t\t\tthis.initializeCustomDevices();\n\t\t\t\tthis.updateAudioDeviceSelected();\n\t\t\t\tthis.updateVideoDeviceSelected();\n\n\t\t\t\tthis._isVideoMuted = this.storageSrv.isVideoMuted() || this.libSrv.videoMuted.getValue();\n\t\t\t\tthis._isAudioMuted = this.storageSrv.isAudioMuted() || this.libSrv.audioMuted.getValue();\n\n\t\t\t\tthis.log.d('Media devices', this.cameras, this.microphones);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Check and update the media devices devices available\n\t */\n\tasync refreshDevices() {\n\t\tif (!this.deviceAccessDeniedError) {\n\t\t\tthis.devices = await this.getOpenViduDevices();\n\t\t\tthis.initializeCustomDevices();\n\t\t}\n\t}\n\n\tprivate initializeCustomDevices(updateSelected: boolean = true): void {\n\t\tconst FIRST_POSITION = 0;\n\t\tconst defaultMicrophones: Device[] = this.devices.filter((device) => device.kind === DeviceType.AUDIO_INPUT);\n\t\tconst defaultCameras: Device[] = this.devices.filter((device) => device.kind === DeviceType.VIDEO_INPUT);\n\n\t\tif (defaultMicrophones.length > 0) {\n\t\t\tthis.microphones = [];\n\t\t\tdefaultMicrophones.forEach((device: Device) => {\n\t\t\t\tthis.microphones.push({ label: device.label, device: device.deviceId });\n\t\t\t});\n\t\t}\n\n\t\tif (defaultCameras.length > 0) {\n\t\t\tthis.cameras = [];\n\t\t\tdefaultCameras.forEach((device: Device, index: number) => {\n\t\t\t\tconst myDevice: CustomDevice = {\n\t\t\t\t\tlabel: device.label,\n\t\t\t\t\tdevice: device.deviceId,\n\t\t\t\t\ttype: CameraType.BACK\n\t\t\t\t};\n\t\t\t\tif (this.platformSrv.isMobile()) {\n\t\t\t\t\t// We assume front video device has 'front' in its label in Mobile devices\n\t\t\t\t\tif (myDevice.label.toLowerCase().includes(CameraType.FRONT.toLowerCase())) {\n\t\t\t\t\t\tmyDevice.type = CameraType.FRONT;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// We assume first device is web camera in Browser Desktop\n\t\t\t\t\tif (index === FIRST_POSITION) {\n\t\t\t\t\t\tmyDevice.type = CameraType.FRONT;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.cameras.push(myDevice);\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate updateAudioDeviceSelected() {\n\t\t// Setting microphone selected\n\t\tif (this.microphones.length > 0) {\n\t\t\tconst storageMicrophone = this.getMicrophoneFromStogare();\n\t\t\tif (!!storageMicrophone) {\n\t\t\t\tthis.microphoneSelected = storageMicrophone;\n\t\t\t} else if (this.microphones.length > 0) {\n\t\t\t\tif (this.deviceAccessDeniedError && this.microphones.length > 1) {\n\t\t\t\t\t// We assume that the default device is already in use\n\t\t\t\t\t// Assign an alternative device with the aim of avoiding the DEVICE_ALREADY_IN_USE error\n\t\t\t\t\tthis.microphoneSelected = this.microphones[1];\n\t\t\t\t} else {\n\t\t\t\t\tthis.microphoneSelected = this.microphones[0];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate updateVideoDeviceSelected() {\n\t\t// Setting camera selected\n\t\tif (this.cameras.length > 0) {\n\t\t\tconst storageCamera = this.getCameraFromStorage();\n\t\t\tif (!!storageCamera) {\n\t\t\t\tthis.cameraSelected = storageCamera;\n\t\t\t} else if (this.cameras.length > 0) {\n\t\t\t\tif (this.deviceAccessDeniedError && this.cameras.length > 1) {\n\t\t\t\t\t// We assume that the default device is already in use\n\t\t\t\t\t// Assign an alternative device with the aim of avoiding the DEVICE_ALREADY_IN_USE error\n\t\t\t\t\tthis.cameraSelected = this.cameras[1];\n\t\t\t\t} else {\n\t\t\t\t\tthis.cameraSelected = this.cameras[0];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tisVideoMuted(): boolean {\n\t\treturn this.hasVideoDeviceAvailable() && this._isVideoMuted;\n\t}\n\n\tisAudioMuted(): boolean {\n\t\treturn this.hasAudioDeviceAvailable() && this._isAudioMuted;\n\t}\n\n\tgetCameraSelected(): CustomDevice | null {\n\t\treturn this.cameraSelected;\n\t}\n\n\tgetMicrophoneSelected(): CustomDevice | null {\n\t\treturn this.microphoneSelected;\n\t}\n\n\tsetCameraSelected(deviceField: any) {\n\t\tthis.cameraSelected = this.getCameraByDeviceField(deviceField);\n\t\tthis.saveCameraToStorage(this.cameraSelected);\n\t}\n\n\tsetMicSelected(deviceField: any) {\n\t\tthis.microphoneSelected = this.getMicrophoneByDeviceField(deviceField);\n\t\tthis.saveMicrophoneToStorage(this.microphoneSelected);\n\t}\n\n\tneedUpdateVideoTrack(newVideoSource: string): boolean {\n\t\treturn this.cameraSelected?.device !== newVideoSource;\n\t}\n\n\tneedUpdateAudioTrack(newAudioSource: string): boolean {\n\t\treturn this.microphoneSelected?.device !== newAudioSource;\n\t}\n\n\tgetCameras(): CustomDevice[] {\n\t\treturn this.cameras;\n\t}\n\n\tgetMicrophones(): CustomDevice[] {\n\t\treturn this.microphones;\n\t}\n\n\thasVideoDeviceAvailable(): boolean {\n\t\treturn this.videoDevicesEnabled && this.cameras.length > 0;\n\t}\n\n\thasAudioDeviceAvailable(): boolean {\n\t\treturn this.audioDevicesEnabled && this.microphones.length > 0;\n\t}\n\n\tcameraNeedsMirror(deviceField: string): boolean {\n\t\treturn this.getCameraByDeviceField(deviceField)?.type === CameraType.FRONT;\n\t}\n\n\tdisableVideoDevices() {\n\t\tthis.videoDevicesEnabled = false;\n\t}\n\n\tdisableAudioDevices() {\n\t\tthis.audioDevicesEnabled = false;\n\t}\n\n\tclear() {\n\t\tthis.OV = null;\n\t\tthis.devices = [];\n\t\tthis.cameras = [];\n\t\tthis.microphones = [];\n\t\tthis.cameraSelected = null;\n\t\tthis.microphoneSelected = null;\n\t\tthis.videoDevicesEnabled = true;\n\t\tthis.audioDevicesEnabled = true;\n\t}\n\n\tprivate getCameraByDeviceField(deviceField: any): CustomDevice {\n\t\treturn <CustomDevice>this.cameras.find((opt: CustomDevice) => opt.device === deviceField || opt.label === deviceField);\n\t}\n\n\tprivate getMicrophoneByDeviceField(deviceField: any): CustomDevice {\n\t\treturn <CustomDevice>this.microphones.find((opt: CustomDevice) => opt.device === deviceField || opt.label === deviceField);\n\t}\n\n\tprivate getMicrophoneFromStogare(): CustomDevice | undefined {\n\t\tconst storageDevice: CustomDevice = this.storageSrv.getAudioDevice();\n\t\tif (!!storageDevice && this.microphones.some((device) => device.device === storageDevice.device)) {\n\t\t\treturn storageDevice;\n\t\t}\n\t}\n\n\tprivate getCameraFromStorage() {\n\t\tconst storageDevice: CustomDevice = this.storageSrv.getVideoDevice();\n\t\tif (!!storageDevice && this.cameras.some((device) => device.device === storageDevice.device)) {\n\t\t\treturn storageDevice;\n\t\t}\n\t}\n\n\tprivate saveCameraToStorage(cam: CustomDevice) {\n\t\tthis.storageSrv.setVideoDevice(cam);\n\t}\n\n\tprivate saveMicrophoneToStorage(mic: CustomDevice) {\n\t\tthis.storageSrv.setAudioDevice(mic);\n\t}\n\n\tprivate async getOpenViduDevices(): Promise<Device[]> {\n\t\tlet devices = (await this.OV?.getDevices()) || [];\n\t\treturn devices.filter((d: Device) => !!d.label && !!d.deviceId);\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport {\n\tConnection,\n\tOpenVidu,\n\tOpenViduError,\n\tOpenViduErrorName,\n\tPublisher,\n\tPublisherProperties,\n\tSession,\n\tSignalOptions,\n\tStream\n} from 'openvidu-browser';\n\nimport { LoggerService } from '../logger/logger.service';\n\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { CameraType } from '../../models/device.model';\nimport { ILogger } from '../../models/logger.model';\nimport { OpenViduEdition } from '../../models/openvidu.model';\nimport { Signal } from '../../models/signal.model';\nimport { ScreenType, VideoType } from '../../models/video-type.model';\nimport { OpenViduAngularConfigService } from '../config/openvidu-angular.config.service';\nimport { DeviceService } from '../device/device.service';\nimport { ParticipantService } from '../participant/participant.service';\nimport { PlatformService } from '../platform/platform.service';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class OpenViduService {\n\t/*\n\t * @internal\n\t */\n\tisSttReadyObs: Observable<boolean>;\n\tprivate ovEdition: OpenViduEdition;\n\tprivate webcamToken = '';\n\tprivate screenToken = '';\n\tprotected OV: OpenVidu;\n\tprotected OVScreen: OpenVidu;\n\tprotected webcamSession: Session;\n\tprotected screenSession: Session;\n\tprotected videoSource = undefined;\n\tprotected audioSource = undefined;\n\tprivate STT_TIMEOUT_MS = 2 * 1000;\n\tprivate sttReconnectionTimeout: NodeJS.Timeout;\n\tprivate _isSttReady: BehaviorSubject<boolean> = new BehaviorSubject(true);\n\tprotected log: ILogger;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(\n\t\tprotected openviduAngularConfigSrv: OpenViduAngularConfigService,\n\t\tprotected platformService: PlatformService,\n\t\tprotected loggerSrv: LoggerService,\n\t\tprivate participantService: ParticipantService,\n\t\tprotected deviceService: DeviceService\n\t) {\n\t\tthis.log = this.loggerSrv.get('OpenViduService');\n\t\tthis.isSttReadyObs = this._isSttReady.asObservable();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tinitialize() {\n\t\tthis.OV = new OpenVidu();\n\t\tthis.OV.setAdvancedConfiguration({\n\t\t\tpublisherSpeakingEventsOptions: {\n\t\t\t\tinterval: 50\n\t\t\t}\n\t\t});\n\t\tif (this.openviduAngularConfigSrv.isProduction()) this.OV.enableProdMode();\n\t\tthis.webcamSession = this.OV.initSession();\n\n\t\t// Initialize screen session only if it is not mobile platform\n\t\tif (!this.platformService.isMobile()) {\n\t\t\tthis.OVScreen = new OpenVidu();\n\t\t\tif (this.openviduAngularConfigSrv.isProduction()) this.OVScreen.enableProdMode();\n\t\t\tthis.screenSession = this.OVScreen.initSession();\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetWebcamToken(token: string) {\n\t\tthis.webcamToken = token;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetScreenToken(token: string) {\n\t\tthis.screenToken = token;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetWebcamToken(): string {\n\t\treturn this.webcamToken;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetScreenToken(): string {\n\t\treturn this.screenToken;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisOpenViduCE(): boolean {\n\t\treturn this.ovEdition === OpenViduEdition.CE;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisOpenViduPro(): boolean {\n\t\treturn this.ovEdition === OpenViduEdition.PRO;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetOpenViduEdition(edition: OpenViduEdition) {\n\t\tthis.ovEdition = edition;\n\t}\n\n\tisSessionConnected(): boolean {\n\t\treturn !!this.webcamSession.connection;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tasync clear() {\n\t\tthis.videoSource = undefined;\n\t\tthis.audioSource = undefined;\n\t\tawait this.participantService.getMyCameraPublisher()?.stream?.disposeMediaStream();\n\t\tawait this.participantService.getMyScreenPublisher()?.stream?.disposeMediaStream();\n\t}\n\n\t/**\n\t *\n\t * Returns the local Session. See {@link https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/Session.html  Session} object.\n\t */\n\tgetSession(): Session {\n\t\treturn this.getWebcamSession();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetWebcamSession(): Session {\n\t\treturn this.webcamSession;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisWebcamSessionConnected(): boolean {\n\t\treturn !!this.webcamSession.capabilities;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tgetScreenSession(): Session {\n\t\treturn this.screenSession;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisScreenSessionConnected(): boolean {\n\t\treturn !!this.screenSession.capabilities;\n\t}\n\n\t/**\n\t * @internal\n\t * Whether the STT service is ready or not\n\t * This will be `false` when the app receives a SPEECH_TO_TEXT_DISCONNECTED exception\n\t * and it cannot subscribe to STT\n\t */\n\tisSttReady(): boolean {\n\t\treturn this._isSttReady.getValue();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsetSTTReady(value: boolean): void {\n\t\tif (this._isSttReady.getValue() !== value) {\n\t\t\tthis._isSttReady.next(value);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tasync connectSession(session: Session, token: string): Promise<void> {\n\t\tif (!!token && session) {\n\t\t\tconst nickname = this.participantService.getMyNickname();\n\t\t\tconst participantId = this.participantService.getLocalParticipant().id;\n\t\t\tif (session === this.webcamSession) {\n\t\t\t\tthis.log.d('Connecting webcam session');\n\t\t\t\tawait this.webcamSession.connect(token, {\n\t\t\t\t\tclientData: nickname,\n\t\t\t\t\tparticipantId,\n\t\t\t\t\ttype: VideoType.CAMERA\n\t\t\t\t});\n\t\t\t\tthis.participantService.setMyCameraConnectionId(this.webcamSession.connection.connectionId);\n\t\t\t} else if (session === this.screenSession) {\n\t\t\t\tthis.log.d('Connecting screen session');\n\t\t\t\tawait this.screenSession.connect(token, {\n\t\t\t\t\tclientData: `${nickname}_${VideoType.SCREEN}`,\n\t\t\t\t\tparticipantId,\n\t\t\t\t\ttype: VideoType.SCREEN\n\t\t\t\t});\n\n\t\t\t\tthis.participantService.setMyScreenConnectionId(this.screenSession.connection.connectionId);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Leaves the session, destroying all local streams and clean all participant data.\n\t */\n\tdisconnect() {\n\t\tthis.disconnectSession(this.webcamSession);\n\t\tthis.disconnectSession(this.screenSession);\n\t}\n\n\t/**\n\t * @internal\n\t * Initialize a publisher checking devices saved on storage or if participant have devices available.\n\t */\n\tasync initDefaultPublisher(): Promise<Publisher | undefined> {\n\t\tconst hasVideoDevices = this.deviceService.hasVideoDeviceAvailable();\n\t\tconst hasAudioDevices = this.deviceService.hasAudioDeviceAvailable();\n\t\tconst isVideoActive = !this.deviceService.isVideoMuted();\n\t\tconst isAudioActive = !this.deviceService.isAudioMuted();\n\n\t\tlet videoSource: string | boolean = false;\n\t\tlet audioSource: string | boolean = false;\n\n\t\tif (hasVideoDevices) {\n\t\t\t// Video is active, assign the device selected\n\t\t\tvideoSource = this.deviceService.getCameraSelected().device;\n\t\t} else if (!isVideoActive && hasVideoDevices) {\n\t\t\t// Video is muted, assign the default device\n\t\t\t// videoSource = undefined;\n\t\t}\n\n\t\tif (hasAudioDevices) {\n\t\t\t// Audio is active, assign the device selected\n\t\t\taudioSource = this.deviceService.getMicrophoneSelected().device;\n\t\t} else if (!isAudioActive && hasAudioDevices) {\n\t\t\t// Audio is muted, assign the default device\n\t\t\t// audioSource = undefined;\n\t\t}\n\n\t\tconst mirror = this.deviceService.getCameraSelected() && this.deviceService.getCameraSelected().type === CameraType.FRONT;\n\t\tconst properties: PublisherProperties = {\n\t\t\tvideoSource,\n\t\t\taudioSource,\n\t\t\tpublishVideo: isVideoActive,\n\t\t\tpublishAudio: isAudioActive,\n\t\t\tmirror\n\t\t};\n\t\tif (hasVideoDevices || hasAudioDevices) {\n\t\t\tconst publisher = await this.initPublisher(properties);\n\t\t\tthis.participantService.setMyCameraPublisher(publisher);\n\t\t\tthis.participantService.updateLocalParticipant();\n\t\t\treturn publisher;\n\t\t} else {\n\t\t\tthis.participantService.setMyCameraPublisher(null);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate async initPublisher(properties: PublisherProperties, targetElement?: string | HTMLElement): Promise<Publisher> {\n\t\tthis.log.d('Initializing publisher with properties: ', properties);\n\t\treturn this.OV.initPublisherAsync(targetElement, properties);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tasync publish(publisher: Publisher): Promise<void> {\n\t\tif (!!publisher) {\n\t\t\tif (publisher === this.participantService.getMyCameraPublisher()) {\n\t\t\t\tif (this.webcamSession?.capabilities?.publish) {\n\t\t\t\t\treturn await this.webcamSession.publish(publisher);\n\t\t\t\t}\n\t\t\t\tthis.log.e('Webcam publisher cannot be published');\n\t\t\t} else if (publisher === this.participantService.getMyScreenPublisher()) {\n\t\t\t\tif (this.screenSession?.capabilities?.publish) {\n\t\t\t\t\treturn await this.screenSession.publish(publisher);\n\t\t\t\t}\n\t\t\t\tthis.log.e('Screen publisher cannot be published');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate unpublish(publisher: Publisher): void {\n\t\tif (!!publisher) {\n\t\t\tif (publisher === this.participantService.getMyCameraPublisher()) {\n\t\t\t\tthis.publishAudioAux(this.participantService.getMyScreenPublisher(), this.participantService.isMyAudioActive());\n\t\t\t\tthis.webcamSession.unpublish(publisher);\n\t\t\t} else if (publisher === this.participantService.getMyScreenPublisher()) {\n\t\t\t\tthis.screenSession.unpublish(publisher);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Publish or unpublish the video stream (if available).\n\t * It hides the camera muted stream if screen is sharing.\n\t * See openvidu-browser {@link https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/Publisher.html#publishVideo publishVideo}\n\t */\n\tasync publishVideo(publish: boolean): Promise<void> {\n\t\tconst publishAudio = this.participantService.isMyAudioActive();\n\n\t\t// Disabling webcam\n\t\tif (this.participantService.haveICameraAndScreenActive()) {\n\t\t\tawait this.publishVideoAux(this.participantService.getMyCameraPublisher(), publish);\n\t\t\tthis.participantService.disableWebcamStream();\n\t\t\tthis.unpublish(this.participantService.getMyCameraPublisher());\n\t\t\tthis.publishAudioAux(this.participantService.getMyScreenPublisher(), publishAudio);\n\t\t} else if (this.participantService.isOnlyMyScreenActive()) {\n\t\t\t// Enabling webcam\n\t\t\tconst hasAudio = this.participantService.hasScreenAudioActive();\n\t\t\tif (!this.isWebcamSessionConnected()) {\n\t\t\t\tawait this.connectSession(this.getWebcamSession(), this.getWebcamToken());\n\t\t\t}\n\t\t\tawait this.publish(this.participantService.getMyCameraPublisher());\n\t\t\tawait this.publishVideoAux(this.participantService.getMyCameraPublisher(), true);\n\t\t\tthis.publishAudioAux(this.participantService.getMyScreenPublisher(), false);\n\t\t\tthis.publishAudioAux(this.participantService.getMyCameraPublisher(), hasAudio);\n\t\t\tthis.participantService.enableWebcamStream();\n\t\t} else {\n\t\t\t// Muting/unmuting webcam\n\t\t\tawait this.publishVideoAux(this.participantService.getMyCameraPublisher(), publish);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate async publishVideoAux(publisher: Publisher, publish: boolean): Promise<void> {\n\t\tif (!!publisher) {\n\t\t\tlet resource: boolean | MediaStreamTrack = true;\n\t\t\tif (publish) {\n\t\t\t\t// Forcing restoration with a custom media stream (the older one instead the default)\n\t\t\t\tconst currentDeviceId = this.deviceService.getCameraSelected()?.device;\n\t\t\t\tconst mediaStream = await this.createMediaStream({ videoSource: currentDeviceId, audioSource: false });\n\t\t\t\tresource = mediaStream.getVideoTracks()[0];\n\t\t\t}\n\n\t\t\tawait publisher.publishVideo(publish, resource);\n\t\t\tthis.participantService.updateLocalParticipant();\n\t\t}\n\t}\n\n\t/**\n\t * Publish or unpublish the audio stream (if available).\n\t * See openvidu-browser {@link https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/Publisher.html#publishAudio publishAudio}.\n\t */\n\tasync publishAudio(publish: boolean): Promise<void> {\n\t\tif (this.participantService.isMyCameraActive()) {\n\t\t\tif (this.participantService.isMyScreenActive() && this.participantService.hasScreenAudioActive()) {\n\t\t\t\tthis.publishAudioAux(this.participantService.getMyScreenPublisher(), false);\n\t\t\t}\n\n\t\t\tthis.publishAudioAux(this.participantService.getMyCameraPublisher(), publish);\n\t\t} else {\n\t\t\tthis.publishAudioAux(this.participantService.getMyScreenPublisher(), publish);\n\t\t}\n\t}\n\n\t/**\n\t * Share or unshare the screen.\n\t * Hide the camera muted stream when screen is sharing.\n\t */\n\tasync toggleScreenshare() {\n\t\tif (this.participantService.haveICameraAndScreenActive()) {\n\t\t\t// Disabling screenShare\n\t\t\tthis.participantService.disableScreenStream();\n\t\t\tthis.unpublish(this.participantService.getMyScreenPublisher());\n\t\t} else if (this.participantService.isOnlyMyCameraActive()) {\n\t\t\t// I only have the camera published\n\t\t\tconst hasAudioDevicesAvailable = this.deviceService.hasAudioDeviceAvailable();\n\t\t\tconst willWebcamBePresent = this.participantService.isMyCameraActive() && this.participantService.isMyVideoActive();\n\t\t\tconst hasAudio = willWebcamBePresent ? false : hasAudioDevicesAvailable && this.participantService.isMyAudioActive();\n\n\t\t\tconst properties: PublisherProperties = {\n\t\t\t\tvideoSource: ScreenType.SCREEN,\n\t\t\t\taudioSource: hasAudioDevicesAvailable ? this.deviceService.getMicrophoneSelected().device : false,\n\t\t\t\tpublishVideo: true,\n\t\t\t\tpublishAudio: hasAudio,\n\t\t\t\tmirror: false\n\t\t\t};\n\t\t\tconst screenPublisher = await this.initPublisher(properties);\n\n\t\t\tscreenPublisher.once('accessAllowed', async () => {\n\t\t\t\t// Listen to event fired when native stop button is clicked\n\t\t\t\tscreenPublisher.stream\n\t\t\t\t\t.getMediaStream()\n\t\t\t\t\t.getVideoTracks()[0]\n\t\t\t\t\t.addEventListener('ended', async () => {\n\t\t\t\t\t\tthis.log.d('Clicked native stop button. Stopping screen sharing');\n\t\t\t\t\t\tawait this.toggleScreenshare();\n\t\t\t\t\t});\n\n\t\t\t\t// Enabling screenShare\n\t\t\t\tthis.participantService.activeMyScreenShare(screenPublisher);\n\n\t\t\t\tif (!this.isScreenSessionConnected()) {\n\t\t\t\t\tawait this.connectSession(this.getScreenSession(), this.getScreenToken());\n\t\t\t\t}\n\t\t\t\tawait this.publish(this.participantService.getMyScreenPublisher());\n\t\t\t\tif (!this.participantService.isMyVideoActive()) {\n\t\t\t\t\t// Disabling webcam\n\t\t\t\t\tthis.participantService.disableWebcamStream();\n\t\t\t\t\tthis.unpublish(this.participantService.getMyCameraPublisher());\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tscreenPublisher.once('accessDenied', (error: any) => {\n\t\t\t\treturn Promise.reject(error);\n\t\t\t});\n\t\t} else {\n\t\t\t// I only have my screenshare active and I have no camera or it is muted\n\t\t\tconst hasAudio = this.participantService.hasScreenAudioActive();\n\n\t\t\t// Enable webcam\n\t\t\tif (!this.isWebcamSessionConnected()) {\n\t\t\t\tawait this.connectSession(this.getWebcamSession(), this.getWebcamToken());\n\t\t\t}\n\t\t\tawait this.publish(this.participantService.getMyCameraPublisher());\n\t\t\tthis.publishAudioAux(this.participantService.getMyCameraPublisher(), hasAudio);\n\t\t\tthis.participantService.enableWebcamStream();\n\n\t\t\t// Disabling screenshare\n\t\t\tthis.participantService.disableScreenStream();\n\t\t\tthis.unpublish(this.participantService.getMyScreenPublisher());\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tprivate publishAudioAux(publisher: Publisher, value: boolean): void {\n\t\tif (!!publisher) {\n\t\t\tpublisher.publishAudio(value);\n\t\t\tthis.participantService.updateLocalParticipant();\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tsendSignal(type: Signal, connections?: Connection[], data?: any): void {\n\t\tconst signalOptions: SignalOptions = {\n\t\t\tdata: JSON.stringify(data),\n\t\t\ttype,\n\t\t\tto: connections && connections.length > 0 ? connections : undefined\n\t\t};\n\t\tthis.webcamSession.signal(signalOptions);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tasync replaceTrack(videoType: VideoType, props: PublisherProperties) {\n\t\ttry {\n\t\t\tthis.log.d(`Replacing ${videoType} track`, props);\n\n\t\t\tif (videoType === VideoType.CAMERA) {\n\t\t\t\tlet mediaStream: MediaStream;\n\t\t\t\tconst isReplacingAudio = !!props.audioSource;\n\t\t\t\tconst isReplacingVideo = !!props.videoSource;\n\n\t\t\t\tif (isReplacingVideo) {\n\t\t\t\t\tmediaStream = await this.createMediaStream(props);\n\t\t\t\t\t// Replace video track\n\t\t\t\t\tconst videoTrack: MediaStreamTrack = mediaStream.getVideoTracks()[0];\n\t\t\t\t\tawait this.participantService.getMyCameraPublisher().replaceTrack(videoTrack);\n\t\t\t\t} else if (isReplacingAudio) {\n\t\t\t\t\tmediaStream = await this.createMediaStream(props);\n\t\t\t\t\t// Replace audio track\n\t\t\t\t\tconst audioTrack: MediaStreamTrack = mediaStream.getAudioTracks()[0];\n\t\t\t\t\tawait this.participantService.getMyCameraPublisher().replaceTrack(audioTrack);\n\t\t\t\t}\n\t\t\t} else if (videoType === VideoType.SCREEN) {\n\t\t\t\ttry {\n\t\t\t\t\tlet newScreenMediaStream = await this.OVScreen.getUserMedia(props);\n\t\t\t\t\tthis.participantService.getMyScreenPublisher().stream.getMediaStream().getVideoTracks()[0].stop();\n\t\t\t\t\tawait this.participantService.getMyScreenPublisher().replaceTrack(newScreenMediaStream.getVideoTracks()[0]);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.log.w('Cannot create the new MediaStream', error);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthis.log.e('Error replacing track ', error);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t * Subscribe all `CAMERA` stream types to speech-to-text\n\t * It will retry the subscription each `STT_TIMEOUT_MS`\n\t *\n\t * @param lang The language of the Stream's audio track.\n\t */\n\tasync subscribeRemotesToSTT(lang: string): Promise<void> {\n\t\tconst remoteParticipants = this.participantService.getRemoteParticipants();\n\t\tlet successNumber = 0;\n\n\t\tfor (const p of remoteParticipants) {\n\t\t\tconst stream = p.getCameraConnection()?.streamManager?.stream;\n\t\t\tif (stream) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.subscribeStreamToStt(stream, lang);\n\t\t\t\t\tsuccessNumber++;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.log.e(`Error subscribing ${stream.streamId} to STT:`, error);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.setSTTReady(successNumber === remoteParticipants.length);\n\t\tif (!this.isSttReady()) {\n\t\t\tthis.log.w('STT is not ready. Retrying subscription...');\n\t\t\tthis.sttReconnectionTimeout = setTimeout(this.subscribeRemotesToSTT.bind(this, lang), this.STT_TIMEOUT_MS);\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t * Subscribe a stream to speech-to-text\n\t * @param stream\n\t * @param lang\n\t */\n\tasync subscribeStreamToStt(stream: Stream, lang: string): Promise<void> {\n\t\tawait this.getWebcamSession().subscribeToSpeechToText(stream, lang);\n\t\tthis.log.d(`Subscribed stream ${stream.streamId} to STT with ${lang} language.`);\n\t}\n\n\t/**\n\t * @internal\n\t * Unsubscribe to all `CAMERA` stream types to speech-to-text if STT is up(ready)\n\t */\n\tasync unsubscribeRemotesFromSTT(): Promise<void> {\n\t\tclearTimeout(this.sttReconnectionTimeout);\n\t\tif (this.isSttReady()) {\n\t\t\tfor (const p of this.participantService.getRemoteParticipants()) {\n\t\t\t\tconst stream = p.getCameraConnection().streamManager.stream;\n\t\t\t\tif (stream) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.getWebcamSession().unsubscribeFromSpeechToText(stream);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.log.e(`Error unsubscribing ${stream.streamId} from STT:`, error);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async createMediaStream(pp: PublisherProperties): Promise<MediaStream> {\n\t\tlet mediaStream: MediaStream;\n\t\tconst isFirefoxPlatform = this.platformService.isFirefox();\n\t\tconst isReplacingAudio = !!pp.audioSource;\n\t\tconst isReplacingVideo = !!pp.videoSource;\n\n\t\ttry {\n\t\t\tmediaStream = await this.OV.getUserMedia(pp);\n\t\t} catch (error) {\n\t\t\tif ((<OpenViduError>error).name === OpenViduErrorName.DEVICE_ACCESS_DENIED) {\n\t\t\t\tif (isFirefoxPlatform) {\n\t\t\t\t\tthis.log.w('The device requested is not available. Restoring the older one');\n\t\t\t\t\t// The track requested is not available so we are getting the old tracks ids for recovering the track\n\t\t\t\t\tif (isReplacingVideo) {\n\t\t\t\t\t\tpp.videoSource = this.deviceService.getCameraSelected().device;\n\t\t\t\t\t} else if (isReplacingAudio) {\n\t\t\t\t\t\tpp.audioSource = this.deviceService.getMicrophoneSelected().device;\n\t\t\t\t\t}\n\t\t\t\t\tmediaStream = await this.OV.getUserMedia(pp);\n\t\t\t\t\t// TODO show error alert informing that the new device is not available\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\treturn mediaStream;\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tneedSendNicknameSignal(): boolean {\n\t\tlet oldNickname: string;\n\t\ttry {\n\t\t\tconst connData = JSON.parse(this.webcamSession.connection.data.split('%/%')[0]);\n\t\t\toldNickname = connData.clientData;\n\t\t} catch (error) {\n\t\t\tthis.log.e(error);\n\t\t}\n\t\treturn oldNickname !== this.participantService.getMyNickname();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tisMyOwnConnection(connectionId: string): boolean {\n\t\treturn (\n\t\t\tthis.webcamSession?.connection?.connectionId === connectionId || this.screenSession?.connection?.connectionId === connectionId\n\t\t);\n\t}\n\n\t/**\n\t *\n\t * Returns the remote connections of the Session.\n\t * See {@link https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/Connection.html  Connection} object.\n\t */\n\tgetRemoteConnections(): Connection[] {\n\t\t// Avoid screen connections\n\t\tconst remoteCameraConnections: Connection[] = Array.from(this.webcamSession.remoteConnections.values()).filter((conn) => {\n\t\t\tlet type: VideoType;\n\t\t\ttype = JSON.parse(conn.data).type;\n\t\t\treturn type !== VideoType.SCREEN;\n\t\t});\n\t\treturn remoteCameraConnections;\n\t}\n\n\tprivate disconnectSession(session: Session) {\n\t\tif (session) {\n\t\t\tif (session.sessionId === this.webcamSession?.sessionId) {\n\t\t\t\tthis.log.d('Disconnecting webcam session');\n\t\t\t\tthis.webcamSession?.disconnect();\n\t\t\t\tthis.webcamSession = null;\n\t\t\t} else if (session.sessionId === this.screenSession?.sessionId) {\n\t\t\t\tthis.log.d('Disconnecting screen session');\n\t\t\t\tthis.screenSession?.disconnect();\n\t\t\t\tthis.screenSession = null;\n\t\t\t}\n\t\t}\n\t}\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnInit, QueryList, ViewChildren } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PanelService } from '../../services/panel/panel.service';\n\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { Session, SpeechToTextEvent } from 'openvidu-browser';\nimport { CaptionModel, CaptionsLangOption } from '../../models/caption.model';\nimport { PanelEvent, PanelSettingsOptions, PanelType } from '../../models/panel.model';\nimport { CaptionService } from '../../services/caption/caption.service';\nimport { OpenViduService } from '../../services/openvidu/openvidu.service';\nimport { ParticipantService } from '../../services/participant/participant.service';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-captions',\n\ttemplateUrl: './captions.component.html',\n\tstyleUrls: ['./captions.component.css'],\n\tanimations: [\n\t\ttrigger('captionAnimation', [\n\t\t\ttransition(':enter', [style({ opacity: 0 }), animate('50ms ease-in', style({ opacity: 1 }))])\n\t\t\t// transition(':leave', [style({ opacity: 1 }), animate('10ms ease-out', style({ opacity: 0 }))])\n\t\t])\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class CaptionsComponent implements OnInit {\n\tscrollContainer: QueryList<ElementRef>;\n\n\t@ViewChildren('captionEventElement')\n\tset captionEventRef(captionEventsRef: QueryList<ElementRef>) {\n\t\tsetTimeout(() => {\n\t\t\tif (captionEventsRef) {\n\t\t\t\tthis.scrollContainer = captionEventsRef;\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\tsettingsPanelOpened: boolean;\n\n\tcaptionEvents: CaptionModel[] = [];\n\n\tsession: Session;\n\tisSttReady: boolean = true;\n\n\tprivate deleteFirstTimeout: NodeJS.Timeout;\n\tprivate deleteAllTimeout: NodeJS.Timeout;\n\n\tprivate DELETE_TIMEOUT = 10 * 1000;\n\tprivate MAX_EVENTS_LIMIT = 3;\n\tprivate captionLanguageSubscription: Subscription;\n\tprivate captionLangSelected: CaptionsLangOption;\n\tprivate screenSizeSub: Subscription;\n\tprivate panelTogglingSubscription: Subscription;\n\tprivate sttStatusSubscription: Subscription;\n\n\n\tconstructor(\n\t\tprivate panelService: PanelService,\n\t\tprivate openviduService: OpenViduService,\n\t\tprivate participantService: ParticipantService,\n\t\tprivate captionService: CaptionService,\n\t\tprivate cd: ChangeDetectorRef\n\t) {}\n\n\tasync ngOnInit(): Promise<void> {\n\t\tthis.subscribeToSTTStatus();\n\t\tthis.captionService.setCaptionsEnabled(true);\n\t\tthis.captionLangSelected = this.captionService.getLangSelected();\n\t\tthis.session = this.openviduService.getWebcamSession();\n\n\t\tawait this.openviduService.subscribeRemotesToSTT(this.captionLangSelected.lang);\n\n\t\tthis.subscribeToCaptionLanguage();\n\t\tthis.subscribeToPanelToggling();\n\t\tthis.subscribeToTranscription();\n\t}\n\n\tasync ngOnDestroy() {\n\t\tawait this.openviduService.unsubscribeRemotesFromSTT();\n\t\tthis.captionService.setCaptionsEnabled(false);\n\t\tif (this.screenSizeSub) this.screenSizeSub.unsubscribe();\n\t\tif (this.panelTogglingSubscription) this.panelTogglingSubscription.unsubscribe();\n\t\tif(this.sttStatusSubscription) this.sttStatusSubscription.unsubscribe();\n\t\tthis.session.off('speechToTextMessage');\n\t\tthis.captionEvents = [];\n\n\t}\n\n\tonSettingsCliked() {\n\t\tthis.panelService.togglePanel(PanelType.SETTINGS, PanelSettingsOptions.CAPTIONS);\n\t}\n\n\tprivate subscribeToTranscription() {\n\t\tthis.session.on('speechToTextMessage', (event: SpeechToTextEvent) => {\n\t\t\tif(!!event.text) {\n\t\t\t\tclearInterval(this.deleteAllTimeout);\n\t\t\t\tconst { connectionId, data } = event.connection;\n\t\t\t\tconst nickname: string = this.participantService.getNicknameFromConnectionData(data);\n\t\t\t\tconst color = this.participantService.getRemoteParticipantByConnectionId(connectionId)?.colorProfile || '';\n\n\t\t\t\tconst caption: CaptionModel = {\n\t\t\t\t\tconnectionId,\n\t\t\t\t\tnickname,\n\t\t\t\t\tcolor,\n\t\t\t\t\ttext: event.text,\n\t\t\t\t\ttype: event.reason\n\t\t\t\t};\n\t\t\t\tthis.updateCaption(caption);\n\t\t\t\t// Delete all events when there are no more events for a period of time\n\t\t\t\tthis.deleteAllEventsAfterDelay(this.DELETE_TIMEOUT);\n\t\t\t\tthis.cd.markForCheck();\n\t\t\t}\n\t\t});\n\t}\n\tprivate updateCaption(caption: CaptionModel): void {\n\t\tlet captionEventsCopy = [...this.captionEvents];\n\t\tlet eventsNumber = captionEventsCopy.length;\n\n\t\tif (eventsNumber === 0) {\n\t\t\tcaptionEventsCopy.push(caption);\n\t\t} else {\n\t\t\tconst lastCaption: CaptionModel | undefined = captionEventsCopy[eventsNumber - 1];\n\t\t\tconst sameSpeakerAsAbove: boolean = lastCaption.connectionId === caption.connectionId;\n\t\t\tconst lastSpeakerHasStoppedTalking = lastCaption.type === 'recognized';\n\n\t\t\tif (sameSpeakerAsAbove) {\n\t\t\t\tif (lastSpeakerHasStoppedTalking) {\n\t\t\t\t\t// Add event if different from previous one\n\t\t\t\t\tif (caption.text !== lastCaption.text) {\n\t\t\t\t\t\tthis.deleteFirstEventAfterDelay(this.DELETE_TIMEOUT);\n\t\t\t\t\t\tcaptionEventsCopy.push(caption);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t//Updating last 'recognizing' caption\n\t\t\t\t\tlastCaption.text = caption.text;\n\t\t\t\t\tlastCaption.type = caption.type;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Different speaker is talking\n\t\t\t\tconst speakerExists: boolean = captionEventsCopy.some((ev) => ev.connectionId === caption.connectionId);\n\t\t\t\tif (speakerExists) {\n\t\t\t\t\t// Speaker is already showing\n\t\t\t\t\tif (lastSpeakerHasStoppedTalking) {\n\t\t\t\t\t\tthis.deleteFirstEventAfterDelay(this.DELETE_TIMEOUT);\n\t\t\t\t\t\tcaptionEventsCopy.push(caption);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// There was an interruption. Last event is still being 'recognizing' (speaker is talking)\n\t\t\t\t\t\t// Update last speaker event.\n\t\t\t\t\t\tconst lastSpeakerCaption = captionEventsCopy.find((cap) => cap.connectionId === caption.connectionId);\n\t\t\t\t\t\tif (lastSpeakerCaption) {\n\t\t\t\t\t\t\tif (lastSpeakerCaption.type === 'recognized') {\n\t\t\t\t\t\t\t\tcaptionEventsCopy.push(caption);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlastSpeakerCaption.text = caption.text;\n\t\t\t\t\t\t\t\tlastSpeakerCaption.type = caption.type;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.deleteFirstEventAfterDelay(this.DELETE_TIMEOUT);\n\t\t\t\t\tcaptionEventsCopy.push(caption);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (captionEventsCopy.length === this.MAX_EVENTS_LIMIT) {\n\t\t\tclearInterval(this.deleteFirstTimeout);\n\t\t\tcaptionEventsCopy.shift();\n\t\t}\n\n\t\tthis.captionEvents = [...captionEventsCopy];\n\t\tthis.scrollToBottom();\n\t}\n\n\tprivate deleteFirstEventAfterDelay(timeout: number) {\n\t\tthis.deleteFirstTimeout = setTimeout(() => {\n\t\t\tthis.captionEvents.shift();\n\t\t\tthis.cd.markForCheck();\n\t\t}, timeout);\n\t}\n\n\tprivate deleteAllEventsAfterDelay(timeout: number) {\n\t\tthis.deleteAllTimeout = setTimeout(() => {\n\t\t\tthis.captionEvents = [];\n\t\t\tthis.cd.markForCheck();\n\t\t}, timeout);\n\t}\n\n\tprivate subscribeToSTTStatus() {\n\t\tthis.sttStatusSubscription = this.openviduService.isSttReadyObs.subscribe((ready: boolean) => {\n\t\t\tthis.isSttReady = ready;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n\n\tprivate subscribeToCaptionLanguage() {\n\t\tthis.captionLanguageSubscription = this.captionService.captionLangObs.subscribe((langOpt) => {\n\t\t\tthis.captionLangSelected = langOpt;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n\n\tprivate subscribeToPanelToggling() {\n\t\tthis.panelTogglingSubscription = this.panelService.panelOpenedObs.subscribe((ev: PanelEvent) => {\n\t\t\tthis.settingsPanelOpened = ev.opened;\n\t\t\tsetTimeout(() => this.cd.markForCheck(), 300);\n\t\t});\n\t}\n\n\tprivate scrollToBottom(): void {\n\t\tsetTimeout(() => {\n\t\t\ttry {\n\t\t\t\tthis.scrollContainer.forEach((el: ElementRef, index: number) => {\n\t\t\t\t\tel.nativeElement.scroll({\n\t\t\t\t\t\ttop: this.scrollContainer.get(index)?.nativeElement.scrollHeight,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t\t// behavior: 'smooth'\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} catch (err) {}\n\t\t}, 20);\n\t}\n}\n","<div class=\"captions-container\" #captionsContainer>\n\t<div\n\t\t*ngIf=\"captionsContainer.offsetWidth >= 600 && !settingsPanelOpened\"\n\t\tclass=\"captions-offset\"\n\t\t[ngClass]=\"{ 'captions-offset': captionsContainer.offsetWidth >= 1000 }\"\n\t>\n\t\t<button (click)=\"onSettingsCliked()\" id=\"caption-settings-btn\" mat-flat-button>\n\t\t\t<mat-icon id=\"subtitle-settings-icon\">settings</mat-icon>\n\t\t\t<span>{{ captionLangSelected.name }}</span>\n\t\t</button>\n\t</div>\n\t<div\n\t\t*ngIf=\"isSttReady\"\n\t\tclass=\"captions-center-container\"\n\t\t[ngClass]=\"{\n\t\t\t'events-one': captionEvents.length === 1,\n\t\t\t'events-two': captionEvents.length === 2,\n\t\t\t'events-three': captionEvents.length === 3,\n\t\t\t'screen-xl': captionsContainer.offsetWidth >= 1000,\n\t\t\t'screen-md': captionsContainer.offsetWidth >= 960 && captionsContainer.offsetWidth < 1000,\n\t\t\t'screen-sm': captionsContainer.offsetWidth >= 600 && captionsContainer.offsetWidth < 960,\n\t\t\t'screen-xs': captionsContainer.offsetWidth < 600\n\t\t}\"\n\t>\n\t\t<div class=\"element\" *ngFor=\"let caption of captionEvents; let i = index\" @captionAnimation>\n\t\t\t<p id=\"speaker\" [ngStyle]=\"{ color: caption.color }\">\n\t\t\t\t{{ caption.nickname }}\n\t\t\t</p>\n\t\t\t<div\n\t\t\t\tid=\"caption-event\"\n\t\t\t\tclass=\"caption-event\"\n\t\t\t\t[ngClass]=\"{ 'going-to-disappear': i === 0 && captionEvents.length === MAX_EVENTS_LIMIT }\"\n\t\t\t\t#captionEventElement\n\t\t\t>\n\t\t\t\t<span id=\"caption-text\" class=\"caption-text\">{{ caption.text }}</span>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div *ngIf=\"!isSttReady\" class=\"captions-center-container error-container\">\n\t\t<mat-spinner [diameter]=\"20\"></mat-spinner>\n\t\t<span>{{'ERRORS.SST_CONNECTION' | translate}}</span>\n\n\t</div>\n\n\t<div *ngIf=\"captionsContainer.offsetWidth >= 600 && !settingsPanelOpened\" class=\"captions-offset\"></div>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { StreamModel, ParticipantAbstractModel } from '../models/participant.model';\nimport { TranslateService } from '../services/translate/translate.service';\n\n@Pipe({ name: 'streams' })\nexport class ParticipantStreamsPipe implements PipeTransform {\n\tconstructor() {}\n\n\ttransform(participants: ParticipantAbstractModel[] | ParticipantAbstractModel): StreamModel[] {\n\t\tlet streams: StreamModel[] = [];\n\t\tif(participants && Object.keys(participants).length > 0){\n\t\t\tif (Array.isArray(participants)) {\n\t\t\t\tparticipants.forEach((p) => {\n\t\t\t\t\tstreams = streams.concat(p.getAvailableConnections());\n\t\t\t\t});\n\t\t\t} else {\n\n\t\t\t\tstreams = participants.getAvailableConnections();\n\t\t\t}\n\t\t}\n\t\treturn streams;\n\t}\n}\n\n/**\n * @internal\n */\n@Pipe({ name: 'streamTypesEnabled' })\nexport class StreamTypesEnabledPipe implements PipeTransform {\n\tconstructor(private translateService: TranslateService) {}\n\n\ttransform(participant: ParticipantAbstractModel): string {\n\t\tlet result = '';\n\t\tlet activeStreams = participant?.getConnectionTypesActive().toString();\n\t\tconst activeStreamsArr: string[] = activeStreams.split(',');\n\t\tactiveStreamsArr.forEach((type, index) => {\n\t\t\tresult += this.translateService.translate(`PANEL.PARTICIPANTS.${type}`)\n\t\t\tif(activeStreamsArr.length > 0 && index < activeStreamsArr.length - 1){\n\t\t\t\tresult += ', ';\n\t\t\t}\n\t\t});\n\t\treturn `(${result})`;\n\t}\n}\n","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tContentChild,\n\tOnDestroy,\n\tOnInit,\n\tTemplateRef,\n\tViewChild,\n\tViewContainerRef\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { StreamDirective } from '../../directives/template/openvidu-angular.directive';\nimport { ParticipantAbstractModel } from '../../models/participant.model';\nimport { LayoutService } from '../../services/layout/layout.service';\nimport { ParticipantService } from '../../services/participant/participant.service';\n\n/**\n *\n * The **LayoutComponent** is hosted inside of the {@link VideoconferenceComponent}.\n * It is in charge of displaying the participants streams layout.\n *\n * <div class=\"custom-table-container\">\n *\n * <div>\n * <h3>OpenVidu Angular Directives</h3>\n *\n * The LayoutComponent can be replaced with a custom component. It provides us the following {@link https://angular.io/guide/structural-directives Angular structural directives}\n * for doing this.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |            ***ovLayout**            |            {@link LayoutDirective}            |\n *\n * </br>\n *\n * It is also providing us a way to **replace the {@link StreamComponent Stream Component}** (<span class=\"italic\">which is hosted inside of it</span>) with a custom one.\n * It will recognise the following directive in a child element.\n *\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |            ***ovStream**            |            {@link StreamDirective}            |\n *\n * <p class=\"component-link-text\">\n * \t<span class=\"italic\">See all {@link OpenViduAngularDirectiveModule OpenVidu Angular Directives}</span>\n * </p>\n * </div>\n * </div>\n */\n@Component({\n\tselector: 'ov-layout',\n\ttemplateUrl: './layout.component.html',\n\tstyleUrls: ['./layout.component.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LayoutComponent implements OnInit, OnDestroy, AfterViewInit {\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('stream', { read: TemplateRef }) streamTemplate: TemplateRef<any>;\n\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild('layout', { static: false, read: ViewContainerRef }) layoutContainer: ViewContainerRef;\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild(StreamDirective)\n\tset externalStream(externalStream: StreamDirective) {\n\t\t// This directive will has value only when STREAM component tagget with '*ovStream' directive\n\t\t// is inside of the layout component tagged with '*ovLayout' directive\n\t\tif (externalStream) {\n\t\t\tthis.streamTemplate = externalStream.template;\n\t\t}\n\t}\n\n\tlocalParticipant: ParticipantAbstractModel;\n\tremoteParticipants: ParticipantAbstractModel[] = [];\n\t/**\n\t * @ignore\n\t */\n\tcaptionsEnabled = true;\n\n\tprivate localParticipantSubs: Subscription;\n\tprivate remoteParticipantsSubs: Subscription;\n\tprivate captionsSubs: Subscription;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(protected layoutService: LayoutService, protected participantService: ParticipantService, private cd: ChangeDetectorRef) {}\n\n\tngOnInit(): void {\n\t\tthis.subscribeToParticipants();\n\t\tthis.subscribeToCaptions();\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.layoutService.initialize(this.layoutContainer.element.nativeElement);\n\t}\n\n\tngOnDestroy() {\n\t\tthis.localParticipant = null;\n\t\tthis.remoteParticipants = [];\n\t\tif (this.localParticipantSubs) this.localParticipantSubs.unsubscribe();\n\t\tif (this.remoteParticipantsSubs) this.remoteParticipantsSubs.unsubscribe();\n\t\tif (this.captionsSubs) this.captionsSubs.unsubscribe();\n\t\tthis.layoutService.clear();\n\t}\n\n\tprivate subscribeToCaptions() {\n\t\tthis.captionsSubs = this.layoutService.captionsTogglingObs.subscribe((value: boolean) => {\n\t\t\tthis.captionsEnabled = value;\n\t\t\tthis.cd.markForCheck();\n\t\t\tthis.layoutService.update();\n\t\t});\n\t}\n\n\tprivate subscribeToParticipants() {\n\t\tthis.localParticipantSubs = this.participantService.localParticipantObs.subscribe((p) => {\n\t\t\tthis.localParticipant = p;\n\t\t\tthis.layoutService.update();\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\n\t\tthis.remoteParticipantsSubs = this.participantService.remoteParticipantsObs.subscribe((participants) => {\n\t\t\tthis.remoteParticipants = participants;\n\t\t\tthis.layoutService.update();\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n}\n","<div class=\"container\" [class.withCaptions]=\"captionsEnabled\">\n\t<div id=\"layout\" class=\"layout\" #layout>\n\t\t<div *ngFor=\"let stream of localParticipant | streams\"  [ngClass]=\"{ OV_big: stream.videoEnlarged }\" class=\"OT_root OT_publisher\">\n\t\t\t<ng-container *ngTemplateOutlet=\"streamTemplate; context: { $implicit: stream }\"></ng-container>\n\t\t</div>\n\n\t\t<div\n\t\t\t*ngFor=\"let stream of remoteParticipants | streams\"\n\t\t\tclass=\"OT_root OT_publisher\"\n\t\t\tid=\"remote-participant\"\n\t\t\t[ngClass]=\"{ OV_big: stream.videoEnlarged }\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"streamTemplate; context: { $implicit: stream }\"></ng-container>\n\t\t</div>\n\t</div>\n\n\t<ov-captions *ngIf=\"captionsEnabled\" class=\"OV_ignored\"></ov-captions>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { RecordingInfo, RecordingStatus } from '../../../../models/recording.model';\nimport { ActionService } from '../../../../services/action/action.service';\nimport { OpenViduAngularConfigService } from '../../../../services/config/openvidu-angular.config.service';\nimport { ParticipantService } from '../../../../services/participant/participant.service';\nimport { RecordingService } from '../../../../services/recording/recording.service';\n\n@Component({\n\tselector: 'ov-recording-activity',\n\ttemplateUrl: './recording-activity.component.html',\n\tstyleUrls: ['./recording-activity.component.css', '../activities-panel.component.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class RecordingActivityComponent implements OnInit {\n\t/**\n\t * @internal\n\t */\n\t@Input() expanded: boolean;\n\n\t/**\n\t * Provides event notifications that fire when start recording button has been clicked.\n\t * The recording should be started using the REST API.\n\t */\n\t@Output() onStartRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when stop recording button has been clicked.\n\t * The recording should be stopped using the REST API.\n\t */\n\t@Output() onStopRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when delete recording button has been clicked.\n\t * The recording should be deleted using the REST API.\n\t */\n\t@Output() onDeleteRecordingClicked: EventEmitter<string> = new EventEmitter<string>();\n\n\t/**\n\t * @internal\n\t */\n\trecordingStatus: RecordingStatus = RecordingStatus.STOPPED;\n\t/**\n\t * @internal\n\t */\n\toldRecordingStatus: RecordingStatus;\n\t/**\n\t * @internal\n\t */\n\topened: boolean = false;\n\n\t/**\n\t * @internal\n\t */\n\trecStatusEnum = RecordingStatus;\n\n\t/**\n\t * @internal\n\t */\n\tisSessionCreator = false;\n\n\t/**\n\t * @internal\n\t */\n\trecordingAlive: boolean = false;\n\t/**\n\t * @internal\n\t */\n\trecordingsList: RecordingInfo[] = [];\n\n\t/**\n\t * @internal\n\t */\n\trecordingError: any;\n\n\tprivate recordingStatusSubscription: Subscription;\n\tprivate recordingListSubscription: Subscription;\n\tprivate recordingErrorSub: Subscription;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(\n\t\tprivate recordingService: RecordingService,\n\t\tprivate participantService: ParticipantService,\n\t\tprivate libService: OpenViduAngularConfigService,\n\t\tprivate actionService: ActionService,\n\t\tprivate cd: ChangeDetectorRef\n\t) {}\n\n\t/**\n\t * @internal\n\t */\n\tngOnInit(): void {\n\t\tthis.subscribeToRecordingStatus();\n\t\tthis.subscribeToRecordingActivityDirective();\n\t\tthis.isSessionCreator = this.participantService.amIModerator();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tngOnDestroy() {\n\t\tif (this.recordingStatusSubscription) this.recordingStatusSubscription.unsubscribe();\n\t\tif (this.recordingListSubscription) this.recordingListSubscription.unsubscribe();\n\t\tif (this.recordingErrorSub) this.recordingErrorSub.unsubscribe();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpanelOpened() {\n\t\tthis.opened = true;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpanelClosed() {\n\t\tthis.opened = false;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tresetStatus() {\n\t\tlet status: RecordingStatus = this.oldRecordingStatus;\n\t\tif (this.oldRecordingStatus === RecordingStatus.STARTING) {\n\t\t\tstatus = RecordingStatus.STOPPED;\n\t\t} else if (this.oldRecordingStatus === RecordingStatus.STOPPING) {\n\t\t\tstatus = RecordingStatus.STARTED;\n\t\t}\n\t\tthis.recordingService.updateStatus(status);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tstartRecording() {\n\t\tthis.onStartRecordingClicked.emit();\n\t\tthis.recordingService.updateStatus(RecordingStatus.STARTING);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tstopRecording() {\n\t\tthis.onStopRecordingClicked.emit();\n\t\tthis.recordingService.updateStatus(RecordingStatus.STOPPING);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\n\tdeleteRecording(id: string) {\n\t\tconst succsessCallback = () => {\n\t\t\tthis.onDeleteRecordingClicked.emit(id);\n\t\t};\n\t\tthis.actionService.openDeleteRecordingDialog(succsessCallback);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tdownload(recording: RecordingInfo) {\n\t\tthis.recordingService.downloadRecording(recording);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tplay(recording: RecordingInfo) {\n\t\tthis.recordingService.playRecording(recording);\n\t}\n\n\tprivate subscribeToRecordingStatus() {\n\t\tthis.recordingStatusSubscription = this.recordingService.recordingStatusObs.subscribe(\n\t\t\t(ev?: { info: RecordingInfo; time?: Date }) => {\n\t\t\t\tif (ev?.info) {\n\t\t\t\t\tif (this.recordingStatus !== RecordingStatus.FAILED) {\n\t\t\t\t\t\tthis.oldRecordingStatus = this.recordingStatus;\n\t\t\t\t\t}\n\t\t\t\t\tthis.recordingStatus = ev.info.status;\n\t\t\t\t\tthis.recordingAlive = ev.info.status === RecordingStatus.STARTED;\n\t\t\t\t\tthis.cd.markForCheck();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate subscribeToRecordingActivityDirective() {\n\t\tthis.recordingListSubscription = this.libService.recordingsListObs.subscribe((recordingList: RecordingInfo[]) => {\n\t\t\tthis.recordingsList = recordingList;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\n\t\tthis.recordingErrorSub = this.libService.recordingErrorObs.subscribe((error: any) => {\n\t\t\tif (error) {\n\t\t\t\tthis.recordingService.updateStatus(RecordingStatus.FAILED);\n\t\t\t\tthis.recordingError = error.error?.message || error.message || error;\n\t\t\t}\n\t\t});\n\t}\n}\n","<mat-expansion-panel (opened)=\"panelOpened()\" (closed)=\"panelClosed()\" [expanded]=\"expanded\" [ngClass]=\"{'no-body': !opened}\">\n\t<mat-expansion-panel-header>\n\t\t<mat-list>\n\t\t\t<mat-list-item>\n\t\t\t\t<div\n\t\t\t\t\tmatListAvatar\n\t\t\t\t\tclass=\"activity-icon\"\n\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\tstarted: recordingStatus === recStatusEnum.STARTED,\n\t\t\t\t\t\tstopped: recordingStatus === recStatusEnum.STOPPED,\n\t\t\t\t\t\tfailed: recordingStatus === recStatusEnum.FAILED,\n\t\t\t\t\t\tpending: recordingStatus === recStatusEnum.STARTING || recordingStatus === recStatusEnum.STOPPING\n\t\t\t\t\t}\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon id=\"recording-icon\" *ngIf=\"recordingStatus !== recStatusEnum.FAILED && recordingStatus !== recStatusEnum.STARTED\">\n\t\t\t\t\t\tvideo_camera_front\n\t\t\t\t\t</mat-icon>\n\t\t\t\t\t<mat-icon *ngIf=\"recordingStatus === recStatusEnum.FAILED\">error</mat-icon>\n\t\t\t\t\t<mat-icon class=\"blink\" *ngIf=\"recordingStatus === recStatusEnum.STARTED\">radio_button_checked</mat-icon>\n\t\t\t\t</div>\n\t\t\t\t<h3 matLine class=\"activity-title\">{{ 'PANEL.RECORDING.TITLE' | translate }}</h3>\n\t\t\t\t<p matLine class=\"activity-subtitle\">{{ 'PANEL.RECORDING.SUBTITLE' | translate }}</p>\n\t\t\t\t<div class=\"activity-action-buttons\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tid=\"recording-status\"\n\t\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\t\tstarted: recordingStatus === recStatusEnum.STARTED,\n\t\t\t\t\t\t\tstopped: recordingStatus === recStatusEnum.STOPPED,\n\t\t\t\t\t\t\tfailed: recordingStatus === recStatusEnum.FAILED,\n\t\t\t\t\t\t\tpending: recordingStatus === recStatusEnum.STARTING || recordingStatus === recStatusEnum.STOPPING\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>{{ recordingStatus | uppercase }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</mat-list-item>\n\t\t</mat-list>\n\t</mat-expansion-panel-header>\n\t<div *ngIf=\"opened\" class=\"panel-body-container\">\n\t\t<div class=\"content\">\n\t\t\t<!-- Recording image -->\n\t\t\t<div *ngIf=\"recordingsList.length === 0\">\n\t\t\t\t<img\n\t\t\t\t\tsrc=\"data:image/png;base64,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\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<h2 *ngIf=\"recordingsList.length === 0\">{{ 'PANEL.RECORDING.CONTENT_TITLE' | translate }}</h2>\n\t\t\t<span *ngIf=\"recordingsList.length === 0\">{{ 'PANEL.RECORDING.CONTENT_SUBTITLE' | translate }}</span>\n\n\t\t\t<!-- Recording button -->\n\t\t\t<div *ngIf=\"isSessionCreator\" class=\"item recording-action-buttons\">\n\t\t\t\t<button *ngIf=\"recordingAlive\" mat-flat-button id=\"stop-recording-btn\" (click)=\"stopRecording()\">\n\t\t\t\t\t<span>{{ 'TOOLBAR.STOP_RECORDING' | translate }}</span>\n\t\t\t\t</button>\n\n\t\t\t\t<button\n\t\t\t\t\t*ngIf=\"recordingStatus === recStatusEnum.STOPPED\"\n\t\t\t\t\tmat-flat-button\n\t\t\t\t\tid=\"start-recording-btn\"\n\t\t\t\t\t(click)=\"startRecording()\"\n\t\t\t\t>\n\t\t\t\t\t<span *ngIf=\"recordingStatus === recStatusEnum.STOPPED\">{{ 'TOOLBAR.START_RECORDING' | translate }}</span>\n\t\t\t\t</button>\n\n\t\t\t\t<span *ngIf=\"recordingStatus === recStatusEnum.STARTING\">{{ 'PANEL.RECORDING.STARTING' | translate }} </span>\n\t\t\t\t<span *ngIf=\"recordingStatus === recStatusEnum.STOPPING\">{{ 'PANEL.RECORDING.STOPPING' | translate }} </span>\n\t\t\t\t<span *ngIf=\"recordingStatus === recStatusEnum.FAILED\">Message: </span>\n\t\t\t\t<span *ngIf=\"recordingStatus === recStatusEnum.FAILED\" class=\"recording-error\">{{ recordingError | json }} </span>\n\t\t\t\t<div>\n\t\t\t\t\t<button\n\t\t\t\t\t\t*ngIf=\"recordingStatus === recStatusEnum.FAILED\"\n\t\t\t\t\t\tmat-flat-button\n\t\t\t\t\t\tid=\"reset-recording-status-btn\"\n\t\t\t\t\t\t(click)=\"resetStatus()\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>{{ 'PANEL.RECORDING.RESTORE' | translate }}</span>\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- Message for no Moderators-->\n\t\t\t<p *ngIf=\"!isSessionCreator\" class=\"not-allowed-message\">{{ 'PANEL.RECORDING.NO_MODERATOR' | translate }}</p>\n\t\t</div>\n\t\t<mat-divider *ngIf=\"recordingsList.length > 0\"></mat-divider>\n\n\t\t<!-- Recording list -->\n\t\t<div *ngIf=\"recordingsList.length > 0\" class=\"item\">\n\t\t\t<mat-list>\n\t\t\t\t<div mat-subheader>{{ 'PANEL.RECORDING.RECORDINGS' | translate }}</div>\n\t\t\t\t<mat-list-item *ngFor=\"let recording of recordingsList\">\n\t\t\t\t\t<mat-icon class=\"recording-icon\" mat-list-icon>video_file</mat-icon>\n\t\t\t\t\t<div mat-line>\n\t\t\t\t\t\t<span class=\"recording-name\">{{ recording.id }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div mat-line class=\"time-container\">\n\t\t\t\t\t\t<span class=\"recording-duration\"> {{ recording.duration | duration }} </span>\n\t\t\t\t\t\t<span class=\"recording-size\"> | {{ recording.size / 1024 / 1024 | number: '1.1-2' }} MBs</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div mat-line class=\"recording-date\">{{ recording.createdAt | date: 'HH:mm - dd/MM/yyyy' }}</div>\n\n\t\t\t\t\t<button\n\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\t(click)=\"play(recording)\"\n\t\t\t\t\t\tid=\"play-recording-btn\"\n\t\t\t\t\t\tmatTooltip=\"{{ 'PANEL.RECORDING.PLAY' | translate }}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<mat-icon>play_arrow</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\t(click)=\"download(recording)\"\n\t\t\t\t\t\tid=\"download-recording-btn\"\n\t\t\t\t\t\tmatTooltip=\"{{ 'PANEL.RECORDING.DOWNLOAD' | translate }}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<mat-icon>download</mat-icon>\n\t\t\t\t\t</button>\n\n\t\t\t\t\t<button\n\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\tclass=\"delete-recording-btn\"\n\t\t\t\t\t\tid=\"delete-recording-btn\"\n\t\t\t\t\t\t(click)=\"deleteRecording(recording.id)\"\n\t\t\t\t\t\tmatTooltip=\"{{ 'PANEL.RECORDING.DELETE' | translate }}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<mat-icon>delete</mat-icon>\n\t\t\t\t\t</button>\n\t\t\t\t</mat-list-item>\n\t\t\t</mat-list>\n\t\t</div>\n\t</div>\n</mat-expansion-panel>\n","export enum BroadcastingStatus {\n\tSTARTING = 'starting',\n\tSTARTED = 'started',\n\tSTOPPING = 'stopping',\n\tSTOPPED = 'stopped',\n\tFAILED = 'failed'\n}\n\nexport interface BroadcastingError {\n\tmessage: string;\n\t// If broadcasting feature is available or not\n\tbroadcastAvailable: boolean;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { BroadcastingStatus } from '../../models/broadcasting.model';\n\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class BroadcastingService {\n\t/**\n\t * Broadcasting status Observable which pushes the broadcasting state in every update.\n\t */\n\tbroadcastingStatusObs: Observable<{ status: BroadcastingStatus; time?: Date } | undefined>;\n\n\tprivate broadcastingTime: Date | undefined;\n\tprivate broadcastingTimeInterval: NodeJS.Timer;\n\tprivate broadcastingStatus = <BehaviorSubject<{ status: BroadcastingStatus; time?: Date } | undefined>>new BehaviorSubject(undefined);\n\n\t/**\n\t * @internal\n\t */\n\tconstructor() {\n\t\tthis.broadcastingStatusObs = this.broadcastingStatus.asObservable();\n\t}\n\n\t/**\n\t * Update the broadcasting status. This method is used by the OpenVidu Angular library to update the broadcasting status.\n\t * @param status {@link BroadcastingStatus}\n\t */\n\tupdateStatus(status: BroadcastingStatus) {\n\t\tthis.broadcastingStatus.next({ status, time: this.broadcastingTime });\n\t}\n\n\tstartBroadcasting() {\n\t\tthis.startBroadcastingTime();\n\t\tthis.updateStatus(BroadcastingStatus.STARTED);\n\t}\n\n\tstopBroadcasting() {\n\t\tthis.stopBroadcastingTime();\n\t\tthis.updateStatus(BroadcastingStatus.STOPPED);\n\t}\n\n\tprivate startBroadcastingTime() {\n\t\tthis.broadcastingTime = new Date();\n\t\tthis.broadcastingTime.setHours(0, 0, 0, 0);\n\t\tthis.broadcastingTimeInterval = setInterval(() => {\n\t\t\tthis.broadcastingTime?.setSeconds(this.broadcastingTime.getSeconds() + 1);\n\t\t\tthis.broadcastingTime = new Date(this.broadcastingTime.getTime());\n\t\t\tthis.broadcastingStatus.next({ status: this.broadcastingStatus.getValue()?.status, time: this.broadcastingTime });\n\t\t}, 1000);\n\t}\n\n\tprivate stopBroadcastingTime() {\n\t\tclearInterval(this.broadcastingTimeInterval);\n\t\tthis.broadcastingTime = undefined;\n\t}\n}\n","import { Autolinker, AutolinkerConfig } from 'autolinker';\n\n/**\n * @internal\n */\nconst AUTOLINKER_CFGS: AutolinkerConfig = {\n\turls: {\n\t\tschemeMatches: true,\n\t\ttldMatches: true\n\t},\n\temail: true,\n\tphone: true,\n\tmention: 'twitter',\n\thashtag: 'twitter',\n\tstripPrefix: false,\n\tstripTrailingSlash: false,\n\tnewWindow: true,\n\ttruncate: {\n\t\tlength: 0,\n\t\tlocation: 'end'\n\t},\n\tdecodePercentEncoding: true\n};\n\n/**\n * @internal\n */\nexport class Linkifier {\n\tprivate autolinker: Autolinker;\n\n\tconstructor() {\n\t\tthis.autolinker = new Autolinker(AUTOLINKER_CFGS);\n\t}\n\n\tpublic link(textOrHtml: string): string {\n\t\treturn this.autolinker.link(textOrHtml);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Linkifier } from '../models/linkifier.model';\n\n/**\n * @internal\n */\n@Pipe({ name: 'linkify' })\nexport class LinkifyPipe implements PipeTransform {\n\tprivate linkifer: Linkifier;\n\n\tconstructor() {\n\t\tthis.linkifer = new Linkifier();\n\t}\n\n\ttransform(str: string): string {\n\t\treturn str ? this.linkifer.link(str) : str;\n\t}\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { BroadcastingError, BroadcastingStatus } from '../../../../models/broadcasting.model';\nimport { BroadcastingService } from '../../../../services/broadcasting/broadcasting.service';\nimport { OpenViduAngularConfigService } from '../../../../services/config/openvidu-angular.config.service';\nimport { ParticipantService } from '../../../../services/participant/participant.service';\n\n@Component({\n\tselector: 'ov-broadcasting-activity',\n\ttemplateUrl: './broadcasting-activity.component.html',\n\tstyleUrls: ['./broadcasting-activity.component.css', '../activities-panel.component.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BroadcastingActivityComponent implements OnInit {\n\t/**\n\t * Provides event notifications that fire when start broadcasting button has been clicked.\n\t * The broadcasting should be started using the REST API.\n\t */\n\t@Output() onStartBroadcastingClicked: EventEmitter<string> = new EventEmitter<string>();\n\n\t/**\n\t * Provides event notifications that fire when stop broadcasting button has been clicked.\n\t * The broadcasting should be stopped using the REST API.\n\t */\n\t@Output() onStopBroadcastingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * @internal\n\t */\n\turlRequiredError: boolean = false;\n\n\t/**\n\t * @internal\n\t */\n\toldBroadcastingStatus: BroadcastingStatus;\n\t/**\n\t * @internal\n\t */\n\tbroadcastUrl: string = '';\n\n\t/**\n\t * @internal\n\t */\n\t@Input() expanded: boolean;\n\n\t/**\n\t * @internal\n\t */\n\tbroadcastingError: BroadcastingError | undefined;\n\n\t/**\n\t * @internal\n\t */\n\tbroadcastingStatus: BroadcastingStatus = BroadcastingStatus.STOPPED;\n\t/**\n\t * @internal\n\t */\n\tbroadcastingStatusEnum = BroadcastingStatus;\n\t/**\n\t * @internal\n\t */\n\topened: boolean = false;\n\t/**\n\t * @internal\n\t */\n\tisSessionCreator: boolean = false;\n\t/**\n\t * @internal\n\t */\n\tisBroadcastModuleAvailable: boolean = true;\n\tprivate broadcastingSub: Subscription;\n\tprivate broadcastingErrorSub: Subscription;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(\n\t\tprivate broadcastingService: BroadcastingService,\n\t\tprivate participantService: ParticipantService,\n\t\tprivate libService: OpenViduAngularConfigService,\n\t\tprivate cd: ChangeDetectorRef\n\t) {}\n\n\t/**\n\t * @internal\n\t */\n\tngOnInit(): void {\n\t\tthis.isSessionCreator = this.participantService.amIModerator();\n\t\tthis.subscribeToBroadcastingStatus();\n\t\tthis.subscribeToBroadcastingError();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tngOnDestroy() {\n\t\tif (this.broadcastingSub) this.broadcastingSub.unsubscribe();\n\t\tif (this.broadcastingErrorSub) this.broadcastingErrorSub.unsubscribe();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpanelOpened() {\n\t\tthis.opened = true;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tpanelClosed() {\n\t\tthis.opened = false;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\teventKeyPress(event) {\n\t\t// Pressed 'Enter' key\n\t\tif (event && event.keyCode === 13) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.startBroadcasting();\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tstartBroadcasting() {\n\t\tif (!!this.broadcastUrl) {\n\t\t\tthis.isBroadcastModuleAvailable = true;\n\t\t\tthis.broadcastingError = undefined;\n\t\t\tthis.broadcastingService.updateStatus(BroadcastingStatus.STARTING);\n\t\t\tthis.onStartBroadcastingClicked.emit(this.broadcastUrl);\n\t\t}\n\t\tthis.urlRequiredError = !this.broadcastUrl;\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tstopBroadcasting() {\n\t\tthis.onStopBroadcastingClicked.emit();\n\t\tthis.broadcastingService.updateStatus(BroadcastingStatus.STOPPING);\n\t}\n\n\tprivate subscribeToBroadcastingStatus() {\n\t\tthis.broadcastingSub = this.broadcastingService.broadcastingStatusObs.subscribe(\n\t\t\t(ev: { status: BroadcastingStatus; time?: Date } | undefined) => {\n\t\t\t\tif (!!ev) {\n\t\t\t\t\tthis.broadcastingStatus = ev.status;\n\t\t\t\t\tthis.cd.markForCheck();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate subscribeToBroadcastingError() {\n\t\tthis.broadcastingErrorSub = this.libService.broadcastingErrorObs.subscribe((error: BroadcastingError | undefined) => {\n\t\t\tif (!!error) {\n\t\t\t\tthis.broadcastingError = error;\n\t\t\t\tthis.isBroadcastModuleAvailable = error.broadcastAvailable;\n\t\t\t\tthis.broadcastingService.updateStatus(BroadcastingStatus.FAILED);\n\t\t\t\tthis.cd.markForCheck();\n\t\t\t}\n\t\t});\n\t}\n}\n","<mat-expansion-panel (opened)=\"panelOpened()\" (closed)=\"panelClosed()\" [expanded]=\"expanded\" [ngClass]=\"{ 'no-body': !opened }\">\n\t<mat-expansion-panel-header>\n\t\t<mat-list>\n\t\t\t<mat-list-item>\n\t\t\t\t<div\n\t\t\t\t\tmatListAvatar\n\t\t\t\t\tclass=\"activity-icon\"\n\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\tstarted: broadcastingStatus === broadcastingStatusEnum.STARTED,\n\t\t\t\t\t\tstopped: broadcastingStatus === broadcastingStatusEnum.STOPPED,\n\t\t\t\t\t\tfailed: broadcastingStatus === broadcastingStatusEnum.FAILED,\n\t\t\t\t\t\tpending: broadcastingStatus === broadcastingStatusEnum.STARTING || broadcastingStatus === broadcastingStatusEnum.STOPPING\n\t\t\t\t\t}\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon\n\t\t\t\t\t\tid=\"broadcasting-icon\"\n\t\t\t\t\t\t*ngIf=\"broadcastingStatus !== broadcastingStatusEnum.FAILED && broadcastingStatus !== broadcastingStatusEnum.STARTED\"\n\t\t\t\t\t>\n\t\t\t\t\t\tsensors\n\t\t\t\t\t</mat-icon>\n\t\t\t\t\t<mat-icon *ngIf=\"broadcastingStatus === broadcastingStatusEnum.FAILED\">error</mat-icon>\n\t\t\t\t\t<mat-icon class=\"blink\" *ngIf=\"broadcastingStatus === broadcastingStatusEnum.STARTED\">sensors</mat-icon>\n\t\t\t\t</div>\n\t\t\t\t<h3 matLine class=\"activity-title\">{{ 'PANEL.STREAMING.TITLE' | translate }}</h3>\n\t\t\t\t<p matLine class=\"activity-subtitle\">{{ 'PANEL.STREAMING.SUBTITLE' | translate }}</p>\n\t\t\t\t<div class=\"activity-action-buttons\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tid=\"broadcasting-status\"\n\t\t\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t\t\tstarted: broadcastingStatus === broadcastingStatusEnum.STARTED,\n\t\t\t\t\t\t\tstopped: broadcastingStatus === broadcastingStatusEnum.STOPPED,\n\t\t\t\t\t\t\tfailed: broadcastingStatus === broadcastingStatusEnum.FAILED,\n\t\t\t\t\t\t\tpending: broadcastingStatus === broadcastingStatusEnum.STARTING || broadcastingStatus === broadcastingStatusEnum.STOPPING\n\t\t\t\t\t\t}\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>{{ broadcastingStatus | uppercase }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</mat-list-item>\n\t\t</mat-list>\n\t</mat-expansion-panel-header>\n\t<div *ngIf=\"opened\" class=\"panel-body-container\">\n\t\t<div class=\"content\">\n\t\t\t<!-- Broadcasting image -->\n\t\t\t<div *ngIf=\"broadcastingStatus === broadcastingStatusEnum.STOPPED\">\n\t\t\t\t<img\n\t\t\t\t\tsrc=\"data:image/png;base64,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\"\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<!-- Broadcasting button -->\n\t\t\t<div\n\t\t\t\t*ngIf=\"isSessionCreator\"\n\t\t\t\tclass=\"input-container\"\n\t\t\t\tid=\"broadcasting-url-input\"\n\t\t\t\tfxFlex=\"55px\"\n\t\t\t\tfxFlexOrder=\"3\"\n\t\t\t\tfxLayoutAlign=\"space-evenly none\"\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tplaceholder=\"{{ 'PANEL.STREAMING.URL' | translate }}\"\n\t\t\t\t\t[disabled]=\"broadcastingStatus !== broadcastingStatusEnum.STOPPED && broadcastingStatus !== broadcastingStatusEnum.FAILED\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t(keypress)=\"eventKeyPress($event)\"\n\t\t\t\t\t[(ngModel)]=\"broadcastUrl\"\n\t\t\t\t\tid=\"broadcast-url-input\"\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\tmat-icon-button\n\t\t\t\t\t*ngIf=\"broadcastingStatus !== broadcastingStatusEnum.STARTED\"\n\t\t\t\t\tid=\"broadcasting-btn\"\n\t\t\t\t\t[disabled]=\"\n\t\t\t\t\t\t!broadcastUrl || broadcastingStatus === broadcastingStatusEnum.STARTING || broadcastingStatus === broadcastingStatusEnum.STOPPING\n\t\t\t\t\t\"\n\t\t\t\t\t(click)=\"startBroadcasting()\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon matTooltip=\"{{ 'PANEL.STREAMING.START' | translate }}\">play_circle</mat-icon>\n\t\t\t\t</button>\n\n\t\t\t\t<button\n\t\t\t\t\tmat-icon-button\n\t\t\t\t\t*ngIf=\"broadcastingStatus === broadcastingStatusEnum.STARTED\"\n\t\t\t\t\tid=\"stop-broadcasting-btn\"\n\t\t\t\t\t(click)=\"stopBroadcasting()\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon matTooltip=\"{{ 'PANEL.STREAMING.STOP' | translate }}\">stop_circle</mat-icon>\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<div *ngIf=\"isSessionCreator\">\n\t\t\t\t<p>{{ 'CONTENT_SUBTITLE' | translate }}</p>\n\t\t\t\t<p *ngIf=\"urlRequiredError\" class=\"error-text\" id=\"required-url-error\">{{ 'PANEL.STREAMING.REQUIRED_URL' | translate }}</p>\n\t\t\t\t<p *ngIf=\"broadcastingError\" class=\"error-text\" id=\"broadcasting-error\">{{ broadcastingError.message }}</p>\n\t\t\t\t<p\n\t\t\t\t\t*ngIf=\"!isBroadcastModuleAvailable\"\n\t\t\t\t\tclass=\"error-text\"\n\t\t\t\t\tid=\"broadcasting-paid-error\"\n\t\t\t\t\t[innerHTML]=\"'PANEL.PAID_FEATURE' | translate | linkify\"\n\t\t\t\t></p>\n\t\t\t</div>\n\n\t\t\t<!-- Message for no Moderators-->\n\t\t\t<p *ngIf=\"!isSessionCreator\" class=\"not-allowed-message\">{{ 'PANEL.STREAMING.NO_MODERATOR' | translate }}</p>\n\t\t</div>\n\t</div>\n</mat-expansion-panel>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PanelEvent, PanelType } from '../../../models/panel.model';\nimport { OpenViduAngularConfigService } from '../../../services/config/openvidu-angular.config.service';\nimport { PanelService } from '../../../services/panel/panel.service';\n\n@Component({\n\tselector: 'ov-activities-panel',\n\ttemplateUrl: './activities-panel.component.html',\n\tstyleUrls: ['../panel.component.css', './activities-panel.component.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActivitiesPanelComponent implements OnInit {\n\t/**\n\t * Provides event notifications that fire when start recording button has been clicked.\n\t * The recording should be started using the OpenVidu REST API.\n\t */\n\t@Output() onStartRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when stop recording button has been clicked.\n\t * The recording should be stopped using the OpenVidu REST API.\n\t */\n\t@Output() onStopRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when delete recording button has been clicked.\n\t * The recording should be deleted using the OpenVidu REST API.\n\t */\n\t@Output() onDeleteRecordingClicked: EventEmitter<string> = new EventEmitter<string>();\n\n\t/**\n\t * Provides event notifications that fire when start broadcasting button has been clicked.\n\t * The broadcasting should be started using the REST API.\n\t */\n\t@Output() onStartBroadcastingClicked: EventEmitter<string> = new EventEmitter<string>();\n\n\t/**\n\t * Provides event notifications that fire when stop broadcasting button has been clicked.\n\t * The broadcasting should be stopped using the REST API.\n\t */\n\t@Output() onStopBroadcastingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * @internal\n\t */\n\texpandedPanel: string = '';\n\t/**\n\t * @internal\n\t */\n\tshowRecordingActivity: boolean = true;\n\tshowBroadcastingActivity: boolean = true;\n\tprivate panelSubscription: Subscription;\n\tprivate recordingActivitySub: Subscription;\n\tprivate broadcastingActivitySub: Subscription;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(private panelService: PanelService, private libService: OpenViduAngularConfigService, private cd: ChangeDetectorRef) {}\n\n\t/**\n\t * @internal\n\t */\n\tngOnInit(): void {\n\t\tthis.subscribeToPanelToggling();\n\t\tthis.subscribeToActivitiesPanelDirective();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tngOnDestroy() {\n\t\tif (this.panelSubscription) this.panelSubscription.unsubscribe();\n\t\tif (this.recordingActivitySub) this.recordingActivitySub.unsubscribe();\n\t\tif (this.broadcastingActivitySub) this.broadcastingActivitySub.unsubscribe();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tclose() {\n\t\tthis.panelService.togglePanel(PanelType.ACTIVITIES);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t_onStartRecordingClicked() {\n\t\tthis.onStartRecordingClicked.emit();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t_onStopRecordingClicked() {\n\t\tthis.onStopRecordingClicked.emit();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t_onDeleteRecordingClicked(recordingId: string) {\n\t\tthis.onDeleteRecordingClicked.emit(recordingId);\n\t}\n\n\t_onStartBroadcastingClicked(broadcastUrl: string) {\n\t\tthis.onStartBroadcastingClicked.emit(broadcastUrl);\n\t}\n\n\t_onStopBroadcastingClicked() {\n\t\tthis.onStopBroadcastingClicked.emit();\n\t}\n\n\tprivate subscribeToPanelToggling() {\n\t\tthis.panelSubscription = this.panelService.panelOpenedObs.subscribe((ev: PanelEvent) => {\n\t\t\tif (ev.type === PanelType.ACTIVITIES && !!ev.expand) {\n\t\t\t\tthis.expandedPanel = ev.expand;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToActivitiesPanelDirective() {\n\t\tthis.recordingActivitySub = this.libService.recordingActivity.subscribe((value: boolean) => {\n\t\t\tthis.showRecordingActivity = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\n\t\tthis.broadcastingActivitySub = this.libService.broadcastingActivity.subscribe((value: boolean) => {\n\t\t\tthis.showBroadcastingActivity = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n}\n","<div class=\"panel-container\" id=\"activities-container\" fxLayout=\"column\" fxLayoutAlign=\"space-evenly none\">\n\t<div class=\"panel-header-container\" fxFlex=\"55px\" fxLayoutAlign=\"start center\">\n\t\t<h3 class=\"panel-title\">Activities</h3>\n\t\t<button class=\"panel-close-button\" mat-icon-button matTooltip=\"{{ 'PANEL.CLOSE' | translate }}\" (click)=\"close()\">\n\t\t\t<mat-icon>close</mat-icon>\n\t\t</button>\n\t</div>\n\n\t<div class=\"activities-body-container\" fxFlex=\"75%\" fxLayoutAlign=\"space-evenly none\">\n\t\t<mat-accordion [multi]=\"false\">\n\t\t\t<ov-recording-activity\n\t\t\t\t*ngIf=\"showRecordingActivity\"\n\t\t\t\tid=\"recording-activity\"\n\t\t\t\t[expanded]=\"expandedPanel === 'recording'\"\n\t\t\t\t(onStartRecordingClicked)=\"_onStartRecordingClicked()\"\n\t\t\t\t(onStopRecordingClicked)=\"_onStopRecordingClicked()\"\n\t\t\t\t(onDeleteRecordingClicked)=\"_onDeleteRecordingClicked($event)\"\n\t\t\t></ov-recording-activity>\n\t\t\t<ov-broadcasting-activity\n\t\t\t\t*ngIf=\"showBroadcastingActivity\"\n\t\t\t\tid=\"broadcasting-activity\"\n\t\t\t\t[expanded]=\"expandedPanel === 'broadcasting'\"\n\t\t\t\t(onStartBroadcastingClicked)=\"_onStartBroadcastingClicked($event)\"\n\t\t\t\t(onStopBroadcastingClicked)=\"_onStopBroadcastingClicked()\"\n\t\t\t></ov-broadcasting-activity>\n\t\t</mat-accordion>\n\t</div>\n</div>\n","/**\n * @internal\n */\nexport enum Signal {\n\tNICKNAME_CHANGED = 'nicknameChanged',\n\tCHAT = 'chat'\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs/internal/Observable';\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\n\nimport { ILogger } from '../../models/logger.model';\nimport { ChatMessage } from '../../models/chat.model';\nimport { INotificationOptions } from '../../models/notification-options.model';\n\nimport { ActionService } from '../action/action.service';\nimport { OpenViduService } from '../openvidu/openvidu.service';\nimport { LoggerService } from '../logger/logger.service';\nimport { Signal } from '../../models/signal.model';\nimport { PanelService } from '../panel/panel.service';\nimport { ParticipantService } from '../participant/participant.service';\nimport { PanelType } from '../../models/panel.model';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class ChatService {\n\tmessagesObs: Observable<ChatMessage[]>;\n\tprivate messageSound: HTMLAudioElement;\n\tprotected _messageList = <BehaviorSubject<ChatMessage[]>>new BehaviorSubject([]);\n\tprotected messageList: ChatMessage[] = [];\n\tprotected log: ILogger;\n\tconstructor(\n\t\tprotected loggerSrv: LoggerService,\n\t\tprotected openviduService: OpenViduService,\n\t\tprotected participantService: ParticipantService,\n\t\tprotected panelService: PanelService,\n\t\tprotected actionService: ActionService\n\t) {\n\t\tthis.log = this.loggerSrv.get('ChatService');\n\t\tthis.messagesObs = this._messageList.asObservable();\n\t\tthis.messageSound = new Audio('data:audio/wav;base64,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');\n\t\tthis.messageSound.volume = 0.6;\n\t}\n\n\tsubscribeToChat() {\n\t\tconst session = this.openviduService.getWebcamSession();\n\t\tsession.on(`signal:${Signal.CHAT}`, (event: any) => {\n\t\t\tconst connectionId = event.from.connectionId;\n\t\t\tconst data = JSON.parse(event.data);\n\t\t\tconst isMyOwnConnection = this.openviduService.isMyOwnConnection(connectionId);\n\t\t\tthis.messageList.push({\n\t\t\t\tisLocal: isMyOwnConnection,\n\t\t\t\tnickname: data.nickname,\n\t\t\t\tmessage: data.message\n\t\t\t});\n\t\t\tif (!this.panelService.isChatPanelOpened()) {\n\t\t\t\tconst notificationOptions: INotificationOptions = {\n\t\t\t\t\tmessage: `${data.nickname.toUpperCase()} sent a message`,\n\t\t\t\t\tcssClassName: 'messageSnackbar',\n\t\t\t\t\tbuttonActionText: 'READ'\n\t\t\t\t};\n\t\t\t\tthis.launchNotification(notificationOptions);\n\t\t\t\tthis.messageSound.play().catch(() => {});\n\n\t\t\t}\n\t\t\tthis._messageList.next(this.messageList);\n\t\t});\n\t}\n\n\tsendMessage(message: string) {\n\t\tmessage = message.replace(/ +(?= )/g, '');\n\t\tif (message !== '' && message !== ' ') {\n\t\t\tconst data = {\n\t\t\t\tmessage: message,\n\t\t\t\tnickname: this.participantService.getMyNickname()\n\t\t\t};\n\n\t\t\tthis.openviduService.sendSignal(Signal.CHAT, undefined, data);\n\t\t}\n\t}\n\n\tclearOldMessages() {\n\t\tthis.messageList = [];\n\t\tthis._messageList.next(this.messageList);\n\t}\n\n\tprotected launchNotification(options: INotificationOptions) {\n\t\tthis.actionService.launchNotification(options, this.panelService.togglePanel.bind(this.panelService, PanelType.CHAT));\n\t}\n}\n","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tHostListener,\n\tOnInit,\n\tViewChild\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ChatMessage } from '../../../models/chat.model';\nimport { PanelType } from '../../../models/panel.model';\nimport { ChatService } from '../../../services/chat/chat.service';\nimport { PanelService } from '../../../services/panel/panel.service';\n\n/**\n *\n * The **ChatPanelComponent** is hosted inside of the {@link PanelComponent}.\n * It is in charge of displaying the session chat.\n *\n * <div class=\"custom-table-container\">\n\n * <div>\n *\n * <h3>OpenVidu Angular Directives</h3>\n *\n * The ChatPanelComponent can be replaced with a custom component. It provides us the following {@link https://angular.io/guide/structural-directives Angular structural directives}\n * for doing this.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |           ***ovChatPanel**          |           {@link ChatPanelDirective}          |\n *\n * <p class=\"component-link-text\">\n * \t<span class=\"italic\">See all {@link OpenViduAngularDirectiveModule OpenVidu Angular Directives}</span>\n * </p>\n * </div>\n * </div>\n */\n@Component({\n\tselector: 'ov-chat-panel',\n\ttemplateUrl: './chat-panel.component.html',\n\tstyleUrls: ['../panel.component.css','./chat-panel.component.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ChatPanelComponent implements OnInit, AfterViewInit {\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild('chatScroll') chatScroll: ElementRef;\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild('chatInput') chatInput: ElementRef;\n\t/**\n\t * @ignore\n\t */\n\tmessage: string;\n\n\tmessageList: ChatMessage[] = [];\n\n\tprivate chatMessageSubscription: Subscription;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(private chatService: ChatService, private panelService: PanelService, private cd: ChangeDetectorRef) {}\n\n\tngOnInit() {\n\t\tthis.subscribeToMessages();\n\t}\n\n\tngAfterViewInit() {\n\t\tsetTimeout(() => {\n\t\t\tthis.scrollToBottom();\n\t\t\tthis.chatInput.nativeElement.focus();\n\t\t}, 100);\n\t}\n\n\tngOnDestroy(): void {\n\t\tif (this.chatMessageSubscription) this.chatMessageSubscription.unsubscribe();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\teventKeyPress(event) {\n\t\t// Pressed 'Enter' key\n\t\tif (event && event.keyCode === 13) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.sendMessage();\n\t\t}\n\t}\n\n\tsendMessage(): void {\n\t\tif (!!this.message) {\n\t\t\tthis.chatService.sendMessage(this.message);\n\t\t\tthis.message = '';\n\t\t}\n\t}\n\n\tscrollToBottom(): void {\n\t\tsetTimeout(() => {\n\t\t\ttry {\n\t\t\t\tthis.chatScroll.nativeElement.scrollTop = this.chatScroll.nativeElement.scrollHeight;\n\t\t\t} catch (err) {}\n\t\t}, 20);\n\t}\n\n\tclose() {\n\t\tthis.panelService.togglePanel(PanelType.CHAT);\n\t}\n\n\tprivate subscribeToMessages() {\n\t\tthis.chatMessageSubscription = this.chatService.messagesObs.subscribe((messages: ChatMessage[]) => {\n\t\t\tthis.messageList = messages;\n\t\t\tif (this.panelService.isChatPanelOpened()) {\n\t\t\t\tthis.scrollToBottom();\n\t\t\t\tthis.cd.markForCheck();\n\t\t\t}\n\t\t});\n\t}\n}\n","<div class=\"panel-container\" id=\"chat-container\" fxLayout=\"column\" fxLayoutAlign=\"space-evenly none\" >\n\t<div class=\"panel-header-container\" fxFlex=\"55px\" fxLayoutAlign=\"start center\">\n\t\t<h3 class=\"panel-title\">{{ 'PANEL.CHAT.TITLE' | translate }}</h3>\n\t\t<button class=\"panel-close-button\" mat-icon-button matTooltip=\"{{ 'PANEL.CLOSE' | translate }}\" (click)=\"close()\">\n\t\t\t<mat-icon>close</mat-icon>\n\t\t</button>\n\t</div>\n\n\t<div class=\"text-container\" fxFlex=\"20px\">\n\t\t<p class=\"text-info\">{{ 'PANEL.CHAT.SUBTITLE' | translate }}</p>\n\t</div>\n\n\t<div class=\"messages-container\" fxFlex=\"75%\" fxLayoutAlign=\"space-evenly none\" #chatScroll>\n\t\t<div *ngFor=\"let data of messageList\" class=\"message\" [ngClass]=\"data.isLocal ? 'right' : 'left'\">\n\t\t\t<div class=\"msg-detail\">\n\t\t\t\t<div class=\"nickname-container\">\n\t\t\t\t\t<p *ngIf=\"data.isLocal\">{{ 'PANEL.CHAT.YOU' | translate }}</p>\n\t\t\t\t\t<p *ngIf=\"!data.isLocal\">{{ data.nickname }}</p>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"msg-content\">\n\t\t\t\t\t<p [innerHTML]=\"data.message | linkify\"></p>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\n\t<div class=\"input-container\" fxFlex=\"55px\" fxFlexOrder=\"3\" fxLayoutAlign=\"space-evenly none\">\n\t\t<textarea\n\t\t\t#chatInput\n\t\t\tmaxlength=\"500\"\n\t\t\trows=\"4\"\n\t\t\tplaceholder=\"{{ 'PANEL.CHAT.PLACEHOLDER' | translate }}\"\n\t\t\tautocomplete=\"off\"\n\t\t\t(keypress)=\"eventKeyPress($event)\"\n\t\t\t[(ngModel)]=\"message\"\n\t\t\tid=\"chat-input\"\n\t\t></textarea>\n\t\t<button mat-icon-button id=\"send-btn\" (click)=\"sendMessage()\">\n\t\t\t<mat-icon matTooltip=\"{{ 'PANEL.CHAT.SEND' | translate }}\">send</mat-icon>\n\t\t</button>\n\t</div>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, OnInit, TemplateRef } from '@angular/core';\nimport { skip, Subscription } from 'rxjs';\nimport {\n\tActivitiesPanelDirective, AdditionalPanelsDirective, ChatPanelDirective, ParticipantsPanelDirective\n} from '../../directives/template/openvidu-angular.directive';\nimport { PanelEvent, PanelType } from '../../models/panel.model';\nimport { PanelService } from '../../services/panel/panel.service';\n\n/**\n *\n * The **PanelComponent** is hosted inside of the {@link VideoconferenceComponent}.\n * It is in charge of displaying the videoconference panels providing functionalities to the videoconference app\n * such as the chat ({@link ChatPanelComponent}) and list of participants ({@link ParticipantsPanelComponent}) .\n *\n * <div class=\"custom-table-container\">\n\n * <div>\n *\n * <h3>OpenVidu Angular Directives</h3>\n *\n * The PanelComponent can be replaced with a custom component. It provides us the following {@link https://angular.io/guide/structural-directives Angular structural directives}\n * for doing this.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |           ***ovPanel**           |            {@link PanelDirective}           |\n *\n * </br>\n *\n * It is also providing us a way to **replace the children panels** to the default panel.\n * It will recognise the following directive in a child element.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |           ***ovChatPanel**          |           {@link ChatPanelDirective}          |\n * |       ***ovParticipantsPanel**      |       {@link ParticipantsPanelDirective}      |\n * |        ***ovAdditionalPanels**      |       {@link AdditionalPanelsDirective}       |\n *\n * <p class=\"component-link-text\">\n * \t<span class=\"italic\">See all {@link OpenViduAngularDirectiveModule OpenVidu Angular Directives}</span>\n * </p>\n * </div>\n * </div>\n */\n\n@Component({\n\tselector: 'ov-panel',\n\ttemplateUrl: './panel.component.html',\n\tstyleUrls: ['./panel.component.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PanelComponent implements OnInit {\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('participantsPanel', { read: TemplateRef }) participantsPanelTemplate: TemplateRef<any>;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('backgroundEffectsPanel', { read: TemplateRef }) backgroundEffectsPanelTemplate: TemplateRef<any>;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('settingsPanel', { read: TemplateRef }) settingsPanelTemplate: TemplateRef<any>;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('activitiesPanel', { read: TemplateRef }) activitiesPanelTemplate: TemplateRef<any>;\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('chatPanel', { read: TemplateRef }) chatPanelTemplate: TemplateRef<any>;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('additionalPanels', { read: TemplateRef }) additionalPanelsTemplate: TemplateRef<any>;\n\n\t@ContentChild(ParticipantsPanelDirective)\n\tset externalParticipantPanel(externalParticipantsPanel: ParticipantsPanelDirective) {\n\t\t// This directive will has value only when PARTICIPANTS PANEL component tagged with '*ovParticipantsPanel'\n\t\t// is inside of the PANEL component tagged with '*ovPanel'\n\t\tif (externalParticipantsPanel) {\n\t\t\tthis.participantsPanelTemplate = externalParticipantsPanel.template;\n\t\t}\n\t}\n\n\t// TODO: backgroundEffectsPanel does not provides customization\n\t// @ContentChild(BackgroundEffectsPanelDirective)\n\t// set externalBackgroundEffectsPanel(externalBackgroundEffectsPanel: BackgroundEffectsPanelDirective) {\n\t// This directive will has value only when BACKGROUND EFFECTS PANEL component tagged with '*ovBackgroundEffectsPanel'\n\t// is inside of the PANEL component tagged with '*ovPanel'\n\t// if (externalBackgroundEffectsPanel) {\n\t// \tthis.backgroundEffectsPanelTemplate = externalBackgroundEffectsPanel.template;\n\t// }\n\t// }\n\n\t// TODO: settingsPanel does not provides customization\n\t// @ContentChild(SettingsPanelDirective)\n\t// set externalSettingsPanel(externalSettingsPanel: SettingsPanelDirective) {\n\t// This directive will has value only when SETTINGS PANEL component tagged with '*ovSettingsPanel'\n\t// is inside of the PANEL component tagged with '*ovPanel'\n\t// if (externalSettingsPanel) {\n\t// \tthis.settingsPanelTemplate = externalSettingsPanel.template;\n\t// }\n\t// }\n\n\t@ContentChild(ActivitiesPanelDirective)\n\tset externalActivitiesPanel(externalActivitiesPanel: ActivitiesPanelDirective) {\n\t\t// This directive will has value only when ACTIVITIES PANEL component tagged with '*ovActivitiesPanel'\n\t\t// is inside of the PANEL component tagged with '*ovPanel'\n\t\tif (externalActivitiesPanel) {\n\t\t\tthis.activitiesPanelTemplate = externalActivitiesPanel.template;\n\t\t}\n\t}\n\n\t@ContentChild(ChatPanelDirective)\n\tset externalChatPanel(externalChatPanel: ChatPanelDirective) {\n\t\t// This directive will has value only when CHAT PANEL component tagged with '*ovChatPanel'\n\t\t// is inside of the PANEL component tagged with '*ovPanel'\n\t\tif (externalChatPanel) {\n\t\t\tthis.chatPanelTemplate = externalChatPanel.template;\n\t\t}\n\t}\n\n\t@ContentChild(AdditionalPanelsDirective)\n\tset externalAdditionalPanels(externalAdditionalPanels: AdditionalPanelsDirective) {\n\t\t// This directive will has value only when ADDITIONAL PANELS component tagged with '*ovPanelAdditionalPanels'\n\t\t// is inside of the PANEL component tagged with '*ovPanel'\n\t\tif (externalAdditionalPanels) {\n\t\t\tthis.additionalPanelsTemplate = externalAdditionalPanels.template;\n\t\t}\n\t}\n\n\tisParticipantsPanelOpened: boolean;\n\tisChatPanelOpened: boolean;\n\tisBackgroundEffectsPanelOpened: boolean;\n\tisSettingsPanelOpened: boolean;\n\tisActivitiesPanelOpened: boolean;\n\n\t/**\n\t * @internal\n\t */\n\tisExternalPanelOpened: boolean;\n\tprivate panelSubscription: Subscription;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(protected panelService: PanelService, private cd: ChangeDetectorRef) {}\n\n\tngOnInit(): void {\n\t\tthis.subscribeToPanelToggling();\n\t}\n\n\tngOnDestroy() {\n\t\tthis.isChatPanelOpened = false;\n\t\tthis.isParticipantsPanelOpened = false;\n\t\tif (this.panelSubscription) this.panelSubscription.unsubscribe();\n\t}\n\n\tprivate subscribeToPanelToggling() {\n\t\tthis.panelSubscription = this.panelService.panelOpenedObs.pipe(skip(1)).subscribe((ev: PanelEvent) => {\n\t\t\tthis.isChatPanelOpened = ev.opened && ev.type === PanelType.CHAT;\n\t\t\tthis.isParticipantsPanelOpened = ev.opened && ev.type === PanelType.PARTICIPANTS;\n\t\t\tthis.isBackgroundEffectsPanelOpened = ev.opened && ev.type === PanelType.BACKGROUND_EFFECTS;\n\t\t\tthis.isSettingsPanelOpened = ev.opened && ev.type === PanelType.SETTINGS;\n\t\t\tthis.isActivitiesPanelOpened = ev.opened && ev.type === PanelType.ACTIVITIES;\n\t\t\tthis.isExternalPanelOpened = ev.opened && ev.type !== PanelType.PARTICIPANTS && ev.type !== PanelType.CHAT;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n}\n","<!-- CHAT panel -->\n<ng-container *ngIf=\"isChatPanelOpened\">\n\t<ng-container *ngTemplateOutlet=\"chatPanelTemplate\"></ng-container>\n</ng-container>\n\n\n<!-- PARTICIPANTS panel -->\n<ng-container *ngIf=\"isParticipantsPanelOpened\">\n\t<ng-container *ngTemplateOutlet=\"participantsPanelTemplate\"></ng-container>\n</ng-container>\n\n<!-- Background effects panel -->\n<ng-container *ngIf=\"isBackgroundEffectsPanelOpened\">\n\t<ng-container *ngTemplateOutlet=\"backgroundEffectsPanelTemplate\"></ng-container>\n</ng-container>\n\n<!-- Settings panel -->\n<ng-container *ngIf=\"isSettingsPanelOpened\">\n\t<ng-container *ngTemplateOutlet=\"settingsPanelTemplate\"></ng-container>\n</ng-container>\n\n<!-- Activities panel -->\n<ng-container *ngIf=\"isActivitiesPanelOpened\">\n\t<ng-container *ngTemplateOutlet=\"activitiesPanelTemplate\"></ng-container>\n</ng-container>\n\n<!-- External additional panels  -->\n<ng-container *ngIf=\"additionalPanelsTemplate && isExternalPanelOpened\">\n\t<ng-container *ngTemplateOutlet=\"additionalPanelsTemplate\"></ng-container>\n</ng-container>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, Input, OnDestroy, OnInit, TemplateRef } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ParticipantPanelItemElementsDirective } from '../../../../directives/template/openvidu-angular.directive';\nimport { ParticipantAbstractModel } from '../../../../models/participant.model';\nimport { OpenViduAngularConfigService } from '../../../../services/config/openvidu-angular.config.service';\nimport { ParticipantService } from '../../../../services/participant/participant.service';\n\n/**\n *\n * The **ParticipantPanelItemComponent** is hosted inside of the {@link ParticipantsPanelComponent}.\n * It is in charge of displaying the participants information inside of the ParticipansPanelComponent.\n *\n * <div class=\"custom-table-container\">\n * <div>\n *  <h3>API Directives</h3>\n *\n * This component allows us to show or hide certain HTML elements with the following {@link https://angular.io/guide/attribute-directives Angular attribute directives}\n * with the aim of fully customizing the ToolbarComponent.\n *\n * | **Name**                  | **Type**  | **Reference**                                   |\n * | :----------------------------: | :-------: | :---------------------------------------------: |\n * | **muteButton** | `boolean` | {@link ParticipantPanelItemMuteButtonDirective} |\n *\n * <p class=\"component-link-text\">\n * <span class=\"italic\">See all {@link ApiDirectiveModule API Directives}</span>\n * </p>\n *\n * </div>\n * <div>\n *\n * <h3>OpenVidu Angular Directives</h3>\n *\n * The ParticipantPanelItemComponent can be replaced with a custom component. It provides us the following {@link https://angular.io/guide/structural-directives Angular structural directives}\n * for doing this.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |     ***ovParticipantPanelItem**     |     {@link ParticipantPanelItemDirective}     |\n *\n * </br>\n *\n * It is also providing us a way to **add additional buttons** to the default participant panel item.\n * It will recognise the following directive in a child element.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * | ***ovParticipantPanelItemElements** | {@link ParticipantPanelItemElementsDirective} |\n *\n * <p class=\"component-link-text\">\n * \t<span class=\"italic\">See all {@link OpenViduAngularDirectiveModule OpenVidu Angular Directives}</span>\n * </p>\n * </div>\n * </div>\n */\n\n@Component({\n\tselector: 'ov-participant-panel-item',\n\ttemplateUrl: './participant-panel-item.component.html',\n\tstyleUrls: ['./participant-panel-item.component.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ParticipantPanelItemComponent implements OnInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('participantPanelItemElements', { read: TemplateRef }) participantPanelItemElementsTemplate: TemplateRef<any>;\n\n\t/**\n     * @ignore\n     */\n\tshowMuteButton: boolean = true;\n\tprivate muteButtonSub: Subscription;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild(ParticipantPanelItemElementsDirective)\n\tset externalItemElements(externalItemElements: ParticipantPanelItemElementsDirective) {\n\t\t// This directive will has value only when ITEM ELEMENTS component tagget with '*ovParticipantPanelItemElements' directive\n\t\t// is inside of the P PANEL ITEM component tagged with '*ovParticipantPanelItem' directive\n\t\tif (externalItemElements) {\n\t\t\tthis.participantPanelItemElementsTemplate = externalItemElements.template;\n\t\t}\n\t}\n\n\t@Input()\n\tset participant(participant: ParticipantAbstractModel) {\n\t\tthis._participant = participant;\n\t}\n\n\t/**\n     * @ignore\n     */\n\t_participant: ParticipantAbstractModel;\n\n\t/**\n     * @ignore\n     */\n\tconstructor(private libService: OpenViduAngularConfigService, protected participantService: ParticipantService, private cd: ChangeDetectorRef) {}\n\n\tngOnInit(): void {\n\t\tthis.subscribeToParticipantPanelItemDirectives();\n\t}\n\tngOnDestroy(): void {\n\t\tif (this.muteButtonSub) this.muteButtonSub.unsubscribe();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleMuteForcibly() {\n\t\tthis.participantService.setRemoteMutedForcibly(this._participant.id, !this._participant.isMutedForcibly);\n\t}\n\n\tprivate subscribeToParticipantPanelItemDirectives() {\n\t\tthis.muteButtonSub = this.libService.participantItemMuteButton.subscribe((value: boolean) => {\n\t\t\tthis.showMuteButton = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n}\n","<mat-list>\n\t<mat-list-item>\n\t\t<mat-icon matListAvatar class=\"participant-avatar\">person</mat-icon>\n\t\t<h3 matLine class=\"participant-nickname\">{{ _participant.nickname }}</h3>\n\t\t<p matLine class=\"participant-subtitle\">{{ _participant | streamTypesEnabled }}</p>\n\t\t<!-- <p matLine>\n\t\t\t<span class=\"participant-subtitle\"></span>\n\t\t</p> -->\n\n\t\t<div class=\"participant-action-buttons\">\n\t\t\t<button\n\t\t\t\tmat-icon-button\n\t\t\t\tid=\"mute-btn\"\n\t\t\t\t*ngIf=\"!_participant.local && showMuteButton\"\n\t\t\t\t[class.warn-btn]=\"_participant.isMutedForcibly\"\n\t\t\t\t(click)=\"toggleMuteForcibly()\"\n\t\t\t>\n\t\t\t\t<mat-icon *ngIf=\"!_participant.isMutedForcibly\">volume_up</mat-icon>\n\t\t\t\t<mat-icon *ngIf=\"_participant.isMutedForcibly\">volume_off</mat-icon>\n\t\t\t</button>\n\n\t\t\t<!-- External item elements  -->\n\t\t\t<ng-container *ngIf=\"participantPanelItemElementsTemplate\">\n\t\t\t\t<ng-container *ngTemplateOutlet=\"participantPanelItemElementsTemplate\"></ng-container>\n\t\t\t</ng-container>\n\t\t</div>\n\t</mat-list-item>\n</mat-list>\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, OnDestroy, OnInit, TemplateRef, ViewChild } from '@angular/core';\nimport { ParticipantAbstractModel } from '../../../../models/participant.model';\nimport { ParticipantService } from '../../../../services/participant/participant.service';\nimport { PanelService } from '../../../..//services/panel/panel.service';\nimport { ParticipantPanelItemDirective } from '../../../../directives/template/openvidu-angular.directive';\nimport { Subscription } from 'rxjs';\n\n/**\n *\n * The **ParticipantsPanelComponent** is hosted inside of the {@link PanelComponent}.\n * It is in charge of displaying the participants connected to the session.\n * This component is composed by the {@link ParticipantPanelItemComponent}.\n *\n * <div class=\"custom-table-container\">\n * <div>\n *\n * <h3>OpenVidu Angular Directives</h3>\n *\n * The ParticipantsPanelComponent can be replaced with a custom component. It provides us the following {@link https://angular.io/guide/structural-directives Angular structural directives}\n * for doing this.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |       ***ovParticipantsPanel**      |       {@link ParticipantsPanelDirective}      |\n *\n * </br>\n *\n * As the ParticipantsPanelComponent is composed by ParticipantPanelItemComponent, it is also providing us a way to **replace the participant item** with a custom one.\n * It will recognise the following directive in a child element.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |     ***ovParticipantPanelItem**     |     {@link ParticipantPanelItemDirective}     |\n *\n * <p class=\"component-link-text\">\n * \t<span class=\"italic\">See all {@link OpenViduAngularDirectiveModule OpenVidu Angular Directives}</span>\n * </p>\n * </div>\n * </div>\n */\n@Component({\n\tselector: 'ov-participants-panel',\n\ttemplateUrl: './participants-panel.component.html',\n\tstyleUrls: ['../../panel.component.css','./participants-panel.component.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ParticipantsPanelComponent implements OnInit, OnDestroy, AfterViewInit {\n\tlocalParticipant: any;\n\tremoteParticipants: ParticipantAbstractModel[] = [];\n\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild('defaultParticipantPanelItem', { static: false, read: TemplateRef }) defaultParticipantPanelItemTemplate: TemplateRef<any>;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('participantPanelItem', { read: TemplateRef }) participantPanelItemTemplate: TemplateRef<any>;\n\n\t@ContentChild(ParticipantPanelItemDirective)\n\tset externalParticipantPanelItem(externalParticipantPanelItem: ParticipantPanelItemDirective) {\n\t\t// This directive will has value only when PARTICIPANT PANEL ITEM component tagged with '*ovParticipantPanelItem'\n\t\t// is inside of the PARTICIPANTS PANEL component tagged with '*ovParticipantsPanel'\n\t\tif (externalParticipantPanelItem) {\n\t\t\tthis.participantPanelItemTemplate = externalParticipantPanelItem.template;\n\t\t}\n\t}\n\n\tprivate localParticipantSubs: Subscription;\n\tprivate remoteParticipantsSubs: Subscription;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(\n\t\tprotected participantService: ParticipantService,\n\t\tprotected panelService: PanelService,\n\t\tprivate cd: ChangeDetectorRef\n\t) {}\n\n\tngOnInit(): void {\n\t\tthis.localParticipantSubs = this.participantService.localParticipantObs.subscribe((p: ParticipantAbstractModel) => {\n\t\t\tthis.localParticipant = p;\n\t\t\t// Mark for re-rendering using an impure pipe 'streamsTypesEnabled'\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\n\t\tthis.remoteParticipantsSubs = this.participantService.remoteParticipantsObs.subscribe((p: ParticipantAbstractModel[]) => {\n\t\t\t// Workaround which forc the objects references update\n\t\t\t// After one entirely day trying to make it works, this is the only way\n\t\t\tconst remoteParticipantsAux = [];\n\t\t\tp.forEach((par) => {\n\t\t\t\tremoteParticipantsAux.push(Object.create(par));\n\t\t\t});\n\t\t\tthis.remoteParticipants = remoteParticipantsAux;\n\t\t\t// Mark for re-rendering using an impure pipe 'streamsTypesEnabled'\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.localParticipantSubs) this.localParticipantSubs.unsubscribe();\n\t\tif (this.remoteParticipantsSubs) this.remoteParticipantsSubs.unsubscribe;\n\t}\n\n\tngAfterViewInit(){\n\t\tif(!this.participantPanelItemTemplate) {\n\t\t\t// the user has override the default participants panel but not the 'participant-panel-item'\n\t\t\t// so the default component must be injected\n\t\t\tthis.participantPanelItemTemplate = this.defaultParticipantPanelItemTemplate\n\t\t\tthis.cd.detectChanges();\n\t\t}\n\t}\n\n\tclose() {\n\t\tthis.panelService.closePanel();\n\t}\n}\n","<div class=\"panel-container\" id=\"participants-container\">\n\t<div class=\"panel-header-container\">\n\t\t<h3 class=\"panel-title\">{{ 'PANEL.PARTICIPANTS.TITLE' | translate }}</h3>\n\t\t<button class=\"panel-close-button\" mat-icon-button matTooltip=\"{{ 'PANEL.CLOSE' | translate }}\" (click)=\"close()\">\n\t\t\t<mat-icon>close</mat-icon>\n\t\t</button>\n\t</div>\n\n\t<div class=\"scrollable\">\n\n\t\t<div class=\"local-participant-container\" *ngIf=\"localParticipant\">\n\t\t\t<ng-container *ngTemplateOutlet=\"participantPanelItemTemplate; context: { $implicit: localParticipant }\"></ng-container>\n\t\t\t<mat-divider *ngIf=\"true\"></mat-divider>\n\t\t</div>\n\n\t\t<div class=\"remote-participants-container\" id=\"remote-participants-container\" *ngIf=\"remoteParticipants.length > 0\">\n\n\t\t\t<div *ngFor=\"let participant of this.remoteParticipants\" id=\"remote-participant-item\">\n\t\t\t\t<ng-container *ngTemplateOutlet=\"participantPanelItemTemplate; context: { $implicit: participant }\"></ng-container>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n\n<ng-template #defaultParticipantPanelItem let-participant>\n\t<ov-participant-panel-item [participant]=\"participant\" id=\"default-participant-panel-item\"></ov-participant-panel-item>\n</ng-template>\n","/**\n * @internal\n */\nexport enum VideoSizeIcon {\n\tBIG = 'zoom_in',\n\tNORMAL = 'zoom_out'\n}","import { OverlayContainer } from '@angular/cdk/overlay';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class CdkOverlayContainer extends OverlayContainer {\n\tcontainerSelector = '.sidenav-main';\n\tcustomClass = 'cdk-overlay-container';\n\tprotected _createContainer(): void {\n\t\tconst container = document.createElement('div');\n\t\tcontainer.classList.add(this.customClass);\n\t\tlet element = this.getElement(this.containerSelector);\n\t\tif (!element) {\n\t\t\telement = this.getElement('body');\n\t\t}\n\t\tthis._containerElement = element.appendChild(container);\n\t}\n\n\tsetSelector(selector: string) {\n\t\tconst overlayElement = this.getElement('.' + this.customClass);\n\n\t\tif (overlayElement && this.containerSelector !== selector) {\n\t\t\tconst newContainerOverlayContainer = this.getElement(selector);\n\t\t\tthis.containerSelector = selector;\n\t\t\tnewContainerOverlayContainer?.appendChild(overlayElement);\n\t\t}\n\t}\n\tprivate getElement(selector: string): Element {\n\t\treturn document.querySelector(selector);\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport {CdkOverlayContainer } from '../../config/custom-cdk-overlay';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class CdkOverlayService {\n\tconstructor(private cdkOverlayModel: CdkOverlayContainer) {}\n\n\tsetSelector(selector: string) {\n\t\tthis.cdkOverlayModel.setSelector(selector);\n\t}\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PublisherSpeakingEvent, StreamManager } from 'openvidu-browser';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-audio-wave',\n\ttemplateUrl: './audio-wave.component.html',\n\tstyleUrls: ['./audio-wave.component.css']\n})\nexport class AudioWaveComponent implements OnInit, OnDestroy {\n\tisSpeaking: boolean = false;\n\n\t@Input() streamManager: StreamManager;\n\n\tconstructor() {}\n\n\tngOnInit(): void {\n\t\tthis.subscribeSpeakingEvents();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.unsubscribeSpeakingEvents();\n\t}\n\n\n\tprivate subscribeSpeakingEvents() {\n\t\tif (this.streamManager) {\n\t\t\tthis.streamManager.on('publisherStartSpeaking', (event: PublisherSpeakingEvent) => (this.isSpeaking = true));\n\t\t\tthis.streamManager.on('publisherStopSpeaking', (event: PublisherSpeakingEvent) => (this.isSpeaking = false));\n\t\t}\n\t}\n\n\tprivate unsubscribeSpeakingEvents() {\n\t\tif (this.streamManager) {\n\t\t\tthis.streamManager.off('publisherStartSpeaking');\n\t\t\tthis.streamManager.off('publisherStopSpeaking');\n\t\t}\n\t}\n}\n","<div class=\"audio-container\">\n\t<div class=\"stick normal\" [ngClass]=\"isSpeaking ? 'play' : 'pause'\"></div>\n\t<div class=\"stick loud\" [ngClass]=\"isSpeaking ? 'play' : 'pause'\"></div>\n\t<div class=\"stick normal\" [ngClass]=\"isSpeaking ? 'play' : 'pause'\"></div>\n</div>\n","import { Component, Input } from '@angular/core';\n\n/**\n * @internal\n */\n\n@Component({\n\tselector: 'ov-avatar-profile',\n\ttemplate: `\n\t\t<div class=\"poster\" id=\"video-poster\">\n\t\t\t<div class=\"initial\" [ngStyle]=\"{ 'background-color': color }\">\n\t\t\t\t<span id=\"poster-text\">{{ letter }}</span>\n\t\t\t</div>\n\t\t</div>\n\t`,\n\tstyleUrls: ['./avatar-profile.component.css']\n})\nexport class AvatarProfileComponent {\n\tletter: string;\n\n\t@Input()\n\tset name(nickname: string) {\n\t\tthis.letter = nickname[0];\n\t}\n\t@Input() color;\n\n\tconstructor() {}\n}\n","import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { StreamManager } from 'openvidu-browser';\nimport { VideoType } from '../../models/video-type.model';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-video',\n\ttemplate: `\n\t\t<video\n\t\t\tclass=\"OT_video-element\"\n\t\t\t#videoElement\n\t\t\t[attr.id]=\"streamManager && _streamManager.stream ? 'video-' + _streamManager.stream.streamId : 'video-undefined'\"\n\t\t\t[muted]=\"mutedSound\"\n\t\t></video>\n\t`,\n\tstyleUrls: ['./video.component.css']\n})\nexport class VideoComponent implements AfterViewInit {\n\t@Input() mutedSound: boolean;\n\t_streamManager: StreamManager;\n\t_videoElement: ElementRef;\n\ttype: VideoType = VideoType.CAMERA;\n\n\tngAfterViewInit() {\n\t\tsetTimeout(() => {\n\t\t\tif (this._streamManager && this._videoElement) {\n\t\t\t\tthis.updateVideoStyles();\n\t\t\t\tthis._streamManager.addVideoElement(this._videoElement.nativeElement);\n\t\t\t}\n\t\t});\n\t}\n\n\t@ViewChild('videoElement', {static:false})\n\tset videoElement(element: ElementRef) {\n\t\tthis._videoElement = element;\n\t}\n\n\t@Input()\n\tset streamManager(streamManager: StreamManager) {\n\t\tif (streamManager) {\n\t\t\tthis._streamManager = streamManager;\n\t\t\tif (!!this._videoElement && this._streamManager) {\n\t\t\t\tthis.updateVideoStyles();\n\t\t\t\tthis._streamManager.addVideoElement(this._videoElement.nativeElement);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate updateVideoStyles() {\n\n\t\tthis.type = <VideoType>this._streamManager?.stream?.typeOfVideo;\n\t\tif (this.type === VideoType.SCREEN) {\n\t\t\tthis._videoElement.nativeElement.style.objectFit = 'contain';\n\t\t\tthis._videoElement.nativeElement.classList.add('screen-type');\n\t\t} else {\n\t\t\tthis._videoElement.nativeElement.style.objectFit = 'cover';\n\t\t\tthis._videoElement.nativeElement.classList.add('camera-type');\n\t\t}\n\n\t}\n}\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { MatMenuPanel, MatMenuTrigger } from '@angular/material/menu';\nimport { PublisherProperties } from 'openvidu-browser';\nimport { Subscription } from 'rxjs';\nimport { VideoSizeIcon } from '../../models/icon.model';\nimport { StreamModel } from '../../models/participant.model';\nimport { Signal } from '../../models/signal.model';\nimport { ScreenType, VideoType } from '../../models/video-type.model';\nimport { CdkOverlayService } from '../../services/cdk-overlay/cdk-overlay.service';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\nimport { LayoutService } from '../../services/layout/layout.service';\nimport { OpenViduService } from '../../services/openvidu/openvidu.service';\nimport { ParticipantService } from '../../services/participant/participant.service';\nimport { StorageService } from '../../services/storage/storage.service';\n\n/**\n * The **StreamComponent** is hosted inside of the {@link LayoutComponent}.\n * It is in charge of displaying the participant video stream in the videoconference layout.\n *\n * <div class=\"custom-table-container\">\n * <div>\n *  <h3>API Directives</h3>\n *\n * This component allows us to show or hide certain HTML elements with the following {@link https://angular.io/guide/attribute-directives Angular attribute directives}\n * with the aim of fully customizing the StreamComponent.\n *\n * | **Parameter**                  | **Type**  | **Reference**                                   |\n * | :----------------------------: | :-------: | :---------------------------------------------: |\n * | **displayParticipantName**   | `boolean` | {@link StreamDisplayParticipantNameDirective}   |\n * | **displayAudioDetection**    | `boolean` | {@link StreamDisplayAudioDetectionDirective}    |\n * | **settingsButton**          | `boolean` | {@link StreamSettingsButtonDirective}           |\n *\n * <p class=\"component-link-text\">\n * <span class=\"italic\">See all {@link ApiDirectiveModule API Directives}</span>\n * </p>\n * </div>\n *\n * <div>\n * <h3>OpenVidu Angular Directives</h3>\n *\n * The StreamComponent can be replaced with a custom component. It provides us the following {@link https://angular.io/guide/structural-directives Angular structural directives}\n * for doing this.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |           ***ovStream**           |            {@link StreamDirective}           |\n *\n * <p class=\"component-link-text\">\n * \t<span class=\"italic\">See all {@link OpenViduAngularDirectiveModule OpenVidu Angular Directives}</span>\n * </p>\n * </div>\n *\n * </div>\n */\n@Component({\n\tselector: 'ov-stream',\n\ttemplateUrl: './stream.component.html',\n\tstyleUrls: ['./stream.component.css'],\n\tanimations: [\n\t\ttrigger('posterAnimation', [\n\t\t\ttransition(':enter', [style({ opacity: 0 }), animate('100ms', style({ opacity: 1 }))]),\n\t\t\ttransition(':leave', [style({ opacity: 1 }), animate('200ms', style({ opacity: 0 }))]),\n\t\t])\n\t]\n})\nexport class StreamComponent implements OnInit {\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild(MatMenuTrigger) public menuTrigger: MatMenuTrigger;\n\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild('menu') menu: MatMenuPanel;\n\n\t/**\n\t * @ignore\n\t */\n\tvideoSizeIconEnum = VideoSizeIcon;\n\t/**\n\t * @ignore\n\t */\n\tvideoTypeEnum = VideoType;\n\t/**\n\t * @ignore\n\t */\n\tvideoSizeIcon: VideoSizeIcon = VideoSizeIcon.BIG;\n\t/**\n\t * @ignore\n\t */\n\ttoggleNickname: boolean;\n\t/**\n\t * @ignore\n\t */\n\t_stream: StreamModel;\n\t/**\n\t * @ignore\n\t */\n\tnickname: string;\n\t/**\n\t * @ignore\n\t */\n\tisMinimal: boolean = false;\n\t/**\n\t * @ignore\n\t */\n\tshowNickname: boolean = true;\n\t/**\n\t * @ignore\n\t */\n\tshowAudioDetection: boolean = true;\n\t/**\n\t * @ignore\n\t */\n\tshowSettingsButton: boolean = true;\n\tshowVideo: boolean;\n\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild('streamContainer', { static: false, read: ElementRef })\n\tset streamContainer(streamContainer: ElementRef) {\n\t\tsetTimeout(() => {\n\t\t\tif (streamContainer) {\n\t\t\t\tthis._streamContainer = streamContainer;\n\t\t\t\t// This is a workaround for fixing a layout bug which provide a bad UX with each new elements created.\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.showVideo = true;\n\t\t\t\t}, 100);\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\t@Input()\n\tset stream(stream: StreamModel) {\n\t\tthis._stream = stream;\n\t\tthis.checkVideoEnlarged();\n\t\tif (this._stream.participant) {\n\t\t\tthis.nickname = this._stream.participant.nickname;\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild('nicknameInput')\n\tset nicknameInputElement(element: ElementRef) {\n\t\tsetTimeout(() => {\n\t\t\telement?.nativeElement.focus();\n\t\t});\n\t}\n\n\tprivate _streamContainer: ElementRef;\n\tprivate minimalSub: Subscription;\n\tprivate displayParticipantNameSub: Subscription;\n\tprivate displayAudioDetectionSub: Subscription;\n\tprivate settingsButtonSub: Subscription;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(\n\t\tprotected openviduService: OpenViduService,\n\t\tprotected layoutService: LayoutService,\n\t\tprotected participantService: ParticipantService,\n\t\tprotected storageService: StorageService,\n\t\tprotected cdkSrv: CdkOverlayService,\n\t\tprivate libService: OpenViduAngularConfigService\n\t) {}\n\n\tngOnInit() {\n\t\tthis.subscribeToStreamDirectives();\n\t}\n\n\tngOnDestroy() {\n\t\tthis.cdkSrv.setSelector('body');\n\t\tif (this.settingsButtonSub) this.settingsButtonSub.unsubscribe();\n\t\tif (this.displayAudioDetectionSub) this.displayAudioDetectionSub.unsubscribe();\n\t\tif (this.displayParticipantNameSub) this.displayParticipantNameSub.unsubscribe();\n\t\tif (this.minimalSub) this.minimalSub.unsubscribe();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleVideoEnlarged() {\n\t\tif (!!this._stream.streamManager?.stream?.connection?.connectionId) {\n\t\t\tif (this.openviduService.isMyOwnConnection(this._stream.streamManager?.stream?.connection?.connectionId)) {\n\t\t\t\tthis.participantService.toggleMyVideoEnlarged(this._stream.streamManager?.stream?.connection?.connectionId);\n\t\t\t} else {\n\t\t\t\tthis.participantService.toggleRemoteVideoEnlarged(this._stream.streamManager?.stream?.connection?.connectionId);\n\t\t\t}\n\t\t}\n\t\tthis.layoutService.update();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleVideoMenu(event) {\n\t\tif (this.menuTrigger.menuOpen) {\n\t\t\tthis.menuTrigger.closeMenu();\n\t\t\treturn;\n\t\t}\n\t\tthis.cdkSrv.setSelector('#container-' + this._stream.streamManager?.stream?.streamId);\n\t\tthis.menuTrigger.openMenu();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleMuteForcibly() {\n\t\tthis.participantService.setRemoteMutedForcibly(this._stream.participant.id, !this._stream.participant.isMutedForcibly);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleNicknameForm() {\n\t\tif (this._stream?.participant?.local) {\n\t\t\tthis.toggleNickname = !this.toggleNickname;\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tupdateNickname(event) {\n\t\tif (event?.keyCode === 13 || event?.type === 'focusout') {\n\t\t\tif (!!this.nickname) {\n\t\t\t\tthis.participantService.setMyNickname(this.nickname);\n\t\t\t\tthis.storageService.setNickname(this.nickname);\n\t\t\t\tthis.openviduService.sendSignal(Signal.NICKNAME_CHANGED, undefined, { clientData: this.nickname });\n\t\t\t}\n\t\t\tthis.toggleNicknameForm();\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tasync replaceScreenTrack() {\n\t\tconst properties: PublisherProperties = {\n\t\t\tvideoSource: ScreenType.SCREEN,\n\t\t\tpublishVideo: true,\n\t\t\tpublishAudio: !this.participantService.isMyCameraActive(),\n\t\t\tmirror: false\n\t\t};\n\t\tawait this.openviduService.replaceTrack(VideoType.SCREEN, properties);\n\t}\n\n\tprivate checkVideoEnlarged() {\n\t\tthis.videoSizeIcon = this._stream.videoEnlarged ? VideoSizeIcon.NORMAL : VideoSizeIcon.BIG;\n\t}\n\n\tprivate subscribeToStreamDirectives() {\n\t\tthis.minimalSub = this.libService.minimalObs.subscribe((value: boolean) => {\n\t\t\tthis.isMinimal = value;\n\t\t});\n\t\tthis.displayParticipantNameSub = this.libService.displayParticipantNameObs.subscribe((value: boolean) => {\n\t\t\tthis.showNickname = value;\n\t\t\t// this.cd.markForCheck();\n\t\t});\n\t\tthis.displayAudioDetectionSub = this.libService.displayAudioDetectionObs.subscribe((value: boolean) => {\n\t\t\tthis.showAudioDetection = value;\n\t\t\t// this.cd.markForCheck();\n\t\t});\n\t\tthis.settingsButtonSub = this.libService.streamSettingsButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showSettingsButton = value;\n\t\t\t// this.cd.markForCheck();\n\t\t});\n\t}\n}\n","<div\n\t*ngIf=\"this._stream\"\n\tclass=\"OV_stream\"\n\t[ngClass]=\"{'no-size': !showVideo}\"\n\t[id]=\"'container-' + this._stream.streamManager?.stream?.streamId\"\n\t#streamContainer\n>\n\t<div *ngIf=\"!isMinimal && showNickname\" id=\"nickname-container\" class=\"nickname\" [class.fullscreen]=\"isFullscreen\">\n\t\t<div (click)=\"toggleNicknameForm()\" class=\"nicknameContainer\" selected *ngIf=\"!toggleNickname\">\n\t\t\t<span id=\"nickname\" *ngIf=\"this._stream.type === 'CAMERA'\">{{ this._stream.participant.nickname }}</span>\n\t\t\t<span id=\"nickname\" *ngIf=\"this._stream.type === 'SCREEN' && !this._stream.participant.nickname.includes('_SCREEN')\">{{ this._stream.participant.nickname }}_SCREEN</span>\n\t\t\t<span id=\"nickname\" *ngIf=\"this._stream.type === 'SCREEN' && this._stream.participant.nickname.includes('_SCREEN')\">{{ this._stream.participant.nickname }}</span>\n\t\t</div>\n\t\t<div *ngIf=\"toggleNickname && !this._stream.streamManager?.remote\" [class.fullscreen]=\"isFullscreen\" id=\"nickname-input-container\">\n\t\t\t<input\n\t\t\t\tmatInput\n\t\t\t\t#nicknameInput\n\t\t\t\tautocomplete=\"off\"\n\t\t\t\tmaxlength=\"20\"\n\t\t\t\t[(ngModel)]=\"this.nickname\"\n\t\t\t\t(keypress)=\"updateNickname($event)\"\n\t\t\t\t(focusout)=\"updateNickname($event)\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n\n\t<div\n\t\t*ngIf=\"!isMinimal && showAudioDetection && _stream.type === 'CAMERA' && _stream.streamManager?.stream?.audioActive\"\n\t\tid=\"audio-wave-container\"\n\t>\n\t\t<ov-audio-wave [streamManager]=\"_stream.streamManager\"></ov-audio-wave>\n\t</div>\n\n\t<ov-avatar-profile\n\t\t@posterAnimation\n\t\t*ngIf=\"!_stream.streamManager?.stream?.videoActive && _stream.type === 'CAMERA'\"\n\t\t[name]=\"_stream.participant.nickname\"\n\t\t[color]=\"_stream.participant.colorProfile\"\n\t></ov-avatar-profile>\n\n\t<ov-video\n\t\t(dblclick)=\"toggleVideoEnlarged()\"\n\t\t[streamManager]=\"_stream.streamManager\"\n\t\t[mutedSound]=\"_stream?.participant?.isMutedForcibly\"\n\t></ov-video>\n\n\t<div class=\"status-icons\">\n\t\t<button mat-icon-button id=\"statusMic\" *ngIf=\"!this._stream.streamManager?.stream?.audioActive\" disabled>\n\t\t\t<mat-icon>mic_off</mat-icon>\n\t\t</button>\n\t</div>\n\n\t<div *ngIf=\"!isMinimal && showSettingsButton\" id=\"settings-container\" class=\"videoButtons\">\n\t\t<button mat-icon-button (click)=\"toggleVideoMenu($event)\" matTooltip=\"{{ 'STREAM.SETTINGS' | translate }}\" matTooltipPosition=\"above\" aria-label=\"Video settings menu\">\n\t\t\t<mat-icon>more_vert</mat-icon>\n\t\t</button>\n\t\t<span [matMenuTriggerFor]=\"menu\"></span>\n\t\t<mat-menu #menu=\"matMenu\" yPosition=\"above\" xPosition=\"before\">\n\t\t\t<button mat-menu-item id=\"videoZoomButton\" (click)=\"toggleVideoEnlarged()\">\n\t\t\t\t<mat-icon>{{ this.videoSizeIcon }}</mat-icon>\n\t\t\t\t<span *ngIf=\"videoSizeIcon === videoSizeIconEnum.NORMAL\">{{ 'STREAM.ZOOM_OUT' | translate }}</span>\n\t\t\t\t<span *ngIf=\"videoSizeIcon === videoSizeIconEnum.BIG\">{{ 'STREAM.ZOOM_IN' | translate }}</span>\n\t\t\t</button>\n\t\t\t<button mat-menu-item id=\"volumeButton\" *ngIf=\"!this._stream.local\" (click)=\"toggleMuteForcibly()\">\n\t\t\t\t<mat-icon *ngIf=\"!_stream.participant.isMutedForcibly\">volume_up</mat-icon>\n\t\t\t\t<span *ngIf=\"!_stream.participant.isMutedForcibly\">{{ 'STREAM.MUTE_SOUND' | translate }}</span>\n\n\t\t\t\t<mat-icon *ngIf=\"_stream.participant.isMutedForcibly\">volume_off</mat-icon>\n\t\t\t\t<span *ngIf=\"_stream.participant.isMutedForcibly\">{{ 'STREAM.UNMUTE_SOUND' | translate }}</span>\n\t\t\t</button>\n\t\t\t<button\n\t\t\t\tmat-menu-item\n\t\t\t\t(click)=\"replaceScreenTrack()\"\n\t\t\t\tid=\"changeScreenButton\"\n\t\t\t\t*ngIf=\"!this._stream.streamManager?.remote && this._stream.streamManager?.stream?.typeOfVideo === videoTypeEnum.SCREEN\"\n\t\t\t>\n\t\t\t\t<mat-icon>picture_in_picture</mat-icon>\n\t\t\t\t<span>{{ 'STREAM.REPLACE_SCREEN' | translate }}</span>\n\t\t\t</button>\n\t\t</mat-menu>\n\t</div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { MediaChange, MediaObserver } from '@angular/flex-layout';\nimport { Observable } from 'rxjs';\nimport { LayoutClass } from '../../models/layout.model';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class DocumentService {\n\tscreenSizeObs: Observable<MediaChange[]>;\n\n\tconstructor(private media: MediaObserver) {\n\t\tthis.screenSizeObs = this.media.asObservable();\n\t}\n\n\ttoggleFullscreen(elementId: string) {\n\t\tconst document: any = window.document;\n\t\tconst fs = document.getElementById(elementId);\n\t\tif (\n\t\t\t!document.fullscreenElement &&\n\t\t\t!document.mozFullScreenElement &&\n\t\t\t!document.webkitFullscreenElement &&\n\t\t\t!document.msFullscreenElement\n\t\t) {\n\t\t\tif (fs.requestFullscreen) {\n\t\t\t\tfs.requestFullscreen();\n\t\t\t} else if (fs.msRequestFullscreen) {\n\t\t\t\tfs.msRequestFullscreen();\n\t\t\t} else if (fs.mozRequestFullScreen) {\n\t\t\t\tfs.mozRequestFullScreen();\n\t\t\t} else if (fs.webkitRequestFullscreen) {\n\t\t\t\tfs.webkitRequestFullscreen();\n\t\t\t}\n\t\t} else {\n\t\t\tif (document.exitFullscreen) {\n\t\t\t\tdocument.exitFullscreen();\n\t\t\t} else if (document.msExitFullscreen) {\n\t\t\t\tdocument.msExitFullscreen();\n\t\t\t} else if (document.mozCancelFullScreen) {\n\t\t\t\tdocument.mozCancelFullScreen();\n\t\t\t} else if (document.webkitExitFullscreen) {\n\t\t\t\tdocument.webkitExitFullscreen();\n\t\t\t}\n\t\t}\n\t}\n\n\tisSmallElement(element: HTMLElement | Element): boolean {\n\t\treturn element?.className.includes(LayoutClass.SMALL_ELEMENT);\n\t}\n}\n","// * Private directives *\n\nimport { Directive, ElementRef, HostListener, Input } from '@angular/core';\n\n/**\n * Load default OpenVidu logo if custom one is not exist\n * @internal\n */\n@Directive({\n\tselector: 'img[ovLogo]'\n})\nexport class LogoDirective {\n\tdefaultLogo =\n\t\t'data:image/png;base64,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';\n\t@Input() ovLogo: string;\n\tconstructor(public elementRef: ElementRef) {}\n\n\t@HostListener('error')\n\tloadDefaultLogo() {\n\t\tconst element = <HTMLImageElement>this.elementRef.nativeElement;\n\t\telement.src = this.ovLogo || this.defaultLogo;\n\t}\n}\n\n","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tContentChild,\n\tEventEmitter,\n\tHostListener,\n\tOnDestroy,\n\tOnInit,\n\tOutput,\n\tTemplateRef,\n\tViewChild\n} from '@angular/core';\nimport { skip, Subscription } from 'rxjs';\nimport { ChatService } from '../../services/chat/chat.service';\nimport { DocumentService } from '../../services/document/document.service';\nimport { PanelService } from '../../services/panel/panel.service';\n\nimport { MediaChange } from '@angular/flex-layout';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { Session } from 'openvidu-browser';\nimport {\n\tToolbarAdditionalButtonsDirective,\n\tToolbarAdditionalPanelButtonsDirective\n} from '../../directives/template/openvidu-angular.directive';\nimport { BroadcastingStatus } from '../../models/broadcasting.model';\nimport { ChatMessage } from '../../models/chat.model';\nimport { ILogger } from '../../models/logger.model';\nimport { PanelEvent, PanelType } from '../../models/panel.model';\nimport { OpenViduRole, ParticipantAbstractModel } from '../../models/participant.model';\nimport { RecordingInfo, RecordingStatus } from '../../models/recording.model';\nimport { ActionService } from '../../services/action/action.service';\nimport { BroadcastingService } from '../../services/broadcasting/broadcasting.service';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\nimport { DeviceService } from '../../services/device/device.service';\nimport { LayoutService } from '../../services/layout/layout.service';\nimport { LoggerService } from '../../services/logger/logger.service';\nimport { OpenViduService } from '../../services/openvidu/openvidu.service';\nimport { ParticipantService } from '../../services/participant/participant.service';\nimport { PlatformService } from '../../services/platform/platform.service';\nimport { RecordingService } from '../../services/recording/recording.service';\nimport { StorageService } from '../../services/storage/storage.service';\nimport { TranslateService } from '../../services/translate/translate.service';\n\n/**\n *\n * The **ToolbarComponent** is hosted inside of the {@link VideoconferenceComponent}.\n * It is in charge of displaying the participants controlls for handling the media, panels and more videoconference features.\n *\n * <div class=\"custom-table-container\">\n * <div>\n *  <h3>API Directives</h3>\n *\n * This component allows us to show or hide certain HTML elements with the following {@link https://angular.io/guide/attribute-directives Angular attribute directives}\n * with the aim of fully customizing the ToolbarComponent.\n *\n * | **Name**                  | **Type**  | **Reference**                                   |\n * | :----------------------------: | :-------: | :---------------------------------------------: |\n * | **screenshareButton**       | `boolean` | {@link ToolbarScreenshareButtonDirective}       |\n * | **fullscreenButton**        | `boolean` | {@link ToolbarFullscreenButtonDirective}        |\n * | **backgroundEffectsButton** | `boolean` | {@link ToolbarBackgroundEffectsButtonDirective} |\n * | **leaveButton**             | `boolean` | {@link ToolbarLeaveButtonDirective}             |\n * | **chatPanelButton**         | `boolean` | {@link ToolbarChatPanelButtonDirective}         |\n * | **participantsPanelButton** | `boolean` | {@link ToolbarParticipantsPanelButtonDirective} |\n * | **displayLogo**             | `boolean` | {@link ToolbarDisplayLogoDirective}             |\n * | **displaySessionName**      | `boolean` | {@link ToolbarDisplaySessionNameDirective}      |\n *\n * <p class=\"component-link-text\">\n * <span class=\"italic\">See all {@link ApiDirectiveModule API Directives}</span>\n * </p>\n *\n * </div>\n * <div>\n *\n * <h3>OpenVidu Angular Directives</h3>\n *\n * The ToolbarComponent can be replaced with a custom component. It provides us the following {@link https://angular.io/guide/structural-directives Angular structural directives}\n * for doing this.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |           ***ovToolbar**           |            {@link ToolbarDirective}           |\n *\n * </br>\n *\n * It is also providing us a way to **add additional buttons** to the default toolbar.\n * It will recognise the following directive in a child element.\n *\n * |            **Directive**           |                 **Reference**                 |\n * |:----------------------------------:|:---------------------------------------------:|\n * |   ***ovToolbarAdditionalButtons**   |   {@link ToolbarAdditionalButtonsDirective}   |\n * |***ovToolbarAdditionalPanelButtons**   |   {@link ToolbarAdditionalPanelButtonsDirective}   |\n *\n * <p class=\"component-link-text\">\n * \t<span class=\"italic\">See all {@link OpenViduAngularDirectiveModule OpenVidu Angular Directives}</span>\n * </p>\n * </div>\n * </div>\n */\n\n@Component({\n\tselector: 'ov-toolbar',\n\ttemplateUrl: './toolbar.component.html',\n\tstyleUrls: ['./toolbar.component.css'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ToolbarComponent implements OnInit, OnDestroy, AfterViewInit {\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('toolbarAdditionalButtons', { read: TemplateRef }) toolbarAdditionalButtonsTemplate: TemplateRef<any>;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild('toolbarAdditionalPanelButtons', { read: TemplateRef }) toolbarAdditionalPanelButtonsTemplate: TemplateRef<any>;\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild(ToolbarAdditionalButtonsDirective)\n\tset externalAdditionalButtons(externalAdditionalButtons: ToolbarAdditionalButtonsDirective) {\n\t\t// This directive will has value only when ADDITIONAL BUTTONS component tagget with '*ovToolbarAdditionalButtons' directive\n\t\t// is inside of the TOOLBAR component tagged with '*ovToolbar' directive\n\t\tif (externalAdditionalButtons) {\n\t\t\tthis.toolbarAdditionalButtonsTemplate = externalAdditionalButtons.template;\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\t@ContentChild(ToolbarAdditionalPanelButtonsDirective)\n\tset externalAdditionalPanelButtons(externalAdditionalPanelButtons: ToolbarAdditionalPanelButtonsDirective) {\n\t\t// This directive will has value only when ADDITIONAL PANEL BUTTONS component tagget with '*ovToolbarAdditionalPanelButtons' directive\n\t\t// is inside of the TOOLBAR component tagged with '*ovToolbar' directive\n\t\tif (externalAdditionalPanelButtons) {\n\t\t\tthis.toolbarAdditionalPanelButtonsTemplate = externalAdditionalPanelButtons.template;\n\t\t}\n\t}\n\n\t/**\n\t * Provides event notifications that fire when leave button has been clicked.\n\t */\n\t@Output() onLeaveButtonClicked: EventEmitter<void> = new EventEmitter<any>();\n\n\t/**\n\t * Provides event notifications that fire when camera toolbar button has been clicked.\n\t */\n\t@Output() onCameraButtonClicked: EventEmitter<void> = new EventEmitter<any>();\n\n\t/**\n\t * Provides event notifications that fire when microphone toolbar button has been clicked.\n\t */\n\t@Output() onMicrophoneButtonClicked: EventEmitter<void> = new EventEmitter<any>();\n\n\t/**\n\t * Provides event notifications that fire when fullscreen toolbar button has been clicked.\n\t */\n\t@Output() onFullscreenButtonClicked: EventEmitter<void> = new EventEmitter<any>();\n\n\t/**\n\t * Provides event notifications that fire when screenshare toolbar button has been clicked.\n\t */\n\t@Output() onScreenshareButtonClicked: EventEmitter<void> = new EventEmitter<any>();\n\n\t/**\n\t * Provides event notifications that fire when participants panel button has been clicked.\n\t */\n\t@Output() onParticipantsPanelButtonClicked: EventEmitter<void> = new EventEmitter<any>();\n\n\t/**\n\t * Provides event notifications that fire when chat panel button has been clicked.\n\t */\n\t@Output() onChatPanelButtonClicked: EventEmitter<void> = new EventEmitter<any>();\n\n\t/**\n\t * Provides event notifications that fire when activities panel button has been clicked.\n\t */\n\t@Output() onActivitiesPanelButtonClicked: EventEmitter<void> = new EventEmitter<any>();\n\t/**\n\t * Provides event notifications that fire when start recording button has been clicked.\n\t */\n\t@Output() onStartRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when start broadcasting button has been clicked.\n\t */\n\t@Output() onStopBroadcastingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when stop recording button has been clicked.\n\t */\n\t@Output() onStopRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild(MatMenuTrigger) public menuTrigger: MatMenuTrigger;\n\n\t/**\n\t * @ignore\n\t */\n\tsession: Session;\n\t/**\n\t * @ignore\n\t */\n\tunreadMessages: number = 0;\n\t/**\n\t * @ignore\n\t */\n\tmessageList: ChatMessage[] = [];\n\t/**\n\t * @ignore\n\t */\n\tisScreenShareActive: boolean;\n\t/**\n\t * @ignore\n\t */\n\tisWebcamVideoActive: boolean;\n\t/**\n\t * @ignore\n\t */\n\tisAudioActive: boolean;\n\t/**\n\t * @ignore\n\t */\n\tisConnectionLost: boolean;\n\t/**\n\t * @ignore\n\t */\n\thasVideoDevices: boolean;\n\t/**\n\t * @ignore\n\t */\n\thasAudioDevices: boolean;\n\t/**\n\t * @ignore\n\t */\n\tisFullscreenActive: boolean = false;\n\t/**\n\t * @ignore\n\t */\n\tisChatOpened: boolean = false;\n\t/**\n\t * @ignore\n\t */\n\tisParticipantsOpened: boolean = false;\n\n\t/**\n\t * @ignore\n\t */\n\tisActivitiesOpened: boolean = false;\n\n\t/**\n\t * @ignore\n\t */\n\tisMinimal: boolean = false;\n\t/**\n\t * @ignore\n\t */\n\tshowScreenshareButton = true;\n\t/**\n\t * @ignore\n\t */\n\tshowFullscreenButton: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tshowBackgroundEffectsButton: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tshowLeaveButton: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tshowRecordingButton: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tshowBroadcastingButton: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tshowSettingsButton: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tshowMoreOptionsButton: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tshowParticipantsPanelButton: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tshowActivitiesPanelButton: boolean = true;\n\t/**\n\t * @ignore\n\t */\n\tshowChatPanelButton: boolean = true;\n\t/**\n\t * @ignore\n\t */\n\tshowLogo: boolean = true;\n\t/**\n\t * @ignore\n\t */\n\tshowSessionName: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tshowCaptionsButton: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tcaptionsEnabled: boolean;\n\n\t/**\n\t * @ignore\n\t */\n\tvideoMuteChanging: boolean = false;\n\n\t/**\n\t * @ignore\n\t */\n\trecordingStatus: RecordingStatus = RecordingStatus.STOPPED;\n\n\t/**\n\t * @ignore\n\t */\n\tbroadcastingStatus: BroadcastingStatus = BroadcastingStatus.STOPPED;\n\t/**\n\t * @ignore\n\t */\n\t_recordingStatus = RecordingStatus;\n\t/**\n\t * @ignore\n\t */\n\t_broadcastingStatus = BroadcastingStatus;\n\n\t/**\n\t * @ignore\n\t */\n\trecordingTime: Date;\n\t/**\n\t * @ignore\n\t */\n\tbroadcastingTime: Date;\n\n\t/**\n\t * @ignore\n\t */\n\tisSessionCreator: boolean = false;\n\n\t/**\n\t * @ignore\n\t */\n\tscreenSize: string;\n\n\tprivate log: ILogger;\n\tprivate minimalSub: Subscription;\n\tprivate panelTogglingSubscription: Subscription;\n\tprivate chatMessagesSubscription: Subscription;\n\tprivate localParticipantSubscription: Subscription;\n\tprivate screenshareButtonSub: Subscription;\n\tprivate fullscreenButtonSub: Subscription;\n\tprivate backgroundEffectsButtonSub: Subscription;\n\tprivate leaveButtonSub: Subscription;\n\tprivate recordingButtonSub: Subscription;\n\tprivate broadcastingButtonSub: Subscription;\n\tprivate recordingSubscription: Subscription;\n\tprivate broadcastingSubscription: Subscription;\n\tprivate activitiesPanelButtonSub: Subscription;\n\tprivate participantsPanelButtonSub: Subscription;\n\tprivate chatPanelButtonSub: Subscription;\n\tprivate displayLogoSub: Subscription;\n\tprivate displaySessionNameSub: Subscription;\n\tprivate screenSizeSub: Subscription;\n\tprivate settingsButtonSub: Subscription;\n\tprivate captionsSubs: Subscription;\n\tprivate currentWindowHeight = window.innerHeight;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(\n\t\tprotected documentService: DocumentService,\n\t\tprotected chatService: ChatService,\n\t\tprotected panelService: PanelService,\n\t\tprotected participantService: ParticipantService,\n\t\tprotected openviduService: OpenViduService,\n\t\tprotected oVDevicesService: DeviceService,\n\t\tprotected actionService: ActionService,\n\t\tprotected loggerSrv: LoggerService,\n\t\tprivate layoutService: LayoutService,\n\t\tprivate cd: ChangeDetectorRef,\n\t\tprivate libService: OpenViduAngularConfigService,\n\t\tprivate platformService: PlatformService,\n\t\tprivate recordingService: RecordingService,\n\t\tprivate broadcastingService: BroadcastingService,\n\t\tprivate translateService: TranslateService,\n\t\tprivate storageSrv: StorageService\n\t) {\n\t\tthis.log = this.loggerSrv.get('ToolbarComponent');\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@HostListener('window:resize', ['$event'])\n\tsizeChange(event) {\n\t\tif (this.currentWindowHeight >= window.innerHeight) {\n\t\t\t// The user has exit the fullscreen mode\n\t\t\tthis.isFullscreenActive = false;\n\t\t\tthis.currentWindowHeight = window.innerHeight;\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\t@HostListener('document:keydown', ['$event'])\n\tkeyDown(event: KeyboardEvent) {\n\t\tif (event.key === 'F11') {\n\t\t\tevent.preventDefault();\n\t\t\tthis.toggleFullscreen();\n\t\t\tthis.currentWindowHeight = window.innerHeight;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\tasync ngOnInit() {\n\t\tthis.subscribeToToolbarDirectives();\n\n\t\tthis.hasVideoDevices = this.oVDevicesService.hasVideoDeviceAvailable();\n\t\tthis.hasAudioDevices = this.oVDevicesService.hasAudioDeviceAvailable();\n\t\tthis.session = this.openviduService.getWebcamSession();\n\n\t\tthis.subscribeToUserMediaProperties();\n\t\tthis.subscribeToReconnection();\n\t\tthis.subscribeToMenuToggling();\n\t\tthis.subscribeToChatMessages();\n\t\tthis.subscribeToRecordingStatus();\n\t\tthis.subscribeToBroadcastingStatus();\n\t\tthis.subscribeToScreenSize();\n\t\tthis.subscribeToCaptionsToggling();\n\t}\n\n\tngAfterViewInit() {\n\t\t// Sometimes the connection is undefined so we have to check the role when the mat menu is opened\n\t\tthis.menuTrigger?.menuOpened.subscribe(() => {\n\t\t\tthis.isSessionCreator = this.participantService.amIModerator();\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tif (this.panelTogglingSubscription) this.panelTogglingSubscription.unsubscribe();\n\t\tif (this.chatMessagesSubscription) this.chatMessagesSubscription.unsubscribe();\n\t\tif (this.localParticipantSubscription) this.localParticipantSubscription.unsubscribe();\n\t\tif (this.screenshareButtonSub) this.screenshareButtonSub.unsubscribe();\n\t\tif (this.fullscreenButtonSub) this.fullscreenButtonSub.unsubscribe();\n\t\tif (this.backgroundEffectsButtonSub) this.backgroundEffectsButtonSub.unsubscribe();\n\t\tif (this.leaveButtonSub) this.leaveButtonSub.unsubscribe();\n\t\tif (this.recordingButtonSub) this.recordingButtonSub.unsubscribe();\n\t\tif (this.broadcastingButtonSub) this.broadcastingButtonSub.unsubscribe();\n\t\tif (this.participantsPanelButtonSub) this.participantsPanelButtonSub.unsubscribe();\n\t\tif (this.chatPanelButtonSub) this.chatPanelButtonSub.unsubscribe();\n\t\tif (this.displayLogoSub) this.displayLogoSub.unsubscribe();\n\t\tif (this.displaySessionNameSub) this.displaySessionNameSub.unsubscribe();\n\t\tif (this.minimalSub) this.minimalSub.unsubscribe();\n\t\tif (this.activitiesPanelButtonSub) this.activitiesPanelButtonSub.unsubscribe();\n\t\tif (this.recordingSubscription) this.recordingSubscription.unsubscribe();\n\t\tif (this.broadcastingSubscription) this.broadcastingSubscription.unsubscribe();\n\t\tif (this.screenSizeSub) this.screenSizeSub.unsubscribe();\n\t\tif (this.settingsButtonSub) this.settingsButtonSub.unsubscribe();\n\t\tif (this.captionsSubs) this.captionsSubs.unsubscribe();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tasync toggleMicrophone() {\n\t\tthis.onMicrophoneButtonClicked.emit();\n\t\ttry {\n\t\t\tawait this.openviduService.publishAudio(!this.isAudioActive);\n\t\t} catch (error) {\n\t\t\tthis.log.e('There was an error toggling microphone:', error.code, error.message);\n\t\t\tthis.actionService.openDialog(\n\t\t\t\tthis.translateService.translate('ERRORS.TOGGLE_MICROPHONE'),\n\t\t\t\terror?.error || error?.message || error\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tasync toggleCamera() {\n\t\tthis.videoMuteChanging = true;\n\t\tthis.onCameraButtonClicked.emit();\n\t\ttry {\n\t\t\tconst publishVideo = !this.participantService.isMyVideoActive();\n\t\t\tif (this.panelService.isExternalPanelOpened() && !publishVideo) {\n\t\t\t\tthis.panelService.togglePanel(PanelType.BACKGROUND_EFFECTS);\n\t\t\t}\n\t\t\tawait this.openviduService.publishVideo(publishVideo);\n\t\t} catch (error) {\n\t\t\tthis.log.e('There was an error toggling camera:', error.code, error.message);\n\t\t\tthis.actionService.openDialog(this.translateService.translate('ERRORS.TOGGLE_CAMERA'), error?.error || error?.message || error);\n\t\t}\n\t\tthis.videoMuteChanging = false;\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tasync toggleScreenShare() {\n\t\tthis.onScreenshareButtonClicked.emit();\n\n\t\ttry {\n\t\t\tawait this.openviduService.toggleScreenshare();\n\t\t} catch (error) {\n\t\t\tthis.log.e('There was an error toggling screen share', error.code, error.message);\n\t\t\tif (error && error.name === 'SCREEN_SHARING_NOT_SUPPORTED') {\n\t\t\t\tthis.actionService.openDialog(\n\t\t\t\t\tthis.translateService.translate('ERRORS.SCREEN_SHARING'),\n\t\t\t\t\tthis.translateService.translate('ERRORS.SCREEN_SUPPORT')\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tleaveSession() {\n\t\tthis.log.d('Leaving session...');\n\t\tthis.openviduService.disconnect();\n\t\tthis.chatService.clearOldMessages();\n\t\tthis.onLeaveButtonClicked.emit();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleRecording() {\n\t\tif (this.recordingStatus === RecordingStatus.STARTED) {\n\t\t\tthis.log.d('Stopping recording');\n\t\t\tthis.onStopRecordingClicked.emit();\n\t\t\tthis.recordingService.updateStatus(RecordingStatus.STOPPING);\n\t\t} else if (this.recordingStatus === RecordingStatus.STOPPED) {\n\t\t\tthis.onStartRecordingClicked.emit();\n\t\t\tthis.recordingService.updateStatus(RecordingStatus.STARTING);\n\n\t\t\tif (this.showActivitiesPanelButton && !this.isActivitiesOpened) {\n\t\t\t\tthis.toggleActivitiesPanel('recording');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleBroadcasting() {\n\t\tif (this.broadcastingStatus === BroadcastingStatus.STARTED) {\n\t\t\tthis.log.d('Stopping broadcasting');\n\t\t\tthis.onStopBroadcastingClicked.emit();\n\t\t\tthis.broadcastingService.updateStatus(BroadcastingStatus.STOPPING);\n\t\t} else if (this.broadcastingStatus === BroadcastingStatus.STOPPED) {\n\t\t\tif (this.showActivitiesPanelButton && !this.isActivitiesOpened) {\n\t\t\t\tthis.toggleActivitiesPanel('broadcasting');\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleBackgroundEffects() {\n\t\tif (this.openviduService.isOpenViduPro()) {\n\t\t\tthis.panelService.togglePanel(PanelType.BACKGROUND_EFFECTS);\n\t\t} else {\n\t\t\tthis.actionService.openProFeatureDialog(\n\t\t\t\tthis.translateService.translate('PANEL.BACKGROUND.TITLE'),\n\t\t\t\tthis.translateService.translate('PANEL.PRO_FEATURE')\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleCaptions() {\n\t\tif (this.openviduService.isOpenViduPro()) {\n\t\t\tthis.layoutService.toggleCaptions();\n\t\t} else {\n\t\t\tthis.actionService.openProFeatureDialog(\n\t\t\t\tthis.translateService.translate('PANEL.SETTINGS.CAPTIONS'),\n\t\t\t\tthis.translateService.translate('PANEL.PRO_FEATURE')\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleSettings() {\n\t\tthis.panelService.togglePanel(PanelType.SETTINGS);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleParticipantsPanel() {\n\t\tthis.onParticipantsPanelButtonClicked.emit();\n\t\tthis.panelService.togglePanel(PanelType.PARTICIPANTS);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleChatPanel() {\n\t\tthis.onChatPanelButtonClicked.emit();\n\t\tthis.panelService.togglePanel(PanelType.CHAT);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\ttoggleFullscreen() {\n\t\tthis.isFullscreenActive = !this.isFullscreenActive;\n\t\tthis.documentService.toggleFullscreen('session-container');\n\t\tthis.onFullscreenButtonClicked.emit();\n\t}\n\n\tprivate toggleActivitiesPanel(expandPanel: string) {\n\t\tthis.onActivitiesPanelButtonClicked.emit();\n\t\tthis.panelService.togglePanel(PanelType.ACTIVITIES, expandPanel);\n\t}\n\n\tprotected subscribeToReconnection() {\n\t\tthis.session.on('reconnecting', () => {\n\t\t\tif (this.panelService.isPanelOpened()) {\n\t\t\t\tthis.panelService.closePanel();\n\t\t\t}\n\t\t\tthis.isConnectionLost = true;\n\t\t});\n\t\tthis.session.on('reconnected', () => {\n\t\t\tthis.isConnectionLost = false;\n\t\t});\n\t}\n\tprotected subscribeToMenuToggling() {\n\t\tthis.panelTogglingSubscription = this.panelService.panelOpenedObs.subscribe((ev: PanelEvent) => {\n\t\t\tthis.isChatOpened = ev.opened && ev.type === PanelType.CHAT;\n\t\t\tthis.isParticipantsOpened = ev.opened && ev.type === PanelType.PARTICIPANTS;\n\t\t\tthis.isActivitiesOpened = ev.opened && ev.type === PanelType.ACTIVITIES;\n\t\t\tif (this.isChatOpened) {\n\t\t\t\tthis.unreadMessages = 0;\n\t\t\t}\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n\n\tprotected subscribeToChatMessages() {\n\t\tthis.chatMessagesSubscription = this.chatService.messagesObs.pipe(skip(1)).subscribe((messages) => {\n\t\t\tif (!this.panelService.isChatPanelOpened()) {\n\t\t\t\tthis.unreadMessages++;\n\t\t\t}\n\t\t\tthis.messageList = messages;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n\tprotected subscribeToUserMediaProperties() {\n\t\tthis.localParticipantSubscription = this.participantService.localParticipantObs.subscribe((p: ParticipantAbstractModel) => {\n\t\t\tif (p) {\n\t\t\t\tthis.isWebcamVideoActive = p.isCameraVideoActive();\n\t\t\t\tthis.isAudioActive = p.hasAudioActive();\n\t\t\t\tthis.isScreenShareActive = p.isScreenActive();\n\t\t\t\tthis.isSessionCreator = p.getRole() === OpenViduRole.MODERATOR;\n\t\t\t\tthis.storageSrv.setAudioMuted(!this.isAudioActive);\n\t\t\t\tthis.storageSrv.setVideoMuted(!this.isWebcamVideoActive);\n\t\t\t\tthis.cd.markForCheck();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToRecordingStatus() {\n\t\tthis.recordingSubscription = this.recordingService.recordingStatusObs.subscribe((ev?: { info: RecordingInfo; time?: Date }) => {\n\t\t\tif (ev) {\n\t\t\t\tthis.recordingStatus = ev.info.status;\n\n\t\t\t\tif (ev?.time) {\n\t\t\t\t\tthis.recordingTime = ev.time;\n\t\t\t\t}\n\t\t\t\tthis.cd.markForCheck();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToBroadcastingStatus() {\n\t\tthis.broadcastingSubscription = this.broadcastingService.broadcastingStatusObs.subscribe(\n\t\t\t(ev: { status: BroadcastingStatus; time?: Date } | undefined) => {\n\t\t\t\tif (!!ev) {\n\t\t\t\t\tthis.broadcastingStatus = ev.status;\n\t\t\t\t\tif (ev.time) {\n\t\t\t\t\t\tthis.broadcastingTime = ev.time;\n\t\t\t\t\t}\n\t\t\t\t\tthis.cd.markForCheck();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate subscribeToToolbarDirectives() {\n\t\tthis.minimalSub = this.libService.minimalObs.subscribe((value: boolean) => {\n\t\t\tthis.isMinimal = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.screenshareButtonSub = this.libService.screenshareButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showScreenshareButton = value && !this.platformService.isMobile();\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.fullscreenButtonSub = this.libService.fullscreenButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showFullscreenButton = value;\n\t\t\tthis.checkDisplayMoreOptions();\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.leaveButtonSub = this.libService.leaveButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showLeaveButton = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\n\t\tthis.recordingButtonSub = this.libService.recordingButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showRecordingButton = value;\n\t\t\tthis.checkDisplayMoreOptions();\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\n\t\tthis.broadcastingButtonSub = this.libService.broadcastingButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showBroadcastingButton = value;\n\t\t\tthis.checkDisplayMoreOptions();\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\n\t\tthis.settingsButtonSub = this.libService.toolbarSettingsButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showSettingsButton = value;\n\t\t\tthis.checkDisplayMoreOptions();\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.chatPanelButtonSub = this.libService.chatPanelButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showChatPanelButton = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.participantsPanelButtonSub = this.libService.participantsPanelButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showParticipantsPanelButton = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.activitiesPanelButtonSub = this.libService.activitiesPanelButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showActivitiesPanelButton = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.backgroundEffectsButtonSub = this.libService.backgroundEffectsButton.subscribe((value: boolean) => {\n\t\t\tthis.showBackgroundEffectsButton = value;\n\t\t\tthis.checkDisplayMoreOptions();\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.displayLogoSub = this.libService.displayLogoObs.subscribe((value: boolean) => {\n\t\t\tthis.showLogo = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.displaySessionNameSub = this.libService.displaySessionNameObs.subscribe((value: boolean) => {\n\t\t\tthis.showSessionName = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t\tthis.captionsSubs = this.libService.captionsButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showCaptionsButton = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n\n\tprivate subscribeToScreenSize() {\n\t\tthis.screenSizeSub = this.documentService.screenSizeObs.subscribe((change: MediaChange[]) => {\n\t\t\tthis.screenSize = change[0].mqAlias;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n\n\tprivate subscribeToCaptionsToggling() {\n\t\tthis.captionsSubs = this.layoutService.captionsTogglingObs.subscribe((value: boolean) => {\n\t\t\tthis.captionsEnabled = value;\n\t\t\tthis.cd.markForCheck();\n\t\t});\n\t}\n\n\tprivate checkDisplayMoreOptions() {\n\t\tthis.showMoreOptionsButton =\n\t\t\tthis.showFullscreenButton ||\n\t\t\tthis.showBackgroundEffectsButton ||\n\t\t\tthis.showRecordingButton ||\n\t\t\tthis.showBroadcastingButton ||\n\t\t\tthis.showSettingsButton;\n\t}\n}\n","<mat-toolbar id=\"toolbar\" role=\"heading\" fxLayout fxLayoutAlign=\"center\" fxLayoutGap=\"40px\">\n\t<div\n\t\tfxFlex=\"20%\"\n\t\tfxLayoutAlign=\"start center\"\n\t\tid=\"info-container\"\n\t\t*ngIf=\"screenSize !== 'xs' || recordingStatus === _recordingStatus.STARTED || broadcastingStatus !== _broadcastingStatus.STARTED\"\n\t>\n\t\t<div>\n\t\t\t<img *ngIf=\"!isMinimal && showLogo\" id=\"branding-logo\" src=\"assets/images/logo.png\" ovLogo />\n\t\t\t<div\n\t\t\t\tid=\"session-info-container\"\n\t\t\t\t[class.collapsed]=\"recordingStatus === _recordingStatus.STARTED || broadcastingStatus === _broadcastingStatus.STARTED\"\n\t\t\t>\n\t\t\t\t<span id=\"session-name\" *ngIf=\"!isMinimal && session && session.sessionId && showSessionName\">{{ session.sessionId }}</span>\n\t\t\t\t<div id=\"activities-tag\">\n\t\t\t\t\t<div *ngIf=\"recordingStatus === _recordingStatus.STARTED\" id=\"recording-tag\" class=\"recording-tag\">\n\t\t\t\t\t\t<mat-icon class=\"blink\">radio_button_checked</mat-icon>\n\t\t\t\t\t\t<span class=\"blink\">REC</span>\n\t\t\t\t\t\t<span *ngIf=\"recordingTime\"> | {{ recordingTime | date : 'H:mm:ss' }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div *ngIf=\"broadcastingStatus === _broadcastingStatus.STARTED\" id=\"broadcasting-tag\" class=\"broadcasting-tag\">\n\t\t\t\t\t\t<mat-icon class=\"blink\">sensors</mat-icon>\n\t\t\t\t\t\t<span class=\"blink\">LIVE</span>\n\t\t\t\t\t\t<span *ngIf=\"broadcastingTime\"> | {{ broadcastingTime | date : 'H:mm:ss' }}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div fxFlex=\"60%\" fxFlexOrder=\"2\" fxLayoutAlign=\"center center\" id=\"media-buttons-container\">\n\t\t<!-- Microphone button -->\n\t\t<button\n\t\t\tid=\"mic-btn\"\n\t\t\tmat-icon-button\n\t\t\t(click)=\"toggleMicrophone()\"\n\t\t\t[disabled]=\"isConnectionLost || !hasAudioDevices\"\n\t\t\t[class.warn-btn]=\"!isAudioActive\"\n\t\t>\n\t\t\t<mat-icon\n\t\t\t\t*ngIf=\"isAudioActive\"\n\t\t\t\t[matTooltipDisabled]=\"!hasAudioDevices\"\n\t\t\t\tmatTooltip=\"{{ 'TOOLBAR.MUTE_AUDIO' | translate }}\"\n\t\t\t\tid=\"mic\"\n\t\t\t>\n\t\t\t\tmic\n\t\t\t</mat-icon>\n\t\t\t<mat-icon\n\t\t\t\t*ngIf=\"!isAudioActive\"\n\t\t\t\t[matTooltipDisabled]=\"!hasAudioDevices\"\n\t\t\t\tmatTooltip=\"{{ 'TOOLBAR.UNMUTE_AUDIO' | translate }}\"\n\t\t\t\tid=\"mic_off\"\n\t\t\t>\n\t\t\t\tmic_off\n\t\t\t</mat-icon>\n\t\t</button>\n\n\t\t<!-- Camera button -->\n\t\t<button\n\t\t\tid=\"camera-btn\"\n\t\t\tmat-icon-button\n\t\t\t(click)=\"toggleCamera()\"\n\t\t\t[disabled]=\"isConnectionLost || !hasVideoDevices || videoMuteChanging\"\n\t\t\t[class.warn-btn]=\"!isWebcamVideoActive\"\n\t\t>\n\t\t\t<mat-icon\n\t\t\t\t*ngIf=\"isWebcamVideoActive\"\n\t\t\t\t[matTooltipDisabled]=\"!hasVideoDevices\"\n\t\t\t\tmatTooltip=\"{{ 'TOOLBAR.MUTE_VIDEO' | translate }}\"\n\t\t\t\tid=\"videocam\"\n\t\t\t>\n\t\t\t\tvideocam\n\t\t\t</mat-icon>\n\t\t\t<mat-icon\n\t\t\t\t*ngIf=\"!isWebcamVideoActive\"\n\t\t\t\t[matTooltipDisabled]=\"!hasVideoDevices\"\n\t\t\t\tmatTooltip=\"{{ 'TOOLBAR.UNMUTE_VIDEO' | translate }}\"\n\t\t\t\tid=\"videocam_off\"\n\t\t\t>\n\t\t\t\tvideocam_off\n\t\t\t</mat-icon>\n\t\t</button>\n\n\t\t<!-- Screenshare button -->\n\t\t<button\n\t\t\tmat-icon-button\n\t\t\t*ngIf=\"!isMinimal && showScreenshareButton\"\n\t\t\tid=\"screenshare-btn\"\n\t\t\t(click)=\"toggleScreenShare()\"\n\t\t\t[disabled]=\"isConnectionLost\"\n\t\t\t[class.active-btn]=\"isScreenShareActive\"\n\t\t>\n\t\t\t<mat-icon *ngIf=\"!isScreenShareActive\" matTooltip=\"{{ 'TOOLBAR.ENABLE_SCREEN' | translate }}\">screen_share</mat-icon>\n\t\t\t<mat-icon *ngIf=\"isScreenShareActive\" matTooltip=\"{{ 'TOOLBAR.DISABLE_SCREEN' | translate }}\">screen_share</mat-icon>\n\t\t</button>\n\n\t\t<!-- More options button -->\n\t\t<button\n\t\t\tmat-icon-button\n\t\t\tid=\"more-options-btn\"\n\t\t\t*ngIf=\"!isMinimal && showMoreOptionsButton\"\n\t\t\t[matMenuTriggerFor]=\"menu\"\n\t\t\t[disabled]=\"isConnectionLost\"\n\t\t>\n\t\t\t<mat-icon matTooltip=\"{{ 'TOOLBAR.MORE_OPTIONS' | translate }}\">more_vert</mat-icon>\n\t\t</button>\n\t\t<mat-menu #menu=\"matMenu\" id=\"more-options-menu\">\n\t\t\t<!-- Fullscreen button -->\n\t\t\t<button *ngIf=\"showFullscreenButton\" mat-menu-item id=\"fullscreen-btn\" (click)=\"toggleFullscreen()\">\n\t\t\t\t<mat-icon *ngIf=\"!isFullscreenActive\">fullscreen</mat-icon>\n\t\t\t\t<span *ngIf=\"!isFullscreenActive\">{{ 'TOOLBAR.FULLSCREEN' | translate }}</span>\n\n\t\t\t\t<mat-icon *ngIf=\"isFullscreenActive\">fullscreen_exit</mat-icon>\n\t\t\t\t<span *ngIf=\"isFullscreenActive\">{{ 'TOOLBAR.EXIT_FULLSCREEN' | translate }}</span>\n\t\t\t</button>\n\n\t\t\t<!-- Recording button -->\n\t\t\t<button\n\t\t\t\t*ngIf=\"!isMinimal && showRecordingButton\"\n\t\t\t\tmat-menu-item\n\t\t\t\tid=\"recording-btn\"\n\t\t\t\t[disabled]=\"\n\t\t\t\t\trecordingStatus === _recordingStatus.STARTING || recordingStatus === _recordingStatus.STOPPING || !isSessionCreator\n\t\t\t\t\"\n\t\t\t\t(click)=\"toggleRecording()\"\n\t\t\t>\n\t\t\t\t<mat-icon color=\"warn\">radio_button_checked</mat-icon>\n\t\t\t\t<span *ngIf=\"recordingStatus === _recordingStatus.STOPPED || recordingStatus === _recordingStatus.STOPPING\">\n\t\t\t\t\t{{ 'TOOLBAR.START_RECORDING' | translate }}\n\t\t\t\t</span>\n\t\t\t\t<span *ngIf=\"recordingStatus === _recordingStatus.STARTED || recordingStatus === _recordingStatus.STARTING\">\n\t\t\t\t\t{{ 'TOOLBAR.STOP_RECORDING' | translate }}\n\t\t\t\t</span>\n\t\t\t</button>\n\n\t\t\t<!-- Broadcasting button -->\n\t\t\t<button\n\t\t\t\t*ngIf=\"!isMinimal && showBroadcastingButton\"\n\t\t\t\tmat-menu-item\n\t\t\t\tid=\"broadcasting-btn\"\n\t\t\t\t[disabled]=\"broadcastingStatus === _broadcastingStatus.STARTING || recordingStatus === _broadcastingStatus.STOPPING\"\n\t\t\t\t(click)=\"toggleBroadcasting()\"\n\t\t\t>\n\t\t\t\t<mat-icon>sensors</mat-icon>\n\t\t\t\t<span\n\t\t\t\t\t*ngIf=\"\n\t\t\t\t\t\tbroadcastingStatus === _broadcastingStatus.STOPPED ||\n\t\t\t\t\t\tbroadcastingStatus === _broadcastingStatus.STOPPING ||\n\t\t\t\t\t\tbroadcastingStatus === _broadcastingStatus.FAILED\n\t\t\t\t\t\"\n\t\t\t\t>\n\t\t\t\t\t{{ 'PANEL.STREAMING.START' | translate }}\n\t\t\t\t</span>\n\t\t\t\t<span *ngIf=\"broadcastingStatus === _broadcastingStatus.STARTED || broadcastingStatus === _broadcastingStatus.STARTING\">\n\t\t\t\t\t{{ 'PANEL.STREAMING.STOP' | translate }}\n\t\t\t\t</span>\n\t\t\t</button>\n\n\t\t\t<!-- Virtual background button -->\n\t\t\t<button\n\t\t\t\t*ngIf=\"!isMinimal && showBackgroundEffectsButton\"\n\t\t\t\t[disabled]=\"!isWebcamVideoActive\"\n\t\t\t\tmat-menu-item\n\t\t\t\tid=\"virtual-bg-btn\"\n\t\t\t\t(click)=\"toggleBackgroundEffects()\"\n\t\t\t>\n\t\t\t\t<mat-icon>auto_awesome</mat-icon>\n\t\t\t\t<span>{{ 'TOOLBAR.BACKGROUND' | translate }}</span>\n\t\t\t</button>\n\n\t\t\t<!-- Captions button -->\n\t\t\t<button\n\t\t\t\t*ngIf=\"!isMinimal && showCaptionsButton\"\n\t\t\t\t[disabled]=\"isConnectionLost\"\n\t\t\t\tmat-menu-item\n\t\t\t\tid=\"captions-btn\"\n\t\t\t\t(click)=\"toggleCaptions()\"\n\t\t\t>\n\t\t\t\t<mat-icon>closed_caption</mat-icon>\n\t\t\t\t<span *ngIf=\"captionsEnabled\">{{ 'TOOLBAR.DISABLE_CAPTIONS' | translate }}</span>\n\t\t\t\t<span *ngIf=\"!captionsEnabled\">{{ 'TOOLBAR.ENABLE_CAPTIONS' | translate }}</span>\n\t\t\t</button>\n\n\t\t\t<mat-divider class=\"divider\" *ngIf=\"!isMinimal && showSettingsButton\"></mat-divider>\n\n\t\t\t<!-- Settings button -->\n\t\t\t<button *ngIf=\"!isMinimal && showSettingsButton\" mat-menu-item id=\"toolbar-settings-btn\" (click)=\"toggleSettings()\">\n\t\t\t\t<mat-icon>settings</mat-icon>\n\t\t\t\t<span>{{ 'TOOLBAR.SETTINGS' | translate }}</span>\n\t\t\t</button>\n\t\t</mat-menu>\n\n\t\t<!-- External additional buttons  -->\n\t\t<ng-container *ngIf=\"toolbarAdditionalButtonsTemplate\">\n\t\t\t<ng-container *ngTemplateOutlet=\"toolbarAdditionalButtonsTemplate\"></ng-container>\n\t\t</ng-container>\n\n\t\t<!-- Leave session button -->\n\t\t<button mat-icon-button *ngIf=\"showLeaveButton\" (click)=\"leaveSession()\" id=\"leave-btn\">\n\t\t\t<mat-icon matTooltip=\"{{ 'TOOLBAR.LEAVE' | translate }}\">call_end</mat-icon>\n\t\t</button>\n\t</div>\n\t<div fxFlex=\"20%\" fxFlexOrder=\"3\" fxLayoutAlign=\"end center\" id=\"menu-buttons-container\">\n\t\t<!-- Default activities button -->\n\t\t<button\n\t\t\tmat-icon-button\n\t\t\tid=\"activities-panel-btn\"\n\t\t\t*ngIf=\"!isMinimal && showActivitiesPanelButton\"\n\t\t\tmatTooltip=\"{{ 'TOOLBAR.ACTIVITIES' | translate }}\"\n\t\t\t(click)=\"toggleActivitiesPanel()\"\n\t\t\t[disabled]=\"isConnectionLost\"\n\t\t\t[class.active-btn]=\"isActivitiesOpened\"\n\t\t>\n\t\t\t<mat-icon>category</mat-icon>\n\t\t</button>\n\n\t\t<!-- Default participants button -->\n\t\t<button\n\t\t\tmat-icon-button\n\t\t\tid=\"participants-panel-btn\"\n\t\t\t*ngIf=\"!isMinimal && showParticipantsPanelButton\"\n\t\t\tmatTooltip=\"{{ 'TOOLBAR.PARTICIPANTS' | translate }}\"\n\t\t\t(click)=\"toggleParticipantsPanel()\"\n\t\t\t[disabled]=\"isConnectionLost\"\n\t\t\t[class.active-btn]=\"isParticipantsOpened\"\n\t\t>\n\t\t\t<mat-icon>people</mat-icon>\n\t\t</button>\n\n\t\t<!-- Default chat button -->\n\t\t<button\n\t\t\tmat-icon-button\n\t\t\tid=\"chat-panel-btn\"\n\t\t\t*ngIf=\"!isMinimal && showChatPanelButton\"\n\t\t\tmatTooltip=\"{{ 'TOOLBAR.CHAT' | translate }}\"\n\t\t\t(click)=\"toggleChatPanel()\"\n\t\t\t[disabled]=\"isConnectionLost\"\n\t\t\t[class.active-btn]=\"isChatOpened\"\n\t\t>\n\t\t\t<mat-icon\n\t\t\t\tmatBadge=\"{{ unreadMessages }}\"\n\t\t\t\t[matBadgeHidden]=\"unreadMessages === 0\"\n\t\t\t\tmatBadgePosition=\"above before\"\n\t\t\t\tmatBadgeSize=\"small\"\n\t\t\t\tmatBadgeColor=\"accent\"\n\t\t\t>\n\t\t\t\tchat\n\t\t\t</mat-icon>\n\t\t</button>\n\n\t\t<!-- External additional panel buttons  -->\n\t\t<ng-container *ngIf=\"toolbarAdditionalPanelButtonsTemplate\">\n\t\t\t<ng-container *ngTemplateOutlet=\"toolbarAdditionalPanelButtonsTemplate\"></ng-container>\n\t\t</ng-container>\n\t</div>\n</mat-toolbar>\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy } from '@angular/core';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\n\n/**\n * The **displayParticipantName** directive allows show/hide the participants name in stream component.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `stream` component:\n *\n * @example\n * <ov-videoconference [streamDisplayParticipantName]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link StreamComponent}.\n * @example\n * <ov-stream [displayParticipantName]=\"false\"></ov-stream>\n */\n@Directive({\n\tselector: 'ov-videoconference[streamDisplayParticipantName], ov-stream[displayParticipantName]'\n})\nexport class StreamDisplayParticipantNameDirective implements AfterViewInit, OnDestroy {\n\t@Input() set streamDisplayParticipantName(value: boolean) {\n\t\tthis.displayParticipantNameValue = value;\n\t\tthis.update(this.displayParticipantNameValue);\n\t}\n\t@Input() set displayParticipantName(value: boolean) {\n\t\tthis.displayParticipantNameValue = value;\n\t\tthis.update(this.displayParticipantNameValue);\n\t}\n\n\tdisplayParticipantNameValue: boolean;\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.displayParticipantNameValue);\n\t}\n\n\tupdate(value: boolean) {\n\t\tif (this.libService.displayParticipantName.getValue() !== value) {\n\t\t\tthis.libService.displayParticipantName.next(value);\n\t\t}\n\t}\n\n\tclear() {\n\t\tthis.update(true);\n\t}\n}\n\n/**\n * The **displayAudioDetection** directive allows show/hide the participants audio detection in stream component.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `stream` component:\n *\n * @example\n * <ov-videoconference [streamDisplayAudioDetection]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link StreamComponent}.\n * @example\n * <ov-stream [displayAudioDetection]=\"false\"></ov-stream>\n */\n@Directive({\n\tselector: 'ov-videoconference[streamDisplayAudioDetection], ov-stream[displayAudioDetection]'\n})\nexport class StreamDisplayAudioDetectionDirective implements AfterViewInit, OnDestroy {\n\t@Input() set streamDisplayAudioDetection(value: boolean) {\n\t\tthis.displayAudioDetectionValue = value;\n\t\tthis.update(this.displayAudioDetectionValue);\n\t}\n\t@Input() set displayAudioDetection(value: boolean) {\n\t\tthis.displayAudioDetectionValue = value;\n\t\tthis.update(this.displayAudioDetectionValue);\n\t}\n\n\tdisplayAudioDetectionValue: boolean;\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.displayAudioDetectionValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\tupdate(value: boolean) {\n\t\tif (this.libService.displayAudioDetection.getValue() !== value) {\n\t\t\tthis.libService.displayAudioDetection.next(value);\n\t\t}\n\t}\n\tclear() {\n\t\tthis.update(true);\n\t}\n}\n\n/**\n * The **settingsButton** directive allows show/hide the participants settings button in stream component.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `stream` component:\n *\n * @example\n * <ov-videoconference [streamSettingsButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link StreamComponent}.\n * @example\n * <ov-stream [settingsButton]=\"false\"></ov-stream>\n */\n@Directive({\n\tselector: 'ov-videoconference[streamSettingsButton], ov-stream[settingsButton]'\n})\nexport class StreamSettingsButtonDirective implements AfterViewInit, OnDestroy {\n\t@Input() set streamSettingsButton(value: boolean) {\n\t\tthis.settingsValue = value;\n\t\tthis.update(this.settingsValue);\n\t}\n\t@Input() set settingsButton(value: boolean) {\n\t\tthis.settingsValue = value;\n\t\tthis.update(this.settingsValue);\n\t}\n\n\tsettingsValue: boolean;\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.settingsValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\tupdate(value: boolean) {\n\t\tif (this.libService.streamSettingsButton.getValue() !== value) {\n\t\t\tthis.libService.streamSettingsButton.next(value);\n\t\t}\n\t}\n\n\tclear() {\n\t\tthis.update(true);\n\t}\n}\n","/**\n * @internal\n */\nexport enum EffectType {\n\tNONE = 'NONE',\n\tBLUR = 'BLUR',\n\tIMAGE = 'IMAGE'\n}\n\n/**\n * @internal\n */\nexport interface BackgroundEffect {\n\tid: string;\n\ttype: EffectType;\n\tthumbnail: string;\n\tsrc?: string;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { BackgroundEffect, EffectType } from '../../models/background-effect.model';\nimport { OpenViduService } from '../openvidu/openvidu.service';\nimport { ParticipantService } from '../participant/participant.service';\nimport { StorageService } from '../storage/storage.service';\n\n/**\n * @internal\n */\n@Injectable({\n\tprovidedIn: 'root'\n})\nexport class VirtualBackgroundService {\n\tbackgroundSelected = <BehaviorSubject<string>>new BehaviorSubject('');\n\tbackgroundSelectedObs: Observable<string>;\n\tbackgrounds: BackgroundEffect[] = [\n\t\t{ id: 'no_effect', type: EffectType.NONE, thumbnail: 'block' },\n\t\t{ id: 'soft_blur', type: EffectType.BLUR, thumbnail: 'blur_on' },\n\t\t{ id: '1', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-1.jpg', src: 'assets/backgrounds/bg-1.jpg' },\n\t\t{ id: '2', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-2.jpg', src: 'assets/backgrounds/bg-2.jpg' },\n\t\t{ id: '3', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-3.jpg', src: 'assets/backgrounds/bg-3.jpg' },\n\t\t{ id: '4', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-4.jpg', src: 'assets/backgrounds/bg-4.jpg' },\n\t\t{ id: '19', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-19.jpg', src: 'assets/backgrounds/bg-19.jpg' },\n\t\t{ id: '5', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-5.jpg', src: 'assets/backgrounds/bg-5.jpg' },\n\t\t{ id: '6', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-6.jpg', src: 'assets/backgrounds/bg-6.jpg' },\n\t\t{ id: '7', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-7.jpg', src: 'assets/backgrounds/bg-7.jpg' },\n\t\t{ id: '8', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-8.jpg', src: 'assets/backgrounds/bg-8.jpg' },\n\t\t{ id: '9', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-9.jpg', src: 'assets/backgrounds/bg-9.jpg' },\n\t\t{ id: '10', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-10.jpg', src: 'assets/backgrounds/bg-10.jpg' },\n\t\t{ id: '11', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-11.jpg', src: 'assets/backgrounds/bg-11.jpg' },\n\t\t{ id: '12', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-12.jpg', src: 'assets/backgrounds/bg-12.jpg' },\n\t\t{ id: '13', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-13.jpg', src: 'assets/backgrounds/bg-13.jpg' },\n\t\t{ id: '14', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-14.jpg', src: 'assets/backgrounds/bg-14.jpg' },\n\t\t{ id: '15', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-15.jpg', src: 'assets/backgrounds/bg-15.jpg' },\n\t\t{ id: '16', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-16.jpg', src: 'assets/backgrounds/bg-16.jpg' },\n\t\t{ id: '17', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-17.jpg', src: 'assets/backgrounds/bg-17.jpg' },\n\t\t{ id: '18', type: EffectType.IMAGE, thumbnail: 'assets/backgrounds/thumbnails/bg-18.jpg', src: 'assets/backgrounds/bg-18.jpg' }\n\t];\n\n\tconstructor(\n\t\tprivate participantService: ParticipantService,\n\t\tprivate storageService: StorageService,\n\t\tprivate openviduService: OpenViduService\n\t) {\n\t\tthis.backgroundSelectedObs = this.backgroundSelected.asObservable();\n\t}\n\n\tgetBackgrounds(): any[] {\n\t\treturn this.backgrounds;\n\t}\n\n\tisBackgroundApplied(): boolean {\n\t\tconst bgSelected = this.backgroundSelected.getValue();\n\t\treturn !!bgSelected && bgSelected !== 'no_effect';\n\t}\n\n\tasync applyBackgroundFromStorage() {\n\t\tconst bgId = this.storageService.getBackground();\n\t\tif (!!bgId) {\n\t\t\tconst background = this.backgrounds.find((bg) => bg.id === bgId);\n\t\t\tif (background) {\n\t\t\t\tthis.applyBackground(background);\n\t\t\t}\n\t\t}\n\t}\n\n\tasync applyBackground(bg: BackgroundEffect) {\n\t\tif (bg.id !== this.backgroundSelected.getValue()) {\n\t\t\tconst filter = this.participantService.getMyCameraPublisher().stream.filter;\n\t\t\tconst isBackgroundSelected = !!filter && filter.type.startsWith('VB:');\n\t\t\tlet options = { token: this.openviduService.getWebcamToken(), url: '' };\n\t\t\tif (bg.type === EffectType.IMAGE) {\n\t\t\t\toptions.url = bg.src;\n\t\t\t}\n\n\t\t\tif (isBackgroundSelected && this.hasSameTypeAsAbove(bg.type)) {\n\t\t\t\tthis.replaceBackground(bg);\n\t\t\t} else {\n\t\t\t\tawait this.removeBackground();\n\t\t\t\tawait this.participantService.getMyCameraPublisher().stream.applyFilter(`VB:${bg.type.toLowerCase()}`, options);\n\t\t\t}\n\t\t\tthis.storageService.setBackground(bg.id);\n\t\t\tthis.backgroundSelected.next(bg.id);\n\t\t}\n\t}\n\n\tasync removeBackground() {\n\t\tif (!!this.isBackgroundApplied()) {\n\t\t\tthis.backgroundSelected.next('no_effect');\n\t\t\tawait this.participantService.getMyCameraPublisher().stream.removeFilter();\n\t\t\tthis.storageService.removeBackground();\n\t\t}\n\t}\n\n\tprivate async replaceBackground(effect: BackgroundEffect) {\n\t\tawait this.participantService.getMyCameraPublisher().stream.filter.execMethod('update', { url: effect.src });\n\t}\n\n\tprivate hasSameTypeAsAbove(type: EffectType): boolean {\n\t\tconst oldEffect = this.backgrounds.find((bg) => bg.id === this.backgroundSelected.getValue());\n\t\treturn oldEffect?.type === type;\n\t}\n}\n","import {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tContentChild,\n\tElementRef,\n\tEventEmitter,\n\tHostListener,\n\tInput,\n\tOnDestroy,\n\tOnInit,\n\tOutput,\n\tTemplateRef,\n\tViewChild\n} from '@angular/core';\nimport {\n\tConnectionEvent,\n\tExceptionEvent,\n\tExceptionEventName,\n\tRecordingEvent,\n\tSession,\n\tSessionDisconnectedEvent,\n\tStreamEvent,\n\tStreamPropertyChangedEvent,\n\tSubscriber\n} from 'openvidu-browser';\n\nimport { ILogger } from '../../models/logger.model';\nimport { VideoType } from '../../models/video-type.model';\n\nimport { animate, style, transition, trigger } from '@angular/animations';\nimport { MatDrawerContainer, MatSidenav } from '@angular/material/sidenav';\nimport { skip, Subscription } from 'rxjs';\nimport { SidenavMode } from '../../models/layout.model';\nimport { PanelEvent, PanelType } from '../../models/panel.model';\nimport { Signal } from '../../models/signal.model';\nimport { ActionService } from '../../services/action/action.service';\nimport { BroadcastingService } from '../../services/broadcasting/broadcasting.service';\nimport { CaptionService } from '../../services/caption/caption.service';\nimport { ChatService } from '../../services/chat/chat.service';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\nimport { LayoutService } from '../../services/layout/layout.service';\nimport { LoggerService } from '../../services/logger/logger.service';\nimport { OpenViduService } from '../../services/openvidu/openvidu.service';\nimport { PanelService } from '../../services/panel/panel.service';\nimport { ParticipantService } from '../../services/participant/participant.service';\nimport { PlatformService } from '../../services/platform/platform.service';\nimport { RecordingService } from '../../services/recording/recording.service';\nimport { TranslateService } from '../../services/translate/translate.service';\nimport { VirtualBackgroundService } from '../../services/virtual-background/virtual-background.service';\n\n/**\n * @internal\n */\n\n@Component({\n\tselector: 'ov-session',\n\ttemplateUrl: './session.component.html',\n\tstyleUrls: ['./session.component.css'],\n\tanimations: [trigger('sessionAnimation', [transition(':enter', [style({ opacity: 0 }), animate('50ms', style({ opacity: 1 }))])])],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SessionComponent implements OnInit, OnDestroy {\n\t@ContentChild('toolbar', { read: TemplateRef }) toolbarTemplate: TemplateRef<any>;\n\t@ContentChild('panel', { read: TemplateRef }) panelTemplate: TemplateRef<any>;\n\t@ContentChild('layout', { read: TemplateRef }) layoutTemplate: TemplateRef<any>;\n\n\t@Input() usedInPrejoinPage = false;\n\n\t@Output() onNodeCrashed = new EventEmitter<any>();\n\n\tsession: Session;\n\tsessionScreen: Session;\n\n\tsideMenu: MatSidenav;\n\n\tsidenavMode: SidenavMode = SidenavMode.SIDE;\n\tsettingsPanelOpened: boolean;\n\tdrawer: MatDrawerContainer;\n\tpreparing: boolean = true;\n\n\tprotected readonly SIDENAV_WIDTH_LIMIT_MODE = 790;\n\n\tprotected menuSubscription: Subscription;\n\tprotected layoutWidthSubscription: Subscription;\n\n\tprotected updateLayoutInterval: NodeJS.Timer;\n\t// private sttReconnectionInterval: NodeJS.Timer;\n\tprivate captionLanguageSubscription: Subscription;\n\n\tprotected log: ILogger;\n\n\tconstructor(\n\t\tprotected actionService: ActionService,\n\t\tprotected openviduService: OpenViduService,\n\t\tprotected participantService: ParticipantService,\n\t\tprotected loggerSrv: LoggerService,\n\t\tprotected chatService: ChatService,\n\t\tprivate libService: OpenViduAngularConfigService,\n\t\tprotected layoutService: LayoutService,\n\t\tprotected panelService: PanelService,\n\t\tprivate recordingService: RecordingService,\n\t\tprivate broadcastingService: BroadcastingService,\n\t\tprivate translateService: TranslateService,\n\t\tprivate captionService: CaptionService,\n\t\tprivate platformService: PlatformService,\n\t\tprivate backgroundService: VirtualBackgroundService,\n\t\tprivate cd: ChangeDetectorRef\n\t) {\n\t\tthis.log = this.loggerSrv.get('SessionComponent');\n\t}\n\n\t@HostListener('window:beforeunload')\n\tbeforeunloadHandler() {\n\t\tthis.leaveSession();\n\t}\n\n\t@HostListener('window:resize')\n\tsizeChange() {\n\t\tthis.layoutService.update();\n\t}\n\n\t@ViewChild('sidenav')\n\tset sidenavMenu(menu: MatSidenav) {\n\t\tsetTimeout(() => {\n\t\t\tif (menu) {\n\t\t\t\tthis.sideMenu = menu;\n\t\t\t\tthis.subscribeToTogglingMenu();\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\t@ViewChild('videoContainer', { static: false, read: ElementRef })\n\tset videoContainer(container: ElementRef) {\n\t\tsetTimeout(() => {\n\t\t\tif (container && !this.toolbarTemplate) {\n\t\t\t\tcontainer.nativeElement.style.height = '100%';\n\t\t\t\tcontainer.nativeElement.style.minHeight = '100%';\n\t\t\t\tthis.layoutService.update();\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\t@ViewChild('container')\n\tset container(container: MatDrawerContainer) {\n\t\tsetTimeout(() => {\n\t\t\tif (container) {\n\t\t\t\tthis.drawer = container;\n\t\t\t\tthis.drawer._contentMarginChanges.subscribe(() => {\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.stopUpdateLayoutInterval();\n\t\t\t\t\t\tthis.layoutService.update();\n\t\t\t\t\t\tthis.drawer.autosize = false;\n\t\t\t\t\t}, 250);\n\t\t\t\t});\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\t@ViewChild('layoutContainer')\n\tset layoutContainer(container: ElementRef) {\n\t\tsetTimeout(async () => {\n\t\t\tif (container) {\n\t\t\t\t// Apply background from storage when layout container is in DOM\n\t\t\t\tawait this.backgroundService.applyBackgroundFromStorage();\n\t\t\t}\n\t\t}, 0);\n\t}\n\n\tasync ngOnInit() {\n\t\tif (!this.usedInPrejoinPage) {\n\t\t\tif (!this.openviduService.getScreenToken()) {\n\t\t\t\t// Hide screenshare button if screen token does not exist\n\t\t\t\tthis.libService.screenshareButton.next(false);\n\t\t\t}\n\t\t\tthis.session = this.openviduService.getWebcamSession();\n\t\t\tthis.sessionScreen = this.openviduService.getScreenSession();\n\n\t\t\tthis.subscribeToOpenViduException();\n\t\t\tthis.subscribeToCaptionLanguage();\n\t\t\tthis.subscribeToConnectionCreatedAndDestroyed();\n\t\t\tthis.subscribeToStreamCreated();\n\t\t\tthis.subscribeToStreamDestroyed();\n\t\t\tthis.subscribeToStreamPropertyChange();\n\t\t\tthis.subscribeToNicknameChanged();\n\t\t\tthis.chatService.subscribeToChat();\n\t\t\tthis.subscribeToReconnection();\n\n\t\t\tawait this.connectToSession();\n\t\t\t// ios devices appear with blank video. Muting and unmuting it fix this problem\n\t\t\tif (this.platformService.isIos() && this.participantService.isMyCameraActive()) {\n\t\t\t\tawait this.openviduService.publishVideo(false);\n\t\t\t\tawait this.openviduService.publishVideo(true);\n\t\t\t}\n\n\t\t\tif (this.libService.isRecordingEnabled()) {\n\t\t\t\tthis.subscribeToRecordingEvents();\n\t\t\t}\n\n\t\t\tif (this.libService.isBroadcastingEnabled()) {\n\t\t\t\tthis.subscribeToBroadcastingEvents();\n\t\t\t}\n\t\t}\n\t\tthis.preparing = false;\n\t\tthis.cd.markForCheck();\n\t}\n\n\tngOnDestroy() {\n\t\t// Reconnecting session is received in Firefox\n\t\t// To avoid 'Connection lost' message uses session.off()\n\t\tthis.session?.off('reconnecting');\n\t\tthis.participantService.clear();\n\t\tthis.session = null;\n\t\tthis.sessionScreen = null;\n\t\tif (this.menuSubscription) this.menuSubscription.unsubscribe();\n\t\tif (this.layoutWidthSubscription) this.layoutWidthSubscription.unsubscribe();\n\t}\n\n\tleaveSession() {\n\t\tthis.log.d('Leaving session...');\n\t\tthis.openviduService.disconnect();\n\t}\n\n\tprotected subscribeToTogglingMenu() {\n\t\tthis.sideMenu.openedChange.subscribe(() => {\n\t\t\tthis.stopUpdateLayoutInterval();\n\t\t\tthis.layoutService.update();\n\t\t});\n\n\t\tthis.sideMenu.openedStart.subscribe(() => {\n\t\t\tthis.startUpdateLayoutInterval();\n\t\t});\n\n\t\tthis.sideMenu.closedStart.subscribe(() => {\n\t\t\tthis.startUpdateLayoutInterval();\n\t\t});\n\n\t\tthis.menuSubscription = this.panelService.panelOpenedObs.pipe(skip(1)).subscribe((ev: PanelEvent) => {\n\t\t\tif (this.sideMenu) {\n\t\t\t\tthis.settingsPanelOpened = ev.opened && ev.type === PanelType.SETTINGS;\n\n\t\t\t\tif (this.sideMenu.opened && ev.opened) {\n\t\t\t\t\tif (ev.type === PanelType.SETTINGS || ev.oldType === PanelType.SETTINGS) {\n\t\t\t\t\t\t// Switch from SETTINGS to another panel and vice versa.\n\t\t\t\t\t\t// As the SETTINGS panel will be bigger than others, the sidenav container must be updated.\n\t\t\t\t\t\t// Setting autosize to 'true' allows update it.\n\t\t\t\t\t\tthis.drawer.autosize = true;\n\t\t\t\t\t\tthis.startUpdateLayoutInterval();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tev.opened ? this.sideMenu.open() : this.sideMenu.close();\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected subscribeToLayoutWidth() {\n\t\tthis.layoutWidthSubscription = this.layoutService.layoutWidthObs.subscribe((width) => {\n\t\t\tthis.sidenavMode = width <= this.SIDENAV_WIDTH_LIMIT_MODE ? SidenavMode.OVER : SidenavMode.SIDE;\n\t\t});\n\t}\n\n\tprivate async connectToSession(): Promise<void> {\n\t\ttry {\n\t\t\tconst webcamToken = this.openviduService.getWebcamToken();\n\t\t\tconst screenToken = this.openviduService.getScreenToken();\n\n\t\t\tif (this.participantService.haveICameraAndScreenActive()) {\n\t\t\t\tawait this.openviduService.connectSession(this.openviduService.getWebcamSession(), webcamToken);\n\t\t\t\tawait this.openviduService.connectSession(this.openviduService.getScreenSession(), screenToken);\n\t\t\t\tawait this.openviduService.publish(this.participantService.getMyCameraPublisher());\n\t\t\t\tawait this.openviduService.publish(this.participantService.getMyScreenPublisher());\n\t\t\t} else if (this.participantService.isOnlyMyScreenActive()) {\n\t\t\t\tawait this.openviduService.connectSession(this.openviduService.getScreenSession(), screenToken);\n\t\t\t\tawait this.openviduService.publish(this.participantService.getMyScreenPublisher());\n\t\t\t} else {\n\t\t\t\tawait this.openviduService.connectSession(this.openviduService.getWebcamSession(), webcamToken);\n\t\t\t\tawait this.openviduService.publish(this.participantService.getMyCameraPublisher());\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// this._error.emit({ error: error.error, messgae: error.message, code: error.code, status: error.status });\n\t\t\tthis.log.e('There was an error connecting to the session:', error.code, error.message);\n\t\t\tthis.actionService.openDialog(this.translateService.translate('ERRORS.SESSION'), error?.error || error?.message || error);\n\t\t}\n\t}\n\n\tprivate subscribeToOpenViduException() {\n\t\tthis.session.on('exception', async (event: ExceptionEvent) => {\n\t\t\tif (event.name === ExceptionEventName.SPEECH_TO_TEXT_DISCONNECTED) {\n\t\t\t\tthis.log.w(event.name, event.message);\n\t\t\t\tthis.openviduService.setSTTReady(false);\n\t\t\t\t// Try to re-subscribe to STT\n\t\t\t\tawait this.openviduService.subscribeRemotesToSTT(this.captionService.getLangSelected().lang);\n\t\t\t} else {\n\t\t\t\tthis.log.e(event.name, event.message);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToConnectionCreatedAndDestroyed() {\n\t\tthis.session.on('connectionCreated', (event: ConnectionEvent) => {\n\t\t\tconst connectionId = event.connection?.connectionId;\n\t\t\tconst nickname: string = this.participantService.getNicknameFromConnectionData(event.connection.data);\n\t\t\tconst isRemoteConnection: boolean = !this.openviduService.isMyOwnConnection(connectionId);\n\t\t\tconst isCameraConnection: boolean = !nickname?.includes(`_${VideoType.SCREEN}`);\n\t\t\tconst data = event.connection?.data;\n\n\t\t\tif (isRemoteConnection && isCameraConnection) {\n\t\t\t\t// Adding participant when connection is created and it's not screen\n\t\t\t\tthis.participantService.addRemoteConnection(connectionId, data, null);\n\n\t\t\t\t//Sending nicnkanme signal to new participants\n\t\t\t\tif (this.openviduService.needSendNicknameSignal()) {\n\t\t\t\t\tconst data = { clientData: this.participantService.getMyNickname() };\n\t\t\t\t\tthis.openviduService.sendSignal(Signal.NICKNAME_CHANGED, [event.connection], data);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tthis.session.on('connectionDestroyed', (event: ConnectionEvent) => {\n\t\t\tconst nickname: string = this.participantService.getNicknameFromConnectionData(event.connection.data);\n\t\t\tconst isRemoteConnection: boolean = !this.openviduService.isMyOwnConnection(event.connection.connectionId);\n\t\t\tconst isCameraConnection: boolean = !nickname?.includes(`_${VideoType.SCREEN}`);\n\t\t\t// Deleting participant when connection is destroyed\n\t\t\tif (isRemoteConnection && isCameraConnection) {\n\t\t\t\tthis.participantService.removeConnectionByConnectionId(event.connection.connectionId);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToStreamCreated() {\n\t\tthis.session.on('streamCreated', async (event: StreamEvent) => {\n\t\t\tconst connectionId = event.stream?.connection?.connectionId;\n\t\t\tconst data = event.stream?.connection?.data;\n\t\t\tconst isCameraType: boolean = this.participantService.getTypeConnectionData(data) === VideoType.CAMERA;\n\t\t\tconst isRemoteConnection: boolean = !this.openviduService.isMyOwnConnection(connectionId);\n\t\t\tconst lang = this.captionService.getLangSelected().lang;\n\n\t\t\tif (isRemoteConnection) {\n\t\t\t\tconst subscriber: Subscriber = this.session.subscribe(event.stream, undefined);\n\t\t\t\tthis.participantService.addRemoteConnection(connectionId, data, subscriber);\n\t\t\t\t// this.oVSessionService.sendNicknameSignal(event.stream.connection);\n\n\t\t\t\tif (this.openviduService.isSttReady() && this.captionService.areCaptionsEnabled() && isCameraType) {\n\t\t\t\t\t// Only subscribe to STT when is ready and stream is CAMERA type and it is a remote stream\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.openviduService.subscribeStreamToStt(event.stream, lang);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tthis.log.e('Error subscribing from STT: ', error);\n\t\t\t\t\t\t// I assume the only reason of an STT error is a STT crash.\n\t\t\t\t\t\t// It must be subscribed to all remotes again\n\t\t\t\t\t\t// await this.openviduService.unsubscribeRemotesFromSTT();\n\t\t\t\t\t\tawait this.openviduService.subscribeRemotesToSTT(lang);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToStreamDestroyed() {\n\t\tthis.session.on('streamDestroyed', async (event: StreamEvent) => {\n\t\t\tconst connectionId = event.stream.connection.connectionId;\n\t\t\tconst data = event.stream?.connection?.data;\n\t\t\tconst isRemoteConnection: boolean = !this.openviduService.isMyOwnConnection(connectionId);\n\t\t\tconst isCameraType: boolean = this.participantService.getTypeConnectionData(data) === VideoType.CAMERA;\n\n\t\t\tthis.participantService.removeConnectionByConnectionId(connectionId);\n\t\t\tif (this.openviduService.isSttReady() && this.captionService.areCaptionsEnabled() && isRemoteConnection && isCameraType) {\n\t\t\t\ttry {\n\t\t\t\t\tawait this.session.unsubscribeFromSpeechToText(event.stream);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthis.log.e('Error unsubscribing from STT: ', error);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToCaptionLanguage() {\n\t\tthis.captionLanguageSubscription = this.captionService.captionLangObs.subscribe(async (langOpt) => {\n\t\t\tif (this.captionService.areCaptionsEnabled()) {\n\t\t\t\t// Unsubscribe all streams from speech to text and re-subscribe with new language\n\t\t\t\tthis.log.d('Re-subscribe from STT because of language changed to ', langOpt.lang);\n\t\t\t\tawait this.openviduService.unsubscribeRemotesFromSTT();\n\t\t\t\tawait this.openviduService.subscribeRemotesToSTT(langOpt.lang);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToStreamPropertyChange() {\n\t\tthis.session.on('streamPropertyChanged', (event: StreamPropertyChangedEvent) => {\n\t\t\tconst connectionId = event.stream.connection.connectionId;\n\t\t\tconst isRemoteConnection: boolean = !this.openviduService.isMyOwnConnection(connectionId);\n\t\t\tif (isRemoteConnection) {\n\t\t\t\tthis.participantService.updateRemoteParticipants();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToNicknameChanged() {\n\t\tthis.session.on(`signal:${Signal.NICKNAME_CHANGED}`, (event: any) => {\n\t\t\tconst connectionId = event.from.connectionId;\n\t\t\tconst isRemoteConnection: boolean = !this.openviduService.isMyOwnConnection(connectionId);\n\n\t\t\tif (isRemoteConnection) {\n\t\t\t\tconst nickname = this.participantService.getNicknameFromConnectionData(event.data);\n\t\t\t\tthis.participantService.setRemoteNickname(connectionId, nickname);\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToReconnection() {\n\t\tthis.session.on('reconnecting', () => {\n\t\t\tthis.log.w('Connection lost: Reconnecting');\n\t\t\tthis.actionService.openDialog(\n\t\t\t\tthis.translateService.translate('ERRORS.CONNECTION'),\n\t\t\t\tthis.translateService.translate('ERRORS.RECONNECT'),\n\t\t\t\tfalse\n\t\t\t);\n\t\t});\n\t\tthis.session.on('reconnected', () => {\n\t\t\tthis.log.w('Connection lost: Reconnected');\n\t\t\tthis.actionService.closeDialog();\n\t\t});\n\t\tthis.session.on('sessionDisconnected', (event: SessionDisconnectedEvent) => {\n\t\t\tif (event.reason === 'nodeCrashed') {\n\t\t\t\tthis.actionService.openDialog(\n\t\t\t\t\tthis.translateService.translate('ERRORS.CONNECTION'),\n\t\t\t\t\tthis.translateService.translate('ERRORS.RECONNECT'),\n\t\t\t\t\tfalse\n\t\t\t\t);\n\t\t\t\tthis.onNodeCrashed.emit();\n\t\t\t} else if (event.reason === 'networkDisconnect') {\n\t\t\t\tthis.actionService.closeDialog();\n\t\t\t\tthis.leaveSession();\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate subscribeToRecordingEvents() {\n\t\tthis.session.on('recordingStarted', (event: RecordingEvent) => this.recordingService.startRecording(event));\n\n\t\tthis.session.on('recordingStopped', (event: RecordingEvent) => this.recordingService.stopRecording(event));\n\t}\n\n\tprivate subscribeToBroadcastingEvents() {\n\t\tthis.session.on('broadcastStarted', () => this.broadcastingService.startBroadcasting());\n\t\tthis.session.on('broadcastStopped', () => this.broadcastingService.stopBroadcasting());\n\t}\n\n\tprivate startUpdateLayoutInterval() {\n\t\tthis.updateLayoutInterval = setInterval(() => {\n\t\t\tthis.layoutService.update();\n\t\t}, 50);\n\t}\n\n\tprivate stopUpdateLayoutInterval() {\n\t\tif (this.updateLayoutInterval) {\n\t\t\tclearInterval(this.updateLayoutInterval);\n\t\t}\n\t}\n}\n","<div id=\"session-container\" *ngIf=\"!preparing\" @sessionAnimation>\n\t<div id=\"footer-container\" *ngIf=\"toolbarTemplate\">\n\t\t<ng-container *ngTemplateOutlet=\"toolbarTemplate\"></ng-container>\n\t</div>\n\t<mat-sidenav-container #container #videoContainer class=\"sidenav-container\">\n\t\t<mat-sidenav\n\t\t\t#sidenav\n\t\t\tmode=\"{{ sidenavMode }}\"\n\t\t\tposition=\"end\"\n\t\t\tclass=\"sidenav-menu\"\n\t\t\t[ngClass]=\"{big: settingsPanelOpened}\"\n\t\t\tfixedInViewport=\"true\"\n\t\t\tfixedTopGap=\"0\"\n\t\t\tfixedBottomGap=\"0\"\n\t\t>\n\t\t\t<ng-container *ngTemplateOutlet=\"panelTemplate\"></ng-container>\n\t\t</mat-sidenav>\n\n\t\t<mat-sidenav-content class=\"sidenav-main\">\n\t\t\t<div id=\"layout-container\"  #layoutContainer>\n\t\t\t\t<ng-container *ngTemplateOutlet=\"layoutTemplate\"></ng-container>\n\t\t\t</div>\n\t\t</mat-sidenav-content>\n\t</mat-sidenav-container>\n</div>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { BackgroundEffect, EffectType } from '../../../models/background-effect.model';\nimport { PanelType } from '../../../models/panel.model';\nimport { PanelService } from '../../../services/panel/panel.service';\nimport { VirtualBackgroundService } from '../../../services/virtual-background/virtual-background.service';\n\n/**\n * @internal\n */\n@Component({\n  selector: 'ov-background-effects-panel',\n  templateUrl: './background-effects-panel.component.html',\n  styleUrls: ['../panel.component.css','./background-effects-panel.component.css'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class BackgroundEffectsPanelComponent implements OnInit {\n\n  backgroundSelectedId: string;\n  effectType = EffectType;\n  backgroundImages: BackgroundEffect[] = [];\n  noEffectAndBlurredBackground: BackgroundEffect[] = [];\n  private backgrounds: BackgroundEffect[];\n  private backgroundSubs: Subscription;\n\n  /**\n   * @internal\n   * @param panelService\n   * @param backgroundService\n   * @param cd\n   */\n  constructor(private panelService: PanelService, private backgroundService: VirtualBackgroundService, private cd: ChangeDetectorRef) { }\n\n  ngOnInit(): void {\n    this.subscribeToBackgroundSelected();\n    this.backgrounds = this.backgroundService.getBackgrounds();\n    this.noEffectAndBlurredBackground = this.backgrounds.filter(f => f.type === EffectType.BLUR || f.type === EffectType.NONE);\n    this.backgroundImages = this.backgrounds.filter(f => f.type === EffectType.IMAGE);\n  }\n\n  ngOnDestroy() {\n    if (this.backgroundSubs) this.backgroundSubs.unsubscribe();\n  }\n  subscribeToBackgroundSelected() {\n    this.backgroundSubs = this.backgroundService.backgroundSelectedObs.subscribe((id) => {\n      this.backgroundSelectedId = id;\n      this.cd.markForCheck();\n    });\n  }\n\n  close() {\n    this.panelService.togglePanel(PanelType.BACKGROUND_EFFECTS);\n  }\n\n  async applyBackground(effect: BackgroundEffect) {\n    if (effect.type === EffectType.NONE) {\n      await this.removeBackground();\n    } else {\n      await this.backgroundService.applyBackground(effect);\n    }\n  }\n\n  async removeBackground() {\n    await this.backgroundService.removeBackground();\n  }\n}\n","<div class=\"panel-container\" id=\"background-effects-container\" fxLayout=\"column\" fxLayoutAlign=\"space-evenly none\">\n\t<div class=\"panel-header-container\" fxFlex=\"55px\" fxLayoutAlign=\"start center\">\n\t\t<h3 class=\"panel-title\">{{ 'PANEL.BACKGROUND.TITLE' | translate }}</h3>\n\t\t<button class=\"panel-close-button\" mat-icon-button matTooltip=\"{{ 'PANEL.CLOSE' | translate }}\" (click)=\"close()\">\n\t\t\t<mat-icon>close</mat-icon>\n\t\t</button>\n\t</div>\n\n\t<div class=\"effects-container\" fxFlex=\"100%\" fxLayoutAlign=\"space-evenly none\">\n\t\t<div>\n\t\t\t<h4>{{ 'PANEL.BACKGROUND.BLURRED_SECTION' | translate }}</h4>\n\t\t\t<div>\n\t\t\t\t<button\n\t\t\t\t\t*ngFor=\"let effect of noEffectAndBlurredBackground\"\n\t\t\t\t\tmat-icon-button\n\t\t\t\t\tclass=\"effect-button\"\n\t\t\t\t\t[class.active-effect-btn]=\"backgroundSelectedId === effect.id\"\n\t\t\t\t\t(click)=\"applyBackground(effect)\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon\n\t\t\t\t\t\t[matTooltip]=\"\n\t\t\t\t\t\t\teffect.type === effectType.NONE\n\t\t\t\t\t\t\t\t? ('PANEL.BACKGROUND.NO_EFFECTS' | translate)\n\t\t\t\t\t\t\t\t: ('PANEL.BACKGROUND.BLURRED_EFFECT' | translate)\n\t\t\t\t\t\t\"\n\t\t\t\t\t\t>{{ effect.thumbnail }}</mat-icon\n\t\t\t\t\t>\n\t\t\t\t</button>\n\t\t\t\t<!-- <button\n\t\t\t\t\tmat-icon-button\n\t\t\t\t\tclass=\"effect-button\"\n\t\t\t\t\tid=\"hard-blur-btn\"\n\t\t\t\t\t[class.active-effect-btn]=\"backgroundSelectedId === 'hard_blur'\"\n\t\t\t\t\t(click)=\"applyBackground('hard_blur')\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon matTooltip=\"Hard blur effect\">blur_on</mat-icon>\n\t\t\t\t</button> -->\n\t\t\t</div>\n\t\t</div>\n\t\t<hr />\n\t\t<div>\n\t\t\t<h4>{{ 'PANEL.BACKGROUND.IMAGES_SECTION' | translate }}</h4>\n\n\t\t\t<div class=\"grid\">\n\t\t\t\t<div\n\t\t\t\t\t*ngFor=\"let effect of backgroundImages\"\n\t\t\t\t\tclass=\"effect-button\"\n\t\t\t\t\t[class.active-effect-btn]=\"backgroundSelectedId === effect.id\"\n\t\t\t\t\t(click)=\"applyBackground(effect)\"\n\t\t\t\t>\n\t\t\t\t\t<img [src]=\"effect.thumbnail\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n","import { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { PublisherProperties } from 'openvidu-browser';\nimport { Subscription } from 'rxjs';\nimport { CustomDevice } from '../../../models/device.model';\nimport { PanelType } from '../../../models/panel.model';\nimport { ParticipantAbstractModel } from '../../../models/participant.model';\nimport { VideoType } from '../../../models/video-type.model';\nimport { DeviceService } from '../../../services/device/device.service';\nimport { OpenViduService } from '../../../services/openvidu/openvidu.service';\nimport { PanelService } from '../../../services/panel/panel.service';\nimport { ParticipantService } from '../../../services/participant/participant.service';\nimport { StorageService } from '../../../services/storage/storage.service';\nimport { VirtualBackgroundService } from '../../../services/virtual-background/virtual-background.service';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-video-devices-select',\n\ttemplateUrl: './video-devices.component.html',\n\tstyleUrls: ['./video-devices.component.css']\n})\nexport class VideoDevicesComponent implements OnInit, OnDestroy {\n\t@Output()  onDeviceSelectorClicked = new EventEmitter<void>();\n\t@Output()  onVideoMutedClicked = new EventEmitter<boolean>();\n\n\tvideoMuteChanging: boolean;\n\tisVideoMuted: boolean;\n\tcameraSelected: CustomDevice | null;\n\thasVideoDevices: boolean;\n\tcameras: CustomDevice[] = [];\n\tlocalParticipantSubscription: Subscription;\n\n\tconstructor(\n\t\tprivate openviduService: OpenViduService,\n\t\tprotected panelService: PanelService,\n\t\tprivate storageSrv: StorageService,\n\t\tprivate deviceSrv: DeviceService,\n\t\tprotected participantService: ParticipantService,\n\t\tprivate backgroundService: VirtualBackgroundService\n\t) {}\n\n\tasync ngOnInit() {\n\t\tthis.subscribeToParticipantMediaProperties();\n\t\tif (this.openviduService.isSessionConnected()) {\n\t\t\t// Updating devices only with session connected\n\t\t\tawait this.deviceSrv.refreshDevices();\n\t\t}\n\n\n\t\tthis.hasVideoDevices = this.deviceSrv.hasVideoDeviceAvailable();\n\t\tif(this.hasVideoDevices){\n\t\t\tthis.cameras = this.deviceSrv.getCameras();\n\t\t\tthis.cameraSelected = this.deviceSrv.getCameraSelected();\n\t\t}\n\t\tif (this.openviduService.isSessionConnected()) {\n\t\t\tthis.isVideoMuted = !this.participantService.getLocalParticipant().isCameraVideoActive();\n\t\t} else {\n\t\t\tthis.isVideoMuted = this.deviceSrv.isVideoMuted();\n\t\t}\n\t}\n\tasync ngOnDestroy() {\n\t\tthis.cameras = [];\n\t\tif (this.localParticipantSubscription) this.localParticipantSubscription.unsubscribe();\n\t}\n\n\tasync toggleCam() {\n\t\tthis.videoMuteChanging = true;\n\t\tconst publish = this.isVideoMuted;\n\t\tawait this.openviduService.publishVideo(publish);\n\t\tif (this.isVideoMuted && this.panelService.isExternalPanelOpened()) {\n\t\t\tthis.panelService.togglePanel(PanelType.BACKGROUND_EFFECTS);\n\t\t}\n\t\tthis.videoMuteChanging = false;\n\t\tthis.onVideoMutedClicked.emit(publish);\n\t}\n\n\tasync onCameraSelected(event: any) {\n\t\tconst videoSource = event?.value;\n\t\t// Is New deviceId different from the old one?\n\t\tif (this.deviceSrv.needUpdateVideoTrack(videoSource)) {\n\t\t\tconst mirror = this.deviceSrv.cameraNeedsMirror(videoSource);\n\t\t\t// Reapply Virtual Background to new Publisher if necessary\n\t\t\tconst backgroundSelected = this.backgroundService.backgroundSelected.getValue();\n\t\t\tconst isBackgroundApplied = this.backgroundService.isBackgroundApplied()\n\n\t\t\tif (isBackgroundApplied) {\n\t\t\t\tawait this.backgroundService.removeBackground();\n\t\t\t}\n\t\t\tconst pp: PublisherProperties = { videoSource, audioSource: false, mirror };\n\t\t\tawait this.openviduService.replaceTrack(VideoType.CAMERA, pp);\n\n\t\t\tif (isBackgroundApplied) {\n\t\t\t\tconst bgSelected = this.backgroundService.backgrounds.find((b) => b.id === backgroundSelected);\n\t\t\t\tif (bgSelected) {\n\t\t\t\t\tawait this.backgroundService.applyBackground(bgSelected);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.deviceSrv.setCameraSelected(videoSource);\n\t\t\tthis.cameraSelected = this.deviceSrv.getCameraSelected();\n\t\t}\n\t}\n\n\tprotected subscribeToParticipantMediaProperties() {\n\t\tthis.localParticipantSubscription = this.participantService.localParticipantObs.subscribe((p: ParticipantAbstractModel) => {\n\t\t\tif (p) {\n\t\t\t\tthis.isVideoMuted = !p.isCameraVideoActive();\n\t\t\t\tthis.storageSrv.setVideoMuted(this.isVideoMuted);\n\t\t\t}\n\t\t});\n\t}\n}\n","<div class=\"device-container-element\">\n\t<button\n\t\tmat-icon-button\n\t\tid=\"camera-button\"\n\t\t[disabled]=\"!hasVideoDevices || videoMuteChanging\"\n\t\t[class.warn-btn]=\"isVideoMuted\"\n\t\t(click)=\"toggleCam()\"\n\t>\n\t\t<mat-icon\n\t\t\t*ngIf=\"!isVideoMuted\"\n\t\t\t[matTooltipDisabled]=\"!hasVideoDevices\"\n\t\t\tmatTooltip=\"{{ 'TOOLBAR.MUTE_VIDEO' | translate }}\"\n\t\t\tid=\"videocam\"\n\t\t>\n\t\t\tvideocam\n\t\t</mat-icon>\n\t\t<mat-icon\n\t\t\t*ngIf=\"isVideoMuted\"\n\t\t\t[matTooltipDisabled]=\"!hasVideoDevices\"\n\t\t\tmatTooltip=\"{{ 'TOOLBAR.UNMUTE_VIDEO' | translate }}\"\n\t\t\tid=\"videocam_off\"\n\t\t>\n\t\t\tvideocam_off\n\t\t</mat-icon>\n\t</button>\n\t<mat-form-field>\n\t\t<mat-label *ngIf=\"hasVideoDevices\">{{ 'PREJOIN.VIDEO_DEVICE' | translate }}</mat-label>\n\t\t<mat-label *ngIf=\"!hasVideoDevices\">{{ 'PREJOIN.NO_VIDEO_DEVICE' | translate }}</mat-label>\n\t\t<mat-select\n\t\t\t[disabled]=\"isVideoMuted || !hasVideoDevices\"\n\t\t\t[value]=\"cameraSelected?.device\"\n\t\t\t(click)=\"onDeviceSelectorClicked.emit()\"\n\t\t\t(selectionChange)=\"onCameraSelected($event)\"\n\t\t>\n\t\t\t<mat-option *ngFor=\"let camera of cameras\" [value]=\"camera.device\">\n\t\t\t\t{{ camera.label }}\n\t\t\t</mat-option>\n\t\t</mat-select>\n\t</mat-form-field>\n</div>\n","import { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\nimport { PublisherProperties } from 'openvidu-browser';\nimport { Subscription } from 'rxjs';\nimport { CustomDevice } from '../../../models/device.model';\nimport { ParticipantAbstractModel } from '../../../models/participant.model';\nimport { VideoType } from '../../../models/video-type.model';\nimport { DeviceService } from '../../../services/device/device.service';\nimport { OpenViduService } from '../../../services/openvidu/openvidu.service';\nimport { ParticipantService } from '../../../services/participant/participant.service';\nimport { StorageService } from '../../../services/storage/storage.service';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-audio-devices-select',\n\ttemplateUrl: './audio-devices.component.html',\n\tstyleUrls: ['./audio-devices.component.css']\n})\nexport class AudioDevicesComponent implements OnInit, OnDestroy {\n\t@Output() onDeviceSelectorClicked = new EventEmitter<void>();\n\t@Output() onAudioMutedClicked = new EventEmitter<boolean>();\n\thasAudioDevices: boolean;\n\tisAudioMuted: boolean;\n\tmicrophoneSelected: CustomDevice | null;\n\tmicrophones: CustomDevice[] = [];\n\tprivate localParticipantSubscription: Subscription;\n\n\tconstructor(\n\t\tprivate openviduService: OpenViduService,\n\t\tprivate deviceSrv: DeviceService,\n\t\tprivate storageSrv: StorageService,\n\t\tprivate participantService: ParticipantService\n\t) {}\n\n\tasync ngOnInit() {\n\t\tthis.subscribeToParticipantMediaProperties();\n\t\tif (this.openviduService.isSessionConnected()) {\n\t\t\t// Updating devices only with session connected\n\t\t\tawait this.deviceSrv.refreshDevices();\n\t\t}\n\t\tthis.hasAudioDevices = this.deviceSrv.hasAudioDeviceAvailable();\n\t\tif(this.hasAudioDevices) {\n\t\t\tthis.microphones = this.deviceSrv.getMicrophones();\n\t\t\tthis.microphoneSelected = this.deviceSrv.getMicrophoneSelected();\n\t\t}\n\t\tthis.isAudioMuted = this.deviceSrv.isAudioMuted();\n\t\tif (this.openviduService.isSessionConnected()) {\n\t\t\tthis.isAudioMuted = !this.participantService.isMyAudioActive();\n\t\t} else {\n\t\t\tthis.isAudioMuted = this.deviceSrv.isAudioMuted();\n\t\t}\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.localParticipantSubscription) this.localParticipantSubscription.unsubscribe();\n\t}\n\n\ttoggleMic() {\n\t\tconst publish = this.isAudioMuted;\n\t\tthis.openviduService.publishAudio(publish);\n\t\tthis.onAudioMutedClicked.emit(publish);\n\t}\n\n\tasync onMicrophoneSelected(event: any) {\n\t\tconst audioSource = event?.value;\n\t\tif (this.deviceSrv.needUpdateAudioTrack(audioSource)) {\n\t\t\tconst pp: PublisherProperties = { audioSource, videoSource: false };\n\t\t\tawait this.openviduService.replaceTrack(VideoType.CAMERA, pp);\n\t\t\tthis.deviceSrv.setMicSelected(audioSource);\n\t\t\tthis.microphoneSelected = this.deviceSrv.getMicrophoneSelected();\n\t\t}\n\t}\n\n\tprivate subscribeToParticipantMediaProperties() {\n\t\tthis.localParticipantSubscription = this.participantService.localParticipantObs.subscribe((p: ParticipantAbstractModel) => {\n\t\t\tif (p) {\n\t\t\t\tthis.isAudioMuted = !p.hasAudioActive();\n\t\t\t\tthis.storageSrv.setAudioMuted(this.isAudioMuted);\n\t\t\t}\n\t\t});\n\t}\n}\n","<div class=\"device-container-element\">\n\t<button mat-icon-button id=\"microphone-button\" [disabled]=\"!hasAudioDevices\" [class.warn-btn]=\"isAudioMuted\" (click)=\"toggleMic()\">\n\t\t<mat-icon\n\t\t\t*ngIf=\"!isAudioMuted\"\n\t\t\t[matTooltipDisabled]=\"!hasAudioDevices\"\n\t\t\tmatTooltip=\"{{ 'TOOLBAR.MUTE_AUDIO' | translate }}\"\n\t\t\tid=\"mic\"\n\t\t>\n\t\t\tmic\n\t\t</mat-icon>\n\t\t<mat-icon\n\t\t\t*ngIf=\"isAudioMuted\"\n\t\t\t[matTooltipDisabled]=\"!hasAudioDevices\"\n\t\t\tmatTooltip=\"{{ 'TOOLBAR.UNMUTE_AUDIO' | translate }}\"\n\t\t\tid=\"mic_off\"\n\t\t>\n\t\t\tmic_off\n\t\t</mat-icon>\n\t</button>\n\t<mat-form-field>\n\t\t<mat-label *ngIf=\"hasAudioDevices\">{{ 'PREJOIN.AUDIO_DEVICE' | translate }}</mat-label>\n\t\t<mat-label *ngIf=\"!hasAudioDevices\">{{ 'PREJOIN.NO_AUDIO_DEVICE' | translate }}</mat-label>\n\t\t<mat-select\n\t\t\t[disabled]=\"isAudioMuted || !hasAudioDevices\"\n\t\t\t[value]=\"microphoneSelected?.device\"\n\t\t\t(click)=\"onDeviceSelectorClicked.emit()\"\n\t\t\t(selectionChange)=\"onMicrophoneSelected($event)\"\n\t\t>\n\t\t\t<mat-option *ngFor=\"let microphone of microphones\" [value]=\"microphone.device\">\n\t\t\t\t{{ microphone.label }}\n\t\t\t</mat-option>\n\t\t</mat-select>\n\t</mat-form-field>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ParticipantAbstractModel } from '../../../models/participant.model';\nimport { ParticipantService } from '../../../services/participant/participant.service';\nimport { StorageService } from '../../../services/storage/storage.service';\n\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-nickname-input',\n\ttemplateUrl: './nickname-input.component.html',\n\tstyleUrls: ['./nickname-input.component.css']\n})\nexport class NicknameInputComponent implements OnInit {\n\tnickname: string;\n\tlocalParticipantSubscription: Subscription;\n\n\tconstructor(private participantService: ParticipantService, private storageSrv: StorageService) {}\n\n\tngOnInit(): void {\n\t\tthis.subscribeToParticipantProperties();\n\t\tthis.nickname = this.participantService.getMyNickname();\n\t}\n\n\tupdateNickname() {\n\t\tthis.nickname = this.nickname === '' ? this.participantService.getMyNickname() : this.nickname;\n\t\tthis.participantService.setMyNickname(this.nickname);\n\t\tthis.storageSrv.setNickname(this.nickname);\n\t}\n\n\tprivate subscribeToParticipantProperties() {\n\t\tthis.localParticipantSubscription = this.participantService.localParticipantObs.subscribe((p: ParticipantAbstractModel) => {\n\t\t\tif (p) {\n\t\t\t\tthis.nickname = p.getNickname();\n\t\t\t}\n\t\t});\n\t}\n}\n","<div id=\"nickname-input-container\">\n\t<button mat-icon-button disabled>\n\t\t<mat-icon>person</mat-icon>\n\t</button>\n\t<mat-form-field appearance=\"standard\">\n\t\t<mat-label>{{ 'PREJOIN.NICKNAME' | translate }}</mat-label>\n\t\t<input\n\t\t\tmatInput\n\t\t\ttype=\"text\"\n\t\t\tmaxlength=\"20\"\n\t\t\t[(ngModel)]=\"nickname\"\n\t\t\t(change)=\"updateNickname()\"\n\t\t\tautocomplete=\"off\"\n\t\t/>\n\t</mat-form-field>\n</div>","import { AfterViewInit, Component, OnInit, Output, ViewChild,EventEmitter } from '@angular/core';\nimport { MatMenuTrigger } from '@angular/material/menu';\nimport { MatSelect } from '@angular/material/select';\nimport { StorageService } from '../../../services/storage/storage.service';\nimport { TranslateService } from '../../../services/translate/translate.service';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-lang-selector',\n\ttemplateUrl: './lang-selector.component.html',\n\tstyleUrls: ['./lang-selector.component.css']\n})\nexport class LangSelectorComponent implements OnInit, AfterViewInit {\n\t@Output()  onLangSelectorClicked = new EventEmitter<void>();\n\tlangSelected: { name: string; ISO: string };\n\tlanguages: { name: string; ISO: string }[] = [];\n\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild(MatMenuTrigger) public menuTrigger: MatMenuTrigger;\n\n\t/**\n\t * @ignore\n\t */\n\t@ViewChild(MatSelect) matSelect: MatSelect;\n\n\tconstructor(private translateService: TranslateService, private storageSrv: StorageService) {}\n\n\tngOnInit(): void {\n\t\tthis.languages = this.translateService.getLanguagesInfo();\n\t\tthis.langSelected = this.translateService.getLangSelected();\n\t}\n\n\tngAfterViewInit() {\n\t\tthis.menuTrigger?.menuOpened.subscribe(() => {\n\t\t\tthis.onLangSelectorClicked.emit();\n\t\t});\n\t\tthis.matSelect?.openedChange.subscribe(() => {\n\t\t\tthis.onLangSelectorClicked.emit();\n\t\t});\n\t}\n\n\tonLangSelected(lang: string) {\n\t\tthis.translateService.setLanguage(lang);\n\t\tthis.storageSrv.setLang(lang);\n\t\tthis.langSelected = this.translateService.getLangSelected();\n\t}\n}\n","<button mat-flat-button [matMenuTriggerFor]=\"menu\" class=\"lang-button\">\n\t<span>{{langSelected?.name}}</span>\n\t<mat-icon>expand_more</mat-icon>\n</button>\n<mat-menu #menu=\"matMenu\">\n\t<button mat-menu-item *ngFor=\"let lang of languages\" (click)=\"onLangSelected(lang.ISO)\">\n\t\t<span>{{lang.name}}</span>\n\t</button>\n</mat-menu>","import { BREAKPOINT, LayoutDirective } from '@angular/flex-layout';\nimport { Directive } from '@angular/core';\nimport {  } from '@angular/flex-layout';\n\n\nconst LANDSCAPE_BREAKPOINTS = [\n\t{\n\t\talias: 'landscape',\n\t\tsuffix: 'Landscape',\n\t\tmediaQuery: 'screen and (orientation: landscape)',\n\t\toverlapping: false,\n\t\tpriority: 2001\n\t}\n];\n\nexport const CustomBreakPointsProvider = {\n\tprovide: BREAKPOINT,\n\tuseValue: LANDSCAPE_BREAKPOINTS,\n\tmulti: true\n};\n\n\nconst selector = `[fxLayout.landscape]`;\nconst inputs = ['fxLayout.landscape'];\n\n@Directive({ selector, inputs })\nexport class CustomLayoutExtensionDirective extends LayoutDirective {\n\tprotected inputs = inputs;\n}\n","import { Component, EventEmitter, HostListener, OnDestroy, OnInit, Output } from '@angular/core';\n\nimport { Subscription } from 'rxjs';\nimport { ILogger } from '../../models/logger.model';\nimport { PanelType } from '../../models/panel.model';\nimport { ParticipantAbstractModel } from '../../models/participant.model';\nimport { ActionService } from '../../services/action/action.service';\nimport { CdkOverlayService } from '../../services/cdk-overlay/cdk-overlay.service';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\nimport { LayoutService } from '../../services/layout/layout.service';\nimport { LoggerService } from '../../services/logger/logger.service';\nimport { OpenViduService } from '../../services/openvidu/openvidu.service';\nimport { PanelService } from '../../services/panel/panel.service';\nimport { ParticipantService } from '../../services/participant/participant.service';\nimport { TranslateService } from '../../services/translate/translate.service';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-pre-join',\n\ttemplateUrl: './pre-join.component.html',\n\tstyleUrls: ['./pre-join.component.css']\n})\nexport class PreJoinComponent implements OnInit, OnDestroy {\n\t@Output() onJoinButtonClicked = new EventEmitter<any>();\n\n\tlocalParticipant: ParticipantAbstractModel;\n\twindowSize: number;\n\tisLoading = true;\n\tnickname: string;\n\t/**\n\t * @ignore\n\t */\n\tshowBackgroundEffectsButton: boolean = true;\n\t/**\n\t * @ignore\n\t */\n\tisMinimal: boolean = false;\n\tshowLogo: boolean = true;\n\n\tprivate log: ILogger;\n\tprivate localParticipantSubscription: Subscription;\n\tprivate screenShareStateSubscription: Subscription;\n\tprivate minimalSub: Subscription;\n\tprivate displayLogoSub: Subscription;\n\tprivate backgroundEffectsButtonSub: Subscription;\n\n\t@HostListener('window:resize')\n\tsizeChange() {\n\t\tthis.windowSize = window.innerWidth;\n\t\tthis.layoutService.update();\n\t}\n\n\tconstructor(\n\t\tprivate layoutService: LayoutService,\n\t\tprivate loggerSrv: LoggerService,\n\t\tprivate participantService: ParticipantService,\n\t\tprotected panelService: PanelService,\n\t\tprivate libService: OpenViduAngularConfigService,\n\t\tprotected cdkSrv: CdkOverlayService,\n\t\tprivate openviduService: OpenViduService,\n\t\tprivate translateService: TranslateService,\n\t\tprivate actionService: ActionService\n\t) {\n\t\tthis.log = this.loggerSrv.get('PreJoinComponent');\n\t}\n\n\tngOnInit() {\n\t\tthis.subscribeToPrejoinDirectives();\n\t\tthis.subscribeToLocalParticipantEvents();\n\n\t\tthis.windowSize = window.innerWidth;\n\t\tthis.isLoading = false;\n\t}\n\n\tasync ngOnDestroy() {\n\t\tthis.cdkSrv.setSelector('body');\n\t\tif (this.localParticipantSubscription) this.localParticipantSubscription.unsubscribe();\n\t\tif (this.screenShareStateSubscription) this.screenShareStateSubscription.unsubscribe();\n\t\tif (this.backgroundEffectsButtonSub) this.backgroundEffectsButtonSub.unsubscribe();\n\t\tif (this.minimalSub) this.minimalSub.unsubscribe();\n\t\tthis.panelService.closePanel();\n\t}\n\n\tonDeviceSelectorClicked() {\n\t\t// Some devices as iPhone do not show the menu panels correctly\n\t\t// Updating the container where the panel is added fix the problem.\n\t\tthis.cdkSrv.setSelector('#prejoin-container');\n\t}\n\n\tonVideoMutedClicked(hasVideo: boolean) {\n\t\tif (!hasVideo) {\n\t\t\tthis.panelService.closePanel();\n\t\t}\n\t}\n\n\tjoinSession() {\n\t\tthis.onJoinButtonClicked.emit();\n\t\tthis.panelService.closePanel();\n\t}\n\n\ttoggleBackgroundEffects() {\n\t\tif (this.openviduService.isOpenViduPro()) {\n\t\t\tthis.panelService.togglePanel(PanelType.BACKGROUND_EFFECTS);\n\t\t} else {\n\t\t\tthis.actionService.openProFeatureDialog(\n\t\t\t\tthis.translateService.translate('PANEL.BACKGROUND.TITLE'),\n\t\t\t\tthis.translateService.translate('PANEL.PRO_FEATURE')\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate subscribeToLocalParticipantEvents() {\n\t\tthis.localParticipantSubscription = this.participantService.localParticipantObs.subscribe((p) => {\n\t\t\tthis.localParticipant = p;\n\t\t\tthis.nickname = this.localParticipant.getNickname();\n\t\t});\n\t}\n\n\tprivate subscribeToPrejoinDirectives() {\n\t\tthis.minimalSub = this.libService.minimalObs.subscribe((value: boolean) => {\n\t\t\tthis.isMinimal = value;\n\t\t\t// this.cd.markForCheck();\n\t\t});\n\t\tthis.displayLogoSub = this.libService.displayLogoObs.subscribe((value: boolean) => {\n\t\t\tthis.showLogo = value;\n\t\t\t// this.cd.markForCheck();\n\t\t});\n\t\tthis.backgroundEffectsButtonSub = this.libService.backgroundEffectsButton.subscribe((value: boolean) => {\n\t\t\tthis.showBackgroundEffectsButton = value;\n\t\t\t// this.cd.markForCheck();\n\t\t});\n\t}\n}\n","<div class=\"prejoin-toolbar\">\n\t<mat-toolbar id=\"toolbar\">\n\t\t<img *ngIf=\"!isMinimal && showLogo\" id=\"branding-logo\" src=\"assets/images/logo.png\" ovLogo />\n\t\t<!-- <span>OpenVidu Call</span> -->\n\t\t<span class=\"spacer\"></span>\n\n\t\t<ov-lang-selector *ngIf=\"!isMinimal\" (onLangSelectorClicked)=\"onDeviceSelectorClicked()\"></ov-lang-selector>\n\t</mat-toolbar>\n</div>\n\n<div class=\"container\" id=\"prejoin-container\" fxLayout.landscape=\"row\" fxLayout.lt-md=\"column\" fxLayout.md=\"row\" fxLayout.gt-md=\"row\">\n\t<div fxFlex.lt-sm=\"50%\" fxFlex.lt-md=\"50%\" fxFlex.md=\"45%\" fxFlex.gt-md=\"45%\" fxLayoutAlign=\"center center\" id=\"layout-container\">\n\t\t<ov-session [usedInPrejoinPage]=\"true\" class=\"ov-session\">\n\t\t\t<ng-template #panel *ngIf=\"!isMinimal && showBackgroundEffectsButton\">\n\t\t\t\t<ov-panel>\n\t\t\t\t\t<ng-template #backgroundEffectsPanel>\n\t\t\t\t\t\t<ov-background-effects-panel></ov-background-effects-panel>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ov-panel>\n\t\t\t</ng-template>\n\n\t\t\t<ng-template #layout>\n\t\t\t\t<ov-layout>\n\t\t\t\t\t<ng-template #stream let-stream>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t*ngIf=\"!isMinimal && showBackgroundEffectsButton\"\n\t\t\t\t\t\t\t[disabled]=\"!stream.streamManager?.stream?.videoActive\"\n\t\t\t\t\t\t\tmatTooltip=\"{{ 'TOOLBAR.BACKGROUND' | translate }}\"\n\t\t\t\t\t\t\tmat-icon-button\n\t\t\t\t\t\t\tid=\"background-effects-btn\"\n\t\t\t\t\t\t\t(click)=\"toggleBackgroundEffects()\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<mat-icon>auto_awesome</mat-icon>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t\t<ov-stream [stream]=\"stream\" [displayParticipantName]=\"false\" [settingsButton]=\"false\"></ov-stream>\n\t\t\t\t\t</ng-template>\n\t\t\t\t</ov-layout>\n\t\t\t</ng-template>\n\t\t</ov-session>\n\t</div>\n\t<div fxFlex.lt-md=\"50%\" fxFlex.md=\"55%\" fxFlex.gt-md=\"55%\" fxLayoutAlign=\"center center\" class=\"media-panel\" *ngIf=\"localParticipant\">\n\t\t<div fxLayout=\"column\" fxLayoutGap=\"10px\" class=\"media-panel-container\">\n\t\t\t<div fxLayout.gt-sm=\"column\" fxLayout.lt-md=\"column\" fxLayoutGap=\"10px\" fxFlex=\"33%\">\n\t\t\t\t<div fxFlex.gt-sm=\"100%\" fxFlex.lt-md=\"33%\" fxLayoutAlign=\"center center\" fxFlexFill class=\"nickname-container\">\n\t\t\t\t\t<h4 *ngIf=\"windowSize >= 960\">{{ 'PREJOIN.NICKNAME_SECTION' | translate }}</h4>\n\t\t\t\t\t<hr *ngIf=\"windowSize >= 960\" />\n\t\t\t\t\t<ov-nickname-input></ov-nickname-input>\n\t\t\t\t</div>\n\n\t\t\t\t<div fxFlex.gt-sm=\"100%\" fxFlex.lt-md=\"33%\" fxLayoutAlign=\"center center\" fxFlexFill class=\"buttons-container\">\n\t\t\t\t\t<h4 *ngIf=\"windowSize >= 960\">{{ 'PREJOIN.DEVICE_SECTION' | translate }}</h4>\n\t\t\t\t\t<hr *ngIf=\"windowSize >= 960\" />\n\n\t\t\t\t\t<!-- Camera -->\n\t\t\t\t\t<ov-video-devices-select\n\t\t\t\t\t\t(onDeviceSelectorClicked)=\"onDeviceSelectorClicked()\"\n\t\t\t\t\t\t(onVideoMutedClicked)=\"onVideoMutedClicked($event)\"\n\t\t\t\t\t></ov-video-devices-select>\n\n\t\t\t\t\t<!-- Microphone -->\n\t\t\t\t\t<ov-audio-devices-select (onDeviceSelectorClicked)=\"onDeviceSelectorClicked()\"></ov-audio-devices-select>\n\t\t\t\t</div>\n\n\t\t\t\t<div fxFlex.gt-sm=\"60%\" fxLayout.lt-md=\"column\" fxLayoutAlign=\"center center\" fxFlexFill class=\"join-btn-container\">\n\t\t\t\t\t<button mat-flat-button (click)=\"joinSession()\" form=\"nicknameForm\" id=\"join-button\">\n\t\t\t\t\t\t{{ 'PREJOIN.JOIN' | translate }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CaptionsLangOption } from '../../../models/caption.model';\nimport { CaptionService } from '../../../services/caption/caption.service';\nimport { LayoutService } from '../../../services/layout/layout.service';\nimport { OpenViduService } from '../../../services/openvidu/openvidu.service';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-captions-settings',\n\ttemplateUrl: './captions.component.html',\n\tstyleUrls: ['./captions.component.css']\n})\nexport class CaptionsSettingComponent implements OnInit, OnDestroy {\n\tisSttReady: boolean = true;\n\tcaptionsEnabled: boolean;\n\tlanguagesAvailable: CaptionsLangOption[] = [];\n\tlangSelected: string;\n\tisOpenViduPro: boolean = false;\n\tprivate captionsStatusSubs: Subscription;\n\tprivate sttStatusSubs: Subscription;\n\n\n\tconstructor(private layoutService: LayoutService, private captionService: CaptionService, private openviduService: OpenViduService) {}\n\n\tngOnInit(): void {\n\t\tthis.isOpenViduPro = this.openviduService.isOpenViduPro();\n\t\tif (this.isOpenViduPro) {\n\t\t\tthis.subscribeToSttStatus();\n\t\t\tthis.subscribeToCaptionsStatus();\n\t\t\tthis.langSelected = this.captionService.getLangSelected().name;\n\t\t\tthis.languagesAvailable = this.captionService.getCaptionLanguages();\n\t\t}\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.captionsStatusSubs) this.captionsStatusSubs.unsubscribe();\n\t\tif (this.sttStatusSubs) this.sttStatusSubs.unsubscribe();\n\t}\n\n\tonLangSelected(langOpt: CaptionsLangOption) {\n\t\tthis.langSelected = langOpt.name;\n\t\tthis.captionService.setLanguage(langOpt.lang);\n\t}\n\n\ttoggleCaptions() {\n\t\tthis.layoutService.toggleCaptions();\n\t}\n\n\tprivate subscribeToSttStatus(){\n\t\tthis.sttStatusSubs = this.openviduService.isSttReadyObs.subscribe((ready: boolean) => {\n\t\t\tthis.isSttReady = ready;\n\t\t});\n\t}\n\n\tprivate subscribeToCaptionsStatus() {\n\t\tthis.captionsStatusSubs = this.layoutService.captionsTogglingObs.subscribe((value: boolean) => {\n\t\t\tthis.captionsEnabled = value;\n\t\t\t// this.cd.markForCheck();\n\t\t});\n\t}\n}\n","<div>\n\t<mat-list *ngIf=\"isOpenViduPro\">\n\t\t<div>\n\t\t\t<mat-list-item>\n\t\t\t\t<div mat-line>{{ 'PANEL.SETTINGS.CAPTIONS' | translate }}</div>\n\t\t\t\t<mat-slide-toggle\n\t\t\t\t\tid=\"captions-toggle-slide\"\n\t\t\t\t\t(change)=\"toggleCaptions()\"\n\t\t\t\t\t[checked]=\"captionsEnabled\"\n\t\t\t\t\t[disableRipple]=\"true\"\n\t\t\t\t></mat-slide-toggle>\n\t\t\t</mat-list-item>\n\t\t</div>\n\n\t\t<div id=\"lang-section\">\n\t\t\t<mat-list-item>\n\t\t\t\t<div mat-line>{{ 'PANEL.SETTINGS.LANGUAGE' | translate }}</div>\n\t\t\t\t<button mat-flat-button [matMenuTriggerFor]=\"menu\" [disabled]=\"!isSttReady\" class=\"lang-button\">\n\t\t\t\t\t<span>{{ langSelected }}</span>\n\t\t\t\t\t<mat-icon>expand_more</mat-icon>\n\t\t\t\t</button>\n\t\t\t\t<mat-menu #menu=\"matMenu\">\n\t\t\t\t\t<button *ngFor=\"let langOpt of languagesAvailable\" mat-menu-item [id]=\"langOpt.lang\" (click)=\"onLangSelected(langOpt)\">\n\t\t\t\t\t\t<span>{{ langOpt.name }}</span>\n\t\t\t\t\t</button>\n\t\t\t\t</mat-menu>\n\t\t\t</mat-list-item>\n\t\t\t<span class=\"section-description\">{{ 'PANEL.SETTINGS.CAPTIONS_LANG_TEXT' | translate }}</span>\n\t\t</div>\n\t</mat-list>\n\n\t<div *ngIf=\"!isOpenViduPro\" class=\"pro-feature\">\n\t\t<img\n\t\t\tsrc=\"data:image/png;base64,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\"\n\t\t/>\n\t\t<p [innerHTML]=\"'PANEL.PRO_FEATURE' | translate\"></p>\n\t</div>\n</div>\n","import { Component, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { PanelEvent, PanelSettingsOptions, PanelType } from '../../../models/panel.model';\nimport { OpenViduAngularConfigService } from '../../../services/config/openvidu-angular.config.service';\nimport { PanelService } from '../../../services/panel/panel.service';\nimport { PlatformService } from '../../../services/platform/platform.service';\n\n/**\n * @internal\n */\n@Component({\n\tselector: 'ov-settings-panel',\n\ttemplateUrl: './settings-panel.component.html',\n\tstyleUrls: ['../panel.component.css', './settings-panel.component.css']\n})\nexport class SettingsPanelComponent implements OnInit {\n\tsettingsOptions: typeof PanelSettingsOptions = PanelSettingsOptions;\n\tselectedOption: PanelSettingsOptions = PanelSettingsOptions.GENERAL;\n\tshowCaptions: boolean = true;\n\tpanelSubscription: Subscription;\n\tisMobile: boolean = false;\n\tprivate captionsSubs: Subscription;\n\tconstructor(\n\t\tprivate panelService: PanelService,\n\t\tprivate platformService: PlatformService,\n\t\tprivate libService: OpenViduAngularConfigService\n\t) {}\n\tngOnInit() {\n\t\tthis.isMobile = this.platformService.isMobile();\n\t\tthis.subscribeToPanelToggling();\n\t\tthis.subscribeToDirectives();\n\t}\n\n\tngOnDestroy() {\n\t\tif (this.captionsSubs) this.captionsSubs.unsubscribe();\n\t}\n\n\tclose() {\n\t\tthis.panelService.togglePanel(PanelType.SETTINGS);\n\t}\n\tonSelectionChanged(option: PanelSettingsOptions) {\n\t\tthis.selectedOption = option;\n\t}\n\n\tprivate subscribeToDirectives() {\n\t\tthis.captionsSubs = this.libService.captionsButtonObs.subscribe((value: boolean) => {\n\t\t\tthis.showCaptions = value;\n\t\t});\n\t}\n\n\tprivate subscribeToPanelToggling() {\n\t\tthis.panelSubscription = this.panelService.panelOpenedObs.subscribe((ev: PanelEvent) => {\n\t\t\tif (ev.type === PanelType.SETTINGS && !!ev.expand) {\n\t\t\t\tthis.selectedOption = ev.expand as PanelSettingsOptions;\n\t\t\t}\n\t\t});\n\t}\n}\n","<div class=\"panel-container\" id=\"settings-container\" fxLayout=\"column\" fxLayoutAlign=\"space-evenly none\">\n\t<div class=\"panel-header-container\" fxFlex=\"55px\" fxLayoutAlign=\"start center\">\n\t\t<h3 class=\"panel-title\">{{ 'PANEL.SETTINGS.TITLE' | translate }}</h3>\n\t\t<button class=\"panel-close-button\" mat-icon-button matTooltip=\"{{ 'PANEL.CLOSE' | translate }}\" (click)=\"close()\">\n\t\t\t<mat-icon>close</mat-icon>\n\t\t</button>\n\t</div>\n\n\t<div class=\"settings-container\" fxFlex=\"100%\" fxLayoutAlign=\"space-evenly none\">\n\t\t<div class=\"item-menu\" [ngClass]=\"{ mobile: isMobile }\">\n\t\t\t<mat-selection-list\n\t\t\t\t#optionList\n\t\t\t\t(selectionChange)=\"onSelectionChanged(optionList.selectedOptions.selected[0]?.value)\"\n\t\t\t\t[multiple]=\"false\"\n\t\t\t>\n\t\t\t\t<mat-list-option\n\t\t\t\t\tclass=\"option\"\n\t\t\t\t\tid=\"general-opt\"\n\t\t\t\t\t[selected]=\"selectedOption === settingsOptions.GENERAL\"\n\t\t\t\t\t[value]=\"settingsOptions.GENERAL\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon mat-list-icon>manage_accounts</mat-icon>\n\t\t\t\t\t<div mat-line *ngIf=\"!isMobile\">{{ 'PANEL.SETTINGS.GENERAL' | translate }}</div>\n\t\t\t\t</mat-list-option>\n\t\t\t\t<mat-list-option\n\t\t\t\t\tclass=\"option\"\n\t\t\t\t\tid=\"video-opt\"\n\t\t\t\t\t[selected]=\"selectedOption === settingsOptions.VIDEO\"\n\t\t\t\t\t[value]=\"settingsOptions.VIDEO\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon mat-list-icon>videocam</mat-icon>\n\t\t\t\t\t<div mat-line *ngIf=\"!isMobile\">{{ 'PANEL.SETTINGS.VIDEO' | translate }}</div>\n\t\t\t\t</mat-list-option>\n\t\t\t\t<mat-list-option\n\t\t\t\t\tclass=\"option\"\n\t\t\t\t\tid=\"audio-opt\"\n\t\t\t\t\t[selected]=\"selectedOption === settingsOptions.AUDIO\"\n\t\t\t\t\t[value]=\"settingsOptions.AUDIO\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon mat-list-icon>mic</mat-icon>\n\t\t\t\t\t<div mat-line *ngIf=\"!isMobile\">{{ 'PANEL.SETTINGS.AUDIO' | translate }}</div>\n\t\t\t\t</mat-list-option>\n\t\t\t\t<mat-list-option\n\t\t\t\t\t*ngIf=\"showCaptions\"\n\t\t\t\t\tclass=\"option\"\n\t\t\t\t\t[selected]=\"selectedOption === settingsOptions.CAPTIONS\"\n\t\t\t\t\t[value]=\"settingsOptions.CAPTIONS\"\n\t\t\t\t\tid=\"captions-opt\"\n\t\t\t\t>\n\t\t\t\t\t<mat-icon mat-list-icon>closed_caption</mat-icon>\n\t\t\t\t\t<div mat-line *ngIf=\"!isMobile\">{{ 'PANEL.SETTINGS.CAPTIONS' | translate }}</div>\n\t\t\t\t</mat-list-option>\n\t\t\t</mat-selection-list>\n\t\t</div>\n\n\t\t<div class=\"item-content\">\n\t\t\t<div *ngIf=\"selectedOption === settingsOptions.GENERAL\">\n\t\t\t\t<ov-nickname-input></ov-nickname-input>\n\t\t\t\t<mat-list>\n\t\t\t\t\t<mat-list-item>\n\t\t\t\t\t\t<mat-icon mat-list-icon>language</mat-icon>\n\t\t\t\t\t\t<div mat-line>{{ 'PANEL.SETTINGS.LANGUAGE' | translate }}</div>\n\t\t\t\t\t\t<ov-lang-selector></ov-lang-selector>\n\t\t\t\t\t</mat-list-item>\n\t\t\t\t</mat-list>\n\t\t\t</div>\n\t\t\t<ov-video-devices-select *ngIf=\"selectedOption === settingsOptions.VIDEO\"></ov-video-devices-select>\n\t\t\t<ov-audio-devices-select *ngIf=\"selectedOption === settingsOptions.AUDIO\"></ov-audio-devices-select>\n\t\t\t<ov-captions-settings *ngIf=\"selectedOption === settingsOptions.CAPTIONS && showCaptions\"></ov-captions-settings>\n\t\t</div>\n\t</div>\n</div>\n","import { animate, style, transition, trigger } from '@angular/animations';\nimport {\n\tAfterViewInit,\n\tComponent,\n\tContentChild,\n\tEventEmitter,\n\tInput,\n\tOnDestroy,\n\tOnInit,\n\tOutput,\n\tTemplateRef,\n\tViewChild\n} from '@angular/core';\nimport { OpenViduErrorName, Session } from 'openvidu-browser';\nimport { Subscription } from 'rxjs';\nimport {\n\tActivitiesPanelDirective,\n\tAdditionalPanelsDirective,\n\tChatPanelDirective,\n\tLayoutDirective,\n\tPanelDirective,\n\tParticipantPanelItemDirective,\n\tParticipantPanelItemElementsDirective,\n\tParticipantsPanelDirective,\n\tStreamDirective,\n\tToolbarAdditionalButtonsDirective,\n\tToolbarAdditionalPanelButtonsDirective,\n\tToolbarDirective\n} from '../../directives/template/openvidu-angular.directive';\nimport { ILogger } from '../../models/logger.model';\nimport { OpenViduEdition } from '../../models/openvidu.model';\nimport { ParticipantAbstractModel } from '../../models/participant.model';\nimport { TokenModel } from '../../models/token.model';\nimport { ActionService } from '../../services/action/action.service';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\nimport { DeviceService } from '../../services/device/device.service';\nimport { LoggerService } from '../../services/logger/logger.service';\nimport { OpenViduService } from '../../services/openvidu/openvidu.service';\nimport { ParticipantService } from '../../services/participant/participant.service';\nimport { StorageService } from '../../services/storage/storage.service';\nimport { TranslateService } from '../../services/translate/translate.service';\n\n/**\n * The **VideoconferenceComponent** is the parent of all OpenVidu components.\n * It allow us to create a modern, useful and powerful videoconference apps with ease.\n *\n * <div class=\"custom-table-container\">\n * <div>\n *  <h3>API Directives</h3>\n *\n * This component allows us to show or hide certain HTML elements with the following {@link https://angular.io/guide/attribute-directives Angular attribute directives}\n * with the aim of fully customizing the videoconference application.\n *\n * | **Parameter**                  | **Type**  | **Reference**                                   |\n * | :----------------------------: | :-------: | :---------------------------------------------: |\n * | **minimal**                        | `boolean` | {@link MinimalDirective}                        |\n * | **lang**                           | `string`  | {@link LangDirective}                           |\n * | **captionsLang**                   | `string`  | {@link CaptionsLangDirective}                   |\n * | **captionsLangOprions**            | `CaptionsLangOption []`  | {@link CaptionsLangOptionsDirective}                   |\n * | **prejoin**                        | `boolean` | {@link PrejoinDirective}                        |\n * | **participantName**                | `string`  | {@link ParticipantNameDirective}                |\n * | **videoMuted**                     | `boolean` | {@link VideoMutedDirective}                     |\n * | **audioMuted**                     | `boolean` | {@link AudioMutedDirective}                     |\n * | **toolbarScreenshareButton**       | `boolean` | {@link ToolbarScreenshareButtonDirective}       |\n * | **toolbarFullscreenButton**        | `boolean` | {@link ToolbarFullscreenButtonDirective}        |\n * | **toolbarCaptionsButton** \t\t\t| `boolean` | {@link ToolbarCaptionsButtonDirective} \t\t  |\n * | **toolbarBackgroundEffectsButton** | `boolean` | {@link ToolbarBackgroundEffectsButtonDirective} |\n * | **toolbarLeaveButton**             | `boolean` | {@link ToolbarLeaveButtonDirective}             |\n * | **toolbarChatPanelButton**         | `boolean` | {@link ToolbarChatPanelButtonDirective}         |\n * | **toolbarParticipantsPanelButton** | `boolean` | {@link ToolbarParticipantsPanelButtonDirective} |\n * | **toolbarDisplayLogo**             | `boolean` | {@link ToolbarDisplayLogoDirective}             |\n * | **toolbarDisplaySessionName**      | `boolean` | {@link ToolbarDisplaySessionNameDirective}      |\n * | **streamDisplayParticipantName**   | `boolean` | {@link StreamDisplayParticipantNameDirective}   |\n * | **streamDisplayAudioDetection**    | `boolean` | {@link StreamDisplayAudioDetectionDirective}    |\n * | **streamSettingsButton**           | `boolean` | {@link StreamSettingsButtonDirective}           |\n * | **participantPanelItemMuteButton** | `boolean` | {@link ParticipantPanelItemMuteButtonDirective} |\n * | **recordingActivityRecordingList** | `{@link RecordingInfo}[]` | {@link RecordingActivityRecordingsListDirective} |\n * | **recordingActivityRecordingError** | `any` | {@link RecordingActivityRecordingErrorDirective} |\n *\n * <p class=\"component-link-text\">\n * <span class=\"italic\">See all {@link ApiDirectiveModule API Directives}</span>\n * </p>\n * </div>\n *\n * <div>\n *\n * <h3>OpenVidu Angular Directives</h3>\n *\n *\n * The VideoconferenceComponent is also providing us a way to **replace the default templates** with a custom one.\n * It will recognise the following {@link https://angular.io/guide/structural-directives Angular structural directives}\n * in the elements added as children.\n *\n * |             **Directive**           |                 **Reference**                 |\n * |:-----------------------------------:|:---------------------------------------------:|\n * |            ***ovToolbar**           |            {@link ToolbarDirective}           |\n * |   ***ovToolbarAdditionalButtons**   |   {@link ToolbarAdditionalButtonsDirective}   |\n * |***ovToolbarAdditionalPanelButtons**   |   {@link ToolbarAdditionalPanelButtonsDirective}   |\n * |             ***ovPanel**            |             {@link PanelDirective}            |\n * |        ***ovAdditionalPanels**      |       {@link AdditionalPanelsDirective}       |\n * |           ***ovChatPanel**          |           {@link ChatPanelDirective}          |\n * |       ***ovParticipantsPanel**      |       {@link ParticipantsPanelDirective}      |\n * |     ***ovParticipantPanelItem**     |     {@link ParticipantPanelItemDirective}     |\n * | ***ovParticipantPanelItemElements** | {@link ParticipantPanelItemElementsDirective} |\n * |            ***ovLayout**            |            {@link LayoutDirective}            |\n * |            ***ovStream**            |            {@link StreamDirective}            |\n *\n * <p class=\"component-link-text\">\n * \t<span class=\"italic\">See all {@link OpenViduAngularDirectiveModule OpenVidu Angular Directives}</span>\n * </p>\n * </div>\n * </div>\n */\n@Component({\n\tselector: 'ov-videoconference',\n\ttemplateUrl: './videoconference.component.html',\n\tstyleUrls: ['./videoconference.component.css'],\n\tanimations: [\n\t\ttrigger('inOutAnimation', [\n\t\t\ttransition(':enter', [style({ opacity: 0 }), animate('300ms ease-out', style({ opacity: 1 }))])\n\t\t\t// transition(':leave', [style({ opacity: 1 }), animate('50ms ease-in', style({ opacity: 0.9 }))])\n\t\t])\n\t]\n})\nexport class VideoconferenceComponent implements OnInit, OnDestroy, AfterViewInit {\n\t// *** Toolbar ***\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(ToolbarDirective) externalToolbar: ToolbarDirective;\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(ToolbarAdditionalButtonsDirective) externalToolbarAdditionalButtons: ToolbarAdditionalButtonsDirective;\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(ToolbarAdditionalPanelButtonsDirective) externalToolbarAdditionalPanelButtons: ToolbarAdditionalPanelButtonsDirective;\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(AdditionalPanelsDirective) externalAdditionalPanels: AdditionalPanelsDirective;\n\n\t// *** Panels ***\n\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(PanelDirective) externalPanel: PanelDirective;\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(ChatPanelDirective) externalChatPanel: ChatPanelDirective;\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(ActivitiesPanelDirective) externalActivitiesPanel: ActivitiesPanelDirective;\n\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(ParticipantsPanelDirective) externalParticipantsPanel: ParticipantsPanelDirective;\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(ParticipantPanelItemDirective) externalParticipantPanelItem: ParticipantPanelItemDirective;\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(ParticipantPanelItemElementsDirective) externalParticipantPanelItemElements: ParticipantPanelItemElementsDirective;\n\n\t// *** Layout ***\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(LayoutDirective) externalLayout: LayoutDirective;\n\t/**\n\t * @internal\n\t */\n\t@ContentChild(StreamDirective) externalStream: StreamDirective;\n\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('defaultToolbar', { static: false, read: TemplateRef }) defaultToolbarTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('defaultPanel', { static: false, read: TemplateRef }) defaultPanelTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('defaultChatPanel', { static: false, read: TemplateRef }) defaultChatPanelTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('defaultParticipantsPanel', { static: false, read: TemplateRef }) defaultParticipantsPanelTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('defaultActivitiesPanel', { static: false, read: TemplateRef })\n\tdefaultActivitiesPanelTemplate: TemplateRef<any>;\n\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('defaultParticipantPanelItem', { static: false, read: TemplateRef }) defaultParticipantPanelItemTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('defaultLayout', { static: false, read: TemplateRef }) defaultLayoutTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\t@ViewChild('defaultStream', { static: false, read: TemplateRef }) defaultStreamTemplate: TemplateRef<any>;\n\n\t/**\n\t * @internal\n\t */\n\topenviduAngularToolbarTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularToolbarAdditionalButtonsTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularActivitiesPanelTemplate: TemplateRef<any>;\n\n\t/**\n\t * @internal\n\t */\n\topenviduAngularToolbarAdditionalPanelButtonsTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularPanelTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularChatPanelTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularParticipantsPanelTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularAdditionalPanelsTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularParticipantPanelItemTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularParticipantPanelItemElementsTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularLayoutTemplate: TemplateRef<any>;\n\t/**\n\t * @internal\n\t */\n\topenviduAngularStreamTemplate: TemplateRef<any>;\n\n\t/**\n\t * Tokens parameter is required to grant a participant access to a Session.\n\t * This OpenVidu token will be use by each participant when connecting to a Session.\n\t *\n\t * This input accepts a {@link TokenModel} object type.\n\t *\n\t * @param {TokenModel} tokens  The tokens parameter must be a {@link TokenModel} object.\n\t *\n\t */\n\t@Input()\n\tset tokens(tokens: TokenModel) {\n\t\tlet openviduEdition;\n\t\tif (!tokens || !tokens.webcam) {\n\t\t\tthis.log.e('No tokens received');\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\topenviduEdition = new URL(tokens.webcam).searchParams.get('edition');\n\t\t} catch (error) {\n\t\t\tthis.log.e('Token received does not seem to be valid: ', tokens.webcam);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.log.d('Tokens received');\n\t\tif (!!openviduEdition) {\n\t\t\tthis.openviduService.setOpenViduEdition(OpenViduEdition.PRO);\n\t\t} else {\n\t\t\tthis.openviduService.setOpenViduEdition(OpenViduEdition.CE);\n\t\t}\n\n\t\tthis.openviduService.setWebcamToken(tokens.webcam);\n\t\tif (tokens.screen) {\n\t\t\tthis.openviduService.setScreenToken(tokens.screen);\n\t\t} else {\n\t\t\tthis.log.w('No screen token found. Screenshare feature will be disabled');\n\t\t}\n\n\t\tthis.start();\n\t}\n\n\t/**\n\t * Provides event notifications that fire when join button (in prejoin page) has been clicked.\n\t */\n\t@Output() onJoinButtonClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when leave button has been clicked.\n\t */\n\t@Output() onToolbarLeaveButtonClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when camera toolbar button has been clicked.\n\t */\n\t@Output() onToolbarCameraButtonClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when microphone toolbar button has been clicked.\n\t */\n\t@Output() onToolbarMicrophoneButtonClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when screenshare toolbar button has been clicked.\n\t */\n\t@Output() onToolbarScreenshareButtonClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when fullscreen toolbar button has been clicked.\n\t */\n\t@Output() onToolbarFullscreenButtonClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when participants panel button has been clicked.\n\t */\n\t@Output() onToolbarParticipantsPanelButtonClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when chat panel button has been clicked.\n\t */\n\t@Output() onToolbarChatPanelButtonClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when activities panel button has been clicked.\n\t */\n\t@Output() onToolbarActivitiesPanelButtonClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when start recording button is clicked {@link ToolbarComponent}.\n\t *  The recording should be stopped using the REST API.\n\t */\n\t@Output() onToolbarStartRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\t/**\n\t * Provides event notifications that fire when stop recording button is clicked from {@link ToolbarComponent}.\n\t *  The recording should be stopped using the REST API.\n\t */\n\t@Output() onToolbarStopRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when start recording button is clicked {@link ActivitiesPanelComponent}.\n\t *  The recording should be stopped using the REST API.\n\t */\n\t@Output() onActivitiesPanelStartRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\t/**\n\t * Provides event notifications that fire when stop recording button is clicked from {@link ActivitiesPanelComponent}.\n\t *  The recording should be stopped using the REST API.\n\t */\n\t@Output() onActivitiesPanelStopRecordingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when delete recording button is clicked from {@link ActivitiesPanelComponent}.\n\t *  The recording should be deleted using the REST API.\n\t */\n\t@Output() onActivitiesPanelDeleteRecordingClicked: EventEmitter<string> = new EventEmitter<string>();\n\n\t/**\n\t * Provides event notifications that fire when play recording button is clicked from {@link ActivitiesPanelComponent}.\n\t */\n\t@Output() onActivitiesPanelPlayRecordingClicked: EventEmitter<string> = new EventEmitter<string>();\n\n\t/**\n\t * Provides event notifications that fire when start broadcasting button is clicked from {@link ActivitiesPanelComponent}.\n\t */\n\t@Output() onActivitiesPanelStartBroadcastingClicked: EventEmitter<string> = new EventEmitter<string>();\n\n\t/**\n\t * Provides event notifications that fire when start broadcasting button is clicked from {@link ActivitiesPanelComponent}.\n\t */\n\t@Output() onActivitiesPanelStopBroadcastingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when start broadcasting button is clicked from {@link ToolbarComponent}.\n\t */\n\t@Output() onToolbarStopBroadcastingClicked: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * Provides event notifications that fire when OpenVidu Session is created.\n\t * See {@link https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/Session.html openvidu-browser Session}.\n\t */\n\t@Output() onSessionCreated: EventEmitter<Session> = new EventEmitter<Session>();\n\n\t/**\n\t * Provides event notifications that fire when local participant is created.\n\t */\n\t@Output() onParticipantCreated: EventEmitter<ParticipantAbstractModel> = new EventEmitter<ParticipantAbstractModel>();\n\n\t/**\n\t * Provides event notifications that fire in the case of a node crash in your OpenVidu deployment.\n\t * OpenVidu delegates the recovery of the sessions to the application in the event of a node crash.\n\t * See {@link https://docs.openvidu.io/en/stable/openvidu-pro/fault-tolerance/ OpenVidu Pro Fault tolerance}.\n\t */\n\t@Output() onNodeCrashed: EventEmitter<void> = new EventEmitter<void>();\n\n\t/**\n\t * @internal\n\t */\n\tshowVideoconference: boolean = false;\n\t/**\n\t * @internal\n\t */\n\tparticipantReady: boolean = false;\n\n\t/**\n\t * @internal\n\t */\n\terror: boolean = false;\n\t/**\n\t * @internal\n\t */\n\terrorMessage: string = '';\n\t/**\n\t * @internal\n\t */\n\tshowPrejoin: boolean = true;\n\n\t/**\n\t * @internal\n\t */\n\tisSessionInitialized: boolean = false;\n\n\t/**\n\t * @internal\n\t */\n\tloading = true;\n\tprivate nodeCrashed: boolean = false;\n\tprivate externalParticipantName: string;\n\tprivate prejoinSub: Subscription;\n\tprivate participantNameSub: Subscription;\n\tprivate log: ILogger;\n\n\t/**\n\t * @internal\n\t */\n\tconstructor(\n\t\tprivate loggerSrv: LoggerService,\n\t\tprivate storageSrv: StorageService,\n\t\tprivate participantService: ParticipantService,\n\t\tprivate deviceSrv: DeviceService,\n\t\tprivate openviduService: OpenViduService,\n\t\tprivate actionService: ActionService,\n\t\tprivate libService: OpenViduAngularConfigService,\n\t\tprivate translateService: TranslateService\n\t) {\n\t\tthis.log = this.loggerSrv.get('VideoconferenceComponent');\n\t}\n\n\tasync ngOnInit() {\n\t\tthis.subscribeToVideconferenceDirectives();\n\t}\n\n\tasync ngOnDestroy() {\n\t\tif (this.prejoinSub) this.prejoinSub.unsubscribe();\n\t\tif (this.participantNameSub) this.participantNameSub.unsubscribe();\n\t\tthis.deviceSrv.clear();\n\t\tawait this.openviduService.clear();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tngAfterViewInit() {\n\t\tif (this.externalToolbar) {\n\t\t\tthis.log.d('Setting EXTERNAL TOOLBAR');\n\t\t\tthis.openviduAngularToolbarTemplate = this.externalToolbar.template;\n\t\t} else {\n\t\t\tthis.log.d('Setting  DEFAULT TOOLBAR');\n\t\t\tif (this.externalToolbarAdditionalButtons) {\n\t\t\t\tthis.log.d('Setting EXTERNAL TOOLBAR ADDITIONAL BUTTONS');\n\t\t\t\tthis.openviduAngularToolbarAdditionalButtonsTemplate = this.externalToolbarAdditionalButtons.template;\n\t\t\t}\n\t\t\tif (this.externalToolbarAdditionalPanelButtons) {\n\t\t\t\tthis.log.d('Setting EXTERNAL TOOLBAR ADDITIONAL PANEL BUTTONS');\n\t\t\t\tthis.openviduAngularToolbarAdditionalPanelButtonsTemplate = this.externalToolbarAdditionalPanelButtons.template;\n\t\t\t}\n\t\t\tthis.openviduAngularToolbarTemplate = this.defaultToolbarTemplate;\n\t\t}\n\n\t\tif (this.externalPanel) {\n\t\t\tthis.log.d('Setting EXTERNAL PANEL');\n\t\t\tthis.openviduAngularPanelTemplate = this.externalPanel.template;\n\t\t} else {\n\t\t\tthis.log.d('Setting DEFAULT PANEL');\n\n\t\t\tif (this.externalParticipantsPanel) {\n\t\t\t\tthis.openviduAngularParticipantsPanelTemplate = this.externalParticipantsPanel.template;\n\t\t\t\tthis.log.d('Setting EXTERNAL PARTICIPANTS PANEL');\n\t\t\t} else {\n\t\t\t\tthis.log.d('Setting DEFAULT PARTICIPANTS PANEL');\n\t\t\t\tif (this.externalParticipantPanelItem) {\n\t\t\t\t\tthis.log.d('Setting EXTERNAL P ITEM');\n\t\t\t\t\tthis.openviduAngularParticipantPanelItemTemplate = this.externalParticipantPanelItem.template;\n\t\t\t\t} else {\n\t\t\t\t\tif (this.externalParticipantPanelItemElements) {\n\t\t\t\t\t\tthis.log.d('Setting EXTERNAL PARTICIPANT PANEL ITEM ELEMENT');\n\t\t\t\t\t\tthis.openviduAngularParticipantPanelItemElementsTemplate = this.externalParticipantPanelItemElements.template;\n\t\t\t\t\t}\n\t\t\t\t\tthis.openviduAngularParticipantPanelItemTemplate = this.defaultParticipantPanelItemTemplate;\n\t\t\t\t\tthis.log.d('Setting DEFAULT P ITEM');\n\t\t\t\t}\n\t\t\t\tthis.openviduAngularParticipantsPanelTemplate = this.defaultParticipantsPanelTemplate;\n\t\t\t}\n\n\t\t\tif (this.externalChatPanel) {\n\t\t\t\tthis.log.d('Setting EXTERNAL CHAT PANEL');\n\t\t\t\tthis.openviduAngularChatPanelTemplate = this.externalChatPanel.template;\n\t\t\t} else {\n\t\t\t\tthis.log.d('Setting DEFAULT CHAT PANEL');\n\t\t\t\tthis.openviduAngularChatPanelTemplate = this.defaultChatPanelTemplate;\n\t\t\t}\n\n\t\t\tif (this.externalActivitiesPanel) {\n\t\t\t\tthis.log.d('Setting EXTERNAL ACTIVITIES PANEL');\n\t\t\t\tthis.openviduAngularActivitiesPanelTemplate = this.externalActivitiesPanel.template;\n\t\t\t} else {\n\t\t\t\tthis.log.d('Setting DEFAULT ACTIVITIES PANEL');\n\t\t\t\tthis.openviduAngularActivitiesPanelTemplate = this.defaultActivitiesPanelTemplate;\n\t\t\t}\n\n\t\t\tif (this.externalAdditionalPanels) {\n\t\t\t\tthis.log.d('Setting EXTERNAL ADDITIONAL PANELS');\n\t\t\t\tthis.openviduAngularAdditionalPanelsTemplate = this.externalAdditionalPanels.template;\n\t\t\t}\n\t\t\tthis.openviduAngularPanelTemplate = this.defaultPanelTemplate;\n\t\t}\n\n\t\tif (this.externalLayout) {\n\t\t\tthis.log.d('Setting EXTERNAL LAYOUT');\n\t\t\tthis.openviduAngularLayoutTemplate = this.externalLayout.template;\n\t\t} else {\n\t\t\tthis.log.d('Setting DEAFULT LAYOUT');\n\n\t\t\tif (this.externalStream) {\n\t\t\t\tthis.log.d('Setting EXTERNAL STREAM');\n\t\t\t\tthis.openviduAngularStreamTemplate = this.externalStream.template;\n\t\t\t} else {\n\t\t\t\tthis.log.d('Setting DEFAULT STREAM');\n\t\t\t\tthis.openviduAngularStreamTemplate = this.defaultStreamTemplate;\n\t\t\t}\n\t\t\tthis.openviduAngularLayoutTemplate = this.defaultLayoutTemplate;\n\t\t}\n\t}\n\n\tprivate async start() {\n\t\tawait this.deviceSrv.forceInitDevices();\n\t\tconst nickname = this.externalParticipantName || this.storageSrv.getNickname() || `OpenVidu_User${Math.floor(Math.random() * 100)}`;\n\t\tthis.participantService.initLocalParticipant({ local: true, nickname });\n\t\tthis.openviduService.initialize();\n\t\tif (this.deviceSrv.hasVideoDeviceAvailable() || this.deviceSrv.hasAudioDeviceAvailable()) {\n\t\t\tawait this.initwebcamPublisher();\n\t\t}\n\t\tthis.isSessionInitialized = true;\n\t\tthis.onSessionCreated.emit(this.openviduService.getWebcamSession());\n\t\tthis.onParticipantCreated.emit(this.participantService.getLocalParticipant());\n\t\tthis.loading = false;\n\t\tthis.participantReady = true;\n\t\tif (this.nodeCrashed) {\n\t\t\tthis.nodeCrashed = false;\n\t\t\tthis.actionService.closeDialog();\n\t\t}\n\t}\n\n\tprivate async initwebcamPublisher(): Promise<void> {\n\t\treturn new Promise(async (resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst publisher = await this.openviduService.initDefaultPublisher();\n\n\t\t\t\tif (publisher) {\n\t\t\t\t\tpublisher.once('accessDenied', async (e: any) => {\n\t\t\t\t\t\tawait this.handlePublisherError(e);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t});\n\t\t\t\t\tpublisher.once('accessAllowed', () => resolve());\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tthis.actionService.openDialog(error.name.replace(/_/g, ' '), error.message, true);\n\t\t\t\tthis.log.e(error);\n\t\t\t\treject();\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t_onJoinButtonClicked() {\n\t\tthis.showVideoconference = true;\n\t\tthis.showPrejoin = false;\n\t\tthis.onJoinButtonClicked.emit();\n\t}\n\t/**\n\t * @internal\n\t */\n\tonLeaveButtonClicked() {\n\t\tthis.showVideoconference = false;\n\t\tthis.participantReady = false;\n\t\tthis.onToolbarLeaveButtonClicked.emit();\n\t}\n\t/**\n\t * @internal\n\t */\n\tonCameraButtonClicked() {\n\t\tthis.onToolbarCameraButtonClicked.emit();\n\t}\n\t/**\n\t * @internal\n\t */\n\tonMicrophoneButtonClicked() {\n\t\tthis.onToolbarMicrophoneButtonClicked.emit();\n\t}\n\t/**\n\t * @internal\n\t */\n\tonScreenshareButtonClicked() {\n\t\tthis.onToolbarScreenshareButtonClicked.emit();\n\t}\n\t/**\n\t * @internal\n\t */\n\tonFullscreenButtonClicked() {\n\t\tthis.onToolbarFullscreenButtonClicked.emit();\n\t}\n\t/**\n\t * @internal\n\t */\n\tonParticipantsPanelButtonClicked() {\n\t\tthis.onToolbarParticipantsPanelButtonClicked.emit();\n\t}\n\t/**\n\t * @internal\n\t */\n\tonChatPanelButtonClicked() {\n\t\tthis.onToolbarChatPanelButtonClicked.emit();\n\t}\n\t/**\n\t * @internal\n\t */\n\tonActivitiesPanelButtonClicked() {\n\t\tthis.onToolbarActivitiesPanelButtonClicked.emit();\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tonStartRecordingClicked(from: string) {\n\t\tif (from === 'toolbar') {\n\t\t\tthis.onToolbarStartRecordingClicked.emit();\n\t\t} else if (from === 'panel') {\n\t\t\tthis.onActivitiesPanelStartRecordingClicked.emit();\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tonStopRecordingClicked(from: string) {\n\t\tif (from === 'toolbar') {\n\t\t\tthis.onToolbarStopRecordingClicked.emit();\n\t\t} else if (from === 'panel') {\n\t\t\tthis.onActivitiesPanelStopRecordingClicked.emit();\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tonDeleteRecordingClicked(recordingId: string) {\n\t\tthis.onActivitiesPanelDeleteRecordingClicked.emit(recordingId);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tonStartBroadcastingClicked(broadcastUrl: string) {\n\t\t// if (from === 'toolbar') {\n\t\t// \tthis.onToolbarStartRecordingClicked.emit();\n\t\t// } else if (from === 'panel') {\n\t\tthis.onActivitiesPanelStartBroadcastingClicked.emit(broadcastUrl);\n\t\t// }\n\t}\n\n\t/**\n\t * @internal\n\t */\n\tonStopBroadcastingClicked(from: string) {\n\t\tif (from === 'toolbar') {\n\t\t\tthis.onToolbarStopBroadcastingClicked.emit();\n\t\t} else if (from === 'panel') {\n\t\t\tthis.onActivitiesPanelStopBroadcastingClicked.emit();\n\t\t}\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t_onSessionCreated(session: Session) {\n\t\tthis.onSessionCreated.emit(session);\n\t}\n\n\t/**\n\t * @internal\n\t */\n\t_onNodeCrashed() {\n\t\tthis.nodeCrashed = true;\n\t\tthis.onNodeCrashed.emit();\n\t}\n\n\tprivate async handlePublisherError(e: any): Promise<void> {\n\t\tlet message: string = '';\n\t\tif (e.name === OpenViduErrorName.DEVICE_ALREADY_IN_USE) {\n\t\t\tthis.log.w('Video device already in use. Disabling video device...');\n\t\t\t// Disabling video device\n\t\t\t// Allow access to the room with only mic\n\t\t\tthis.deviceSrv.disableVideoDevices();\n\t\t\treturn await this.initwebcamPublisher();\n\t\t}\n\t\tif (e.name === OpenViduErrorName.NO_INPUT_SOURCE_SET) {\n\t\t\tmessage = this.translateService.translate('ERRORS.DEVICE_NOT_FOUND');\n\t\t}\n\t\tthis.actionService.openDialog(e.name.replace(/_/g, ' '), message, true);\n\t\tthis.log.e(e.message);\n\t}\n\n\tprivate subscribeToVideconferenceDirectives() {\n\t\tthis.prejoinSub = this.libService.prejoin.subscribe((value: boolean) => {\n\t\t\tthis.showPrejoin = value;\n\t\t\t// this.cd.markForCheck();\n\t\t});\n\n\t\tthis.participantNameSub = this.libService.participantName.subscribe((nickname: string) => {\n\t\t\tthis.externalParticipantName = nickname;\n\t\t});\n\t}\n}\n","<div id=\"call-container\">\n\n\t<div id=\"spinner\" *ngIf=\"loading\" >\n\t\t<mat-spinner [diameter]=\"50\"></mat-spinner>\n\t\t<span>{{ 'PREJOIN.PREPARING' | translate }}</span>\n\t</div>\n\n\t<div [@inOutAnimation] id=\"pre-join-container\" *ngIf=\"showPrejoin && participantReady && !loading\">\n\t\t<ov-pre-join (onJoinButtonClicked)=\"_onJoinButtonClicked()\"></ov-pre-join>\n\t</div>\n\n\t<div id=\"spinner\" *ngIf=\"!loading && error\">\n\t\t<mat-icon class=\"error-icon\">error</mat-icon>\n\t\t<span>{{ errorMessage }}</span>\n\t</div>\n\n\t<div [@inOutAnimation] id=\"vc-container\" *ngIf=\"showVideoconference || (!showPrejoin && !loading && !error)\">\n\t\t<ov-session *ngIf=\"isSessionInitialized && !nodeCrashed\" (onNodeCrashed)=\"_onNodeCrashed()\">\n\t\t\t<ng-template #toolbar>\n\t\t\t\t<ng-container *ngIf=\"openviduAngularToolbarTemplate\">\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularToolbarTemplate\"></ng-container>\n\t\t\t\t</ng-container>\n\t\t\t</ng-template>\n\n\t\t\t<ng-template #panel>\n\t\t\t\t<ng-container *ngIf=\"openviduAngularPanelTemplate\">\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularPanelTemplate\"></ng-container>\n\t\t\t\t</ng-container>\n\t\t\t</ng-template>\n\n\t\t\t<ng-template #layout>\n\t\t\t\t<ng-container *ngIf=\"openviduAngularLayoutTemplate\">\n\t\t\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularLayoutTemplate\"></ng-container>\n\t\t\t\t</ng-container>\n\t\t\t</ng-template>\n\t\t</ov-session>\n\t</div>\n</div>\n\n<ng-template #defaultToolbar>\n\t<ov-toolbar\n\t\tid=\"default-toolbar\"\n\t\t(onLeaveButtonClicked)=\"onLeaveButtonClicked()\"\n\t\t(onCameraButtonClicked)=\"onCameraButtonClicked()\"\n\t\t(onMicrophoneButtonClicked)=\"onMicrophoneButtonClicked()\"\n\t\t(onScreenshareButtonClicked)=\"onScreenshareButtonClicked()\"\n\t\t(onFullscreenButtonClicked)=\"onFullscreenButtonClicked()\"\n\t\t(onParticipantsPanelButtonClicked)=\"onParticipantsPanelButtonClicked()\"\n\t\t(onChatPanelButtonClicked)=\"onChatPanelButtonClicked()\"\n\t\t(onActivitiesPanelButtonClicked)=\"onActivitiesPanelButtonClicked()\"\n\t\t(onStartRecordingClicked)=\"onStartRecordingClicked('toolbar')\"\n\t\t(onStopRecordingClicked)=\"onStopRecordingClicked('toolbar')\"\n\t\t(onStopBroadcastingClicked)=\"onStopBroadcastingClicked('toolbar')\"\n\t>\n\t\t<ng-template #toolbarAdditionalButtons>\n\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularToolbarAdditionalButtonsTemplate\"></ng-container>\n\t\t</ng-template>\n\n\t\t<ng-template #toolbarAdditionalPanelButtons>\n\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularToolbarAdditionalPanelButtonsTemplate\"></ng-container>\n\t\t</ng-template>\n\t</ov-toolbar>\n</ng-template>\n\n<ng-template #defaultPanel>\n\t<ov-panel id=\"default-panel\">\n\t\t<ng-template #chatPanel>\n\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularChatPanelTemplate\"></ng-container>\n\t\t</ng-template>\n\n\t\t<ng-template #participantsPanel>\n\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularParticipantsPanelTemplate\"></ng-container>\n\t\t</ng-template>\n\n\t\t<ng-template #backgroundEffectsPanel>\n\t\t\t<ov-background-effects-panel id=\"default-background-effects-panel\"></ov-background-effects-panel>\n\t\t</ng-template>\n\n\t\t<ng-template #settingsPanel>\n\t\t\t<ov-settings-panel id=\"default-settings-panel\"></ov-settings-panel>\n\t\t</ng-template>\n\n\t\t<ng-template #activitiesPanel>\n\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularActivitiesPanelTemplate\"></ng-container>\n\t\t</ng-template>\n\n\t\t<ng-template #additionalPanels>\n\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularAdditionalPanelsTemplate\"></ng-container>\n\t\t</ng-template>\n\t</ov-panel>\n</ng-template>\n\n<ng-template #defaultChatPanel>\n\t<ov-chat-panel id=\"default-chat-panel\"></ov-chat-panel>\n</ng-template>\n\n<ng-template #defaultActivitiesPanel>\n\t<ov-activities-panel\n\t\tid=\"default-activities-panel\"\n\t\t(onStartRecordingClicked)=\"onStartRecordingClicked('panel')\"\n\t\t(onStopRecordingClicked)=\"onStopRecordingClicked('panel')\"\n\t\t(onDeleteRecordingClicked)=\"onDeleteRecordingClicked($event)\"\n\t\t(onStartBroadcastingClicked)=\"onStartBroadcastingClicked($event)\"\n\t\t(onStopBroadcastingClicked)=\"onStopBroadcastingClicked('panel')\"\n\t></ov-activities-panel>\n</ng-template>\n\n<ng-template #defaultParticipantsPanel>\n\t<ov-participants-panel id=\"default-participants-panel\">\n\t\t<ng-template #participantPanelItem let-participant>\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"openviduAngularParticipantPanelItemTemplate; context: { $implicit: participant }\"\n\t\t\t></ng-container>\n\t\t</ng-template>\n\t</ov-participants-panel>\n</ng-template>\n\n<ng-template #defaultParticipantPanelItem let-participant>\n\t<ov-participant-panel-item [participant]=\"participant\" id=\"default-participant-panel-item\">\n\t\t<ng-template #participantPanelItemElements>\n\t\t\t<ng-container\n\t\t\t\t*ngTemplateOutlet=\"openviduAngularParticipantPanelItemElementsTemplate; context: { $implicit: participant }\"\n\t\t\t></ng-container>\n\t\t</ng-template>\n\t</ov-participant-panel-item>\n</ng-template>\n\n<ng-template #defaultLayout>\n\t<ov-layout id=\"default-layout\">\n\t\t<ng-template #stream let-stream>\n\t\t\t<ng-container *ngTemplateOutlet=\"openviduAngularStreamTemplate; context: { $implicit: stream }\"> </ng-container>\n\t\t</ng-template>\n\t</ov-layout>\n</ng-template>\n\n<ng-template #defaultStream let-stream>\n\t<ov-stream [stream]=\"stream\" id=\"default-stream\"></ov-stream>\n</ng-template>\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy } from '@angular/core';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\n\n/**\n * The **recordingActivity** directive allows show/hide the recording activity in {@link ActivitiesPanelComponent}.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `activitiesPanel` component:\n *\n * @example\n * <ov-videoconference [activitiesPanelRecordingActivity]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ActivitiesPanelComponent}.\n * @example\n * <ov-activities-panel *ovActivitiesPanel [recordingActivity]=\"false\"></ov-activities-panel>\n */\n@Directive({\n\tselector: 'ov-videoconference[activitiesPanelRecordingActivity], ov-activities-panel[recordingActivity]'\n})\nexport class ActivitiesPanelRecordingActivityDirective implements AfterViewInit, OnDestroy {\n\t@Input() set activitiesPanelRecordingActivity(value: boolean) {\n\t\tthis.recordingActivityValue = value;\n\t\tthis.update(this.recordingActivityValue);\n\t}\n\t@Input() set recordingActivity(value: boolean) {\n\t\tthis.recordingActivityValue = value;\n\t\tthis.update(this.recordingActivityValue);\n\t}\n\n\trecordingActivityValue: boolean = true;\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.recordingActivityValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tclear() {\n\t\tthis.recordingActivityValue = true;\n\t\tthis.update(true);\n\t}\n\n\tupdate(value: boolean) {\n\t\tif (this.libService.recordingActivity.getValue() !== value) {\n\t\t\tthis.libService.recordingActivity.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **broadcastingActivity** directive allows show/hide the broadcasting activity in {@link ActivitiesPanelComponent}.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `activitiesPanel` component:\n *\n * @example\n * <ov-videoconference [activitiesPanelBroadcastingActivity]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ActivitiesPanelComponent}.\n * @example\n * <ov-activities-panel *ovActivitiesPanel [broadcastingActivity]=\"false\"></ov-activities-panel>\n */\n @Directive({\n\tselector: 'ov-videoconference[activitiesPanelBroadcastingActivity], ov-activities-panel[broadcastingActivity]'\n})\nexport class ActivitiesPanelBroadcastingActivityDirective implements AfterViewInit, OnDestroy {\n\t@Input() set activitiesPanelBroadcastingActivity(value: boolean) {\n\t\tthis.broadcastingActivityValue = value;\n\t\tthis.update(this.broadcastingActivityValue);\n\t}\n\t@Input() set broadcastingActivity(value: boolean) {\n\t\tthis.broadcastingActivityValue = value;\n\t\tthis.update(this.broadcastingActivityValue);\n\t}\n\n\tbroadcastingActivityValue: boolean = true;\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.broadcastingActivityValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tclear() {\n\t\tthis.broadcastingActivityValue = true;\n\t\tthis.update(true);\n\t}\n\n\tupdate(value: boolean) {\n\t\tif (this.libService.broadcastingActivity.getValue() !== value) {\n\t\t\tthis.libService.broadcastingActivity.next(value);\n\t\t}\n\t}\n}\n\n","import { Directive, AfterViewInit, OnDestroy, Input, ElementRef } from '@angular/core';\nimport { RecordingInfo } from '../../models/recording.model';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\n\n/**\n * The **recordingsList** directive allows show all recordings saved in your OpenVidu deployment in {@link AdminDashboardComponent}.\n *\n * Default: `[]`\n *\n * @example\n * <ov-admin-dashboard [recordingsList]=\"recordings\"></ov-admin-dashboard>\n *\n */\n@Directive({\n\tselector: 'ov-admin-dashboard[recordingsList]'\n})\nexport class AdminRecordingsListDirective implements AfterViewInit, OnDestroy {\n\n\t@Input() set recordingsList(value: RecordingInfo[]) {\n\t\tthis.recordingsValue = value;\n\t\tthis.update(this.recordingsValue);\n\t}\n\n\trecordingsValue: RecordingInfo [] = [];\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.recordingsValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tclear() {\n\t\tthis.recordingsValue = null;\n\t\tthis.update(null);\n\t}\n\n\tupdate(value: RecordingInfo[]) {\n\t\tif (this.libService.adminRecordingsList.getValue() !== value) {\n\t\t\tthis.libService.adminRecordingsList.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **error** directive allows show the authentication error in {@link AdminLoginComponent}.\n *\n * Default: `null`\n *\n * @example\n * <ov-admin-login [error]=\"error\"></ov-admin-login>\n *\n */\n @Directive({\n\tselector: 'ov-admin-login[error]'\n})\nexport class AdminLoginDirective implements AfterViewInit, OnDestroy {\n\n\t@Input() set error(value: any) {\n\t\tthis.errorValue = value;\n\t\tthis.update(this.errorValue);\n\t}\n\n\terrorValue: any = null;\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.errorValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tclear() {\n\t\tthis.errorValue = null;\n\t\tthis.update(null);\n\t}\n\n\tupdate(value: any) {\n\t\tif (this.libService.adminLoginError.getValue() !== value) {\n\t\t\tthis.libService.adminLoginError.next(value);\n\t\t}\n\t}\n}\n\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy } from '@angular/core';\nimport { BroadcastingError } from '../../models/broadcasting.model';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\n\n/**\n * The **broadcastingError** directive allows to show any possible error with the broadcasting in the {@link BroadcastingActivityComponent}.\n *\n * Default: `undefined`\n *\n * Type: {@link BroadcastingError}\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `broadcastingActivity` component:\n *\n * @example\n * <ov-videoconference [broadcastingActivityBroadcastingError]=\"error\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link BroadcastingActivityComponent}.\n * @example\n * <ov-broadcasting-activity [broadcastingError]=\"error\"></ov-broadcasting-activity>\n */\n@Directive({\n\tselector: 'ov-videoconference[broadcastingActivityBroadcastingError], ov-broadcasting-activity[broadcastingError]'\n})\nexport class BroadcastingActivityBroadcastingErrorDirective implements AfterViewInit, OnDestroy {\n\t@Input() set broadcastingActivityBroadcastingError(value: BroadcastingError) {\n\t\tthis.broadcastingErrorValue = value;\n\t\tthis.update(this.broadcastingErrorValue);\n\t}\n\t@Input() set broadcastingError(value: BroadcastingError) {\n\t\tthis.broadcastingErrorValue = value;\n\t\tthis.update(this.broadcastingErrorValue);\n\t}\n\n\tbroadcastingErrorValue: BroadcastingError | undefined = undefined;\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.broadcastingErrorValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tclear() {\n\t\tthis.broadcastingErrorValue = undefined;\n\t\tthis.update(undefined);\n\t}\n\n\tupdate(value: BroadcastingError | undefined) {\n\t\tif (this.libService.broadcastingError.getValue() !== value) {\n\t\t\tthis.libService.broadcastingError.next(value);\n\t\t}\n\t}\n}\n","import { Directive, AfterViewInit, OnDestroy, Input, ElementRef } from '@angular/core';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\n\n/**\n * The **muteButton** directive allows show/hide the muted button in participant panel item component.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `participantPanelItem` component:\n *\n * @example\n * <ov-videoconference [participantPanelItemMuteButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ParticipantPanelItemComponent}.\n * @example\n * <ov-participant-panel-item [muteButton]=\"false\"></ov-participant-panel-item>\n */\n@Directive({\n\tselector: 'ov-videoconference[participantPanelItemMuteButton], ov-participant-panel-item[muteButton]'\n})\nexport class ParticipantPanelItemMuteButtonDirective implements AfterViewInit, OnDestroy {\n\t@Input() set participantPanelItemMuteButton(value: boolean) {\n\t\tthis.muteValue = value;\n\t\tthis.update(this.muteValue);\n\t}\n\t@Input() set muteButton(value: boolean) {\n\t\tthis.muteValue = value;\n\t\tthis.update(this.muteValue);\n\t}\n\n\tmuteValue: boolean = true;\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.muteValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tclear() {\n\t\tthis.muteValue = true;\n\t\tthis.update(true);\n\t}\n\n\tupdate(value: boolean) {\n\t\tif (this.libService.participantItemMuteButton.getValue() !== value) {\n\t\t\tthis.libService.participantItemMuteButton.next(value);\n\t\t}\n\t}\n}","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy } from '@angular/core';\nimport { RecordingInfo } from '../../models/recording.model';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\n\n/**\n * The **recordingsList** directive allows show the recordings available for the session in {@link RecordingActivityComponent}.\n *\n * Default: `[]`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `recordingActivity` component:\n *\n * @example\n * <ov-videoconference [recordingActivityRecordingsList]=\"list\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link RecordingActivityComponent}.\n * @example\n * <ov-recording-activity [recordingsList]=\"list\"></ov-recording-activity>\n */\n@Directive({\n\tselector: 'ov-videoconference[recordingActivityRecordingsList], ov-recording-activity[recordingsList]'\n})\nexport class RecordingActivityRecordingsListDirective implements AfterViewInit, OnDestroy {\n\t@Input() set recordingActivityRecordingsList(value: RecordingInfo[]) {\n\t\tthis.recordingsValue = value;\n\t\tthis.update(this.recordingsValue);\n\t}\n\t@Input() set recordingsList(value: RecordingInfo[]) {\n\t\tthis.recordingsValue = value;\n\t\tthis.update(this.recordingsValue);\n\t}\n\n\trecordingsValue: RecordingInfo[] = [];\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.recordingsValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tclear() {\n\t\tthis.recordingsValue = [];\n\t\tthis.update([]);\n\t}\n\n\tupdate(value: RecordingInfo[]) {\n\t\tif (this.libService.recordingsList.getValue() !== value) {\n\t\t\tthis.libService.recordingsList.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **recordingError** directive allows to show any possible error with the recording in the {@link RecordingActivityComponent}.\n *\n * Default: `[]`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `recordingActivity` component:\n *\n * @example\n * <ov-videoconference [recordingActivityRecordingError]=\"error\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link RecordingActivityComponent}.\n * @example\n * <ov-recording-activity [recordingError]=\"error\"></ov-recording-activity>\n */\n@Directive({\n\tselector: 'ov-videoconference[recordingActivityRecordingError], ov-recording-activity[recordingError]'\n})\nexport class RecordingActivityRecordingErrorDirective implements AfterViewInit, OnDestroy {\n\t@Input() set recordingActivityRecordingError(value: any) {\n\t\tthis.recordingErrorValue = value;\n\t\tthis.update(this.recordingErrorValue);\n\t}\n\t@Input() set recordingError(value: any) {\n\t\tthis.recordingErrorValue = value;\n\t\tthis.update(this.recordingErrorValue);\n\t}\n\n\trecordingErrorValue: any = null;\n\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.recordingErrorValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tclear() {\n\t\tthis.recordingErrorValue = null;\n\t\tthis.update(null);\n\t}\n\n\tupdate(value: any) {\n\t\tif (this.libService.recordingError.getValue() !== value) {\n\t\t\tthis.libService.recordingError.next(value);\n\t\t}\n\t}\n}\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy } from '@angular/core';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\n\n/**\n * The **screenshareButton** directive allows show/hide the screenshare toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarScreenshareButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [screenshareButton]=\"false\"></ov-toolbar>\n */\n@Directive({\n\tselector: 'ov-videoconference[toolbarScreenshareButton], ov-toolbar[screenshareButton]'\n})\nexport class ToolbarScreenshareButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarScreenshareButton(value: boolean) {\n\t\tthis.screenshareValue = value;\n\t\tthis.update(this.screenshareValue);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\t@Input() set screenshareButton(value: boolean) {\n\t\tthis.screenshareValue = value;\n\t\tthis.update(this.screenshareValue);\n\t}\n\n\tprivate screenshareValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.screenshareValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\tprivate clear() {\n\t\tthis.screenshareValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.screenshareButton.getValue() !== value) {\n\t\t\tthis.libService.screenshareButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **recordingButton** directive allows show/hide the start/stop recording toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarRecordingButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [recordingButton]=\"false\"></ov-toolbar>\n *\n * @internal\n */\n @Directive({\n\tselector: 'ov-videoconference[toolbarRecordingButton], ov-toolbar[recordingButton]'\n})\nexport class ToolbarRecordingButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarRecordingButton(value: boolean) {\n\t\tthis.recordingValue = value;\n\t\tthis.update(this.recordingValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set recordingButton(value: boolean) {\n\t\tthis.recordingValue = value;\n\t\tthis.update(this.recordingValue);\n\t}\n\tprivate recordingValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.recordingValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.recordingValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.recordingButton.getValue() !== value) {\n\t\t\tthis.libService.recordingButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **broadcastingButton** directive allows show/hide the start/stop broadcasting toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarBroadcastingButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [broadcastingButton]=\"false\"></ov-toolbar>\n *\n */\n @Directive({\n\tselector: 'ov-videoconference[toolbarBroadcastingButton], ov-toolbar[broadcastingButton]'\n})\nexport class ToolbarBroadcastingButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarBroadcastingButton(value: boolean) {\n\t\tthis.broadcastingValue = value;\n\t\tthis.update(this.broadcastingValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set broadcastingButton(value: boolean) {\n\t\tthis.broadcastingValue = value;\n\t\tthis.update(this.broadcastingValue);\n\t}\n\tprivate broadcastingValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.broadcastingValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.broadcastingValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.broadcastingButton.getValue() !== value) {\n\t\t\tthis.libService.broadcastingButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **fullscreenButton** directive allows show/hide the fullscreen toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarFullscreenButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [fullscreenButton]=\"false\"></ov-toolbar>\n */\n@Directive({\n\tselector: 'ov-videoconference[toolbarFullscreenButton], ov-toolbar[fullscreenButton]'\n})\nexport class ToolbarFullscreenButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarFullscreenButton(value: boolean) {\n\t\tthis.fullscreenValue = value;\n\t\tthis.update(this.fullscreenValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set fullscreenButton(value: boolean) {\n\t\tthis.fullscreenValue = value;\n\t\tthis.update(this.fullscreenValue);\n\t}\n\n\tprivate fullscreenValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.fullscreenValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.fullscreenValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.fullscreenButton.getValue() !== value) {\n\t\t\tthis.libService.fullscreenButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **backgroundEffectsButton** directive allows show/hide the background effects toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarBackgroundEffectsButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [backgroundEffectsButton]=\"false\"></ov-toolbar>\n */\n @Directive({\n\tselector: 'ov-videoconference[toolbarBackgroundEffectsButton], ov-toolbar[backgroundEffectsButton]'\n})\nexport class ToolbarBackgroundEffectsButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarBackgroundEffectsButton(value: boolean) {\n\t\tthis.backgroundEffectsValue = value;\n\t\tthis.update(this.backgroundEffectsValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set backgroundEffectsButton(value: boolean) {\n\t\tthis.backgroundEffectsValue = value;\n\t\tthis.update(this.backgroundEffectsValue);\n\t}\n\n\tprivate backgroundEffectsValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.backgroundEffectsValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.backgroundEffectsValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.backgroundEffectsButton.getValue() !== value) {\n\t\t\tthis.libService.backgroundEffectsButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **captionsButton** directive allows show/hide the captions toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarCaptionsButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [captionsButton]=\"false\"></ov-toolbar>\n */\n @Directive({\n\tselector: 'ov-videoconference[toolbarCaptionsButton], ov-toolbar[captionsButton]'\n})\nexport class ToolbarCaptionsButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarCaptionsButton(value: boolean) {\n\t\tthis.captionsButtonValue = value;\n\t\tthis.update(this.captionsButtonValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set captionsButton(value: boolean) {\n\t\tthis.captionsButtonValue = value;\n\t\tthis.update(this.captionsButtonValue);\n\t}\n\n\tprivate captionsButtonValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.captionsButtonValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.captionsButtonValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.captionsButton.getValue() !== value) {\n\t\t\tthis.libService.captionsButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **settingsButton** directive allows show/hide the settings toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarSettingsButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [settingsButton]=\"false\"></ov-toolbar>\n */\n @Directive({\n\tselector: 'ov-videoconference[toolbarSettingsButton], ov-toolbar[settingsButton]'\n})\nexport class ToolbarSettingsButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarSettingsButton(value: boolean) {\n\t\tthis.settingsValue = value;\n\t\tthis.update(this.settingsValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set settingsButton(value: boolean) {\n\t\tthis.settingsValue = value;\n\t\tthis.update(this.settingsValue);\n\t}\n\n\tprivate settingsValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.settingsValue);\n\t}\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.settingsValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.toolbarSettingsButton.getValue() !== value) {\n\t\t\tthis.libService.toolbarSettingsButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **leaveButton** directive allows show/hide the leave toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarLeaveButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [leaveButton]=\"false\"></ov-toolbar>\n */\n@Directive({\n\tselector: 'ov-videoconference[toolbarLeaveButton], ov-toolbar[leaveButton]'\n})\nexport class ToolbarLeaveButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarLeaveButton(value: boolean) {\n\t\tthis.leaveValue = value;\n\t\tthis.update(this.leaveValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set leaveButton(value: boolean) {\n\t\tthis.leaveValue = value;\n\t\tthis.update(this.leaveValue);\n\t}\n\n\tprivate leaveValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.leaveValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.leaveValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.leaveButton.getValue() !== value) {\n\t\t\tthis.libService.leaveButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **participantsPanelButton** directive allows show/hide the participants panel toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarParticipantsPanelButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [participantsPanelButton]=\"false\"></ov-toolbar>\n */\n@Directive({\n\tselector: 'ov-videoconference[toolbarParticipantsPanelButton], ov-toolbar[participantsPanelButton]'\n})\nexport class ToolbarParticipantsPanelButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarParticipantsPanelButton(value: boolean) {\n\t\tthis.participantsPanelValue = value;\n\t\tthis.update(this.participantsPanelValue);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\t@Input() set participantsPanelButton(value: boolean) {\n\t\tthis.participantsPanelValue = value;\n\t\tthis.update(this.participantsPanelValue);\n\t}\n\n\tprivate participantsPanelValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.participantsPanelValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.participantsPanelValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.participantsPanelButton.getValue() !== value) {\n\t\t\tthis.libService.participantsPanelButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **chatPanelButton** directive allows show/hide the chat panel toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarChatPanelButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [chatPanelButton]=\"false\"></ov-toolbar>\n */\n@Directive({\n\tselector: 'ov-videoconference[toolbarChatPanelButton], ov-toolbar[chatPanelButton]'\n})\nexport class ToolbarChatPanelButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarChatPanelButton(value: boolean) {\n\t\tthis.toolbarChatPanelValue = value;\n\t\tthis.update(this.toolbarChatPanelValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set chatPanelButton(value: boolean) {\n\t\tthis.toolbarChatPanelValue = value;\n\t\tthis.update(this.toolbarChatPanelValue);\n\t}\n\tprivate toolbarChatPanelValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.toolbarChatPanelValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.toolbarChatPanelValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.chatPanelButton.getValue() !== value) {\n\t\t\tthis.libService.chatPanelButton.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **activitiesPanelButton** directive allows show/hide the activities panel toolbar button.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarActivitiesPanelButton]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [activitiesPanelButton]=\"false\"></ov-toolbar>\n *\n * @internal\n */\n @Directive({\n\tselector: 'ov-videoconference[toolbarActivitiesPanelButton], ov-toolbar[activitiesPanelButton]'\n})\nexport class ToolbarActivitiesPanelButtonDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarActivitiesPanelButton(value: boolean) {\n\t\tthis.toolbarActivitiesPanelValue = value;\n\t\tthis.update(this.toolbarActivitiesPanelValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set activitiesPanelButton(value: boolean) {\n\t\tthis.toolbarActivitiesPanelValue = value;\n\t\tthis.update(this.toolbarActivitiesPanelValue);\n\t}\n\tprivate toolbarActivitiesPanelValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.toolbarActivitiesPanelValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.toolbarActivitiesPanelValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.activitiesPanelButton.getValue() !== value) {\n\t\t\tthis.libService.activitiesPanelButton.next(value);\n\t\t}\n\t}\n}\n\n\n/**\n * The **displaySessionName** directive allows show/hide the session name.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarDisplaySessionName]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [displaySessionName]=\"false\"></ov-toolbar>\n */\n@Directive({\n\tselector: 'ov-videoconference[toolbarDisplaySessionName], ov-toolbar[displaySessionName]'\n})\nexport class ToolbarDisplaySessionNameDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarDisplaySessionName(value: boolean) {\n\t\tthis.displaySessionValue = value;\n\t\tthis.update(this.displaySessionValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set displaySessionName(value: boolean) {\n\t\tthis.displaySessionValue = value;\n\t\tthis.update(this.displaySessionValue);\n\t}\n\n\tprivate displaySessionValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.displaySessionValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.displaySessionValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.displaySessionName.getValue() !== value) {\n\t\t\tthis.libService.displaySessionName.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **displayLogo** directive allows show/hide the branding logo.\n *\n * Default: `true`\n *\n * It can be used in the parent element {@link VideoconferenceComponent} specifying the name of the `toolbar` component:\n *\n * @example\n * <ov-videoconference [toolbarDisplayLogo]=\"false\"></ov-videoconference>\n *\n * \\\n * And it also can be used in the {@link ToolbarComponent}.\n * @example\n * <ov-toolbar [displayLogo]=\"false\"></ov-toolbar>\n */\n@Directive({\n\tselector: 'ov-videoconference[toolbarDisplayLogo], ov-toolbar[displayLogo]'\n})\nexport class ToolbarDisplayLogoDirective implements AfterViewInit, OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set toolbarDisplayLogo(value: boolean) {\n\t\tthis.displayLogoValue = value;\n\t\tthis.update(this.displayLogoValue);\n\t}\n\t/**\n\t * @ignore\n\t */\n\t@Input() set displayLogo(value: boolean) {\n\t\tthis.displayLogoValue = value;\n\t\tthis.update(this.displayLogoValue);\n\t}\n\n\tprivate displayLogoValue: boolean = true;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngAfterViewInit() {\n\t\tthis.update(this.displayLogoValue);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\tprivate clear() {\n\t\tthis.displayLogoValue = true;\n\t\tthis.update(true);\n\t}\n\n\tprivate update(value: boolean) {\n\t\tif (this.libService.displayLogo.getValue() !== value) {\n\t\t\tthis.libService.displayLogo.next(value);\n\t\t}\n\t}\n}\n","import { Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { CaptionsLangOption } from '../../models/caption.model';\nimport { CaptionService } from '../../services/caption/caption.service';\nimport { OpenViduAngularConfigService } from '../../services/config/openvidu-angular.config.service';\nimport { TranslateService } from '../../services/translate/translate.service';\n\n\n/**\n * The **minimal** directive applies a minimal UI hiding all controls except for cam and mic.\n *\n * It is only available for {@link VideoconferenceComponent}.\n *\n *  Default: `false`\n *\n * @example\n * <ov-videoconference [minimal]=\"true\"></ov-videoconference>\n */\n@Directive({\n\tselector: 'ov-videoconference[minimal]'\n})\nexport class MinimalDirective implements OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set minimal(value: boolean) {\n\t\tthis.update(value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\t/**\n\t * @ignore\n\t */\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tclear() {\n\t\tthis.update(false);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tupdate(value: boolean) {\n\t\tif (this.libService.minimal.getValue() !== value) {\n\t\t\tthis.libService.minimal.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **lang** directive allows set the UI language to a default language.\n *\n * It is only available for {@link VideoconferenceComponent}.\n *\n * **Default:** English `en`\n *\n * **Available:**\n *\n * * English: `en`\n * * Spanish: `es`\n * * German: `de`\n * * French: `fr`\n * * Chinese: `cn`\n * * Hindi: `hi`\n * * Italian: `it`\n * * Japanese: `ja`\n * * Netherlands: `nl`\n * * Portuguese: `pt`\n *\n * @example\n * <ov-videoconference [lang]=\"'es'\"></ov-videoconference>\n */\n @Directive({\n\tselector: 'ov-videoconference[lang]'\n})\nexport class LangDirective implements OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set lang(value: string) {\n\t\tthis.update(value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private translateService: TranslateService) {}\n\n\t/**\n\t * @ignore\n\t */\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tclear() {\n\t\tthis.update('en');\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tupdate(value: string) {\n\t\tthis.translateService.setLanguage(value);\n\t}\n}\n\n/**\n * The **captionsLang** directive allows specify the deafult language that OpenVidu will try to recognise.\n *\n * It is only available for {@link VideoconferenceComponent}.\n *\n * It must be a valid [BCP-47](https://tools.ietf.org/html/bcp47) language tag like \"en-US\" or \"es-ES\".\n *\n *\n * **Default:** English `en-US`\n *\n * **Available:**\n *\n * * English: `en-US`\n * * Spanish: `es-ES`\n * * German: `de-DE`\n * * French: `fr-FR`\n * * Chinese: `zh-CN`\n * * Hindi: `hi-IN`\n * * Italian: `it-IT`\n * * Japanese: `jp-JP`\n * * Portuguese: `pt-PT`\n *\n * @example\n * <ov-videoconference [captionsLang]=\"'es-ES'\"></ov-videoconference>\n */\n @Directive({\n\tselector: 'ov-videoconference[captionsLang]'\n})\nexport class CaptionsLangDirective implements OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set captionsLang(value: string) {\n\t\tthis.update(value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private captionService: CaptionService) {}\n\n\t/**\n\t * @ignore\n\t */\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tclear() {\n\t\tthis.update('en-US');\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tupdate(value: string) {\n\t\tthis.captionService.setLanguage(value);\n\t}\n}\n\n/**\n * The **captionsLangOptions** directive allows to set the language options for the captions.\n * It will override the languages provided by default.\n * This propety is an array of objects which must comply with the {@link CaptionsLangOption} interface.\n *\n * It is only available for {@link VideoconferenceComponent}.\n *\n * Default: ```\n * [\n * \t{ name: 'English', lang: 'en-US' },\n * \t{ name: 'Español', lang: 'es-ES' },\n * \t{ name: 'Deutsch', lang: 'de-DE' },\n * \t{ name: 'Français', lang: 'fr-FR' },\n * \t{ name: '中国', lang: 'zh-CN' },\n * \t{ name: 'हिन्दी', lang: 'hi-IN' },\n * \t{ name: 'Italiano', lang: 'it-IT' },\n * \t{ name: 'やまと', lang: 'jp-JP' },\n * \t{ name: 'Português', lang: 'pt-PT' }\n * ]```\n *\n * @example\n * <ov-videoconference [captionsLangOptions]=\"[{name:'Spanish', lang: 'es-ES'}]\"></ov-videoconference>\n */\n @Directive({\n\tselector: 'ov-videoconference[captionsLangOptions]'\n})\nexport class CaptionsLangOptionsDirective implements OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set captionsLangOptions(value: CaptionsLangOption []) {\n\t\tthis.update(value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private captionService: CaptionService) {}\n\n\t/**\n\t * @ignore\n\t */\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tclear() {\n\t\tthis.update(undefined);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tupdate(value: CaptionsLangOption [] | undefined) {\n\t\tthis.captionService.setLanguageOptions(value);\n\t}\n}\n\n\n/**\n * The **participantName** directive sets the participant name. It can be useful for aplications which doesn't need the prejoin page.\n *\n * It is only available for {@link VideoconferenceComponent}.\n *\n * @example\n * <ov-videoconference [participantName]=\"'OpenVidu'\"></ov-videoconference>\n */\n@Directive({\n\tselector: 'ov-videoconference[participantName]'\n})\nexport class ParticipantNameDirective implements OnInit {\n\t// Avoiding update participantName dynamically.\n\t// The participantName must be updated from UI\n\t/**\n\t * @ignore\n\t */\n\t@Input() participantName: string;\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\t/**\n\t * @ignore\n\t */\n\tngOnInit(): void {\n\t\tthis.update(this.participantName);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tclear() {\n\t\tthis.update('');\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tupdate(value: string) {\n\t\tthis.libService.participantName.next(value);\n\t}\n}\n\n/**\n * The **prejoin** directive allows show/hide the prejoin page for selecting media devices.\n *\n * It is only available for {@link VideoconferenceComponent}.\n *\n * Default: `true`\n *\n * @example\n * <ov-videoconference [prejoin]=\"false\"></ov-videoconference>\n */\n@Directive({\n\tselector: 'ov-videoconference[prejoin]'\n})\nexport class PrejoinDirective implements OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set prejoin(value: boolean) {\n\t\tthis.update(value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\t/**\n\t * @ignore\n\t */\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tclear() {\n\t\tthis.update(true);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tupdate(value: boolean) {\n\t\tif (this.libService.prejoin.getValue() !== value) {\n\t\t\tthis.libService.prejoin.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **videoMuted** directive allows to join the session with camera muted/unmuted.\n *\n * It is only available for {@link VideoconferenceComponent}.\n *\n * Default: `false`\n *\n *\n * @example\n * <ov-videoconference [videoMuted]=\"true\"></ov-videoconference>\n */\n@Directive({\n\tselector: 'ov-videoconference[videoMuted]'\n})\nexport class VideoMutedDirective implements OnDestroy {\n\t/**\n\t * @ignore\n\t */\n\t@Input() set videoMuted(value: boolean) {\n\t\tthis.update(value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\t/**\n\t * @ignore\n\t */\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tclear() {\n\t\tthis.update(false);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tupdate(value: boolean) {\n\t\tif (this.libService.videoMuted.getValue() !== value) {\n\t\t\tthis.libService.videoMuted.next(value);\n\t\t}\n\t}\n}\n\n/**\n * The **audioMuted** directive allows to join the session with microphone muted/unmuted.\n *\n * It is only available for {@link VideoconferenceComponent}.\n *\n * Default: `false`\n *\n * @example\n * <ov-videoconference [audioMuted]=\"true\"></ov-videoconference>\n */\n\n@Directive({\n\tselector: 'ov-videoconference[audioMuted]'\n})\nexport class AudioMutedDirective implements OnDestroy {\n\n\t/**\n\t * @ignore\n\t */\n\t@Input() set audioMuted(value: boolean) {\n\t\tthis.update(value);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tconstructor(public elementRef: ElementRef, private libService: OpenViduAngularConfigService) {}\n\n\tngOnDestroy(): void {\n\t\tthis.clear();\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tclear() {\n\t\tthis.update(false);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tupdate(value: boolean) {\n\t\tif (this.libService.audioMuted.getValue() !== value) {\n\t\t\tthis.libService.audioMuted.next(value);\n\t\t}\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { ActivitiesPanelBroadcastingActivityDirective, ActivitiesPanelRecordingActivityDirective } from './activities-panel.directive';\nimport { AdminLoginDirective, AdminRecordingsListDirective } from './admin.directive';\nimport { BroadcastingActivityBroadcastingErrorDirective } from './broadcasting-activity.directive';\nimport { LogoDirective } from './internals.directive';\nimport { ParticipantPanelItemMuteButtonDirective } from './participant-panel-item.directive';\nimport { RecordingActivityRecordingErrorDirective, RecordingActivityRecordingsListDirective } from './recording-activity.directive';\nimport {\n\tStreamDisplayAudioDetectionDirective,\n\tStreamDisplayParticipantNameDirective,\n\tStreamSettingsButtonDirective\n} from './stream.directive';\nimport {\n\tToolbarActivitiesPanelButtonDirective,\n\tToolbarBackgroundEffectsButtonDirective, ToolbarBroadcastingButtonDirective, ToolbarCaptionsButtonDirective,\n\tToolbarChatPanelButtonDirective,\n\tToolbarDisplayLogoDirective,\n\tToolbarDisplaySessionNameDirective,\n\tToolbarFullscreenButtonDirective,\n\tToolbarLeaveButtonDirective,\n\tToolbarParticipantsPanelButtonDirective,\n\tToolbarRecordingButtonDirective,\n\tToolbarScreenshareButtonDirective,\n\tToolbarSettingsButtonDirective\n} from './toolbar.directive';\nimport {\n\tAudioMutedDirective,\n\tCaptionsLangDirective,\n\tCaptionsLangOptionsDirective,\n\tLangDirective,\n\tMinimalDirective,\n\tParticipantNameDirective,\n\tPrejoinDirective,\n\tVideoMutedDirective\n} from './videoconference.directive';\n\n@NgModule({\n\tdeclarations: [\n\t\tMinimalDirective,\n\t\tLangDirective,\n\t\tCaptionsLangOptionsDirective,\n\t\tCaptionsLangDirective,\n\t\tPrejoinDirective,\n\t\tVideoMutedDirective,\n\t\tAudioMutedDirective,\n\t\tToolbarScreenshareButtonDirective,\n\t\tToolbarFullscreenButtonDirective,\n\t\tToolbarBackgroundEffectsButtonDirective,\n\t\tToolbarCaptionsButtonDirective,\n\t\tToolbarLeaveButtonDirective,\n\t\tToolbarRecordingButtonDirective,\n\t\tToolbarBroadcastingButtonDirective,\n\t\tToolbarParticipantsPanelButtonDirective,\n\t\tToolbarChatPanelButtonDirective,\n\t\tToolbarActivitiesPanelButtonDirective,\n\t\tToolbarDisplaySessionNameDirective,\n\t\tToolbarDisplayLogoDirective,\n\t\tToolbarSettingsButtonDirective,\n\t\tStreamDisplayParticipantNameDirective,\n\t\tStreamDisplayAudioDetectionDirective,\n\t\tStreamSettingsButtonDirective,\n\t\tLogoDirective,\n\t\tParticipantPanelItemMuteButtonDirective,\n\t\tParticipantNameDirective,\n\t\tActivitiesPanelRecordingActivityDirective,\n\t\tActivitiesPanelBroadcastingActivityDirective,\n\t\tRecordingActivityRecordingsListDirective,\n\t\tRecordingActivityRecordingErrorDirective,\n\t\tBroadcastingActivityBroadcastingErrorDirective,\n\t\tAdminRecordingsListDirective,\n\t\tAdminLoginDirective\n\t],\n\texports: [\n\t\tMinimalDirective,\n\t\tLangDirective,\n\t\tCaptionsLangOptionsDirective,\n\t\tCaptionsLangDirective,\n\t\tPrejoinDirective,\n\t\tVideoMutedDirective,\n\t\tAudioMutedDirective,\n\t\tToolbarScreenshareButtonDirective,\n\t\tToolbarFullscreenButtonDirective,\n\t\tToolbarBackgroundEffectsButtonDirective,\n\t\tToolbarCaptionsButtonDirective,\n\t\tToolbarLeaveButtonDirective,\n\t\tToolbarRecordingButtonDirective,\n\t\tToolbarBroadcastingButtonDirective,\n\t\tToolbarParticipantsPanelButtonDirective,\n\t\tToolbarChatPanelButtonDirective,\n\t\tToolbarActivitiesPanelButtonDirective,\n\t\tToolbarDisplaySessionNameDirective,\n\t\tToolbarDisplayLogoDirective,\n\t\tToolbarSettingsButtonDirective,\n\t\tStreamDisplayParticipantNameDirective,\n\t\tStreamDisplayAudioDetectionDirective,\n\t\tStreamSettingsButtonDirective,\n\t\tLogoDirective,\n\t\tParticipantPanelItemMuteButtonDirective,\n\t\tParticipantNameDirective,\n\t\tActivitiesPanelRecordingActivityDirective,\n\t\tActivitiesPanelBroadcastingActivityDirective,\n\t\tRecordingActivityRecordingsListDirective,\n\t\tRecordingActivityRecordingErrorDirective,\n\t\tBroadcastingActivityBroadcastingErrorDirective,\n\t\tAdminRecordingsListDirective,\n\t\tAdminLoginDirective\n\t]\n})\nexport class ApiDirectiveModule {}\n","import { NgModule } from '@angular/core';\nimport {\n\tChatPanelDirective,\n\tLayoutDirective,\n\tPanelDirective,\n\tParticipantPanelItemElementsDirective,\n\tParticipantPanelItemDirective,\n\tParticipantsPanelDirective,\n\tStreamDirective,\n\tToolbarAdditionalButtonsDirective,\n\tToolbarDirective,\n\tToolbarAdditionalPanelButtonsDirective,\n\tAdditionalPanelsDirective,\n\tActivitiesPanelDirective,\n\tBackgroundEffectsPanelDirective\n} from './openvidu-angular.directive';\n\n@NgModule({\n\tdeclarations: [\n\t\tChatPanelDirective,\n\t\tLayoutDirective,\n\t\tPanelDirective,\n\t\tAdditionalPanelsDirective,\n\t\tParticipantPanelItemDirective,\n\t\tParticipantsPanelDirective,\n\t\tStreamDirective,\n\t\tToolbarDirective,\n\t\tToolbarAdditionalButtonsDirective,\n\t\tToolbarAdditionalPanelButtonsDirective,\n\t\tParticipantPanelItemElementsDirective,\n\t\tActivitiesPanelDirective,\n\t\tBackgroundEffectsPanelDirective\n\t],\n\texports: [\n\t\tChatPanelDirective,\n\t\tLayoutDirective,\n\t\tPanelDirective,\n\t\tAdditionalPanelsDirective,\n\t\tParticipantPanelItemDirective,\n\t\tParticipantsPanelDirective,\n\t\tStreamDirective,\n\t\tToolbarDirective,\n\t\tToolbarAdditionalButtonsDirective,\n\t\tToolbarAdditionalPanelButtonsDirective,\n\t\tParticipantPanelItemElementsDirective,\n\t\tActivitiesPanelDirective,\n\t\tBackgroundEffectsPanelDirective\n\t]\n})\nexport class OpenViduAngularDirectiveModule {}\n","import { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatGridListModule } from '@angular/material/grid-list';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FlexLayoutModule } from '@angular/flex-layout';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatListModule } from '@angular/material/list';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { NgModule } from '@angular/core';\n\n\n@NgModule({\n    imports: [BrowserAnimationsModule],\n    exports: [\n\t\tMatButtonModule,\n\t\tMatCardModule,\n\t\tMatToolbarModule,\n\t\tMatIconModule,\n\t\tMatInputModule,\n\t\tMatFormFieldModule,\n\t\tMatDialogModule,\n\t\tMatTooltipModule,\n\t\tMatBadgeModule,\n\t\tMatGridListModule,\n\t\tMatSelectModule,\n\t\tMatOptionModule,\n\t\tMatProgressSpinnerModule,\n\t\tMatSliderModule,\n\t\tMatSidenavModule,\n\t\tMatSnackBarModule,\n\t\tFlexLayoutModule,\n\t\tMatMenuModule,\n\t\tMatDividerModule,\n\t\tMatListModule,\n\t\tMatExpansionModule,\n\t\tMatSlideToggleModule\n    ]\n})\nexport class AppMaterialModule { }\n","import { OverlayContainer } from '@angular/cdk/overlay';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\n\nimport { DeleteDialogComponent } from './components/dialogs/delete-recording.component';\nimport { DialogTemplateComponent } from './components/dialogs/dialog.component';\nimport { RecordingDialogComponent } from './components/dialogs/recording-dialog.component';\nimport { LayoutComponent } from './components/layout/layout.component';\nimport { ChatPanelComponent } from './components/panel/chat-panel/chat-panel.component';\nimport { SessionComponent } from './components/session/session.component';\nimport { StreamComponent } from './components/stream/stream.component';\nimport { ToolbarComponent } from './components/toolbar/toolbar.component';\nimport { VideoComponent } from './components/video/video.component';\n\nimport { LinkifyPipe } from './pipes/linkify.pipe';\nimport { ParticipantStreamsPipe, StreamTypesEnabledPipe } from './pipes/participant.pipe';\nimport { DurationFromSecondsPipe, SearchByStringPropertyPipe, ThumbnailFromUrlPipe } from './pipes/recording.pipe';\nimport { TranslatePipe } from './pipes/translate.pipe';\n\nimport { CdkOverlayContainer } from './config/custom-cdk-overlay';\nimport { OpenViduAngularConfig } from './config/openvidu-angular.config';\nimport { ActionService } from './services/action/action.service';\nimport { ChatService } from './services/chat/chat.service';\nimport { OpenViduAngularConfigService } from './services/config/openvidu-angular.config.service';\nimport { DeviceService } from './services/device/device.service';\nimport { DocumentService } from './services/document/document.service';\nimport { LayoutService } from './services/layout/layout.service';\nimport { LoggerService } from './services/logger/logger.service';\nimport { OpenViduService } from './services/openvidu/openvidu.service';\nimport { PanelService } from './services/panel/panel.service';\nimport { ParticipantService } from './services/participant/participant.service';\nimport { PlatformService } from './services/platform/platform.service';\nimport { RecordingService } from './services/recording/recording.service';\nimport { StorageService } from './services/storage/storage.service';\n\nimport { AudioWaveComponent } from './components/audio-wave/audio-wave.component';\nimport { PanelComponent } from './components/panel/panel.component';\nimport { ParticipantPanelItemComponent } from './components/panel/participants-panel/participant-panel-item/participant-panel-item.component';\nimport { ParticipantsPanelComponent } from './components/panel/participants-panel/participants-panel/participants-panel.component';\nimport { PreJoinComponent } from './components/pre-join/pre-join.component';\nimport { VideoconferenceComponent } from './components/videoconference/videoconference.component';\n\nimport { AdminDashboardComponent } from './admin/dashboard/dashboard.component';\nimport { AdminLoginComponent } from './admin/login/login.component';\nimport { AvatarProfileComponent } from './components/avatar-profile/avatar-profile.component';\nimport { CaptionsComponent } from './components/captions/captions.component';\nimport { ProFeatureDialogTemplateComponent } from './components/dialogs/pro-feature-dialog.component';\nimport { ActivitiesPanelComponent } from './components/panel/activities-panel/activities-panel.component';\nimport { BroadcastingActivityComponent } from './components/panel/activities-panel/broadcasting-activity/broadcasting-activity.component';\nimport { RecordingActivityComponent } from './components/panel/activities-panel/recording-activity/recording-activity.component';\nimport { BackgroundEffectsPanelComponent } from './components/panel/background-effects-panel/background-effects-panel.component';\nimport { SettingsPanelComponent } from './components/panel/settings-panel/settings-panel.component';\nimport { AudioDevicesComponent } from './components/settings/audio-devices/audio-devices.component';\nimport { CaptionsSettingComponent } from './components/settings/captions/captions.component';\nimport { LangSelectorComponent } from './components/settings/lang-selector/lang-selector.component';\nimport { NicknameInputComponent } from './components/settings/nickname-input/nickname-input.component';\nimport { VideoDevicesComponent } from './components/settings/video-devices/video-devices.component';\nimport { CustomBreakPointsProvider, CustomLayoutExtensionDirective } from './config/custom-flexlayout-breakpoints';\nimport { ApiDirectiveModule } from './directives/api/api.directive.module';\nimport { OpenViduAngularDirectiveModule } from './directives/template/openvidu-angular.directive.module';\nimport { AppMaterialModule } from './openvidu-angular.material.module';\n\nconst publicComponents = [\n\tAdminDashboardComponent,\n\tAdminLoginComponent,\n\tVideoconferenceComponent,\n\tToolbarComponent,\n\tPanelComponent,\n\tActivitiesPanelComponent,\n    RecordingActivityComponent,\n    BroadcastingActivityComponent,\n\tParticipantsPanelComponent,\n\tParticipantPanelItemComponent,\n\tChatPanelComponent,\n\tStreamComponent,\n\tLayoutComponent\n];\nconst privateComponents = [\n\tPreJoinComponent,\n\tSessionComponent,\n\tBackgroundEffectsPanelComponent,\n\tSettingsPanelComponent,\n\tAudioWaveComponent,\n\tCaptionsComponent,\n\tDialogTemplateComponent,\n    ProFeatureDialogTemplateComponent,\n\tRecordingDialogComponent,\n\tDeleteDialogComponent,\n\tAvatarProfileComponent,\n\tVideoComponent,\n\tVideoDevicesComponent,\n\tAudioDevicesComponent,\n\tNicknameInputComponent,\n\tLangSelectorComponent,\n\tCaptionsSettingComponent\n];\n\n@NgModule({\n    declarations: [\n        publicComponents,\n        privateComponents,\n        LinkifyPipe,\n        ParticipantStreamsPipe,\n        DurationFromSecondsPipe,\n        SearchByStringPropertyPipe,\n        ThumbnailFromUrlPipe,\n        StreamTypesEnabledPipe,\n        TranslatePipe,\n        CustomLayoutExtensionDirective,\n    ],\n    imports: [\n        CommonModule,\n        HttpClientModule,\n        FormsModule,\n        ReactiveFormsModule,\n        RouterModule.forRoot([]),\n        AppMaterialModule,\n        OpenViduAngularDirectiveModule,\n        ApiDirectiveModule\n    ],\n    providers: [\n        ActionService,\n        CdkOverlayContainer,\n        { provide: OverlayContainer, useClass: CdkOverlayContainer },\n        CustomBreakPointsProvider,\n        ChatService,\n        PanelService,\n        DeviceService,\n        DocumentService,\n        LayoutService,\n        LoggerService,\n        PlatformService,\n        ParticipantService,\n        StorageService,\n        OpenViduService,\n        RecordingService\n    ],\n    exports: [\n        publicComponents,\n        ParticipantStreamsPipe,\n        DurationFromSecondsPipe,\n        StreamTypesEnabledPipe,\n        CommonModule,\n        OpenViduAngularDirectiveModule,\n        ApiDirectiveModule\n    ]\n})\nexport class OpenViduAngularModule {\n\tstatic forRoot(config): ModuleWithProviders<OpenViduAngularModule> {\n\t\t// console.log(`${library.name} config: ${environment}`);\n\t\tconst libConfig: OpenViduAngularConfig = config;\n\t\treturn {\n\t\t\tngModule: OpenViduAngularModule,\n\t\t\tproviders: [OpenViduAngularConfigService, { provide: 'OPENVIDU_ANGULAR_CONFIG', useValue: libConfig }]\n\t\t};\n\t}\n}\n"],"names":["i1.OpenViduAngularConfigService","i1.LoggerService","en","es","de","fr","cn","hi","it","ja","nl","pt","i1.StorageService","i1.TranslateService","i2","i3.TranslatePipe","i3","i4.TranslatePipe","i4","i5.TranslatePipe","i1","i1.ActionService","i2.RecordingService","i3.OpenViduAngularConfigService","i5","i6","i7","i9","i10","i11","i12","i14.DurationFromSecondsPipe","i14.SearchByStringPropertyPipe","i14.ThumbnailFromUrlPipe","i15.TranslatePipe","i2.ActionService","i8","i11.TranslatePipe","i2.LoggerService","i2.PlatformService","i3.StorageService","i4.OpenViduAngularConfigService","i3.LoggerService","i4.ParticipantService","i5.DeviceService","i1.PanelService","i2.OpenViduService","i3.ParticipantService","i4.CaptionService","i10.TranslatePipe","i1.LayoutService","i2.ParticipantService","i5.CaptionsComponent","i6.ParticipantStreamsPipe","i1.RecordingService","i4.ActionService","i13","i1.BroadcastingService","i14.LinkifyPipe","i2.OpenViduAngularConfigService","i9.RecordingActivityComponent","i10.BroadcastingActivityComponent","BehaviorSubject","i4.PanelService","i5.ActionService","i1.ChatService","i2.PanelService","i10.LinkifyPipe","i8.StreamTypesEnabledPipe","i1.ParticipantService","i8.ParticipantPanelItemComponent","i9.TranslatePipe","i1.CdkOverlayContainer","i1.OpenViduService","i2.LayoutService","i4.StorageService","i5.CdkOverlayService","i6.OpenViduAngularConfigService","i14","i15.AudioWaveComponent","i16.AvatarProfileComponent","i17.VideoComponent","i18.TranslatePipe","i1.DocumentService","i2.ChatService","i3.PanelService","i5.OpenViduService","i6.DeviceService","i7.ActionService","i8.LoggerService","i9.LayoutService","i10.OpenViduAngularConfigService","i11.PlatformService","i12.RecordingService","i13.BroadcastingService","i14.TranslateService","i15.StorageService","i16","i17","i18","i19","i20","i22","i23","i24","i25.LogoDirective","i26.TranslatePipe","i2.StorageService","i3.OpenViduService","i4.LoggerService","i5.ChatService","i7.LayoutService","i8.PanelService","i9.RecordingService","i10.BroadcastingService","i11.TranslateService","i12.CaptionService","i13.PlatformService","i14.VirtualBackgroundService","i15","i2.VirtualBackgroundService","i8.TranslatePipe","i4.DeviceService","i5.ParticipantService","i6.VirtualBackgroundService","i14.TranslatePipe","i2.DeviceService","i12.TranslatePipe","LayoutDirective","i5.OpenViduAngularConfigService","i6.CdkOverlayService","i7.OpenViduService","i8.TranslateService","i9.ActionService","i16.StreamDisplayParticipantNameDirective","i16.StreamSettingsButtonDirective","i17.LogoDirective","i18.PanelComponent","i19.StreamComponent","i20.LayoutComponent","i21.SessionComponent","i22.BackgroundEffectsPanelComponent","i23.VideoDevicesComponent","i24.AudioDevicesComponent","i25.NicknameInputComponent","i26.LangSelectorComponent","i27.CustomLayoutExtensionDirective","i28.TranslatePipe","i2.CaptionService","i12.VideoDevicesComponent","i13.AudioDevicesComponent","i14.NicknameInputComponent","i15.LangSelectorComponent","i16.CaptionsSettingComponent","i17.TranslatePipe","i6.ActionService","i7.OpenViduAngularConfigService","i12.ToolbarComponent","i13.PanelComponent","i14.ActivitiesPanelComponent","i15.ParticipantsPanelComponent","i16.ParticipantPanelItemComponent","i17.ChatPanelComponent","i18.StreamComponent","i19.LayoutComponent","i20.PreJoinComponent","i23.SettingsPanelComponent","i24.TranslatePipe","i2.TranslateService","i3.CaptionService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}